如何确定颜色是否在阴影范围内

时间:2013-06-01 12:52:13

标签: autohotkey getpixel

我不确定这是否可行,因为我一直在寻找几个小时而无法找到我要找的东西。

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

喜欢的东西 如果color1是0x的+/- 10?

我尝试使用图片搜索来做类似的但是没有用。

非常感谢任何帮助

2 个答案:

答案 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之间的任何像素。希望这会有所帮助,但是匹配透明色很难并且容易出错。图像和搜索范围越小越好(和更快)