Разница между страницами «Findimage» и «Findimage (Lua)»
Tatikoma (обсуждение | вклад) (Новая страница: « == Описание == '''FindImage''' - оператор поиска сохраненного изображения в области заданной нач...») |
Tatikoma (обсуждение | вклад) (Новая страница: «== Описание == '''findimage''' - поиск изображения в области заданной начальными и конечными коор...») |
||
Строка 1: | Строка 1: | ||
− | |||
== Описание == | == Описание == | ||
− | ''' | + | '''findimage''' - поиск изображения в области заданной начальными и конечными координатами по оси XY. |
<br> | <br> | ||
<br>Формат картинки должен быть: '''bmp 24 бита.''' <br>Цвет крайнего пикселя в левом верхнем углу изображения считается "цветом фона", и при поиске картинки на экране не учитывается. Например, цвет этого пикселя красный (255). В этом случае все пиксели красного цвета присутствующие на искомой картинке будут считаться фоновыми (прозрачными) и не будут сравниваться с тем, что присутствует на экране. Поэтому, нельзя чтобы в файле-картинке все пиксели были одного цвета. Нужно сделать, чтобы хотя бы один левый верхний пиксель цветом отличался от остальных. | <br>Формат картинки должен быть: '''bmp 24 бита.''' <br>Цвет крайнего пикселя в левом верхнем углу изображения считается "цветом фона", и при поиске картинки на экране не учитывается. Например, цвет этого пикселя красный (255). В этом случае все пиксели красного цвета присутствующие на искомой картинке будут считаться фоновыми (прозрачными) и не будут сравниваться с тем, что присутствует на экране. Поэтому, нельзя чтобы в файле-картинке все пиксели были одного цвета. Нужно сделать, чтобы хотя бы один левый верхний пиксель цветом отличался от остальных. | ||
Строка 9: | Строка 8: | ||
Привязка к окну: опционально. | Привязка к окну: опционально. | ||
<br>Работа со свернутым окном: нет. | <br>Работа со свернутым окном: нет. | ||
− | <br>Работа с перекрытым окном: Да. Привязка к окну обязательна. Aero (темы Windows) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена. | + | <br>Работа с перекрытым окном: Да. Привязка к окну обязательна. Aero (темы Windows, кроме Windows 10, в котором нет aero) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена. |
− | + | ResultArray, a = findimage (<StartX>, <StartY>, <EndX>, <EndY>, <{filename}> [, type [, accuracy [, count [, deviation]]]] [, abs]) | |
Где: | Где: | ||
− | <br>'''< | + | <br>'''ResultArray''' - результирующий массив, в который записываются координаты изображения. Координатами изображения считается пиксель левого верхнего угла изображения. Если найдено несколько изображений, то координаты всех найденных изображений. Каждая строка массива хранится данные по отдельному найденному изображению: в первой колонке- координата X, во второй колонке- координата Y. |
− | <br>Если | + | <br>'''<a>''' - переменная, в которую записывается результат работы команды findimage: |
+ | <br>Если a = 0, значит поиск был произведён, но картинка не найдена. | ||
<br>Если найдена только 1 картинка, то будет записан процент точности найденного изображения. | <br>Если найдена только 1 картинка, то будет записан процент точности найденного изображения. | ||
<br>Если найдено несколько картинок, то будет записано количество найденных изображений. | <br>Если найдено несколько картинок, то будет записано количество найденных изображений. | ||
− | <br>Однозначно определить сколько именно картинок было найдено командой FindImage лучше всего по размеру массива | + | <br>Однозначно определить сколько именно картинок было найдено командой FindImage лучше всего по размеру массива ResultArray с помощью функции #ResultArray. |
− | <br> | + | <br>a < 0 означает, что FindImage не смог произвести поиск- либо была обнаружена ошибка в написании параметров команды, либо проблемы с самим файлом картинки. |
− | <br>Если | + | <br>Если a = -4, значит файл картинки не найден / в неправильном формате / повреждён / все пиксели файла одного цвета. Чаще всего- путь к файлу указан неправильно. |
− | <br>''' | + | <br>'''StartX, StartY''' - координаты левого верхнего угла области поиска. |
− | <br>''' | + | <br>'''EndX, EndY''' - координаты правого нижнего угла области поиска. |
− | <br>''' | + | <br>'''{filename}''' - путь к сохранённому изображению (только файл формата bmp 24 бита). Путь к изображению может быть указан как '''абсолютный''' - {C:\\programms\\pilot\\images\\}, так '''и относительный''' - {images\\}. Указывается в фигурных скобках. |
− | <br>''' | + | <br>'''type''' - тип поиска. Может принимать значения: '''1''' (надежный), '''2''' (быстрый), '''workwindow'''(поиск в окне, в том числе перекрытом). Настоятельно рекомендуется использовать быстрый способ поиска, кроме случаев с некорректным обнаружением изображения. По умолчанию 2й тип поиска. Тип workwindow - в качестве аргумента указывать хендл окна. |
− | + | <br>'''accuracy''' - точность поиска. Указывается в процентах. Используется для отсева изображений не достаточно схожих с оригиналом. По умолчанию значение равно 80%. | |
− | <br>''' | + | <br>'''count''' - ограничение количества найденных изображений. По умолчанию установлено для одного изображения - значение '''1''', для всех возможных - значение '''-1'''. |
− | <br>''' | + | <br>'''deviation''' - погрешность оттенка. Пример: есть погрешность 3%. Точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением. |
− | <br>''' | + | <br>'''abs''' - флаг использования абсолютных координат. Если он указан то поиск происходит относительно левого верхнего угла экрана. Без флага поиск происходит относительно левого верхнего угла рабочего окна(привязанного через ctrl+a либо иным способом). Указывается в кавычках "abs". |
− | <br>''' | ||
<br> | <br> | ||
<br>Если вы ищете на экране текст в виде картинки, и в системе используется сглаживание шрифтов, то могут быть проблемы с нахождением, даже если вы видите, что такой текст на экране есть. Все-равно при включенном сглаживании искомая картинка может незначительно отличаться от того что есть на экране. В этом случае рекомендуется снизить точность поиска либо отключить сглаживание шрифтов на компьютере, где используется findimage. | <br>Если вы ищете на экране текст в виде картинки, и в системе используется сглаживание шрифтов, то могут быть проблемы с нахождением, даже если вы видите, что такой текст на экране есть. Все-равно при включенном сглаживании искомая картинка может незначительно отличаться от того что есть на экране. В этом случае рекомендуется снизить точность поиска либо отключить сглаживание шрифтов на компьютере, где используется findimage. | ||
Строка 39: | Строка 38: | ||
''''-6'''' ошибка получения изображения с экрана.<br> | ''''-6'''' ошибка получения изображения с экрана.<br> | ||
''''-7'''' нечего искать, искомая картинка пустая. | ''''-7'''' нечего искать, искомая картинка пустая. | ||
− | <br><br>Иногда требуется сделать клик не по самому изображению, а со смещением. Указывать можно как вначале скрипта так и перед функцией | + | <br><br>Иногда требуется сделать клик не по самому изображению, а со смещением. Указывать можно как вначале скрипта так и перед функцией findimage. |
− | + | findoffsetx (50) -- смещение вправо на 50 пикселей | |
− | + | findoffsety (30) -- смещение вниз на 30 пикселей | |
− | + | findoffsetx (-40) -- смещение влево на 40 пикселей | |
− | + | findoffsety (-60) -- смещение вверх на 60 пикселей | |
== Примеры == | == Примеры == | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | / | + | --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 | |
− | + | -- поиск нескольких одинаковых изображений | |
− | + | -- если будет найдено больше 20 поиск прекратится, точность 70%, отклонение в цвете 5% | |
− | + | 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 | |
− | + | local startX, startY, endX, endY = 0, 0, 1920, 1080 -- координаты поиска | |
− | + | local path = <nowiki>[[C:\pilot]]</nowiki> -- путь к картинкам | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | local image = {"картинка", "картинка2", "картинка3"} -- массив с именами картинок, имена могут быть любыми | |
− | hint Всего картинок # | + | hint ("Всего картинок для поиска " .. #image) |
− | + | for i=1, #image do -- цикл для поиска картинок | |
− | + | local arr, a = findimage (startX, startY, endX, endY, {path .. "\\" .. image[i] .. ".bmp"}, 2) -- поиск картинки | |
− | for | + | if arr then |
− | + | move (arr[1][1], arr[1][2]) -- переместить курсор на найденную картинку | |
− | if | + | wait (500) -- ждать 0,5 секунды |
− | move | + | end |
− | wait 500 | + | end |
− | + | '''Пример поиска картинки в перекрытом(не свёрнутом) окне:''' | |
− | |||
− | |||
− | |||
− | |||
<br>Привязка к окну обязательна. Aero (темы Windows 7) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена. | <br>Привязка к окну обязательна. Aero (темы Windows 7) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена. | ||
<br>Окно может быть перекрыто полностью, частично или вообще не перекрыто. Может находиться за пределами экрана. | <br>Окно может быть перекрыто полностью, частично или вообще не перекрыто. Может находиться за пределами экрана. | ||
− | <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 | else | ||
− | + | log("Окно не найдено") | |
− | + | end | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Смотрите также == | == Смотрите также == | ||
− | [[Findcolor | + | [[Findcolor (Lua)]] |
− | + | <br>[[Color (Lua)]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | <br> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Версия 20:53, 27 августа 2019
Содержание
Описание
findimage - поиск изображения в области заданной начальными и конечными координатами по оси XY. <br> <br>Формат картинки должен быть: bmp 24 бита. <br>Цвет крайнего пикселя в левом верхнем углу изображения считается "цветом фона", и при поиске картинки на экране не учитывается. Например, цвет этого пикселя красный (255). В этом случае все пиксели красного цвета присутствующие на искомой картинке будут считаться фоновыми (прозрачными) и не будут сравниваться с тем, что присутствует на экране. Поэтому, нельзя чтобы в файле-картинке все пиксели были одного цвета. Нужно сделать, чтобы хотя бы один левый верхний пиксель цветом отличался от остальных.
Синтаксис
Привязка к окну: опционально. <br>Работа со свернутым окном: нет. <br>Работа с перекрытым окном: Да. Привязка к окну обязательна. Aero (темы Windows, кроме Windows 10, в котором нет aero) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена.
ResultArray, a = findimage (<StartX>, <StartY>, <EndX>, <EndY>, <{filename}> [, type [, accuracy [, count [, deviation]]]] [, abs])
Где: <br>ResultArray - результирующий массив, в который записываются координаты изображения. Координатами изображения считается пиксель левого верхнего угла изображения. Если найдено несколько изображений, то координаты всех найденных изображений. Каждая строка массива хранится данные по отдельному найденному изображению: в первой колонке- координата X, во второй колонке- координата Y. <br><a> - переменная, в которую записывается результат работы команды findimage: <br>Если a = 0, значит поиск был произведён, но картинка не найдена. <br>Если найдена только 1 картинка, то будет записан процент точности найденного изображения. <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> '-1' упало при поиске, точная причина не известна.<br> '-2' не нашли открывающую скобку после имени функции.<br> '-3' не найдено пути в скобках.<br> '-4' ошибка поиска файла.<br> '-5' ошибка обработки искомого изображения.<br> '-6' ошибка получения изображения с экрана.<br> '-7' нечего искать, искомая картинка пустая. <br><br>Иногда требуется сделать клик не по самому изображению, а со смещением. Указывать можно как вначале скрипта так и перед функцией findimage.
findoffsetx (50) -- смещение вправо на 50 пикселей findoffsety (30) -- смещение вниз на 30 пикселей findoffsetx (-40) -- смещение влево на 40 пикселей findoffsety (-60) -- смещение вверх на 60 пикселей
Примеры
--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 -- поиск нескольких одинаковых изображений -- если будет найдено больше 20 поиск прекратится, точность 70%, отклонение в цвете 5% 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 local startX, startY, endX, endY = 0, 0, 1920, 1080 -- координаты поиска local path = <nowiki>C:\pilot</nowiki> -- путь к картинкам 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