PixelSearch

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

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

参数

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.

Mode

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

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

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

错误处理

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

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

备注

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

搜索顺序取决于参数的顺序. 换句话说, 如果 X1 大于 X2, 搜索会从右往左进行, 从列 X1 开始. 类似地, 如果 Y1 大于 Y2, 则从下到上进行搜索. 然而, 在 [v1.1.32] 之前, 快速模式要求 X1Y1 位于左上角.

快速模式: 搜索从 X1Y1 指定的坐标开始, 并检查从 X1X2 行中的所有像素是否匹配. 如果在该处找不到匹配项, 则搜索将逐行继续到 Y2, 直到找到匹配的像素为止.

慢速模式: 搜索从 X1Y1 指定的坐标开始, 并检查从 Y1Y2 列中的所有像素是否匹配. 如果在该处找不到匹配项, 则搜索将逐列继续到 X2, 直到找到匹配的像素为止.

如果要搜索的区域很大, 并且以高频率重复搜索, 则可能会占用大量的 CPU 时间. 为了减轻这种情况, 请将区域的大小保持最小.

相关

PixelGetColor, ImageSearch, CoordMode, MouseGetPos

示例

#1

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%.