C/C++

AHK поиск по цвету

Приветствую. Помогите с кодом. Нужно в программе AHK прописать определение цвета в радиусе определённом. Дальше если цвет найден, прописать нужную команду далее. Смог только сделать определение цвета в определённом пикселе
Ха Лявкин
Ха Лявкин
184
Не знаю, что получится, но можно брать цвета точек в округе (квадрат, у которого центр - ваша координата) и вычислять нечто вроде среднего по всей округе:
Предположим, что округа в три пикселя, тогда это будет квадрат 5 на 5 точек, итого 25 точек.
Для каждой точки вычисляете отдельно компоненты R, G и B и потом находите по каждой компоненте значение R, G и B среднее арифметическое, например. И потом из этих компонент компоновать цвет, который можно условно считать примерным в этом месте.
Возможно там вам надо будет брать и четвертую компоненту - яркость или прозрачность точки.
Также у вас будут особенности вблизи краев экрана - там некоторых точек просто не будет существовать.или в местах, где граница между разными мониторами.
Андрей Басков
Андрей Басков
68 241
Лучший ответ
Вам нужно создать цикл, который будет проверять цвет каждого пикселя в заданном радиусе от центральной точки. Это немного сложнее, чем просто проверить один пиксель, но вполне возможно. Ниже приведен пример скрипта, который проверяет все пиксели в круге радиусом 50 пикселей вокруг точки (500, 500). Если цвет пикселя соответствует заданному (в этом примере - белому цвету, `0xFFFFFF`), то выполняется некоторое действие.

```AutoHotkey
Radius := 50
CenterX := 500
CenterY := 500
TargetColor := 0xFFFFFF ; Белый цвет

Loop, % Radius*2+1 {
Loop, % Radius*2+1 {
CurrentX := CenterX + A_Index1 - Radius - 1
CurrentY := CenterY + A_Index - Radius - 1
if (CurrentX-CenterX)*(CurrentX-CenterX) + (CurrentY-CenterY)*(CurrentY-CenterY) > Radius*Radius
continue
PixelGetColor, CurrentColor, % CurrentX, % CurrentY
if (CurrentColor = TargetColor) {
MsgBox, Цвет найден на пикселе %CurrentX%, %CurrentY%
; Вместо MsgBox напишите нужную вам команду
return
}
}
}
MsgBox, Цвет не найден
```

Примечание: этот скрипт проверяет цвет каждого пикселя в указанном радиусе, поэтому если радиус слишком большой, скрипт может занять некоторое время. Если вам нужно искать цвет на большой области, возможно, вам стоит взглянуть на команду `ImageSearch`, которая может быть эффективнее для поиска цвета на большой области.
Документация вроде существует, не так ли?
Ха Лявкин так ли. Но нет времени разбираться, а те кто шарят, за 5 минут напишут. Можно проще. Как только на экране появится нужного цвета пиксель, то будет производится действие далее..