1

我不确定这是否可行,因为我已经找了几个小时但找不到我要找的东西。

我正在做的是从半透明的游戏面板中获取颜色,因此我所采用的颜色总是在微妙地变化。需要一种方法来检查它是否是我想要的颜色的 +/- 10 左右的阴影。

If color1 is +/-10 of 0x?

我曾尝试使用图像搜索来做类似的事情,但没有奏效。

任何帮助将不胜感激

4

2 回答 2

4

除了罗伯特的答案,您还可以在数学上比较颜色。

首先从分离红色、绿色和蓝色值开始。

ToRGB(color) {
    return { "r": (color >> 16) & 0xFF, "g": (color >> 8) & 0xFF, "b": color & 0xFF }
}

然后我们需要一个比较颜色的函数。这些变量中的每一个都包含一个代表两个颜色值差异的数字。例如,如果红色255在 c1 中,而200在 c2 中,rdiff将是55. 我们使用Abs这样我们就不会以-55何时c2具有更高的价值而告终。然后我们确保每一个的差异都小于我们的vary.

Compare(c1, c2, vary=20) {
    rdiff := Abs( c1.r - c2.r )
    gdiff := Abs( c1.g - c2.g )
    bdiff := Abs( c1.b - c2.b )

    return rdiff <= vary && gdiff <= vary && bdiff <= vary
}

这是它的使用方法。我们取一些数字,然后将它们与默认值 20 进行比较。

light_pink := ToRGB(0xFFAAFF)
darker_pink := ToRGB(0xFAACEF)
purple := ToRGB(0xAA00FF)


MsgBox % Compare(light_pink, dark_pink) ; True
MsgBox % Compare(light_pink, purple) ; False
于 2013-06-01T20:50:13.373 回答
0

我假设您阅读了有关 PixelGetColor 的限制:已知限制:

“部分透明的窗口或将其中一种颜色标记为不可见 (TransColor) 的窗口通常会为自身后面的窗口生成颜色,而不是自己的。PixelGetColor 可能不会为某些应用程序产生准确的结果。如果发生这种情况,请尝试指定单词最后一个参数中的 Alt 或 Slow。”

使用 ImageSearch 时,您可以指定颜色的 Delta。例子:

ImageSearch, FoundX, FoundY, %SearchRangeLeft%, %SearchRangeTop%, %SearchRangeRight%, %SearchRangeBottom%, *20 %ImageFile%  

这里*20表示我的搜索颜色在 0 到 255 范围内的变化。当在 100,100,100 (RGB) 图像中搜索像素时,它将匹配 80,80,80 和 120,120,120 之间的任何像素。希望这会有所帮助,但匹配透明颜色很困难并且容易出错。图像和搜索范围越小越好(更快)

于 2013-06-01T13:30:26.187 回答