Kibor |
Отправлено: 12 Августа, 2013 - 03:24:50
|
Эксперт
Покинул форум
Сообщений всего: 8226
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Эта версия получила функции получения скриншотов, сохранение скриншотов и загруженных в память программы изображений на диск в виде .bmp, JPG и PNG
screen - Делает скрин окна и записывает его в двухмерный массив int. После этого этот массив можно использовать в функции findimage и findheapcolor
Синтаксис:
CODE:int a[200][150];//Выделяем память. Выделить можно больше, с запасом, но не меньше. Если выделить меньше размеров скрина вернет ошибку.
screen (#a[0][0], старт_X, старт_Y, финиш_X, финиш_Y, w);
Первый параметр указатель на двухмерный массив int в который запишется изображение
Последний параметр w - указатель на окно. Если -1 скрин делается в экранных координатах
Функция возвращает:
1 при успехе
-1 если размер выделеного массава (первый столбец) меньше чем разница между (финиш_X-старт_X)
-2 если размер выделеного массава (второй столбец) меньше чем разница между (финиш_Y-старт_Y)
==============================================================================================================
screenstartx - После выполнения функции screen , screenstartx возвращает старт зоны получения скриншота X
screenstarty - После выполнения функции screen , screenstarty возвращает старт зоны получения скриншота Y
Если screen не вызывалась, функции эти возвращают 0.
CODE:int x=screenstartx();
sendscreenstartx sendscreenstarty может инициализировать возврат функций screenstartx screenstarty числом указанным в параметре:
Применение:
Цитата: int Image_0[6][5];
loadimage (#Image_0[0][0], "C:\Image_0.bmp");
int x, y;
int Screen[1000][1000];
screen (#Screen[0][0], 20, 50, 500, 500, -1);
if (findimage(1, #Image_0[0][0], -1, #x, #y, 0, 0, 200, 200, #Screen[0][0]))
{
mousemove(x+screenstartx(), y+screenstarty());//Учитываем начала зоны получения скриншота
}
==============================================================================================================
savescreen - Делает скрин окна и сохраняет его на диск файлом .bmp
Синтаксис:
CODE:savescreen("D:\11111.bmp", старт_X, старт_Y, финиш_X, финиш_Y, w);
Первый параметр string, путь к сохраненному файлу
Последний параметр w - указатель на окно. Если -1 скрин делается в экранных координатах
Можно сохранять в JPG и PNG
CODE:savescreen(JPG, "D:\11111.jpg", старт_X, старт_Y, финиш_X, финиш_Y, w);
savescreen(PNG, "D:\11111.png", старт_X, старт_Y, финиш_X, финиш_Y, w);
Функция возвращает:
1 при успехе
0 если невозможно сохранить файл
==============================================================================================================
saveimage - сохраняет на диск файлом .bmp загруженный ранее или созданный программно двухмерный массив int в котором хранится изображение
Синтаксис:
CODE:saveimage(#a[0][0], "D:\11111.bmp");
Можно сохранять в JPG и PNG
CODE:saveimage(JPG, #a[0][0], "D:\11111.jpg");
saveimage(PNG, #a[0][0], "D:\11111.png");
Первый параметр указатель на двухмерный массив int в котором хранится изображение
Второй параметр string, путь к сохраненному файлу
Функция возвращает:
1 при успехе
0 если невозможно сохранить файл
Расширенный вариант saveimage позволяет сохранить часть изображения
Сохранит указанную зону
CODE:saveimage(#a[0][0], "D:\11111.bmp", 120, 150, 200, 500);
Можно сохранять в JPG и PNG
CODE:saveimage(JPG, #a[0][0], "D:\11111.jpg", 120, 150, 200, 500);
saveimage(PNG, #a[0][0], "D:\11111.png", 120, 150, 200, 500);
Или трехмерный массив
CODE:saveimage(#a[2][0][0], "D:\11111.bmp", 120, 150, 200, 500);
Возвращает 1 при удаче.
-1 если по X зона не в пределах изображения
-2 если по Y зона не в пределах изображения
-3 если начало зоны по X больше чем конец
-4 если начало зоны по Y больше чем конец |
|
|
Kibor |
Отправлено: 12 Августа, 2013 - 21:39:13
|
Эксперт
Покинул форум
Сообщений всего: 8226
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Andrew пишет: уже все перепробовал, как сделать что бы каждый последующий путь был новым.Я много что пробовал, думал что то типо такого может?
CODE:int n;
n=1;
a:
savescreen("C:\savescreen\"n".bmp", 0, 0, 400, 300, w);
sleep(500);
n++;
goto a;
Преобразование int к string
Этот код будет шлепать 1000 рисунков по 2 на секунду или пока не остановишь.
CODE:int n=0;
a:if (n<1000)
{
savescreen("C:\savescreen\skreen"+format(n)+".bmp", 0, 0, 400, 300, -1);
sleep(500);
n++;
goto a;
}
|
|
|
kunni |
Отправлено: 15 Марта, 2016 - 11:08:53
|
Наблюдатель
Покинул форум
Сообщений всего: 37
Дата рег-ции: Дек. 2014
Репутация: 2
|
Есть вопрос.
Как можно сделать, чтобы в уже загруженное в массив изображение дописать новое (меньшее по размеру) в определенную точку, которое перепишет перекрываемые пиксели?
Чисто интуитивно попробовал так, но, конечно же, выдало ошибку (кстати, программа вылетела полностью)
CODE:
int график[978][616];
loadimage (#график[0][0], "ПУТЬ\1.bmp");
loadimage (#график[15][15], "ПУТЬ\2.bmp");//думал, запишет начиная с 15 пикселя маленькое изображение размером 20 на 20
saveimage (PNG, #график[0][0], ПУТЬ\3.png");
(Отредактировано автором: 15 Марта, 2016 - 11:09:18) |
|
|
Kibor |
Отправлено: 16 Марта, 2016 - 08:12:33
|
Эксперт
Покинул форум
Сообщений всего: 8226
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
kunni пишет: вдруг есть более элегантное решение
вот и есть простое элегантное..
CODE:int Image_0[1138][578];
loadimage (#Image_0[0][0], "C:\Image_0.bmp");
int Image_1[36][38];
loadimage (#Image_1[0][0], "C:\Image_1.bmp");
int stX=295, stY=175;//вставили сюда..
for (int x=0; x<36; x++)
{
for (int y=0; y<38; y++)
{
Image_0[stX+x][stY+y]=Image_1[x][y];
}
}
saveimage(#Image_0[0][0], "C:\11111.bmp"); |
|
|
kunni |
Отправлено: 17 Марта, 2016 - 09:16:03
|
Наблюдатель
Покинул форум
Сообщений всего: 37
Дата рег-ции: Дек. 2014
Репутация: 2
|
Kibor пишет: вот и есть простое элегантное
Вы как всегда на высоте!
Вот мой вариант
1 - путь к исходнику
2, 3 - координаты для вставки
4 - путь к тому, что вставляем
5 - путь, куда сохраняем
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);
//конец функции
} |
|
|
|