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

1 autohotkey getpixel

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

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

类似如果 color1 是 0x 的 +/-10?

我尝试过使用图像搜索来执行类似的操作,但没有成功。

任何帮助将不胜感激

Bri*_*and 5

除了罗伯特的答案之外,您还可以通过数学方式比较颜色。

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

ToRGB(color) {
    return { "r": (color >> 16) & 0xFF, "g": (color >> 8) & 0xFF, "b": color & 0xFF }
}
Run Code Online (Sandbox Code Playgroud)

然后我们需要一个比较颜色的函数。每个变量都保存一个数字,表示两个颜色值的差异。例如,如果红色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
}
Run Code Online (Sandbox Code Playgroud)

以下是它的使用方法。我们获取一些数字,然后将它们与默认范围 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
Run Code Online (Sandbox Code Playgroud)