Findcolor (Lua): различия между версиями
Madeus (обсуждение | вклад) (Новая страница: « == Описание == '''findcolor''' - ищет пиксели определённого цвета(-ов) в заданной прямоугольной об...») |
Yodich (обсуждение | вклад) |
||
(не показано 17 промежуточных версий 2 участников) | |||
Строка 8: | Строка 8: | ||
<br>Работа со свернутым окном: Нет. | <br>Работа со свернутым окном: Нет. | ||
<br>Работа с перекрытым окном: Да. Привязка к окну обязательна. | <br>Работа с перекрытым окном: Да. Привязка к окну обязательна. | ||
− | a = findcolor (StartX, StartY, EndX, EndY, ShiftX, ShiftY, '(RequiredColor)', '%ResultArray', [ | + | a = findcolor (StartX, StartY, EndX, EndY, ShiftX, ShiftY, '''['''[('RequiredColor')]''']''', '%ResultArray' [, type [, count [, deviation]]] [, 'abs']) |
где: | где: | ||
<br> | <br> | ||
Строка 15: | Строка 15: | ||
'''<EndX EndY>''' - координаты правого нижнего угла области поиска<br> | '''<EndX EndY>''' - координаты правого нижнего угла области поиска<br> | ||
'''<ShiftX ShiftY>''' - шаг поиска по осям X и Y соответственно. Почти всегда указывают равным "1".<br> | '''<ShiftX ShiftY>''' - шаг поиска по осям X и Y соответственно. Почти всегда указывают равным "1".<br> | ||
− | '''<'( | + | '''<'(RequiredColor)'>''' - один или несколько цветов для поиска (в круглых скобках!). Могут указываться отдельные RGB каналы и/или цвета в виде значений и/или диапазонов:<br> |
:'(84235)' - точный десятичный цвет<br> | :'(84235)' - точный десятичный цвет<br> | ||
:'(84235-86027)' - диапазон десятичных цветов<br> | :'(84235-86027)' - диапазон десятичных цветов<br> | ||
Строка 27: | Строка 27: | ||
Если вместо "2" или "1" указать "workwindow" (переменная содержащая хендл рабочего окна), то поиск будет происходить в привязанном рабочем окне (и в его относительных координатах). По сути, это третий тип поиска. При этом окно может быть частично или полностью закрыто другими окнами (но не свёрнуто!).<br> | Если вместо "2" или "1" указать "workwindow" (переменная содержащая хендл рабочего окна), то поиск будет происходить в привязанном рабочем окне (и в его относительных координатах). По сути, это третий тип поиска. При этом окно может быть частично или полностью закрыто другими окнами (но не свёрнуто!).<br> | ||
'''[count]''' (необязательно)- количество найденных пикселей, после которых поиск прерывается. Если просто нужно определить наличие цвета в заданной области и не важно общее число таких пикселей, то можно указать "1" - и скорость работы команды будет оптимальной. Если параметр не указывать, то будет искаться максимальное число пикселей<br> | '''[count]''' (необязательно)- количество найденных пикселей, после которых поиск прерывается. Если просто нужно определить наличие цвета в заданной области и не важно общее число таких пикселей, то можно указать "1" - и скорость работы команды будет оптимальной. Если параметр не указывать, то будет искаться максимальное число пикселей<br> | ||
− | '''[deviation]''' | + | '''[deviation]''' (необязательно) - погрешность оттенка. Указывается в %. Например: есть погрешность 3%. Точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением.<br> |
'''['abs']''' (необязательно) - этот параметр указывается, если вы ищете пиксели в координатах относительно верхнего левого угла экрана. Если не указывать параметр, то поиск будет идти в координатах рабочего окна текущего скрипта. | '''['abs']''' (необязательно) - этот параметр указывается, если вы ищете пиксели в координатах относительно верхнего левого угла экрана. Если не указывать параметр, то поиск будет идти в координатах рабочего окна текущего скрипта. | ||
Строка 43: | Строка 43: | ||
findoffsetx (-40) -- смещение влево на 40 пикселей | findoffsetx (-40) -- смещение влево на 40 пикселей | ||
findoffsety (-60) -- смещение вверх на 60 пикселей | findoffsety (-60) -- смещение вверх на 60 пикселей | ||
− | |||
== Примеры == | == Примеры == | ||
− | + | --lua | |
− | + | -- Пример 1 | |
+ | local a = findcolor (339, 501, 341, 631, 1, 1, '''['''[('207')]''']''', '%close', 2) -- поиск в рабочем окне | ||
+ | log(#close) -- вывести в лог длину массива close | ||
− | + | --lua | |
− | + | -- Пример 2 | |
− | + | -- Использование отклонения цвета - deviation | |
− | + | local c = findcolor (0, 0, 100, 100, 1, 1, '''['''[('207')]''']''', '%arr', 2, 10, 3) -- 2 - это тип поиска | |
− | + | -- 10 - количество найденных пикселей | |
− | + | -- 3 - погрешность оттенка | |
− | + | ||
− | + | if c then -- если найден нужный цвет | |
− | + | move (arr[1][1], arr[1][2]) -- переместить курсор мыши | |
− | + | log ('Пикселей найдено -> ' .. c .. '\nКоординаты X -> ' .. arr[1][1] .. '\nКоординаты Y -> ' .. arr[1][2] ) | |
− | + | end | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | if | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | Этот пример означает следующее: в текущем рабочем окне в области с координатами (339,501)-(341,631) с шагом поиска (1,1) ищутся все пиксели с десятичным цветом 207. Все найденные координаты пикселей будут записаны в массив close. Тип поиска = 2 (быстрый).<br> | |
− | + | В результате работы, если в данной области будет обнаружено 2 пикселя с цветом 207, то в элемент массива close[1][1] будет записано значение координаты X для первого пикселя, в close[1][2] будет записано значение координаты Y для первого пикселя, в close[2][1] - значение X для второго пикселя, в close[2][2] - значение Y для второго пикселя,<br> | |
− | + | В a будет записано число найденных пикселей = 2 (или 0, если бы такие пиксели не были найдены). | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Смотрите также == | == Смотрите также == | ||
[[Findimage (Lua)]] | [[Findimage (Lua)]] | ||
<br>[[Color (Lua)]] | <br>[[Color (Lua)]] |
Текущая версия на 07:56, 23 августа 2023
Содержание
Описание
findcolor - ищет пиксели определённого цвета(-ов) в заданной прямоугольной области.
Синтаксис
Привязка к окну: опционально.
Работа со свернутым окном: Нет.
Работа с перекрытым окном: Да. Привязка к окну обязательна.
a = findcolor (StartX, StartY, EndX, EndY, ShiftX, ShiftY, [[('RequiredColor')]], '%ResultArray' [, type [, count [, deviation]]] [, 'abs'])
где:
<a> - переменная, в которую записывается количество найденных пикселей (или код ошибки меньший нуля)
<StartX StartY> - координаты левого верхнего угла области поиска
<EndX EndY> - координаты правого нижнего угла области поиска
<ShiftX ShiftY> - шаг поиска по осям X и Y соответственно. Почти всегда указывают равным "1".
<'(RequiredColor)'> - один или несколько цветов для поиска (в круглых скобках!). Могут указываться отдельные RGB каналы и/или цвета в виде значений и/или диапазонов:
- '(84235)' - точный десятичный цвет
- '(84235-86027)' - диапазон десятичных цветов
- '(R(11))' - значение красного канала = 11, остальные каналы не проверяются
- '(G(73-80))' - диапазон значений зеленого канала, остальные каналы не проверяются
- '(R(11)+G(73-80)+B(1))' - заданы значения по всем каналам
- '(84235, R(0), R(11)+G(73-80)+B(1))' - комбинированное указание искомых цветов
Если в команде указывается только один десятичный цвет, то его (цвет) можно записывать без круглых скобок.
<'%ResultArray'> - массив, в который записываются найденные значения. В каждую строку записываются координаты найденного пикселя. В 1-й колонке координата X, во 2-й координата Y, в третьей найденный цвет.
[type] (необязательно) - тип поиска. Может принимать значения "1" (надежный), "2" (быстрый) или целое число означающее хендл окна, в котором нужно вести поиск. Как правило, чаще используют "2", он тоже отлично работает.
Если вместо "2" или "1" указать "workwindow" (переменная содержащая хендл рабочего окна), то поиск будет происходить в привязанном рабочем окне (и в его относительных координатах). По сути, это третий тип поиска. При этом окно может быть частично или полностью закрыто другими окнами (но не свёрнуто!).
[count] (необязательно)- количество найденных пикселей, после которых поиск прерывается. Если просто нужно определить наличие цвета в заданной области и не важно общее число таких пикселей, то можно указать "1" - и скорость работы команды будет оптимальной. Если параметр не указывать, то будет искаться максимальное число пикселей
[deviation] (необязательно) - погрешность оттенка. Указывается в %. Например: есть погрешность 3%. Точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением.
['abs'] (необязательно) - этот параметр указывается, если вы ищете пиксели в координатах относительно верхнего левого угла экрана. Если не указывать параметр, то поиск будет идти в координатах рабочего окна текущего скрипта.
Коды ошибок findcolor:
'-1' упало при поиске, точная причина не известна
'-2' не нашли открывающую скобку после имени функции
'-3' (не используется)
'-4' неправильно указан тип поиска, или хэндл = 0
'-5' (не используется)
'-6' ошибка получения изображения с экрана.
Иногда требуется сделать клик со смещением. Указывать можно как вначале скрипта, так и перед функцией findColor.
findoffsetx (50) -- смещение вправо на 50 пикселей findoffsety (30) -- смещение вниз на 30 пикселей findoffsetx (-40) -- смещение влево на 40 пикселей findoffsety (-60) -- смещение вверх на 60 пикселей
Примеры
--lua -- Пример 1 local a = findcolor (339, 501, 341, 631, 1, 1, [[('207')]], '%close', 2) -- поиск в рабочем окне log(#close) -- вывести в лог длину массива close
--lua -- Пример 2 -- Использование отклонения цвета - deviation local c = findcolor (0, 0, 100, 100, 1, 1, [[('207')]], '%arr', 2, 10, 3) -- 2 - это тип поиска -- 10 - количество найденных пикселей -- 3 - погрешность оттенка if c then -- если найден нужный цвет move (arr[1][1], arr[1][2]) -- переместить курсор мыши log ('Пикселей найдено -> ' .. c .. '\nКоординаты X -> ' .. arr[1][1] .. '\nКоординаты Y -> ' .. arr[1][2] ) end
Этот пример означает следующее: в текущем рабочем окне в области с координатами (339,501)-(341,631) с шагом поиска (1,1) ищутся все пиксели с десятичным цветом 207. Все найденные координаты пикселей будут записаны в массив close. Тип поиска = 2 (быстрый).
В результате работы, если в данной области будет обнаружено 2 пикселя с цветом 207, то в элемент массива close[1][1] будет записано значение координаты X для первого пикселя, в close[1][2] будет записано значение координаты Y для первого пикселя, в close[2][1] - значение X для второго пикселя, в close[2][2] - значение Y для второго пикселя,
В a будет записано число найденных пикселей = 2 (или 0, если бы такие пиксели не были найдены).