Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (3): [1] 2 3 »   

> Описание: Получение скриншотов, сохранение скриншотов и изображений с памяти в BMP, JPG и PNG
Kibor
Отправлено: 12 Августа, 2013 - 03:24:50
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Эта версия получила функции получения скриншотов, сохранение скриншотов и загруженных в память программы изображений на диск в виде .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 числом указанным в параметре:
CODE:
sendscreenstartx(0)


Применение:

 Цитата:
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 больше чем конец
 
 Top
Andrew
Отправлено: 12 Августа, 2013 - 03:28:09
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 118
Дата рег-ции: Июнь 2013  
Откуда: Россия
Репутация: 9




Kibor , вот это здорово Подшучивать, дразнить
Недавно думал о скрипте,который делал бы гиф анимации, как раз этой функции и не хватало. Спасибо.
 
 Top
Kibor
Отправлено: 12 Августа, 2013 - 03:33:09
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Всегда пожалуйста Улыбка
 
 Top
Andrew
Отправлено: 12 Августа, 2013 - 21:28:13
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 118
Дата рег-ции: Июнь 2013  
Откуда: Россия
Репутация: 9




Kibor , я уже все перепробовал, как сделать что бы каждый последующий путь был новым.Я много что пробовал, думал что то типо такого может?
CODE:
int n;
n=1;

a:

savescreen("C:\savescreen\"n".bmp", 0, 0, 400, 300, w);
sleep(500);

n++;

goto a;
 
 Top
Kibor
Отправлено: 12 Августа, 2013 - 21:39:13
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




 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;
}
 
 Top
kunni
Отправлено: 15 Марта, 2016 - 11:08:53
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 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)

 
 Top
Kibor
Отправлено: 15 Марта, 2016 - 11:16:28
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




Надо использовать массивы..
Реализация массивов изображений в функциях loadimage, findimage, saveimage.
Они специально сделаны для этого.

Можно конечно
 kunni пишет:
в уже загруженное в массив изображение дописать новое (меньшее по размеру) в определенную точку

но не так, а руками создать алгоритм чтения с файла и запись в существующий загруженный массив.
а зачем?
 
 Top
kunni
Отправлено: 16 Марта, 2016 - 07:49:52
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 37
Дата рег-ции: Дек. 2014  
Репутация: 2




 Kibor пишет:
но не так, а руками создать алгоритм чтения с файла и запись в существующий загруженный массив.
а зачем?

Я так и подумал, но решил уточнить, вдруг есть более элегантное решение. Напишу функцию, скину.

Понадобилось на рисунок-матрицу наносить в определенные точки по заданной схеме мелкие значки-рисунки в зависимости от вводимых пользователем данных, то есть два-три вопроса в диалоговых окнах - и на выходе готовое для печати изображение.
 
 Top
Kibor
Отправлено: 16 Марта, 2016 - 08:12:33
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8094
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 355




 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");
 
 Top
kunni
Отправлено: 17 Марта, 2016 - 09:16:03
Post Id



Пользователь
Наблюдатель


Покинул форум
Сообщений всего: 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);

//конец функции
}
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by