本帖最后由 iftodo 于 2009-8-19 03:55 编辑
嗯,这个问题在按键精灵论坛里也是个比较热门的话题.
一般的思路呢,先找第一遍,得到当第一个指定颜色的坐标. 再用此坐标和原区域右下角X,Y构成一个新的区域. 在这个新的区域里找第二个指定颜色的坐标.. 依次类推,直到遍历完整个区域...
还有一种就是把整个区域的颜色值保存到一个数组里,然后跟目标颜色依次对比.
下面我写了一段. 可以返回找到的数量,找到的每个点的坐标HotKeySet("{F9}", "test")
While True
Sleep(10)
WEnd
Func test()
Local $Result
$Result = FindAllColor(517, 241, 548, 254, "16777215")
If $Result[0][0] <> 0 Then
For $i = 1 To $Result[0][0] Step +1
MouseMove($Result[$i][0], $Result[$i][1], 0)
Sleep(10)
Next
Else
ConsoleWrite("在指定区域未找到目标颜色. " & @CR)
EndIf
EndFunc ;==>test
Func FindAllColor($iLeft, $iTop, $iRight, $iBottom, $iColor)
Local $Rnum[1][1], $s = 0
For $Top = $iTop To $iBottom Step +1
For $Left = $iLeft To $iRight Step +1
$Color = PixelGetColor($Left, $Top)
ConsoleWrite($Color & @CR)
If $Color = $iColor Then
$s += 1
ReDim $Rnum[$s + 1][2]
$Rnum[$s][0] = $Left
$Rnum[$s][1] = $Top
EndIf
Next
Next
$Rnum[0][0] = $s
Return $Rnum
EndFunc ;==>FindAllColor
|