007wan |
Отправлено: 18 Декабря, 2017 - 19:46:37
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Помните наш старый добрый java еще тогда в кирпичах любили и рубились во всякие пиксельные игры. Я вот на что наткнулся. У меня есть изображение, в нём фон и каждый определенный интервал стоит рисунок 19х19, ЕЩЕ РАЗ, это одно изображение. Возможно сделать такую систему вывода изображения или просто не знаю, что угодно, для чего угодно использования: в общем он откроет моё изображения и будет брать рисунки снизу размером 19х19(это вроде как по Y) через каждые 10 пиксилей будет изображение размером 19х19. Для права(это вроде как по X) каждые 40 пиксилей будет изображение такого же размера. Вот так) изображение, кстати будут ограничены: 19 изображений по X.
Ах да, еще один нюанс: изображения выстроены в колонку:
первая - 18 изобр., вторая, третья, четвертая, пятая- по 17 изобр.. все они по 19х19.
просто каждое изображение отделять, переименовывать, делать скрипт, это все лишнее будет в коде. Может так проще? удобнее?
(Добавление)
может как-то в лоад_имейдж указать координаты каждой и размер? мне просто надо. что бы он из одной фотки загрузил в память для себя много фоток из одной фотки, а потом можно было использовать их |
|
|
Zireael |
Отправлено: 18 Декабря, 2017 - 22:38:46
|
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
|
code (Отобразить)CODE:int i, j, k, l, m;
// вместо этого блока loadimage
// создание большой картинки 77*48, с 6 маленькими 19*19, между картинками расстояние 10 px
int image[77][48];
for(i=0;i<77;i++)
{
for(j=0;j<48;j++)
{
image[i][j]=16777164;
}
}
for(i=0;i<19;i++)
{
for(j=0;j<19;j++)
{
image[i][j]=3401712; image[i+29][j]=255; image[i+58][j]=7065132;
image[i][j+29]=16756239; image[i+29][j+29]=1997041; image[i+58][j+29]=12065654;
}
}
///////////////////////////////////////
// пишем 6 маленьких картинок 19*19 в 3х-мерный массив
int arr[6][19][19]; // количество картинок и их размер x*y
int stepX=29, stepY=29; // шаг между картинками
int sizeX=19, sizeY=19; // размер картинок
int countX=3, countY=2; // количество картинок по X и Y в большой картинке
i=0; // номер картинки в массиве arr
for(j=0;j<countX;j++)
{
for(k=0;k<countY;k++)
{
for(l=0;l<sizeX;l++)
{
for(m=0;m<sizeY;m++)
{
arr[i][l][m]=image[l+j*stepX][m+k*stepY];
}
}
i++;
}
}
// вывод
int posX=800, posY=500;
visualwindow(0, 0, 0, 77, 48, posX, posY, 100, #image[0][0]);
visualwindow(1, 0, 0, 19, 19, posX-100, posY+100, 100, #arr[0][0][0]);
visualwindow(2, 0, 0, 19, 19, posX-50, posY+100, 100, #arr[1][0][0]);
visualwindow(3, 0, 0, 19, 19, posX, posY+100, 100, #arr[2][0][0]);
visualwindow(4, 0, 0, 19, 19, posX+50, posY+100, 100, #arr[3][0][0]);
visualwindow(5, 0, 0, 19, 19, posX+100, posY+100, 100, #arr[4][0][0]);
visualwindow(6, 0, 0, 19, 19, posX+150, posY+100, 100, #arr[5][0][0]);
loop()sleep(100); |
|
|
007wan |
Отправлено: 20 Декабря, 2017 - 15:29:44
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Kibor пишет: Стандартными функциями нет. Но можно самому заполнять массивы где изображение будет..
Когда изображение загрузится в массив двухмерный можно его оттуда прочитать и заполнить мелкие массивы изображений.
Я просто еще как хочу. желательно бы пример) в общем так: одно изображение...Он вырезает кусочки определенные координаты, сохраняет для себя(loadimage), а потом можно их использовать сколько хочешь и разные.
(Добавление)
Причем фон цельной картинки черный(для удобства поиска), а фон самих микрокартинок начинается с верхнего левого угла белым и так отсчитает 19Х19 пикс., потом перейдет на, к примеру, 20 пикс внизу итоже самое...
(Добавление)
(Добавление)
просто вырезать по одной муторно
(Добавление)
CODE:unpack("C:\Users\Home\Desktop\ÌΨ\KIBOR_BOT\Ñìàéëèêè.bmp", temp_fold+"Ñìàéëèêè.bmp", 1);
for (int sm=0; sm<86; sm++)
{
loadimage (#Ñìàéëèê_[sm][0][0], temp_fold+"Ñìàéëèêè.bmp");
//У меня вопрос: что это за индексы: [0][0], это по ним координаты указываешь?
}
(Добавление)
Тут нужно что бы загружал из одной картинки фрагменты по координатами
(Добавление)
CODE:loadimage (#Ñìàéëèê_[sm][19][19], temp_fold+"Ñìàéëèêè.bmp");
loadimage (#Ñìàéëèê_[sm][29][19], temp_fold+"Ñìàéëèêè.bmp");
(Отредактировано автором: 20 Декабря, 2017 - 15:37:46) |
|
|
007wan |
Отправлено: 20 Декабря, 2017 - 20:14:59
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: Тут нужно что бы загружал из одной картинки фрагменты по координатами
Как разделить картинки скрипт выше, вместо вывода в visual пишите saveimage и грузите потом эти картинки сколько надо. Обход ограничения в 5 файлов при упаковке в exe? ::smile24.gif::
Ну это понятно. только можно код цельный, где будет в переменых ваша фотография(для меня- моя) и как это будет работать, мне не нужно пиксельную хрень выводить, мне нужна работа с моими фотографиями
(Добавление)
я чет еще не догнал
(Добавление)
кстати да, логично из одной фотки он сохранить фрагменты через saveimage
(Добавление)
Еще есть такой вариант: вывести 1 фото, в котором много маленьких фото на экран.
сделать сейфимэйдж(расчитать где, что, как будет) и в результате он на экране сохранит куда-нибудь, но я хочу это сделать внутри, без вывода
(Добавление)
ой сейфскрин
(Добавление)
может это использовать: CODE://ФУНКЦИЯ
function рисование (string a, int x, int y, string b, string e)
{
//начало
int главное[1000][1000];//размер большой картинки
int маленькое[100][100];// размер маленькой вставляемой картинки
loadimage (#главное[0][0], a);//загрузили большую
loadimage (#маленькое[0][0], b);//загрузили маленькую
int м_ширина=imagewidth(#маленькое[0][0]);//определим ширину ИКС вклеиваемой картинки
int м_высота=imageheight(#маленькое[0][0]);//определим высоту ИГРЕК вклеиваемой картинки
//рисуем
int n=0; int k=0;//переменные для цикла
1:
if(n<=м_ширина){главное[x+n][y+k]=маленькое[n][k]; n++; goto 1;}
else{k++; n=0;
if(k<=м_высота){goto 1;}
}
saveimage(#главное[0][0], e);
//конец функции
} |
|
|
Zireael |
Отправлено: 20 Декабря, 2017 - 21:27:25
|
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
|
code (Отобразить)CODE:int i, j, k, l, m;
int count_image=90; // всего маленьких картинок
int image[539][512];
loadimage(#image[0][0], "C:\Program Files (x86)\Kibor\1111.bmp"); // загружаем картинку
int arr[90][19][19]; // количество картинок и их размер x*y
int stepX=130, stepY=29; // шаг между картинками
int sizeX=19, sizeY=19; // размер картинок
int countX=5, countY=18; // количество картинок по X и Y в большой картинке
i=0;
for(j=0;j<countX;j++)
{
for(k=0;k<countY;k++)
{
for(l=0;l<sizeX;l++)
{
for(m=0;m<sizeY;m++)
{
arr[i][l][m]=image[l+j*stepX][m+k*stepY];
}
}
i++;
}
}
for(i=0;i<count_image;i++) // сохраняем все картинки в папке temp с именами 1.bmp, 2.bmp ...
{
saveimage (#arr[i][0][0], tempfolder()+format(i)+".bmp");
}
start(tempfolder()); // папка с сохранёнными картинками
P.S. Kibor, как на счёт возможности передавать в screen указатель на массив с изображением? |
|
|
|