# PixelSearch

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

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

## 参数

OutputVarX, OutputVarY

  用来保存首个匹配 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(包含的) 之间的数字, 用于表示此颜色红/绿/蓝成分强度在每个方向上允许的渐变值(可以为表达式). 例如, 如果指定值为 2 并且 ColorID 为 0x444444, 那么从 0x424242 到 0x464646 的任何颜色都将被视为匹配. 此参数用于需要寻找的颜色渐变值可能变化时. 如果指定 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] 之前, 快速模式要求 X1 和 Y1 位于左上角.

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

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

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

## 相关

PixelGetColor, ImageSearch, CoordMode, MouseGetPos

## 示例

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

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

dftg