Zireael |
Отправлено: 25 Декабря, 2017 - 17:46:31
|
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: А может еще сделать, что бы он определял какой фотографии из 90 шт нету и распаковывал их
Если какой-то картинки нет, то она будет добавлена в массив и сохранена.
code (Отобразить)CODE:RESOURCE
{
"C:\Program Files (x86)\Kibor\1111.bmp";
}
int i, j, k, l, m;
int count_image=90; // всего маленьких картинок
int image[539][512];
// если большая картинка уже есть загружаем, иначе распаковываем и загружаем
if (fopen (tempfolder()+"1111.bmp", "rb") > 0)
{
fclose();
loadimage(#image[0][0], tempfolder()+"1111.bmp");
}
else
{
unpack("C:\Program Files (x86)\Kibor\1111.bmp", tempfolder()+"1111.bmp", 1);
loadimage(#image[0][0], tempfolder()+"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 в большой картинке
// проверяем все ли картинки есть
for(i=0;i<count_image;i++)
{
if (fopen (tempfolder()+format(i)+".bmp", "rb") > 0) // если картинка есть
{
fclose();
loadimage (#arr[i][0][0], tempfolder()+format(i)+".bmp"); // загружаем её
}
else // если картинки нет
{
j=i / countY; // позиция маленькой картинки в большой, столбец
k=i - countY * j; // позиция маленькой картинки в большой, строка
for(l=0;l<sizeX;l++)
{
for(m=0;m<sizeY;m++)
{
arr[i][l][m]=image[l+j*stepX][m+k*stepY]; // записываем в массив
}
}
saveimage (#arr[i][0][0], tempfolder()+format(i)+".bmp"); // сохраняем картинку
}
}
//////////////
start(tempfolder()); // папка с сохранёнными картинками
Цитата: ИЛИ они уже загружены в loadimage и можно их удалять, разукрашивать итд?
Можно удалять. Только при следующем запуске придётся снова их делить и сохранять.
Цитата: а что если я закрою программа изменю любую, запущу, а он потом загрузит в loadimage разукрашенную?
Естественно загрузит изменённую.
Цитата: Еще есть такой вариант: вывести 1 фото, в котором много маленьких фото на экран.
сделать сейфимэйдж(расчитать где, что, как будет)
Можно вывести диалог за пределами экрана, на него вывести картинку и сделать пачку скринов.
(Добавление)
Цитата: Можно вывести диалог за пределами экрана, на него вывести картинку и сделать пачку скринов.
Собственно вот:
code (Отобразить)CODE:RESOURCE
{
"C:\Program Files (x86)\Kibor\1111.bmp";
}
int i, j, k, l, m;
int count_image=90; // всего маленьких картинок
int image[539][512];
// если большая картинка уже есть загружаем, иначе распаковываем и загружаем
if (fopen (tempfolder()+"1111.bmp", "rb") > 0)
{
fclose();
loadimage(#image[0][0], tempfolder()+"1111.bmp");
}
else
{
unpack("C:\Program Files (x86)\Kibor\1111.bmp", tempfolder()+"1111.bmp", 1);
loadimage(#image[0][0], tempfolder()+"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 в большой картинке
createdialog(0);
showdialog(0, "Диалог", 1920, 0, 547, 542, 0, 1);
//////////
sleep(500);
win dialog=window("Диалог");
visualwindow(dialog,0, 0, 0, imagewidth(#image[0][0]), imageheight(#image[0][0]), 0, 0, 100, #image[0][0]);
sleep(500);
// проверяем все ли картинки есть
for(i=0;i<count_image;i++)
{
if (fopen (tempfolder()+format(i)+".bmp", "rb") > 0) // если картинка есть
{
fclose();
loadimage (#arr[i][0][0], tempfolder()+format(i)+".bmp"); // загружаем её
}
else // если картинки нет
{
j=i / countY * stepX;
k=(i - countY * (i / countY)) * stepY;
screen (#arr[i][0][0], j, k, j+sizeX, k+sizeY, dialog); // делаем скрин
saveimage (#arr[i][0][0], tempfolder()+format(i)+".bmp"); // сохраняем картинку
}
}
//////////////
hidedialog(0);
start(tempfolder()); // папка с сохранёнными картинками |
|
|
007wan |
Отправлено: 26 Декабря, 2017 - 10:34:42
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Можно удалять. Только при следующем запуске придётся снова их делить и сохранять. Zireael пишет: Естественно загрузит изменённую.
Ну тогда может зациклить проверку, а так если нету, то загрузит, распакует, а если есть, то не надо |
|
|
Zireael |
Отправлено: 26 Декабря, 2017 - 10:50:36
|
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Ну тогда может зациклить проверку
Оно и так уже есть. Недостающие будут распакованы.
CODE:// проверяем все ли картинки есть
for(i=0;i<count_image;i++)
{
if (fopen (tempfolder()+format(i)+".bmp", "rb") > 0) // если картинка есть |
|
|
007wan |
Отправлено: 26 Декабря, 2017 - 10:52:11
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: Ну тогда может зациклить проверку
Оно и так уже есть. Недостающие будут распакованы.
CODE:// проверяем все ли картинки есть
for(i=0;i<count_image;i++)
{
if (fopen (tempfolder()+format(i)+".bmp", "rb") > 0) // если картинка есть
Нет, я имел ввиду, что будет всегда зациклено, даже при работа любого скрипта, диалога итд, я это добавлю в луп |
|
|
007wan |
Отправлено: 26 Декабря, 2017 - 11:01:50
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: что будет всегда зациклено, даже при работа любого скрипта
Смысл? Один раз загрузили картинки и забыли.
Да, но если делать вывод через visualwindow, то он будет грузить картинки, которые не в loadimage, а те, которые по пути находятся, т.е те, которые распаковыны, а их можно изменить, итд, а мне нужно, что бы он выводил те, которые в массиве loadimage |
|
|
007wan |
Отправлено: 26 Декабря, 2017 - 12:06:44
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: но если делать вывод через visualwindow, то он будет грузить картинки
Visual ничего не загружает, передается указатель на массив, а не путь к изображению.
Т. е. один раз загрузились картинки, дальше не важно что с ними делается. Они используются из памяти.
А ну тогда все круто)
(Добавление)
Можно последний код, пожалуйста и больше не буду вам компосировать мозги.
В общем мне нужно, что ты черная линия(или любой цвет, сам выберу) был вокруг:
кнопки, эдита, статика(на выбор, но мне лучше для статика, просто я не знаю для чего будет сделать сложнее)Т.е есть, к примеру, поле статик, мы знаем где оно распологается, какой размер итд(в коде прописано), и нужно, что бы чисто вокруг(есть поле эдит и буквально след. пиксилем(линией) будет черным цветом) поля было огорождение. Ну просто у меня статик не видно, и я хочу его как бы визуально показать границы, да и самому что бы видеть
(Добавление)
Я просто не хочу создавать там пискельные картинки и выводить их рядом со статиком, я помню код, который там создавался пиксель...
(Добавление)
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);
вот он
(Добавление)
у меня поле статик размерами 405,10
(Добавление)
Zireael , Просто я хочу еще вот чего: При запуске он распаковывает, загружает.
Можно выводить и так как они загружены на работу не повлияет, просто такой нюанс: А если закрыть программу и редактировать одну из картинок, то при запуске он ее загрузит, а мне надо, что бы он загружал именно эту картинку, но каким-то образом вычислял это редактированная фотка(загрузить заново тогда именно ту, которая редактирована) или нет(оставить как есть и загрузить в массив). Может как-то сделать через сумму цвета, я не знаю или может по пикселям вычислять какой он должен быть, а если другой, то... Ну это сложный процесс.
(Добавление)
Если никак, тогда один выход- удалять распакованные после загрузки в массив, и так будет всегда)) |
|
|
|