Возник вопрос при использовании UDF FastFind.au3 при поиске области с пикселями определенного цвета (функция FFNearestSpot). Прикрепляю демонстрационный скрипт. Ищет координаты темно-красного квадрата на панели инструментов Пейнт, передвигает курсор мыши на него и в консоль выводит инфу о координатах и количестве пикселей. У меня получился такой результат: area's coordinates = 930, 66, number of pixels found = 132. Если я задал SizeSearch = 10, то ищется квадрат со стороной 10. Как в нем может быть 132 пикселя (>100)? Я неправильно понимаю, что одной клетке с координатами (x, y) должен отвечать всего 1 пиксель, или это функция криво работает? Ответ на вопрос очень важен, потому что через величину NbPixel хотелось бы иметь возможность задавать минимальный процент пикселей искомого цвета в квадрате поиска.
Также если кто знает алгоритм функции FFNearestPixel, дайте ссылку пожалуйста или опишите. Нужно для написания кода, чтоб искать следующий пиксель такого же цвета, но при этом выбросить из поиска область, которую проверили при поиске первого пикселя.
Код:
#include "FastFind.au3"
HotKeySet("{F2}", "FindSpot")
HotKeySet("{ESC}", "End")
Global $color = "0x880015"; темно-красный цвет
$hwnd = WinGetHandle("Безымянный - Paint")
WinSetState($hwnd, "",@SW_MAXIMIZE)
FFSnapShot(0, 0, 0, 0, 0, $hwnd) ; скрин
opt("MouseCoordMode", 2)
While 1
Sleep(10)
WEnd
Func FindSpot()
$aCoords = FFNearestSpot(10 , 99, 10, 10, $color, 0 ,False, $hwnd) ;ищем темно-красный квадрат на панели
;SizeSearch, NbPixel, PosX, PosY, Color, ShadeVariation, ForceNewSnap, WindowHandle
;SizeSearch - The width and height of the area to search for.
;NbPixel - Minimum number of pixels in the area.
;Success: Returns a three-element array of area's coordinates and number of pixels found.
;(Array[0] = x, Array[1] = y, Array[2] = Number of pixels found).
If Not @error Then
ConsoleWrite("area's coordinates = "&$aCoords[0]&", "&$aCoords[1]&", number of pixels found = "&$aCoords[2]&@CRLF)
WinActivate($hwnd)
MouseMove($aCoords[0], $aCoords[1], 5)
Else
ConsoleWrite("Match not found."&@CRLF)
EndIf
EndFunc
Func End()
Exit
EndFunc
Также если кто знает алгоритм функции FFNearestPixel, дайте ссылку пожалуйста или опишите. Нужно для написания кода, чтоб искать следующий пиксель такого же цвета, но при этом выбросить из поиска область, которую проверили при поиске первого пикселя.