我想写一个函数来检查颜色是否接近背景颜色。
为此,我使用了 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
如果它 < 5+20 或 > (360-(5-20) ) .. 因此,如果色相差异超过 0 或 360 限制,请进行特殊构造。
好吧,那会起作用,但后来我想知道是否有可能用单行中的模计算替换这种“if then”构造?,这让我仍然想知道因为模计算可用于检查边界内以及它是否在 360 度的边界上,它会再次变成接近零的红色,
好吧,我认为是这样,这样的行也可能包含一些 AND 或 OR 以及减法或 ABS 函数..是否可以将它写在一个比较行中?