Переделал для двух цветов, по умолчанию - белый и черный. В paint.net работает.
"Подгонка" 3-мя ступенями, сначала с шагом s2 (25 пикселей), затем с шагом s1 (5 пикселей), и потом с точностью до 1 точки, так должно чуть быстрей.
Насчет "одновременно искать в 4-х направлениях", в теории возможно с запуском одновременно 4-х копий, с передачей им параметров и приемом результатов, на практике все будет более громоздко и не гарантирует большого прироста к скорости.
SetBatchLines -1
s2 := 25, s1 := 5
!lbutton::
keywait,lbutton,t
MouseGetPos,x,y
x1:=f(f(f(x,y,"x",-s2),y,"x",-s1),y,"x",-1)
y1:=f(x,f(x,f(x,y,"y",-s2),"y",-s1),"y",-1)
x2:=f(f(f(x,y,"x",s2),y,"x",s1),y,"x")
y2:=f(x,f(x,f(x,y,"y",s2),"y",s1),"y")
MouseClickDrag,Left,x1,y1,x2,y2,0
return
f(x:=0,y:=0,o:="x",d:=1,c1:=0xffffff,c2:=0x000000)
{
dx := (o="x") ? d : 0, dy := (o="y") ? d : 0
while (color!=c1) && (color!=c2) && (x > 0) && (x < A_ScreenWidth)&& (y > 0) && (y < A_ScreenHeight) {
x+=dx, y+=dy
PixelGetColor,color,x,y
tooltip,O,x+5,y+5
}
tooltip
return (o="x") ? x-dx : y-dy
}
Со сменой цвета (цветов):
SetBatchLines -1
s2 := 25, s1 := 5
c1:=0xffffff,c2:=0x000000
Return
!lbutton::
keywait,lbutton,t
MouseGetPos,x,y
x1:=f(f(f(x,y,"x",-s2,c1,c2),y,"x",-s1,c1,c2),y,"x",-1,c1,c2)
y1:=f(x,f(x,f(x,y,"y",-s2,c1,c2),"y",-s1,c1,c2),"y",-1,c1,c2)
x2:=f(f(f(x,y,"x",s2,c1,c2),y,"x",s1,c1,c2),y,"x",1,c1,c2)
y2:=f(x,f(x,f(x,y,"y",s2,c1,c2),"y",s1,c1,c2),"y",1,c1,c2)
MouseClickDrag,Left,x1,y1,x2,y2,10
return
#1:: ; Смена 1 цвета
MouseGetPos,x,y
PixelGetColor,c1,x,y
Return
#2:: ; Смена 2 цвета
MouseGetPos,x,y
PixelGetColor,c2,x,y
Return
f(x:=0,y:=0,o:="x",d:=1,c1:=0xffffff,c2:=0x000000)
{
dx := (o="x") ? d : 0, dy := (o="y") ? d : 0
while (color!=c1) && (color!=c2) && (x > 0) && (x < A_ScreenWidth)&& (y > 0) && (y < A_ScreenHeight) {
x+=dx, y+=dy
PixelGetColor,color,x,y
tooltip,O,x+5,y+5
}
tooltip
return (o="x") ? x-dx : y-dy
}