PixelSearch

优质
小牛编辑
130浏览
2023-12-01

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

PixelSearch, OutputVarX, OutputVarY, X1, Y1, X2, Y2, ColorID [, Variation, Fast|RGB]

参数

OutputVarX/Y

用来保存首个匹配 ColorID 像素的 X 和 Y 坐标 (如果没有发现匹配, 则此变量被置空). 坐标相对于活动窗口, 除非曾使用 CoordMode 改变了这个设置.

其中一个或两个参数都可以留空, 此时可以使用 ErrorLevel (请参阅下面) 来判断是否找到了匹配.

X1, Y1

要搜索的矩形区域的左上角的 X 和 Y 坐标, 可以为 表达式. 坐标相对于活动窗口,除非曾使用 CoordMode 改变了这个设置

X2, Y2

要搜索的矩形区域的右下角的 X 和 Y 坐标, 可以为 表达式. 坐标相对于活动窗口, 除非曾使用 CoordMode 改变了这个设置.

ColorID

要搜索的十进制或十六进制的颜色 ID, 使用蓝绿红 (BGR) 格式, 可以为 表达式. 颜色 ID 可以使用 Window Spy (可从托盘菜单打开) 或 PixelGetColor 来确定. 例如:0x9d6346

Variation

一个介于 0 和 255 (包含的) 之间的数字, 用于表示此颜色红/绿/蓝成分强度在每个方向上允许的渐变值 (可以为 表达式). 此参数用于需要寻找的颜色渐变值可能变化时. 如果指定 255 为浮动的渐变值, 则匹配所有颜色. 默认渐变值为 0.

Fast|RGB

此参数可以包含单词 Fast, RGB 或同时包含两者 (同时包含两者时它们之间请用空格分隔; 即 Fast RGB).

Fast: 使用快速的搜索方法, 在大多数情况下此方法可以明显减少搜索时消耗的 CPU 时间. 尽管此方法支持颜色深度低至 8 位 (256 色), 不过在 24 位或 32 位颜色深度下此快速模式执行地更好. 如果屏幕的颜色深度为 16 位或更低, 则 Variation 参数在慢速模式和快速模式的行为可能有轻微的差异. 最后, 快速模式按行搜索屏幕 (从上往下) 而不是按列. 因此, 如果屏幕上有多个匹配的像素, 则快速模式可能找到一个和慢速模式不同的像素.

RGB: 把 ColorID 解释为 RGB 值而不是 BGR. 即交换了其中的红色和蓝色的成分.

ErrorLevel

[v1.1.04+] 此命令在搜索遇到问题时会抛出异常. 想了解更多信息, 请参阅 运行时错误.

如果在指定的区域找到指定的颜色, 则 ErrorLevel 被设置为 0, 没有找到则为 1, 而如果在命令执行过程中遇到问题使搜索无法进行则为 2.

备注

要搜索的目标区域必须是可见的; 换句话说, 无法搜索隐藏在其他窗口背后的窗口区域. 与之相比, 鼠标光标下方的像素颜色通常可以检测出来. 例外情况是游戏的指针, 在大多数情况下它会隐藏在它下方的任何像素.

对于慢速模式: 默认情况下从区域左上角的像素开始搜索, 在垂直方向上检查下面所有像素以寻找匹配. 如果没有找到匹配, 则继续往右逐列搜索, 直到找到一个匹配的像素. 通过交换参数列中 X1X2 的位置, 可以使默认的从左往右搜索反向进行. 换句话说, 如果 X1 大于 X2, 搜索会从右往左进行, 从 X1 开始. 同样地, 如果 Y1 大于 Y2, 则从区域底部而不是顶部开始搜索每列像素. 最后, 当需要搜索的目标区域很大而且快速的重复搜索, 这可能会占用大量的 CPU 时间. 为了减轻这种情况, 请保持目标区域的大小为最小值.

相关

PixelGetColor, ImageSearch, CoordMode, MouseGetPos

示例

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