Скрипт проходит по картинке в поиске нужного пикселя. При нахождение, запоминает координаты этого пикселя (абсолютные) и на основе этих координат смотрит соседние точки, являются ли они заданного цвета.
Немного про обычный PixelSearch:
gps_Pixel_Searc()
Пример
P.S
1. Если нужен Пример на картинке подробнее, пишите. Просто занят очень.
По моему мнению если особо никому не нужно, то и горбатиться незачем ).
2. Был бы с удовольствием рад выслушать что в моем Говнокоде совсем ужасно ( Я имею виду что - то типа ненужных действий и.т.д.)
Немного про обычный PixelSearch:
Заходим на http://autoit-script.ru/autoit3_docs/functions/PixelSearch.htm и видим
Направление поиска изменяется в зависимости от того, как указаны границы прямоугольника:
Слева направо - left < right
Справа налево - right < left
Сверху вниз - top < bottom
Снизу вверх - bottom < top
Кто не в теме, сюда Новый крутой PixelSearch
Направление поиска изменяется в зависимости от того, как указаны границы прямоугольника:
Слева направо - left < right
Справа налево - right < left
Сверху вниз - top < bottom
Снизу вверх - bottom < top
Кто не в теме, сюда Новый крутой PixelSearch
Код:
Func gps_Pixel_Searc($gps_x_y, $search_color, $array) ; Ищет точку, но если нашел, то проверяет ближайшие координаты, если там ничего нет, то идет дальше
; Проверка направленна только на поиск сверху вниз
; $array - двумерный массив проверяемых координат от заданной точки, заданного цвета $array[1][2] = [['X','Y','Color']]
Local $flag_finish = 0 ; Если равен 1, то мы что - то нашли иначе возрашаем 0
Local $array_finish[1][2] ; Финальный массив с данными
Local $flag_line = 0 ; Значит у нас осталось одна линия и мы будем проверять только ее
Local $Pixel_local[2] ; Запоминаем координаты PixelSearch когда он выдает ошибку
While 1
If $flag_finish = 0 Then
$PixelSearch = PixelSearch( $gps_x_y[0][0], $gps_x_y[0][1], $gps_x_y[0][2], $gps_x_y[0][3], $search_color) ; Ищем первый раз по стандартным значениям
Else
If $PixelSearch[0] = $gps_x_y[0][2] Then ; Значит у нас осталось одна линия
$flag_line = 1
MsgBox(0,0,"ПОследняя линия")
$PixelSearch = PixelSearch( $PixelSearch[0], $PixelSearch[1]+1, $gps_x_y[0][2], $gps_x_y[0][3], $search_color)
if @error = 1 Then
return 0
EndIf
EndIf
; возможно что он зациклился при $PixelSearch[1]+$flag_line_x, когда выпрыгивает за предел и никто не может вернуть его оттуда
; Ищем по линии, но кроме нее есть еще блок в который нужно зайти
If $PixelSearch[0] <> $gps_x_y[0][2] AND $PixelSearch[1] <> $gps_x_y[0][3] Then ; Если X не равны(То есть есть кроме линии еще и блок) и Y не самый нижний, то значит проходим в самый низ до Y
$Pixel_local[0] = $PixelSearch[0]
$Pixel_local[1] = $PixelSearch[1]
$PixelSearch = PixelSearch( $PixelSearch[0], $PixelSearch[1]+1, $PixelSearch[0], $gps_x_y[0][3], $search_color)
If @error=1 Then
Dim $PixelSearch[2]
$PixelSearch[0] = $Pixel_local[0] + 1
$PixelSearch[1] = $gps_x_y[0][1]
EndIf
EndIf
; Ищем по всему блоку, если это уже не новый блок
If $PixelSearch[1] = $gps_x_y[0][1] Then ; Если самый верхний Y в нашем поиске равен Y в начальных координатах
$PixelSearch = PixelSearch( $PixelSearch[0], $gps_x_y[0][1], $gps_x_y[0][2], $gps_x_y[0][3], $search_color)
If @error = 1 Then
return 0
EndIf
EndIf
EndIf
If not @error Then
$flag_finish = 1 ; Если первый раз что - то нашли, то увеличиваем флаг, тем самым даем знать что проверить дальше
For $x = 0 To UBound ($array, 1)-1
$PixelSearch_gps = PixelSearch( $PixelSearch[0]+$array[$x][0], $PixelSearch[1]+$array[$x][1], $PixelSearch[0]+$array[$x][0], $PixelSearch[1]+$array[$x][1], $array[$x][2])
If @error=1 Then
ExitLoop
EndIf
If $x = UBound ($array, 1)-1 Then ; Если мы прошли все проверки, то возращаем массив с координатами
$array_finish[0][0] = $PixelSearch[0]
$array_finish[0][1] = $PixelSearch[1]
return $array_finish
EndIf
Next
Else
If $flag_finish = 0 Then ; Если выполняется это условие, то мы вообще ничего не нашли
return 0
EndIf
EndIf
WEnd
EndFunc
Код:
Dim $array[5][3] = [[1,0,'0x000000'],[2,0,'0x000000'], [0,1,'0xDB903A']] ; Указываем относительно абсолютной координаты. [X,Y,'Цвет']
Dim $gps_x_y[1][4] = [[52,151,169,300]] ; Поиск пока что рассчитан на сверху->вниз, слева->направо
$search_color = '0x000000' ; Цвет абсолютной координаты
$x = gps_Pixel_Searc($gps_x_y, $search_color, $array)
_ArrayDisplay($x)
P.S
1. Если нужен Пример на картинке подробнее, пишите. Просто занят очень.
По моему мнению если особо никому не нужно, то и горбатиться незачем ).
2. Был бы с удовольствием рад выслушать что в моем Говнокоде совсем ужасно ( Я имею виду что - то типа ненужных действий и.т.д.)