GetImage

Материал из UoPilot
Версия от 10:36, 28 августа 2019; Tatikoma (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Описание

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', когда начальные координаты были больше конечных.