我不确定这是否可行,因为我已经找了几个小时但找不到我要找的东西。
我正在做的是从半透明的游戏面板中获取颜色,因此我所采用的颜色总是在微妙地变化。需要一种方法来检查它是否是我想要的颜色的 +/- 10 左右的阴影。
If color1 is +/-10 of 0x?
我曾尝试使用图像搜索来做类似的事情,但没有奏效。
任何帮助将不胜感激
我不确定这是否可行,因为我已经找了几个小时但找不到我要找的东西。
我正在做的是从半透明的游戏面板中获取颜色,因此我所采用的颜色总是在微妙地变化。需要一种方法来检查它是否是我想要的颜色的 +/- 10 左右的阴影。
If color1 is +/-10 of 0x?
我曾尝试使用图像搜索来做类似的事情,但没有奏效。
任何帮助将不胜感激
除了罗伯特的答案,您还可以在数学上比较颜色。
首先从分离红色、绿色和蓝色值开始。
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
我假设您阅读了有关 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 之间的任何像素。希望这会有所帮助,但匹配透明颜色很困难并且容易出错。图像和搜索范围越小越好(更快)