PixelSearch

在屏幕某个区域中搜索指定颜色所在的像素.

PixelSearch &OutputVarX, &OutputVarY, X1, Y1, X2, Y2, ColorID , Variation

参数

&OutputVarX, &OutputVarY

类型: VarRef

存储与 ColorID 匹配的第一个像素的 X 和 Y 坐标的变量的引用(如果没有找到匹配的像素, 则变量为空). 除非使用 CoordMode 来改变坐标, 否则坐标是相对于活动窗口的客户端区域.

X1, Y1

类型: 整数

要搜索的矩形区域的起始角的 X 和 Y 坐标. 坐标相对于活动窗口的客户端区域, 除非曾使用 CoordMode 改变了这个设置.

X2, Y2

类型: 整数

搜索的矩形区域的结束角的 X 和 Y 坐标. 坐标相对于活动窗口的客户端区域, 除非曾使用 CoordMode 改变了这个设置.

ColorID

类型: 整数

要搜索的颜色 ID. 通常用红绿蓝(RGB) 格式的十六进制数表示. 例如: 0x9d6346. 颜色 ID 可以通过 Window Spy(可从托盘菜单访问) 或 PixelGetColor 来确定.

Variation

类型: 整数

如果省略, 默认为 0. 否则, 请指定一个介于 0 和 255(包含) 之间的数字, 用于表示每个像素颜色红/绿/蓝通道强度在任一方向上允许的渐变值. 例如, 如果指定值为 2 并且 ColorID 为 0x444444, 那么从 0x424242 到 0x464646 的任何颜色都将被视为匹配. 此参数用于需要寻找的颜色渐变值可能变化时. 如果指定 255 为浮动的渐变值, 则匹配所有颜色.

返回值

类型: 整数(布尔值)

如果在指定的区域内找到了指定颜色, 该函数返回 1(true), 如果没有找到, 则返回 0(false).

错误处理

如果有问题导致函数无法进行搜索, 则抛出 OSError.

备注

要搜索的区域必须是可见的; 换句话说, 不可能搜索隐藏在另一个窗口后面的窗口区域. 相比之下, 鼠标光标下方的像素通常可以被检测到. 游戏光标是个例外, 在大多数情况下, 游戏中的光标会遮挡其下方的任何像素.

虽然支持低至 8 位(256-色) 的颜色深度, 但 PixelSearch 在 24 位或 32 位颜色中的表现要好得多.

搜索从 X1Y1 指定的坐标开始, 并检查 X1X2 这一行的所有像素是否匹配. 如果在那里没有找到匹配的像素, 则继续向 Y2 逐行搜索, 直到找到匹配的像素.

搜索顺序取决于参数的顺序. 换句话说, 如果 X1 大于 X2, 搜索将从右到左, 从 X1 列开始. 同样, 如果 Y1 大于 Y2, 则将从下往上搜索.

如果要搜索的区域比较大而且搜索频率比较高, 可能会消耗大量的 CPU 时间. 为了缓解这种情况, 要尽量减少区域的大小.

PixelGetColor, ImageSearch, CoordMode, MouseGetPos

示例

在活动窗口的区域中搜索一个像素, 并在 PxPy 中存储与指定颜色相匹配(渐变值为 3) 第 1 个像素的 X 和 Y 坐标.

if PixelSearch(&Px, &Py, 200, 200, 300, 300, 0x9d6346, 3)
    MsgBox "A color within 3 shades of variation was found at X" Px " Y" Py
else
    MsgBox "That color was not found in the specified region."