Что нового

Пример кода для поиска иконок с помощью PixelSearch

SurikenTSD

Новичок
Сообщения
67
Репутация
1
Версия AutoIt: 3.

Описание: Здравствуйте, приведите, пожалуйста, пример кода для поиска иконок с помощью PixelSearch с подробными комментариями. К примеру, надо найти вот такую вот иконку в окне браузера:
b398880e231139ef0ad0032a28f523ed.png


Примечания: Исходя из того, что рядом могут находится другие иконки и выбранный цвет пиксела на экране не является эксклюзивным.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
PixelSearchEx гугли тему по форуму. Там и пример был, правда не иконки а группы пикселей. Что собственно одно и тоже
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
Так а какая разница что там находится рядом?
Ты просто задаёшь поиск именно в том квадрате, где находится иконка короны....

А если иконка меняет своё положение, тогда уж да, надо сверять 3 точки, как минимум :smile:

Если у тебя картинка сдвигается по X, то я делаю так:
Код:
Opt("PixelCoordMode", 0)
Opt("MouseCoordMode", 0)

$korona = False			;Изначально объявляем что наша переменная "корона" будет ложная
$x = 10		;Тут выставляем Х начального пути поиска
$y = 10		;Тут выставляем У начального пути поиска

Do
	$pix = PixelSearch($x, $y, $x, $y, 0xFFE2A2, 10)	;Ищем первую точку (я взял точку первого рога у короны)
	If Not @error Then													;Если точка найдена и совпадает с цветом, то... 
		$pix = PixelSearch($x+6, $y-1, $x+6, $y-1, 0xFFE2A2, 10)	;Ищем вторую точку на 6 пикс. дальше первой и на 1 пиксель выше
		If Not @error Then	;Если и эту точку нашли, то ...
			$pix = PixelSearch($x+12, $y, $x+12, $y, 0xFFE2A2, 10) ;Ищем третью точку на 12 пикс. дальше первой 
			If Not @error Then	;Если и эту точку нашли, то ...
				$korona = True	;переменная "корона" - положительная!
				MsgBox(0, 0, "Да, это корона")
			Else
				$korona = False	;если Третью точку не нашли, то переменная "корона" - отрицательная
				$korona = False
				MsgBox(0, 0, "Нет, это что-то другое")
			EndIf
		Else
			$korona = False	;если Вторую точку не нашли, то переменная "корона" - отрицательная
			ToolTip("Точка 2 не найдена", 100, 100)
		EndIf
	Else
		$korona = False ;если Первую точку не нашли, то переменная "корона" - отрицательная
		ToolTip("Точка 1 не найдена", 100, 100)
	EndIf
	
	$x = $x+1	;Если переменная "корона" отрицательная, то сдвигаем зону поиска на +1 по координате Х
Until $x >=100 Or $korona = True ;Всё это действие выполнять до тех пор, пока координата Х не будет больше, чем зона поиска или пока переменная "корона" не станет положительной

MsgBox(0, 0, "Мы её нашли!!" & @CRLF & "X: " = $x & @CRLF & "Y: " & $y) ;А тут выдаём сообщение, что мы нашли корону и координаты последней точки :)
 
Автор
S

SurikenTSD

Новичок
Сообщения
67
Репутация
1
Belfigor
Спасибо. Суть сразу уловил, но в архитектуре самого кода разбирался часа два, пока не понял досконально что, как и для чего - опыта с гулькин нос. )
 

_ToBe_

Осваивающий
Сообщения
142
Репутация
35
SurikenTSD,
Если что, Белфигор всегда прийдёт на помощь :D
Рад, что ты таки разобрался в коде, если что - обращайся к нему, он поможет :D
 
Верх