我不确定这是否可能,因为我已经寻找了几个小时,但找不到我要找的东西。
我正在做的是从半透明的游戏面板中获取颜色,因此我所获取的颜色总是在微妙地变化。需要的是一种方法来检查它是否与我想要的颜色相差 +/- 10 左右。
类似如果 color1 是 0x 的 +/-10?
我尝试过使用图像搜索来执行类似的操作,但没有成功。
任何帮助将不胜感激
除了罗伯特的答案之外,您还可以通过数学方式比较颜色。
首先从分离红色、绿色和蓝色值开始。
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)