【发布时间】:2013-01-21 19:45:28
【问题描述】:
我想写一个函数来检查颜色是否接近背景色。
为此,我使用了 HSL 配色方案,让我解释一下; HSL 颜色定义为色相饱和度和亮度。简而言之,色调告诉您使用了彩虹的哪种颜色以及它在 0 到 360 的范围内。我想检查一下它的色调。
所以饱和度颜色有多强,比如纯灰色还是混合灰色 或不言自明的轻量级。我只想检查色调。 一开始我写了一个 Near 函数是这样的:
Private boolean Near(int background, int mycolor, int difference)
{
if(math.abs( background - mycolor)<difference){return true;}else{return false}
}
后来我意识到这是错误的。因为 HSL 就像你在下面看到的图像,颜色是一个圆圈,所以从红色 0 开始,在 360 处再次变为红色。 所以色相值 358 和 4 很接近,上面的函数不会反映这一点。
(饱和度到中心 0..100 减轻 0..100 就像上升或下降 色相从 0 到 360 度左右。 )
我可以用大的 if then 构造重写一个函数,例如,如果红色 5 和允许的差异为 20 的背景,那么mycolor 将在范围内,如果它是 (360 -(5-20)) .. 如果色相差异超过 0 或 360 限制,请进行特殊构造。
好吧,那会起作用,但后来我想知道是否有可能用单行中的模计算替换这种“如果那么”构造?,这让我仍然想知道 由于模计算可用于检查边界内,如果它超过 360 的边界,它将再次变为红色,接近于零,
我想是的,这样的行也可能包含一些 AND 或 OR 以及减法或 ABS 函数..是否可以将其写在一个比较行中?
【问题讨论】: