0
我有一个代码可以根据RGB差异获得最接近的颜色,但是深蓝色等深色,它会返回黑色而不是“深蓝色”。你们能帮我弄清楚发生了什么吗?如何使用C#中两种颜色之间的rgb差异来找到最接近的匹配?
这是计算两个颜色之间的RGB差异代码:
int ColorDiff(Color c1, Color c2)
{
return (int)Math.Sqrt((c1.R - c2.R) * (c1.R - c2.R)
+ (c1.G - c2.G) * (c1.G - c2.G)
+ (c1.B - c2.B) * (c1.B - c2.B));
}
此代码获取列表中最接近的颜色(即具有RGB之间差异较小的一个):
int encontrarCor(List<Color> colors, Color target)
{
var colorDiffs = colors.Select(n => ColorDiff(n, target)).Min(n => n);
return colors.FindIndex(n => ColorDiff(n, target) == colorDiffs);
}
我认为,正如你在第一个代码中看到的那样:(c1.R - c2.R)*(c1.R - c2.R),所以如果其中一个基底等于0 ,整个产品将为0,因此返回黑色,导致黑色RGB代码为0,0,0。
我试图让自己变得尽可能清楚,对不起,如果有点困惑。
您需要手动计算这些颜色之间的*距离* - 也许,它实际上更接近黑色而不是深蓝色。如果您希望我们提供您,那么您需要提供以下信息:“深蓝色”标准的RGB;颜色的RGB示例,当您希望它变成深蓝色时会导致黑色。 –
您的描述与代码不匹配......如果其中一个颜色差异= 0,则该通道的差值为0,这是正确的,没有差别。这0完全不用于颜色。然后奇怪地再次这样做,所以它可以找到具有最低差异的颜色索引 –
*“因此,如果其中一个基底等于0,则整个产品将是0”* - 错误。你没有使用颜色分量的距离的产品,你总结一下。如果其中一个计算为零,则总和仍然可以不为零。 –