Разница между страницами «Findimage (Lua)» и «Findoffsetx»

Материал из UoPilot
(Различия между страницами)
Перейти к навигации Перейти к поиску
(Новая страница: «== Описание == '''findimage''' - поиск изображения в области заданной начальными и конечными коор...»)
 
(Новая страница: « == Описание == '''Findoffsetx''' - смещение возвращаемых координат команд 'findimage' и 'findcolor' по оси 'X'....»)
 
Строка 1: Строка 1:
 +
 
== Описание ==
 
== Описание ==
'''findimage''' - поиск изображения в области заданной начальными и конечными координатами по оси XY.  
+
'''Findoffsetx''' - смещение возвращаемых координат команд 'findimage' и 'findcolor' по оси 'X'.
<br>
+
<br>'''Findoffsety''' - смещение возвращаемых координат команд 'findimage' и 'findcolor' по оси 'Y'.  
<br>Формат картинки должен быть: '''bmp 24 бита.''' <br>Цвет крайнего пикселя в левом верхнем углу изображения считается "цветом фона", и при поиске картинки на экране не учитывается. Например, цвет этого пикселя красный (255). В этом случае все пиксели красного цвета присутствующие на искомой картинке будут считаться фоновыми (прозрачными) и не будут сравниваться с тем, что присутствует на экране. Поэтому, нельзя чтобы в файле-картинке все пиксели были одного цвета. Нужно сделать, чтобы хотя бы один левый верхний пиксель цветом отличался от остальных.
 
  
 
== Синтаксис ==
 
== Синтаксис ==
 +
Привязка к окну: Опционально.
 +
<br>Работа со свернутым окном: Нет.
 +
set findoffsetx 50    //смещение вправо на 50 пикселей
 +
set findoffsety 30    //смещение вниз на 30 пикселей
 +
 +
set findoffsetx -40  //смещение вверх на 40 пикселей
 +
set findoffsety -60  //смещение влево на 60 пикселей
  
Привязка к окну: опционально.
+
== Примеры ==
<br>Работа со свернутым окном: нет.
+
// Пример 1
<br>Работа с перекрытым окном: Да. Привязка к окну обязательна. Aero (темы Windows, кроме Windows 10, в котором нет aero) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена.
+
set Findoffsetx 20                              //смещение вправо на 20 пикселей   
ResultArray, a = findimage (<StartX>, <StartY>, <EndX>, <EndY>, <{filename}>  [, type [, accuracy [, count [, deviation]]]] [, abs])
+
set Findoffsety 30                              //смещение вниз на 30 пикселей
Где:
+
set #a findcolor(0 0 1920 1080 1 1 (255) %arr)   // поиск цвета
<br>'''ResultArray''' - результирующий массив, в который записываются координаты изображения. Координатами изображения считается пиксель левого верхнего угла изображения. Если найдено несколько изображений, то координаты всех найденных изображений. Каждая строка массива хранится данные по отдельному найденному изображению: в первой колонке- координата X, во второй колонке- координата Y.
+
if #a > 0                                        // если цвет найден
<br>'''<a>''' - переменная, в которую записывается результат работы команды findimage:
+
    kleft %arr [1 1] %arr [1 2]                  // клик со смещением от найденного цвета, +20 по 'X' и +30 по 'Y'.
<br>Если a = 0, значит поиск был произведён, но картинка не найдена.
+
end_if
<br>Если найдена только 1 картинка, то будет записан процент точности найденного изображения.
+
End_script
<br>Если найдено несколько картинок, то будет записано количество найденных изображений.
 
<br>Однозначно определить сколько именно картинок было найдено командой FindImage лучше всего по размеру массива ResultArray с помощью функции #ResultArray.
 
<br>a < 0 означает, что FindImage не смог произвести поиск- либо была обнаружена ошибка в написании параметров команды, либо проблемы с самим файлом картинки.
 
<br>Если a = -4, значит файл картинки не найден / в неправильном формате / повреждён / все пиксели файла одного цвета. Чаще всего- путь к файлу указан неправильно.
 
<br>'''StartX, StartY''' - координаты левого верхнего угла области поиска.
 
<br>'''EndX, EndY''' - координаты правого нижнего угла области поиска.
 
<br>'''{filename}''' - путь к сохранённому изображению (только файл формата bmp 24 бита). Путь к изображению может быть указан как '''абсолютный''' - {C:\\programms\\pilot\\images\\}, так '''и относительный''' - {images\\}. Указывается в фигурных скобках.
 
<br>'''type''' - тип поиска. Может принимать значения: '''1''' (надежный), '''2''' (быстрый), '''workwindow'''(поиск в окне, в том числе перекрытом). Настоятельно рекомендуется использовать быстрый способ поиска, кроме случаев с некорректным обнаружением изображения. По умолчанию 2й тип поиска. Тип workwindow - в качестве аргумента указывать хендл окна.
 
<br>'''accuracy''' - точность поиска. Указывается в процентах. Используется для отсева изображений не достаточно схожих с оригиналом. По умолчанию значение равно 80%.
 
<br>'''count''' - ограничение количества найденных изображений. По умолчанию установлено для одного изображения - значение '''1''', для всех возможных - значение '''-1'''.
 
<br>'''deviation''' - погрешность оттенка. Пример: есть погрешность 3%. Точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением.
 
<br>'''abs''' - флаг использования абсолютных координат. Если он указан то поиск происходит относительно левого верхнего угла экрана. Без флага поиск происходит относительно левого верхнего угла рабочего окна(привязанного через ctrl+a либо иным способом). Указывается в кавычках "abs".
 
<br>
 
<br>Если вы ищете на экране текст в виде картинки, и в системе используется сглаживание шрифтов, то могут быть проблемы с нахождением, даже если вы видите, что такой текст на экране есть. Все-равно при включенном сглаживании искомая картинка может незначительно отличаться от того что есть на экране. В этом случае рекомендуется снизить точность поиска либо отключить сглаживание шрифтов на компьютере, где используется findimage.
 
  
'''Коды ошибок FindImage:'''<br>
+
// Пример 2
''''-1'''' упало при поиске, точная причина не известна.<br>
+
// Отличие Findoffsetx и Findoffsety
''''-2'''' не нашли открывающую скобку после имени функции.<br>
+
  // от Clickoffsetx и Clickoffsety
''''-3'''' не найдено пути в скобках.<br>
+
// Ищем цвет с помощью Findcolor. Допустим, что он находится в координатах 200 400
''''-4'''' ошибка поиска файла.<br>
 
''''-5'''' ошибка обработки искомого изображения.<br>
 
''''-6'''' ошибка получения изображения с экрана.<br>
 
''''-7'''' нечего искать, искомая картинка пустая.
 
<br><br>Иногда требуется сделать клик не по самому изображению, а со смещением. Указывать можно как вначале скрипта так и перед функцией findimage.
 
findoffsetx (50)    -- смещение вправо на 50 пикселей
 
findoffsety (30)    -- смещение вниз на 30 пикселей
 
 
   
 
   
  findoffsetx (-40-- смещение влево на 40 пикселей
+
  // Скрипт 1
  findoffsety (-60)  -- смещение вверх на 60 пикселей
+
set Clickoffsetx 20                              //смещение вправо на 20 пикселей
 +
set Clickoffsety 30                              //смещение вниз на 30 пикселей
 +
set #a findcolor(0 0 1920 1080 1 1 (255) %arr// поиск цвета
 +
if #a > 0                                        // если цвет найден
 +
    log  %arr [1 1] %arr [1 2]                  // показать в логе найденные координаты, покажет 200 400 (действительные координаты)                                               
 +
    kleft %arr [1 1] %arr [1 2]                  // клик будет по координатам 220 430 (с учётом смещения)
 +
    wait 1000                                    // ждать 1 секунду
 +
    kleft 500 500                                // клик в координаты 520 530 (с учётом смещения)
 +
end_if
 +
End_script
 +
 +
// Скрипт 2
 +
// Тот же скрипт 1, но используем Findoffsetx и Findoffsety
 +
set Findoffsetx 20                              //смещение вправо на 20 пикселей
 +
set Findoffsety 30                              //смещение вниз на 30 пикселей
 +
  set #a findcolor(0 0 1920 1080 1 1 (255) %arr// поиск цвета
 +
if #a > 0                                        // если цвет найден
 +
    log  %arr [1 1] %arr [1 2]                  // показать в логе найденные координаты, покажет 220 430 (координаты, с учётом смещения)                                                 
 +
    kleft %arr [1 1] %arr [1 2]                  // клик будет по координатам 220 430 (с учётом смещения)
 +
    wait 1000                                    // ждать 1 секунду
 +
    kleft 500 500                                // клик в координаты 500 500 (без смещения!!!)
 +
end_if
 +
End_script
 +
В примере 2, в скриптах 1 и 2 клик по найденному цвету будет в одинаковые координаты, а в указанные координаты в разные. Нужно учитывать:
 +
<br>Clickoffsetx и Clickoffsety изменят координаты именно при клике. Не важно откуда получены координаты, при поиске цвета/картинки или просто указаны. Зато в массиве при поиске Findcolor/Findimage будут действительные координаты найденного цвета/картинки. Если они потребуются где-то ещё в скрипте, то можно их использовать.
 +
<br>Findoffsetx и Findoffsety изменят координаты именно в массиве. Клик по найденному цвету/картинке будет со смещением, на клик, где координаты просто указаны они не повлияют. В массиве же будут содержаться координаты с учётом смещения.
  
== Примеры ==
+
== Смотрите также ==
 +
 
 +
[[Clickoffsetx]]
 +
<br>[[Findcolor]]
 +
<br>[[Findimage]]
  
--lua
+
== История развития ==
local startX, startY, endX, endY = 0, 0, 1920, 1080  -- координаты поиска
 
local path = <nowiki>[["C:\картинка.bmp"]]</nowiki>                  -- путь к картинке, bmp 24 бита
 
local arr, a = findimage (startX, startY, endX, endY, {path}, 2)  -- поиск картинки
 
hint (a)    -- результат поиска, подсказка в правом нижнем углу
 
if arr then  -- если найдена
 
    log ("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2])
 
    kleft (arr[1][1], arr[1][2])  -- кликнули
 
end
 
-- в результате работы, если в заданной области картинка обнаружена, в массив %arr[1][1] будет записано значение координаты X
 
-- а в %arr[1][2] - значение координаты Y
 
  
--lua
+
'''2.36'''
-- поиск нескольких одинаковых изображений
+
<br>Добавил переменные смещения кликов мышью и команды 'move', и переменные смещения возвращаемых координат команд 'findimage' и 'findcolor':
-- если будет найдено больше 20 поиск прекратится, точность 70%, отклонение в цвете 5%
+
     'clickoffsetx', 'clickoffsety', 'findoffsetx''findoffsety'.
local arr = findimage (0, 0, 1920, 1080, {"картинка.bmp"}, 2, 70, 20, 5)  -- поиск картинки, должна быть в папке с пилотом
 
hint (a)     -- результат поиска, подсказка в правом нижнем углу
 
if arr then  -- если найдена
 
    log ("Найдено картинок: " .. #arr)
 
    for i=1, #arr do
 
        kleft (arr[i][1], arr[i][2]) -- кликнули на каждой
 
        wait (1000)  -- пауза 1000 мсек (1 сек)
 
    end
 
end
 
  
--lua
+
    //размер картинки 9х9
local startX, startY, endX, endY = 0, 0, 1920, 1080  -- координаты поиска
+
    set findoffsetx 5
local path = <nowiki>[[C:\pilot]]</nowiki>                    -- путь к картинкам
+
    set findoffsety 5
+
    set ... findimage
local image = {"картинка", "картинка2", "картинка3"}  -- массив с именами картинок, имена могут быть любыми
+
     //вернет координаты не левого верхнего угла а центра картинки
hint ("Всего картинок для поиска " .. #image)
 
for i=1, #image do                    -- цикл для поиска картинок
 
    local arr, a = findimage (startX, startY, endX, endY, {path .. "\\" .. image[i] .. ".bmp"}, 2)  -- поиск картинки
 
    if  arr then
 
        move (arr[1][1], arr[1][2])    -- переместить курсор на найденную картинку
 
        wait (500)                    -- ждать 0,5 секунды
 
    end
 
end
 
'''Пример поиска картинки в перекрытом(не свёрнутом) окне:'''
 
<br>Привязка к окну обязательна. Aero (темы Windows 7) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена.
 
<br>Окно может быть перекрыто полностью, частично или вообще не перекрыто. Может находиться за пределами экрана.
 
<br>Как правило, требуется указывать родительское окно. В окне пилота есть кнопка 'F', при нажатии открывается окно, в котором отображается что "видит" пилот при поиске (Findcolor, Findimage).
 
--lua
 
local handle = findwindow ("RPG")  -- поиск окна, вместо 'Lineage2' написать нужное имя окна
 
local startX, startY, endX, endY = 0, 0, 1920, 1080  -- координаты поиска
 
local path = <nowiki>[["C:\картинка.bmp"]]</nowiki>                    -- путь к картинке
 
if handle then
 
    local arr, a = findimage (startX, startY, endX, endY, {path}, handle[1][1])  -- поиск картинки
 
    hint (a)     -- результат поиска, подсказка в правом нижнем углу
 
    if arr then  -- если найдена
 
        log ("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2])
 
        left (arr[1][1], arr[1][2], handle[1][1])  -- кликнули, left работает не во всех приложениях
 
        -- move (arr[1][1], arr[1][2], handle[1][1])  -- навести курсор на картинку (раскомментировать строку чтобы сработало)
 
    else
 
        log ("Изображение не найдено")
 
    end
 
else
 
    log("Окно не найдено")
 
end
 
  
== Смотрите также ==
+
    set clickoffsetx 5
 +
    set clickoffsety 5
 +
    left 0 0
 +
    //кликнет в координаты 5, 5
  
[[Findcolor (Lua)]]
+
[[Категория:Поиск изображений‏‎]]
<br>[[Color (Lua)]]
 

Версия 20:53, 27 августа 2019

Описание

Findoffsetx - смещение возвращаемых координат команд 'findimage' и 'findcolor' по оси 'X'. <br>Findoffsety - смещение возвращаемых координат команд 'findimage' и 'findcolor' по оси 'Y'.

Синтаксис

Привязка к окну: Опционально. <br>Работа со свернутым окном: Нет.

set findoffsetx 50    //смещение вправо на 50 пикселей
set findoffsety 30    //смещение вниз на 30 пикселей

set findoffsetx -40   //смещение вверх на 40 пикселей
set findoffsety -60   //смещение влево на 60 пикселей

Примеры

// Пример 1
set Findoffsetx 20                               //смещение вправо на 20 пикселей    
set Findoffsety 30                               //смещение вниз на 30 пикселей
set #a findcolor(0 0 1920 1080 1 1 (255) %arr)   // поиск цвета
if #a > 0                                        // если цвет найден
    kleft %arr [1 1] %arr [1 2]                  // клик со смещением от найденного цвета, +20 по 'X' и +30 по 'Y'.
end_if
End_script
// Пример 2
// Отличие Findoffsetx и Findoffsety
// от Clickoffsetx и Clickoffsety
// Ищем цвет с помощью Findcolor. Допустим, что он находится в координатах 200 400

// Скрипт 1
set Clickoffsetx 20                              //смещение вправо на 20 пикселей
set Clickoffsety 30                              //смещение вниз на 30 пикселей
set #a findcolor(0 0 1920 1080 1 1 (255) %arr)   // поиск цвета
if #a > 0                                        // если цвет найден
    log   %arr [1 1] %arr [1 2]                  // показать в логе найденные координаты, покажет 200 400 (действительные координаты)                                                 
    kleft %arr [1 1] %arr [1 2]                  // клик будет по координатам 220 430 (с учётом смещения)
    wait 1000                                    // ждать 1 секунду
    kleft 500 500                                // клик в координаты 520 530 (с учётом смещения)
end_if
End_script

// Скрипт 2
// Тот же скрипт 1, но используем Findoffsetx и Findoffsety
set Findoffsetx 20                               //смещение вправо на 20 пикселей
set Findoffsety 30                               //смещение вниз на 30 пикселей
set #a findcolor(0 0 1920 1080 1 1 (255) %arr)   // поиск цвета
if #a > 0                                        // если цвет найден
    log   %arr [1 1] %arr [1 2]                  // показать в логе найденные координаты, покажет 220 430 (координаты, с учётом смещения)                                                  
    kleft %arr [1 1] %arr [1 2]                  // клик будет по координатам 220 430 (с учётом смещения)
    wait 1000                                    // ждать 1 секунду
    kleft 500 500                                // клик в координаты 500 500 (без смещения!!!)
end_if
End_script

В примере 2, в скриптах 1 и 2 клик по найденному цвету будет в одинаковые координаты, а в указанные координаты в разные. Нужно учитывать: <br>Clickoffsetx и Clickoffsety изменят координаты именно при клике. Не важно откуда получены координаты, при поиске цвета/картинки или просто указаны. Зато в массиве при поиске Findcolor/Findimage будут действительные координаты найденного цвета/картинки. Если они потребуются где-то ещё в скрипте, то можно их использовать. <br>Findoffsetx и Findoffsety изменят координаты именно в массиве. Клик по найденному цвету/картинке будет со смещением, на клик, где координаты просто указаны они не повлияют. В массиве же будут содержаться координаты с учётом смещения.

Смотрите также

Clickoffsetx <br>Findcolor <br>Findimage

История развития

2.36 <br>Добавил переменные смещения кликов мышью и команды 'move', и переменные смещения возвращаемых координат команд 'findimage' и 'findcolor':

   'clickoffsetx', 'clickoffsety', 'findoffsetx',  'findoffsety'. 
   //размер картинки 9х9
   set findoffsetx 5 
   set findoffsety 5
   set ... findimage
   //вернет координаты не левого верхнего угла а центра картинки
   set clickoffsetx 5
   set clickoffsety 5
   left 0 0
   //кликнет в координаты 5, 5