C# 用于查找基于HSL的颜色是否接近另一种颜色的布尔函数

C# 用于查找基于HSL的颜色是否接近另一种颜色的布尔函数,c#,colors,C#,Colors,我想写一个函数,可以检查颜色是否接近背景色 为此,我使用HSL配色方案,让我解释一下;HSL颜色定义为色调饱和度和亮度。简言之,色调告诉您使用的是彩虹的哪种颜色,其范围在0到360之间。我想检查一下颜色 那么饱和度颜色有多浓,像纯色还是混灰色 或者说,代表自身的轻盈是无法相比的。我只想检查一下色调。 起初,我编写了一个近似函数,如下所示: Private boolean Near(int background, int mycolor, int difference) { if(math.a

我想写一个函数,可以检查颜色是否接近背景色

为此,我使用HSL配色方案,让我解释一下;HSL颜色定义为色调饱和度和亮度。简言之,色调告诉您使用的是彩虹的哪种颜色,其范围在0到360之间。我想检查一下颜色

那么饱和度颜色有多浓,像纯色还是混灰色 或者说,代表自身的轻盈是无法相比的。我只想检查一下色调。 起初,我编写了一个近似函数,如下所示:

Private boolean Near(int background, int mycolor, int difference)
{
  if(math.abs( background - mycolor)<difference){return true;}else{return false}
}
Private boolean Near(int-background、int-mycolor、int-difference)
{

if(math.abs(背景色-mycolor)您需要做的是确保所比较的值尽可能接近。例如,如果
background=358
mycolor=4
,则可以通过从
background
中减去
360
使它们更接近,这不会改变有效值。只要差异>
180

if (mycolor - background > 180) mycolor -= 360;
if (background - mycolor > 180) background -= 360;
通过这些转换,您的原始逻辑应该是正确的(如果不需要
):

返回Math.Abs(background-mycolor)

编辑:我发现一个更简单的表达式似乎是正确的

return Math.Abs(background - mycolor) % (361 - difference) < difference;
return Math.Abs(background-mycolor)%(361-difference)
你写的第一个,我也有类似的想法,我们在那里有相同的想法,最后一个,我很好奇为什么它是361而不是360?@user613326:老实说,我通过反复试验发现了
361
。我想一些使用模的形式可以工作,并编写了一个脚本来比较结果在所有可能输入的原始代码和新代码之间。对于
360
,它是不正确的,但是对于
361
,它是正确的。我没有进一步深入研究它来确定原因。如果0和360都是有效值,那就意味着有361个可能值-这就是为什么mod是361而不是360。如果有,360可以工作只有360个可能的值(即0到359包括在内)@thorkia:它实际上是0到359包括在内。值360在表示什么颜色方面与值0相同。@mellamokb-360可能是相同的颜色,但它是一个有效的值。您可以将颜色值设置为360,然后它要求返回值,它会说360不是0。
return Math.Abs(background - mycolor) % (361 - difference) < difference;