0
RGBの差に基づいて最も近い色を取得するコードがありますが、濃い青色のような暗い色では、「濃い青色」の代わりに黒を返します。何が起こっているのかを知ってもらうことができますか?最も近い一致を見つけるために、C#の2つの色の間のrgbの違いを使用する方法?
これは、2つの色の間で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)です。したがって、これらの基板の1つが0 、製品全体が0になるので、黒を返すので、黒のRGBコードは0,0,0になります。
私はできるだけ明確にしようとしましたが、少し混乱してもごめんなさい。
これらの色の間の距離*を手動で計算する必要があります。おそらく、濃い青色よりも黒に近いかもしれません。私たちがあなたに恋したいなら、次の情報を提供する必要があります。あなたの「ダークブルー」標準のRGB。暗い青色になることが予想されるときに黒になる色のRGBの例。 –
あなたの説明がコードと一致しません......これらの色のdiff = 0の場合、そのチャンネルの差は0です。これは正しいですが、違いはありません。 0は、まったく色のためではありません。それは奇妙なことにすべてをもう一度行うので、最も低い差のインデックスを見つけることができます –
* "したがって、これらの基材のいずれかが0に等しい場合、製品全体が0になります*" - 間違っています。あなたは色成分の距離の積を使用していないので、それらを合計します。それらのうちの1つがゼロに計算される場合、sumはゼロ以外の値になります。 –