我不确定这是否可行,因为我一直在寻找几个小时而无法找到我要找的东西。
我正在做的是从半透明的游戏面板中获取颜色,因此我所采用的颜色总是在微妙地改变。我们需要一种方法来检查它是否是我想要的颜色的+/- 10左右。
喜欢的东西 如果color1是0x的+/- 10?
我尝试使用图片搜索来做类似的但是没有用。
非常感谢任何帮助
答案 0 :(得分:4)
除了罗伯特的回答,您还可以用数学方式比较颜色。
首先分开红色,绿色和蓝色值。
ToRGB(color) {
return { "r": (color >> 16) & 0xFF, "g": (color >> 8) & 0xFF, "b": color & 0xFF }
}
然后我们需要一个比较颜色的功能。每个变量都包含一个数字,表示两个颜色值的差异。例如,如果c1中的红色为255
,而c2中为200
,则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
答案 1 :(得分:0)
我假设您阅读了有关PixelGetColor的限制:已知限制:
“部分透明的窗口或其中一种颜色标记为不可见的窗口(TransColor)通常会为窗口后面的窗口而不是自己的窗口生成颜色。 PixelGetColor可能无法为某些应用程序生成准确的结果。如果发生这种情况,请尝试在最后一个参数中指定单词Alt或Slow。“
使用ImageSearch时,您可以指定颜色的增量。示例:
ImageSearch, FoundX, FoundY, %SearchRangeLeft%, %SearchRangeTop%, %SearchRangeRight%, %SearchRangeBottom%, *20 %ImageFile%
此处 * 20 表示我的搜索颜色范围为0到255之间的变化。当搜索100,100,100(RGB)图像内的像素时,它将匹配80,80,80和120,120,120之间的任何像素。希望这会有所帮助,但是匹配透明色很难并且容易出错。图像和搜索范围越小越好(和更快)