Findcolor: различия между версиями

Материал из UoPilot
Перейти к навигации Перейти к поиску
(Новая страница: « == Описание == '''Findcolor''' - ищет пиксели определённого цвета(-ов) в заданной прямоугольной об...»)
 
 
Строка 6: Строка 6:
  
 
Привязка к окну: опционально.
 
Привязка к окну: опционально.
<br>Работа со свернутым окном: Нет.
+
<br>Работа со свернутым окном: Нет.
&lt;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])
 
где:
 
где:
&lt;br>
+
<br>
'''&lt;#a>''' - переменная, в которую записывается количество найденных пикселей (или код ошибки меньший нуля)&lt;br>
+
'''<#a>''' - переменная, в которую записывается количество найденных пикселей (или код ошибки меньший нуля)<br>
'''&lt;StartX StartY>''' - координаты левого верхнего угла области поиска&lt;br>
+
'''<StartX StartY>''' - координаты левого верхнего угла области поиска<br>
'''&lt;EndX EndY>''' - координаты правого нижнего угла области поиска&lt;br>
+
'''<EndX EndY>''' - координаты правого нижнего угла области поиска<br>
'''&lt;ShiftX ShiftY>''' - шаг поиска по осям X и Y соответственно. Почти всегда указывают равным "1".&lt;br>
+
'''<ShiftX ShiftY>''' - шаг поиска по осям X и Y соответственно. Почти всегда указывают равным "1".<br>
'''&lt;(RequiredColors)>''' - один или несколько цветов для поиска (в круглых скобках!). Могут указываться отдельные RGB каналы и/или цвета в виде значений и/или диапазонов:&lt;br>
+
'''<(RequiredColors)>''' - один или несколько цветов для поиска (в круглых скобках!). Могут указываться отдельные RGB каналы и/или цвета в виде значений и/или диапазонов:<br>
:'84235' - точный десятичный цвет&lt;br>
+
:'84235' - точный десятичный цвет<br>
:'84235-86027' - диапазон десятичных цветов&lt;br>
+
:'84235-86027' - диапазон десятичных цветов<br>
:'R(11)' - значение красного канала = 11, остальные каналы не проверяются&lt;br>
+
:'R(11)' - значение красного канала = 11, остальные каналы не проверяются<br>
:'G(73-80)' - диапазон значений зеленого канала, остальные каналы не проверяются&lt;br>
+
:'G(73-80)' - диапазон значений зеленого канала, остальные каналы не проверяются<br>
:'R(11)+G(73-80)+B(1)' - заданы значения по всем каналам&lt;br>
+
:'R(11)+G(73-80)+B(1)' - заданы значения по всем каналам<br>
:'84235, R(0), R(11)+G(73-80)+B(1)' - комбинированное указание искомых цветов&lt;br>
+
:'84235, R(0), R(11)+G(73-80)+B(1)' - комбинированное указание искомых цветов<br>
Если в команде указывается только один десятичный цвет, то его (цвет) можно записывать без круглых скобок.&lt;br>
+
Если в команде указывается только один десятичный цвет, то его (цвет) можно записывать без круглых скобок.<br>
'''&lt;%ResultArray>''' - массив, в который записываются найденные значения. В каждую строку записываются координаты найденного пикселя. В 1-й колонке координата X, во 2-й координата Y, в третьей найденный цвет.&lt;br>
+
'''<%ResultArray>''' - массив, в который записываются найденные значения. В каждую строку записываются координаты найденного пикселя. В 1-й колонке координата X, во 2-й координата Y, в третьей найденный цвет.<br>
'''[type]''' (необязательно) - тип поиска. Может принимать значения "1" (надежный), "2" (быстрый) или целое число означающее хендл окна, в котором нужно вести поиск. Как правило, чаще используют "2", он тоже отлично работает.&lt;br>
+
'''[type]''' (необязательно) - тип поиска. Может принимать значения "1" (надежный), "2" (быстрый) или целое число означающее хендл окна, в котором нужно вести поиск. Как правило, чаще используют "2", он тоже отлично работает.<br>
Если вместо "2" или "1" указать "workwindow" (переменная содержащая хендл рабочего окна), то поиск будет происходить в привязанном рабочем окне (и в его относительных координатах). По сути, это третий тип поиска. При этом окно может быть частично или полностью закрыто другими окнами (но не свёрнуто!).&lt;br>
+
Если вместо "2" или "1" указать "workwindow" (переменная содержащая хендл рабочего окна), то поиск будет происходить в привязанном рабочем окне (и в его относительных координатах). По сути, это третий тип поиска. При этом окно может быть частично или полностью закрыто другими окнами (но не свёрнуто!).<br>
'''[count]''' (необязательно)- количество найденных пикселей, после которых поиск прерывается. Если просто нужно определить наличие цвета в заданной области и не важно общее число таких пикселей, то можно указать "1" - и скорость работы команды будет оптимальной. Если параметр не указывать, то будет искаться максимальное число пикселей&lt;br>
+
'''[count]''' (необязательно)- количество найденных пикселей, после которых поиск прерывается. Если просто нужно определить наличие цвета в заданной области и не важно общее число таких пикселей, то можно указать "1" - и скорость работы команды будет оптимальной. Если параметр не указывать, то будет искаться максимальное число пикселей<br>
'''[deviation]''' (необязательно) - погрешность оттенка. Указывается в %. Например: есть погрешность 3%. Точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением.&lt;br>
+
'''[deviation]''' (необязательно) - погрешность оттенка. Указывается в %. Например: есть погрешность 3%. Точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением.<br>
 
'''[abs]''' (необязательно) - этот параметр указывается, если вы ищете пиксели в координатах относительно верхнего левого угла экрана. Если не указывать параметр, то поиск будет идти в координатах рабочего окна текущего скрипта.
 
'''[abs]''' (необязательно) - этот параметр указывается, если вы ищете пиксели в координатах относительно верхнего левого угла экрана. Если не указывать параметр, то поиск будет идти в координатах рабочего окна текущего скрипта.
  
'''Коды ошибок findcolor:'''&lt;br>
+
'''Коды ошибок findcolor:'''<br>
''''-1'''' упало при поиске, точная причина не известна&lt;br>
+
''''-1'''' упало при поиске, точная причина не известна<br>
''''-2'''' не нашли открывающую скобку после имени функции&lt;br>
+
''''-2'''' не нашли открывающую скобку после имени функции<br>
''''-3'''' (не используется)&lt;br>
+
''''-3'''' (не используется)<br>
''''-4'''' неправильно указан тип поиска, или хэндл = 0&lt;br>
+
''''-4'''' неправильно указан тип поиска, или хэндл = 0<br>
''''-5'''' (не используется)&lt;br>
+
''''-5'''' (не используется)<br>
 
''''-6'''' ошибка получения изображения с экрана.
 
''''-6'''' ошибка получения изображения с экрана.
&lt;br>&lt;br>Иногда требуется сделать клик со смещением. Указывать можно как вначале скрипта так и перед функцией FindColor.
+
<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 (быстрый).&lt;br>
+
Этот пример означает следующее: в текущем рабочем окне в области с координатами (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 для второго пикселя,&lt;br>
+
В результате работы, если в данной области будет обнаружено 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  
 
'''Примеры поиска цвета в перекрытом(не свёрнутом) окне:'''
 
'''Примеры поиска цвета в перекрытом(не свёрнутом) окне:'''
&lt;br>Привязка к окну обязательна. Aero (темы Windows 7) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена.
+
<br>Привязка к окну обязательна. Aero (темы Windows 7) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена.
&lt;br>Окно может быть перекрыто полностью, частично или вообще не перекрыто. Может находиться за пределами экрана.
+
<br>Окно может быть перекрыто полностью, частично или вообще не перекрыто. Может находиться за пределами экрана.
&lt;br>Иногда требуется указывать родительское окно. В окне пилота есть кнопка 'F', при нажатии открывается окно, в котором отображается что "видит" пилот при поиске (Findcolor, Findimage). Если в окне "чёрный квадрат", значит указано не то окно. В Windows 10 работает не во всех приложениях, может потребоваться установка Aero Glass.
+
<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]]
&lt;br>[[If]]
+
<br>[[If]]
&lt;br>[[Get color]]
+
<br>[[Get color]]
&lt;br>[[Color]]
+
<br>[[Color]]
  
 
== История развития ==
 
== История развития ==
  
 
'''2.17'''
 
'''2.17'''
&lt;br>Добавил функцию поиска точек определенного цвета в заданной области. Возвращает количество найденных элементов. В параметр 'ResultArray' заносятся их координаты.
+
<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':
&lt;br>1 - обычный способ (по умолчанию)
+
<br>1 - обычный способ (по умолчанию)
&lt;br>2 - альтернативный
+
<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'''
&lt;br>Исправил 'FindColor' для работы с линейкой.
+
<br>Исправил 'FindColor' для работы с линейкой.
  
 
'''2.19'''
 
'''2.19'''
&lt;br>Поправил задание цвета в findcolor с помощью переменной.
+
<br>Поправил задание цвета в findcolor с помощью переменной.
&lt;br>Ускорил findcolor.
+
<br>Ускорил findcolor.
&lt;br>Отключил преобразование найденных координат в относительные для клиентского окна в альтернативном способе поиска цвета в 'findcolor'.
+
<br>Отключил преобразование найденных координат в относительные для клиентского окна в альтернативном способе поиска цвета в 'findcolor'.
  
 
'''2.20'''
 
'''2.20'''
&lt;br>
+
<br>
 
При ошибке альтернативного определения цвета в 'findcolor', в строковой переменной будет возвращено значение '-3' (ранее возвращалось что-то типа '0---'). Отрицательные значения в принципе сигнализируют об ошибке.
 
При ошибке альтернативного определения цвета в 'findcolor', в строковой переменной будет возвращено значение '-3' (ранее возвращалось что-то типа '0---'). Отрицательные значения в принципе сигнализируют об ошибке.
&lt;br>Отныне 'findcolor' ищет во всем указанном диапазоне, а не 'до' конечной точки. 'set $a FindColor (10, 15  10, 15  1 1  84235  %arr)' будет искать цвет в одной точке.
+
<br>Отныне 'findcolor' ищет во всем указанном диапазоне, а не 'до' конечной точки. 'set $a FindColor (10, 15  10, 15  1 1  84235  %arr)' будет искать цвет в одной точке.
&lt;br>Научил 'findcolor' искать по диапазону цветов и по отдельным каналам цвета. Для поиска по диапазону параметры цвета задаются в круглых скобках. Можно задавать сразу несколько параметров. Ищет сразу по всем указанным параметрам. если цвет указан без скобок, то ищется точное совпадение цвета, как раньше.
+
<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'''
&lt;br>Поправил возвращаемый размер массива в 'findcolor' при ошибке поиска с результатом -1.
+
<br>Поправил возвращаемый размер массива в 'findcolor' при ошибке поиска с результатом -1.
  
 
'''2.25'''
 
'''2.25'''
&lt;br>Переделал 'printscreen' и 'findcolor'. Повысил стабильность работы.
+
<br>Переделал 'printscreen' и 'findcolor'. Повысил стабильность работы.
  
 
'''2.27'''
 
'''2.27'''
&lt;br>Научил 'findcolor' искать цвет в перекрытых окнах. Ищет не на всем экране, а в конкретном указанном окне. Хэндл окна указывается в качестве типа поиска.
+
<br>Научил 'findcolor' искать цвет в перекрытых окнах. Ищет не на всем экране, а в конкретном указанном окне. Хэндл окна указывается в качестве типа поиска.
  
 
'''2.27.1'''
 
'''2.27.1'''
&lt;br>Подправил поиск в перекрытых окнах в командах 'findimage', 'findcolor'.
+
<br>Подправил поиск в перекрытых окнах в командах 'findimage', 'findcolor'.
  
 
'''2.27.2'''
 
'''2.27.2'''
&lt;br>Добавил код ошибки -4 в команде 'findcolor' - неправильно указан тип поиска, либо не выбрано рабочее окно.
+
<br>Добавил код ошибки -4 в команде 'findcolor' - неправильно указан тип поиска, либо не выбрано рабочее окно.
  
 
'''2.32'''
 
'''2.32'''
&lt;br>Добавил задание диапазона цветов с помощью переменных в команде 'findcolor (725 48 813 123 1 1 (#color2a-#color2b) %Centr2 2).
+
<br>Добавил задание диапазона цветов с помощью переменных в команде 'findcolor (725 48 813 123 1 1 (#color2a-#color2b) %Centr2 2).
&lt;br>Добавил в 'findcolor' погрешность оттенка. Указывается в %. Слегка изменился синтаксис команды.
+
<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) будут считаться совпадением.
&lt;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])
 
Исправил указание цвета с помощью переменных в конструкциях типа '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'''
&lt;br>Починил 'deviation' в 'findcolor'.
+
<br>Починил 'deviation' в 'findcolor'.
&lt;br>Исправил падение команды 'findcolor'. Исправил утечки памяти.
+
<br>Исправил падение команды 'findcolor'. Исправил утечки памяти.
  
 
'''2.34'''
 
'''2.34'''
&lt;br>Исправил 'findimage' и 'findcolor'. Возвращали неправильные координаты по Y. Ищет слева снизу - вправо вверх.
+
<br>Исправил 'findimage' и 'findcolor'. Возвращали неправильные координаты по Y. Ищет слева снизу - вправо вверх.
  
 
'''2.35'''
 
'''2.35'''
&lt;br>Исправил 'findimage' и 'findcolor'. Возвращали неправильные координаты.
+
<br>Исправил 'findimage' и 'findcolor'. Возвращали неправильные координаты.
  
 
'''2.36'''
 
'''2.36'''
&lt;br>Добавил кнопочку "F", открывающую тестовую формочку с изображением, найденным Findcolor.
+
<br>Добавил кнопочку "F", открывающую тестовую формочку с изображением, найденным Findcolor.
&lt;br>Добавил возврат найденного цвета в третьем элементе массива в команде 'findcolor'.
+
<br>Добавил возврат найденного цвета в третьем элементе массива в команде 'findcolor'.
&lt;br>Добавил переменные смещения возвращаемых координат команд 'findimage' и 'findcolor':  
+
<br>Добавил переменные смещения возвращаемых координат команд 'findimage' и 'findcolor':  
 
  'findoffsetx',  'findoffsety'
 
  'findoffsetx',  'findoffsety'
  
 
'''2.38'''
 
'''2.38'''
&lt;br>Исправил команду 'findcolor'. При поиске по хэндлу возвращал неправильную координату "y" (вычитал стартовую).
+
<br>Исправил команду 'findcolor'. При поиске по хэндлу возвращал неправильную координату "y" (вычитал стартовую).
  
 
'''2.39'''
 
'''2.39'''
&lt;br>Вынес 'findcolor' из потока пилота, теперь оно меньше подтормаживает сам пилот.
+
<br>Вынес 'findcolor' из потока пилота, теперь оно меньше подтормаживает сам пилот.
&lt;br>Исправил ошибку в разборе строки диапазонов цветов, указанных в 'findcolor', когда лишние пробелы вокруг "-" приводили к недопониманию.
+
<br>Исправил ошибку в разборе строки диапазонов цветов, указанных в 'findcolor', когда лишние пробелы вокруг "-" приводили к недопониманию.
 
   
 
   
 
'''2.41'''
 
'''2.41'''
&lt;br>Добавил в функцию 'findcolor' поиск цвета в загруженной области.
+
<br>Добавил в функцию 'findcolor' поиск цвета в загруженной области.
&lt;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 

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

Findimage
If
Get color
Color

История развития

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' поиск цвета в загруженной области.