GetImage
Описание
GetImage - функция запоминания части экранной области. Возвращает строку в виде "Адрес в памяти|Ширина|Высота|Длина строки в байтах".
Синтаксис
Привязка к окну: опционально.
Работа со свернутым окном: да.
Работа с перекрытым окном: Да. Привязка к окну обязательна.
GetImage (<StartX> <StartY> <EndX> <EndY> [type|handle] [abs])
<StartX> <StartY> - координаты левого верхнего угла области поиска.
<EndX> <EndY> - координаты правого нижнего угла области поиска.
[type|handle] (необязательно) - тип поиска. Может принимать значения 2 или целое число означающее хендл окна, в котором нужно вести поиск.
[abs] (необязательно) - этот параметр указывается, если вы ищете пиксели в координатах относительно верхнего левого угла экрана, а не рабочего окна.
set %a GetImage (100 100 1000 1000) log %a [1 1] - адрес в памяти log %a [1 2] - ширина изображения log %a [1 3] - высота изображения log %a [1 4] - длина строки в байтах End_script
Коды ошибок GetImage:
-1 - упало при поиске, точная причина не известна.
-2 - не нашли открывающую скобку после имени функции.
Примеры
// Пример 1
set %a GetImage (100 100 1000 1000) // сохранить в памяти часть экрана от координат 100 100 до 1000 1000
set #type %a [1 1] // адрес в памяти
set #a findimage (0 0 901 901 (C:\test.bmp) %arr #type 80 1) // искать картинку test.bmp на изображении хранящемся в памяти
// в качестве типа поиска указан адрес в памяти
// искомая картинка на экране уже может отсутствовать, по сути поиск ведётся на скрине
log #a // результат поиска
if #a > 0 // если изображение найдено
move %arr [1 1] %arr [1 2] // переместить курсор на найденное изображение
end_if
//set $bmp SaveImage (%a [1 1] C:\Image.bmp) // если нужно, можно сохранить полученное изображение на диск C:\
set $b DeleteImage (%a [1 1]) // удалить изображение из памяти
End_script
// Пример 2
// Поиск нескольких картинок на изображении сохранённом в памяти.
// координаты для GetImage:
set #startX 0
set #startY 0
set #endX 600
set #endY 600
// картинки для поиска :
set %image [1] картинка1.bmp
set %image [2] картинка2.bmp
set %image [3] картинка3.bmp
set %path [1] "C:\l2\image" // путь к картинкам
set %a GetImage (#startX #startY #endX #endY) // сохранить в памяти часть экрана от координат 0 0 600 600
set #type %a [1 1] // адрес в памяти
for #i 1 size(%image) 1 // цикл поиска картинок, size(%image) - количество картинок в массиве
set #a findimage (0 0 600 600 (%path [1]\%image [#i 1]) %arr #type 80 -1 2) // искать картинки из массива %image на изображении хранящемся в памяти
log #a
if #a > 0 // если картинка найдена
move %arr [1 1] %arr [1 2] // переместить курсор на найденную картинку
wait 1000 // ждать 1 секунду
end_if
end_for
set $b DeleteImage (%a [1 1]) // удалить изображение из памяти
End_script
// Пример 3
// Поиск нескольких картинок, загруженных в память, на изображении сохранённом в памяти.
// Т. к. картинки будут загружены в память, поиск будет происходить быстрее, чем если бы они подгружались с HDD.
// координаты для GetImage:
set #startX 0
set #startY 0
set #endX 600
set #endY 600
set %path [1] "C:\l2\image" // путь к картинкам
// картинки, которые будут загружены в память:
set %image [1] LoadImage (%path [1]\картинка1.bmp)
set %image [2] LoadImage (%path [1]\картинка2.bmp)
set %image [3] LoadImage (%path [1]\картинка3.bmp)
set %a GetImage (#startX #startY #endX #endY) // сохранить в памяти часть экрана от координат 0 0 600 600
set #type %a [1 1] // адрес в памяти
for #i 1 size(%image) 1 // цикл поиска картинок, size(%image) - количество картинок в массиве
set #a findimage (0 0 600 600 (%image [#i 1]) %arr #type 80 -1 2) // искать картинки загруженные в память на изображении хранящемся в памяти
log #a // результат поиска
if #a > 0 // если картинка найдена
move %arr [1 1] %arr [1 2] // переместить курсор на найденную картинку
wait 1000 // ждать 1 секунду
end_if
end_for
set $b DeleteImage (%a [1 1]) // удалить изображение из памяти (не картинки, а часть сохранённой экранной области)
End_script
Смотрите также
Findimage
DeleteImage
SaveImage
LoadImage
Printscreen
История развития
2.39
Добавил функцию запоминания части экранной области 'GetImage (StartX StartY EndX EndY [type|handle] [abs])'. Возвращает строку в виде "Адрес в памяти|Ширина|Высота|Длина строки в байтах/", либо код ошибки.
2.41
Исправил минимальные размеры захватываемой картинки в команде 'getimage' при работе по хэндлу.
Исправил исключение при работе по хэндлу в команде 'getimage', когда начальные координаты были больше конечных.