Что нового

PixelSearch > как найти все пиксели нужного цвета

JohnWind

Новичок
Сообщения
57
Репутация
0
Доброго времени суток,

уже давно пишу большого бота для игры (всё во флеше, никакого доступа к коду нет)... среди прочих действий боту нужно перейти в окно с картинкой... на которой необходимо найти графический объект и нажать его.

пока не влезал в дебри работы с цветом - решил до тупого просто: включил цикл пробега мышки по экрану и кликом в текущих координатах...
если там оказался объект то открывается дополнительное окно которое имеет свои уникальные данные которые подсказывают что вложенное окно открылось = объект найдет и открыт.

единственная проблема - объектов достаточно много... и просто рыскать по экрану в поисках "открылось или нет" весьма медленно.

покопался в хелпе - и нашёл функцию - PixelSearch

она великолепно и ОЧЕНЬ быстро нашла нужный цвет( один из 4х нужных), но тут обнаружились сразу 2 проблемы:

а) таких цветов может быть несколько и мне надо найти все (по возможности сохранить)
б) похоже функция PixelSearch ищет по Х-оси сначала..

вопрос1: можно ли как-то найти Следующий/ВСЕ пиксели нужного цвета?
вопрос2: можно ли "заставить" функцию PixelSearch - искать по Y-оси?

заранее спасибо.
 
Последнее редактирование:

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
можно ли как-то найти Следующий/ВСЕ пиксели нужного цвета?
На форуме можно найти различные реализации.

можно ли "заставить" функцию PixelSearch - искать по Y-оси?
Направление поиска определяется координатами. Читайте примечания в справке по функции.
 
Автор
J

JohnWind

Новичок
Сообщения
57
Репутация
0
На форуме можно найти различные реализации.
"обожаю" ответы в духе "ищите лучше - в интернете есть всё"...
если вам не сложно - поделитесь линком на конкретный топик где реализовано то, что мне надо.
Направление поиска определяется координатами. Читайте примечания в справке по функции.
спасибо... уже прочитал... и опробовал.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
ищите лучше - в интернете есть всё
А разве не так? Или думаете, что вы первый, кому пришла в голову идея получить массив пикселей? :wink:

Сообщение автоматически объединено:

можно ли "заставить" функцию PixelSearch - искать по Y-оси?
Когда-то делал _PixelSpiralSearch: поиск по спирали :cool:
 
Последнее редактирование:
Автор
J

JohnWind

Новичок
Сообщения
57
Репутация
0
А разве не так? Или думаете, что вы первый, кому пришла в голову идея получить массив пикселей? :wink:
или я "слишком умный"... или... на этом мысль обрывается (с)

включил вечный цикл, поставил внутрь: Local $aCoord = PixelSearch(488, 862, 1415, 320, 0x4EB73C)

в случае нахождения сохраняю $aCoord[0] и $aCoord[1] в переменные
и на последок добавил проверку на повторяемость... и в случае не нахождения вовсе или не нахождения уникального - ExitLoop

всё работает штатно... пока что...
не претендую на звание автора самого изящного кода... но получилось как-то так...
Код:
$aaa = 0

While True

   Local $aCoord = PixelSearch(488, 862, 1415, 320, 0x4EB73C)

;~     0x237DD6 - blue event
;~     0x4EB73C - green event
;~     0xC358D4 - purple event
;~     0xCF63DE - purple event №2
;~     0xC58405 - gold event

    If Not @error Then

            $x0 = $aCoord[0]
            $y0 = $aCoord[1]

            If ($x0 <> $x1) and ($x0 <> $x2)  Then ;~ ограничился поиском 2х объектов с нужным цветом
            $aaa +=1

                    MouseMove($aCoord[0], $aCoord[1])  ;~ двигаем мышку к объекту чтоб убедиться зрительно что это нужный
                    Sleep (1000)
                    ConsoleWrite("Координата пикселя = " & $x0 & "," & $y0 & @CRLF) ; пишем в консоль в каких координатах нашли нужный пиксель

                    Switch $aaa
                        Case 1
                            $x1 = $x0
                            $y1 = $y0
                        Case 2
                            $x2 = $x0
                            $y2 = $y0
                        Case Else
                            ExitLoop
                    EndSwitch
            Else
                MsgBox(0, "END", "No more")
                MsgBox(0, "Calc total runs", $aaa)
                ExitLoop

            EndIf

    Else
          if $aaa <> 0 Then ;~ добавил защиту от неверного сообщения при нахождении только 1го объекта нужного цвета
                   MsgBox(0, "END", "No more")
                    MsgBox(0, "Calc tital", $aaa)
          Else
                    MsgBox(0, "FAIL", "Not found")
          EndIf

          ExitLoop

    EndIf

WEnd
 
Последнее редактирование:
Верх