Findcolor: различия между версиями
Tatikoma (обсуждение | вклад) (Новая страница: « == Описание == '''Findcolor''' - ищет пиксели определённого цвета(-ов) в заданной прямоугольной об...») |
Tatikoma (обсуждение | вклад) |
||
Строка 6: | Строка 6: | ||
Привязка к окну: опционально. | Привязка к окну: опционально. | ||
− | + | <br>Работа со свернутым окном: Нет. | |
− | + | <br>Работа с перекрытым окном: Да. Привязка к окну обязательна. | |
set #a FindColor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type [count [deviation]]] [abs]) | set #a FindColor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type [count [deviation]]] [abs]) | ||
где: | где: | ||
− | + | <br> | |
− | ''' | + | '''<#a>''' - переменная, в которую записывается количество найденных пикселей (или код ошибки меньший нуля)<br> |
− | ''' | + | '''<StartX StartY>''' - координаты левого верхнего угла области поиска<br> |
− | ''' | + | '''<EndX EndY>''' - координаты правого нижнего угла области поиска<br> |
− | ''' | + | '''<ShiftX ShiftY>''' - шаг поиска по осям X и Y соответственно. Почти всегда указывают равным "1".<br> |
− | ''' | + | '''<(RequiredColors)>''' - один или несколько цветов для поиска (в круглых скобках!). Могут указываться отдельные RGB каналы и/или цвета в виде значений и/или диапазонов:<br> |
− | :'84235' - точный десятичный цвет | + | :'84235' - точный десятичный цвет<br> |
− | :'84235-86027' - диапазон десятичных цветов | + | :'84235-86027' - диапазон десятичных цветов<br> |
− | :'R(11)' - значение красного канала = 11, остальные каналы не проверяются | + | :'R(11)' - значение красного канала = 11, остальные каналы не проверяются<br> |
− | :'G(73-80)' - диапазон значений зеленого канала, остальные каналы не проверяются | + | :'G(73-80)' - диапазон значений зеленого канала, остальные каналы не проверяются<br> |
− | :'R(11)+G(73-80)+B(1)' - заданы значения по всем каналам | + | :'R(11)+G(73-80)+B(1)' - заданы значения по всем каналам<br> |
− | :'84235, R(0), R(11)+G(73-80)+B(1)' - комбинированное указание искомых цветов | + | :'84235, R(0), R(11)+G(73-80)+B(1)' - комбинированное указание искомых цветов<br> |
− | Если в команде указывается только один десятичный цвет, то его (цвет) можно записывать без круглых скобок. | + | Если в команде указывается только один десятичный цвет, то его (цвет) можно записывать без круглых скобок.<br> |
− | ''' | + | '''<%ResultArray>''' - массив, в который записываются найденные значения. В каждую строку записываются координаты найденного пикселя. В 1-й колонке координата X, во 2-й координата Y, в третьей найденный цвет.<br> |
− | '''[type]''' (необязательно) - тип поиска. Может принимать значения "1" (надежный), "2" (быстрый) или целое число означающее хендл окна, в котором нужно вести поиск. Как правило, чаще используют "2", он тоже отлично работает. | + | '''[type]''' (необязательно) - тип поиска. Может принимать значения "1" (надежный), "2" (быстрый) или целое число означающее хендл окна, в котором нужно вести поиск. Как правило, чаще используют "2", он тоже отлично работает.<br> |
− | Если вместо "2" или "1" указать "workwindow" (переменная содержащая хендл рабочего окна), то поиск будет происходить в привязанном рабочем окне (и в его относительных координатах). По сути, это третий тип поиска. При этом окно может быть частично или полностью закрыто другими окнами (но не свёрнуто!). | + | Если вместо "2" или "1" указать "workwindow" (переменная содержащая хендл рабочего окна), то поиск будет происходить в привязанном рабочем окне (и в его относительных координатах). По сути, это третий тип поиска. При этом окно может быть частично или полностью закрыто другими окнами (но не свёрнуто!).<br> |
− | '''[count]''' (необязательно)- количество найденных пикселей, после которых поиск прерывается. Если просто нужно определить наличие цвета в заданной области и не важно общее число таких пикселей, то можно указать "1" - и скорость работы команды будет оптимальной. Если параметр не указывать, то будет искаться максимальное число пикселей | + | '''[count]''' (необязательно)- количество найденных пикселей, после которых поиск прерывается. Если просто нужно определить наличие цвета в заданной области и не важно общее число таких пикселей, то можно указать "1" - и скорость работы команды будет оптимальной. Если параметр не указывать, то будет искаться максимальное число пикселей<br> |
− | '''[deviation]''' (необязательно) - погрешность оттенка. Указывается в %. Например: есть погрешность 3%. Точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением. | + | '''[deviation]''' (необязательно) - погрешность оттенка. Указывается в %. Например: есть погрешность 3%. Точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением.<br> |
'''[abs]''' (необязательно) - этот параметр указывается, если вы ищете пиксели в координатах относительно верхнего левого угла экрана. Если не указывать параметр, то поиск будет идти в координатах рабочего окна текущего скрипта. | '''[abs]''' (необязательно) - этот параметр указывается, если вы ищете пиксели в координатах относительно верхнего левого угла экрана. Если не указывать параметр, то поиск будет идти в координатах рабочего окна текущего скрипта. | ||
− | '''Коды ошибок findcolor:''' | + | '''Коды ошибок findcolor:'''<br> |
− | ''''-1'''' упало при поиске, точная причина не известна | + | ''''-1'''' упало при поиске, точная причина не известна<br> |
− | ''''-2'''' не нашли открывающую скобку после имени функции | + | ''''-2'''' не нашли открывающую скобку после имени функции<br> |
− | ''''-3'''' (не используется) | + | ''''-3'''' (не используется)<br> |
− | ''''-4'''' неправильно указан тип поиска, или хэндл = 0 | + | ''''-4'''' неправильно указан тип поиска, или хэндл = 0<br> |
− | ''''-5'''' (не используется) | + | ''''-5'''' (не используется)<br> |
''''-6'''' ошибка получения изображения с экрана. | ''''-6'''' ошибка получения изображения с экрана. | ||
− | + | <br><br>Иногда требуется сделать клик со смещением. Указывать можно как вначале скрипта так и перед функцией FindColor. | |
set findoffsetx 50 //смещение вправо на 50 пикселей | set findoffsetx 50 //смещение вправо на 50 пикселей | ||
set findoffsety 30 //смещение вниз на 30 пикселей | set findoffsety 30 //смещение вниз на 30 пикселей | ||
Строка 49: | Строка 49: | ||
set #a findcolor ( 339 501 341 631 1 1 (207) %close 2 ) // поиск в рабочем окне | set #a findcolor ( 339 501 341 631 1 1 (207) %close 2 ) // поиск в рабочем окне | ||
− | Этот пример означает следующее: в текущем рабочем окне в области с координатами (339,501)-(341,631) с шагом поиска (1,1) ищутся все пиксели с десятичным цветом 207. Все найденные координаты пикселей будут записаны в массив %close. Тип поиска = 2 (быстрый). | + | Этот пример означает следующее: в текущем рабочем окне в области с координатами (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 для второго пикселя, | + | В результате работы, если в данной области будет обнаружено 2 пикселя с цветом 207, то в элемент массива %close[1 1] будет записано значение координаты X для первого пикселя, в %close[1 2] будет записано значение координаты Y для первого пикселя, в %close[2 1] - значение X для второго пикселя, в %close[2 2] - значение Y для второго пикселя,<br> |
В #a будет записано число найденных пикселей = 2 (или 0, если бы такие пиксели не были найдены). | В #a будет записано число найденных пикселей = 2 (или 0, если бы такие пиксели не были найдены). | ||
// Пример 2 | // Пример 2 | ||
Строка 104: | Строка 104: | ||
End_script | End_script | ||
'''Примеры поиска цвета в перекрытом(не свёрнутом) окне:''' | '''Примеры поиска цвета в перекрытом(не свёрнутом) окне:''' | ||
− | + | <br>Привязка к окну обязательна. Aero (темы Windows 7) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена. | |
− | + | <br>Окно может быть перекрыто полностью, частично или вообще не перекрыто. Может находиться за пределами экрана. | |
− | + | <br>Иногда требуется указывать родительское окно. В окне пилота есть кнопка 'F', при нажатии открывается окно, в котором отображается что "видит" пилот при поиске (Findcolor, Findimage). Если в окне "чёрный квадрат", значит указано не то окно. В Windows 10 работает не во всех приложениях, может потребоваться установка Aero Glass. | |
// Пример 8 | // Пример 8 | ||
set #a findcolor (0 0 1920 1080 1 1 (12146182) %arr workwindow ) | set #a findcolor (0 0 1920 1080 1 1 (12146182) %arr workwindow ) | ||
Строка 130: | Строка 130: | ||
[[Findimage]] | [[Findimage]] | ||
− | + | <br>[[If]] | |
− | + | <br>[[Get color]] | |
− | + | <br>[[Color]] | |
== История развития == | == История развития == | ||
'''2.17''' | '''2.17''' | ||
− | + | <br>Добавил функцию поиска точек определенного цвета в заданной области. Возвращает количество найденных элементов. В параметр 'ResultArray' заносятся их координаты. | |
findcolor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type] [abs]) | findcolor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type] [abs]) | ||
где 'type': | где 'type': | ||
− | + | <br>1 - обычный способ (по умолчанию) | |
− | + | <br>2 - альтернативный | |
Пример: | Пример: | ||
set $a findcolor (0, 0 1024, 3 1 1 (10243328) %s 2) | set $a findcolor (0, 0 1024, 3 1 1 (10243328) %s 2) | ||
Строка 152: | Строка 152: | ||
'''2.18''' | '''2.18''' | ||
− | + | <br>Исправил 'FindColor' для работы с линейкой. | |
'''2.19''' | '''2.19''' | ||
− | + | <br>Поправил задание цвета в findcolor с помощью переменной. | |
− | + | <br>Ускорил findcolor. | |
− | + | <br>Отключил преобразование найденных координат в относительные для клиентского окна в альтернативном способе поиска цвета в 'findcolor'. | |
'''2.20''' | '''2.20''' | ||
− | + | <br> | |
При ошибке альтернативного определения цвета в 'findcolor', в строковой переменной будет возвращено значение '-3' (ранее возвращалось что-то типа '0---'). Отрицательные значения в принципе сигнализируют об ошибке. | При ошибке альтернативного определения цвета в 'findcolor', в строковой переменной будет возвращено значение '-3' (ранее возвращалось что-то типа '0---'). Отрицательные значения в принципе сигнализируют об ошибке. | ||
− | + | <br>Отныне 'findcolor' ищет во всем указанном диапазоне, а не 'до' конечной точки. 'set $a FindColor (10, 15 10, 15 1 1 84235 %arr)' будет искать цвет в одной точке. | |
− | + | <br>Научил 'findcolor' искать по диапазону цветов и по отдельным каналам цвета. Для поиска по диапазону параметры цвета задаются в круглых скобках. Можно задавать сразу несколько параметров. Ищет сразу по всем указанным параметрам. если цвет указан без скобок, то ищется точное совпадение цвета, как раньше. | |
'set $a FindColor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type] [abs])' | 'set $a FindColor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type] [abs])' | ||
Примеры задания 'RequiredColor': | Примеры задания 'RequiredColor': | ||
Строка 176: | Строка 176: | ||
'''2.23''' | '''2.23''' | ||
− | + | <br>Поправил возвращаемый размер массива в 'findcolor' при ошибке поиска с результатом -1. | |
'''2.25''' | '''2.25''' | ||
− | + | <br>Переделал 'printscreen' и 'findcolor'. Повысил стабильность работы. | |
'''2.27''' | '''2.27''' | ||
− | + | <br>Научил 'findcolor' искать цвет в перекрытых окнах. Ищет не на всем экране, а в конкретном указанном окне. Хэндл окна указывается в качестве типа поиска. | |
'''2.27.1''' | '''2.27.1''' | ||
− | + | <br>Подправил поиск в перекрытых окнах в командах 'findimage', 'findcolor'. | |
'''2.27.2''' | '''2.27.2''' | ||
− | + | <br>Добавил код ошибки -4 в команде 'findcolor' - неправильно указан тип поиска, либо не выбрано рабочее окно. | |
'''2.32''' | '''2.32''' | ||
− | + | <br>Добавил задание диапазона цветов с помощью переменных в команде 'findcolor (725 48 813 123 1 1 (#color2a-#color2b) %Centr2 2). | |
− | + | <br>Добавил в 'findcolor' погрешность оттенка. Указывается в %. Слегка изменился синтаксис команды. | |
пример: есть погрешность 3%. точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением. | пример: есть погрешность 3%. точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением. | ||
− | + | <br>Для учета погрешности оттенка, цвет должен быть указан в скобках, иначе погрешность будет проигнорирована. | |
set $a FindColor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type [count [deviation]]] [abs]) | set $a FindColor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type [count [deviation]]] [abs]) | ||
Исправил указание цвета с помощью переменных в конструкциях типа 'set $a findcolor (4, 1 13, 38 1 1 (B(#i)) %watch 2)'. | Исправил указание цвета с помощью переменных в конструкциях типа 'set $a findcolor (4, 1 13, 38 1 1 (B(#i)) %watch 2)'. | ||
'''2.33''' | '''2.33''' | ||
− | + | <br>Починил 'deviation' в 'findcolor'. | |
− | + | <br>Исправил падение команды 'findcolor'. Исправил утечки памяти. | |
'''2.34''' | '''2.34''' | ||
− | + | <br>Исправил 'findimage' и 'findcolor'. Возвращали неправильные координаты по Y. Ищет слева снизу - вправо вверх. | |
'''2.35''' | '''2.35''' | ||
− | + | <br>Исправил 'findimage' и 'findcolor'. Возвращали неправильные координаты. | |
'''2.36''' | '''2.36''' | ||
− | + | <br>Добавил кнопочку "F", открывающую тестовую формочку с изображением, найденным Findcolor. | |
− | + | <br>Добавил возврат найденного цвета в третьем элементе массива в команде 'findcolor'. | |
− | + | <br>Добавил переменные смещения возвращаемых координат команд 'findimage' и 'findcolor': | |
'findoffsetx', 'findoffsety' | 'findoffsetx', 'findoffsety' | ||
'''2.38''' | '''2.38''' | ||
− | + | <br>Исправил команду 'findcolor'. При поиске по хэндлу возвращал неправильную координату "y" (вычитал стартовую). | |
'''2.39''' | '''2.39''' | ||
− | + | <br>Вынес 'findcolor' из потока пилота, теперь оно меньше подтормаживает сам пилот. | |
− | + | <br>Исправил ошибку в разборе строки диапазонов цветов, указанных в 'findcolor', когда лишние пробелы вокруг "-" приводили к недопониманию. | |
'''2.41''' | '''2.41''' | ||
− | + | <br>Добавил в функцию 'findcolor' поиск цвета в загруженной области. | |
− | + | <br>Исправил в функции 'findcolor' поиск цвета в загруженной области. | |
[[Категория:Поиск изображений]] | [[Категория:Поиск изображений]] |
Текущая версия на 10:34, 28 августа 2019
Описание
Findcolor - ищет пиксели определённого цвета(-ов) в заданной прямоугольной области.
Синтаксис
Привязка к окну: опционально.
Работа со свернутым окном: Нет.
Работа с перекрытым окном: Да. Привязка к окну обязательна.
set #a FindColor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type [count [deviation]]] [abs])
где:
<#a> - переменная, в которую записывается количество найденных пикселей (или код ошибки меньший нуля)
<StartX StartY> - координаты левого верхнего угла области поиска
<EndX EndY> - координаты правого нижнего угла области поиска
<ShiftX ShiftY> - шаг поиска по осям X и Y соответственно. Почти всегда указывают равным "1".
<(RequiredColors)> - один или несколько цветов для поиска (в круглых скобках!). Могут указываться отдельные 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.
set findoffsetx 50 //смещение вправо на 50 пикселей set findoffsety 30 //смещение вниз на 30 пикселей set findoffsetx -40 //смещение влево на 40 пикселей set findoffsety -60 //смещение вверх на 60 пикселей
Примеры
// Пример 1 set #a findcolor ( 339 501 341 631 1 1 (207) %close 2 ) // поиск в рабочем окне
Этот пример означает следующее: в текущем рабочем окне в области с координатами (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, если бы такие пиксели не были найдены).
// Пример 2 set #b findcolor ( 339 501 341 631 1 1(207) %close 2 abs ) // поиск на экране
// Пример 3 set #c findcolor ( 339 501 341 631 1 1 (207) %close workwindow ) // поиск в рабочем окне (даже в перекрытом)
// Пример 4 set #d findcolor (403, 138 973, 502 1 1 (3949430) %arr 2) if #d > 0 // если найден нужный цвет, то делаем двойной левый клик мышкой в первой найденной точке double_left %arr [1 1], %arr [1 2] else msg Цвет не найден! end_if
// Пример 5 // Использование отклонения цвета - deviation set #d findcolor (403, 138 973, 502 1 1 (3949430) %arr 2 -1 3) // 2 - это тип поиска // -1 - количество найденных пикселей (искать все) // 3 - погрешность оттенка if #d > 0 // если найден нужный цвет kleft %arr [1 1], %arr [1 2] wait 2000 else log Цвет не найден! end_if
// Пример 6 // Использование шага поиска // Допустим, найти 2 одинаковых изображения в сетке 3*3. set #a findcolor (100 100 200 200 50 50 2366701 %a) // проверить 9 точек на цвет 2366701 // координаты: 100 100, 150 100, 200 100 // 100 150, 150 150, 200 150 // 100 200, 150 200, 200 200 log #a // вывод в лог количества найденных цветов if #a > 1 // если найдено больше 1 точки for #i 1 size(%a) log %a [#i 1] %a [#i 2] // вывод в лог координат move %a [#i 1] %a [#i 2] // переместит курсор на найденные точки wait 2000 // ждать 2 секунды end_for end_if End_script
// Пример 7 // Использование шага поиска set #a findcolor (100 100 200 200 50 50 (0-16777215) %arr) // получить цвета в 9 точках, сетка 3*3 // координаты: 100 100, 150 100, 200 100 // 100 150, 150 150, 200 150 // 100 200, 150 200, 200 200 save_array %arr C:\SaveColor.txt // сохранить массив с найденными координатами в файл 'C:\SaveColor.txt' End_script
Примеры поиска цвета в перекрытом(не свёрнутом) окне:
Привязка к окну обязательна. Aero (темы Windows 7) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена.
Окно может быть перекрыто полностью, частично или вообще не перекрыто. Может находиться за пределами экрана.
Иногда требуется указывать родительское окно. В окне пилота есть кнопка 'F', при нажатии открывается окно, в котором отображается что "видит" пилот при поиске (Findcolor, Findimage). Если в окне "чёрный квадрат", значит указано не то окно. В Windows 10 работает не во всех приложениях, может потребоваться установка Aero Glass.
// Пример 8 set #a findcolor (0 0 1920 1080 1 1 (12146182) %arr workwindow ) log #a // если в логе 0, скорее всего, надо указать родительское окно End_script
Учтите, при указании родительского окна в качестве рабочего, клики могут быть со смещением. Используйте поиск окна Findwindow и Поиск пути к дочернему окну.
// Пример 9 set #handle findwindow (Google) // поиск окна с именем Google set #a findcolor (100 100 1000 1000 (5482548 ) %arr #handle) log #a // количество найденных цветов if #a > 0 // если цвет найден move %arr [1 1] %arr [1 2] // переместить курсор на первый найденный цвет end_if End_script
// Пример 10 set #handle findwindow (lineage2) set #a findcolor (18 17 243 37 1 1 (23176) %arr #handle) log #a // количество найденных цветов End_script
Смотрите также
История развития
2.17
Добавил функцию поиска точек определенного цвета в заданной области. Возвращает количество найденных элементов. В параметр 'ResultArray' заносятся их координаты.
findcolor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type] [abs])
где 'type':
1 - обычный способ (по умолчанию)
2 - альтернативный
Пример:
set $a findcolor (0, 0 1024, 3 1 1 (10243328) %s 2) set #w size (%s) msg size: #w found: $a for #i 1 #w set #x %s [#i 1] set #y %s [#i 2] end_for
2.18
Исправил 'FindColor' для работы с линейкой.
2.19
Поправил задание цвета в findcolor с помощью переменной.
Ускорил findcolor.
Отключил преобразование найденных координат в относительные для клиентского окна в альтернативном способе поиска цвета в 'findcolor'.
2.20
При ошибке альтернативного определения цвета в 'findcolor', в строковой переменной будет возвращено значение '-3' (ранее возвращалось что-то типа '0---'). Отрицательные значения в принципе сигнализируют об ошибке.
Отныне 'findcolor' ищет во всем указанном диапазоне, а не 'до' конечной точки. 'set $a FindColor (10, 15 10, 15 1 1 84235 %arr)' будет искать цвет в одной точке.
Научил 'findcolor' искать по диапазону цветов и по отдельным каналам цвета. Для поиска по диапазону параметры цвета задаются в круглых скобках. Можно задавать сразу несколько параметров. Ищет сразу по всем указанным параметрам. если цвет указан без скобок, то ищется точное совпадение цвета, как раньше.
'set $a FindColor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type] [abs])'
Примеры задания 'RequiredColor':
'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)' - комбинированное указание искомых цветов
Добавил предельное количество точек для поиска в команде 'findcolor', в связи с этим слегка изменился синтаксис:
'set $a FindColor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type [count]] [abs])'
2.23
Поправил возвращаемый размер массива в 'findcolor' при ошибке поиска с результатом -1.
2.25
Переделал 'printscreen' и 'findcolor'. Повысил стабильность работы.
2.27
Научил 'findcolor' искать цвет в перекрытых окнах. Ищет не на всем экране, а в конкретном указанном окне. Хэндл окна указывается в качестве типа поиска.
2.27.1
Подправил поиск в перекрытых окнах в командах 'findimage', 'findcolor'.
2.27.2
Добавил код ошибки -4 в команде 'findcolor' - неправильно указан тип поиска, либо не выбрано рабочее окно.
2.32
Добавил задание диапазона цветов с помощью переменных в команде 'findcolor (725 48 813 123 1 1 (#color2a-#color2b) %Centr2 2).
Добавил в 'findcolor' погрешность оттенка. Указывается в %. Слегка изменился синтаксис команды.
пример: есть погрешность 3%. точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением.
Для учета погрешности оттенка, цвет должен быть указан в скобках, иначе погрешность будет проигнорирована.
set $a FindColor (StartX StartY EndX EndY ShiftX ShiftY (RequiredColor) ResultArray [type [count [deviation]]] [abs])
Исправил указание цвета с помощью переменных в конструкциях типа 'set $a findcolor (4, 1 13, 38 1 1 (B(#i)) %watch 2)'.
2.33
Починил 'deviation' в 'findcolor'.
Исправил падение команды 'findcolor'. Исправил утечки памяти.
2.34
Исправил 'findimage' и 'findcolor'. Возвращали неправильные координаты по Y. Ищет слева снизу - вправо вверх.
2.35
Исправил 'findimage' и 'findcolor'. Возвращали неправильные координаты.
2.36
Добавил кнопочку "F", открывающую тестовую формочку с изображением, найденным Findcolor.
Добавил возврат найденного цвета в третьем элементе массива в команде 'findcolor'.
Добавил переменные смещения возвращаемых координат команд 'findimage' и 'findcolor':
'findoffsetx', 'findoffsety'
2.38
Исправил команду 'findcolor'. При поиске по хэндлу возвращал неправильную координату "y" (вычитал стартовую).
2.39
Вынес 'findcolor' из потока пилота, теперь оно меньше подтормаживает сам пилот.
Исправил ошибку в разборе строки диапазонов цветов, указанных в 'findcolor', когда лишние пробелы вокруг "-" приводили к недопониманию.
2.41
Добавил в функцию 'findcolor' поиск цвета в загруженной области.
Исправил в функции 'findcolor' поиск цвета в загруженной области.