ホームページ >バックエンド開発 >C++ >カラー配列内で最も近いカラーマッチを見つけるにはどうすればよいですか?

カラー配列内で最も近いカラーマッチを見つけるにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-31 09:58:12431ブラウズ

How Can I Find the Closest Color Match in a Color Array?

配列内の最も近いカラー マッチ

色の配列と個別の Color オブジェクトが与えられた場合、タスクはその中で最も近いカラー マッチを決定することです。配列を指定された色に変換します。色の距離は主観的な概念であり、それを定量化するさまざまな方法があります。

色相のみの方法

この方法は、彩度を無視し、色の色相のみに焦点を当てます。そして明るさ。候補色と指定された色の色相間の絶対差を計算します。色相の差が最も小さい候補色が選択されます。

int closestColor1(List<Color> colors, Color target)
{
    var hue1 = target.GetHue();
    var diffs = colors.Select(n => getHueDistance(n.GetHue(), hue1));
    var diffMin = diffs.Min(n => n);
    return diffs.ToList().FindIndex(n => n == diffMin);
}

RGB 空間メソッド

このメソッドは、RGB 空間での色の間の直接距離を測定します。候補色の R、G、B 成分と指定された色の間のユークリッド距離を計算します。距離が最も小さい候補色が選択されます。

int closestColor2(List<Color> colors, Color target)
{
    var colorDiffs = colors.Select(n => ColorDiff(n, target)).Min(n => n);
    return colors.FindIndex(n => ColorDiff(n, target) == colorDiffs);
}

重み付け方法

この方法では、色の色相、彩度、明度の成分に重みを割り当てます。色相の差と彩度と明度の重み付けされた組み合わせを組み合わせて、重み付けされた距離を計算します。重み付けされた距離が最小の候補色が選択されます。

int closestColor3(List<Color> colors, Color target)
{
    float hue1 = target.GetHue();
    var num1 = ColorNum(target);
    var diffs = colors.Select(n => Math.Abs(ColorNum(n) - num1) + getHueDistance(n.GetHue(), hue1));
    var diffMin = diffs.Min(x => x);
    return diffs.ToList().FindIndex(n => n == diffMin);
}

要件に基づいて、アプリケーションに最適な方法を選択できます。

以上がカラー配列内で最も近いカラーマッチを見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。