Findcolor (Lua): различия между версиями
Yodich (обсуждение | вклад) |
Yodich (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 8: | Строка 8: | ||
<br>Работа со свернутым окном: Нет. | <br>Работа со свернутым окном: Нет. | ||
<br>Работа с перекрытым окном: Да. Привязка к окну обязательна. | <br>Работа с перекрытым окном: Да. Привязка к окну обязательна. | ||
− | a = findcolor (StartX, StartY, EndX, EndY, ShiftX, ShiftY, '''['''[' | + | a = findcolor (StartX, StartY, EndX, EndY, ShiftX, ShiftY, '''['''[('RequiredColor')]''']''', '%ResultArray' [, type [, count [, deviation]]] [, 'abs']) |
где: | где: | ||
<br> | <br> | ||
Строка 47: | Строка 47: | ||
--lua | --lua | ||
-- Пример 1 | -- Пример 1 | ||
− | local a = findcolor (339, 501, 341, 631, 1, 1, '''['''[' | + | local a = findcolor (339, 501, 341, 631, 1, 1, '''['''[('207')]''']''', '%close', 2) -- поиск в рабочем окне |
log(#close) -- вывести в лог длину массива close | log(#close) -- вывести в лог длину массива close | ||
--lua | --lua | ||
-- Пример 2 | -- Пример 2 | ||
− | local c = findcolor (0, 0, 100, 100, 1, 1, '''['''[' | + | -- Использование отклонения цвета - deviation |
+ | local c = findcolor (0, 0, 100, 100, 1, 1, '''['''[('207')]''']''', '%arr', 2, 10, 3) -- 2 - это тип поиска | ||
-- 10 - количество найденных пикселей | -- 10 - количество найденных пикселей | ||
-- 3 - погрешность оттенка | -- 3 - погрешность оттенка |
Текущая версия на 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, если бы такие пиксели не были найдены).