Findcolor (Lua)

Материал из UoPilot
Перейти к навигации Перейти к поиску

Описание

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, если бы такие пиксели не были найдены).

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

Findimage (Lua)
Color (Lua)