「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 色配列で最も近い色を見つける方法は?

色配列で最も近い色を見つける方法は?

2025-03-23に投稿されました
ブラウズ:379

How to Find the Closest Color in a Color Array?

アレイで最も近い色を決定する

色を比較し、アレイ内の最も近い一致を識別することは、グラフィックスアプリケーションで一般的なタスクです。この記事では、これを達成するために3つの異なる方法を調べます。色相のみの比較:

この方法は、飽和と明るさを無視して、色の色合いのみを考慮します。色相距離は単純な減算を使用して計算され、最も近い色相は最小距離を見つけることによって決定されます。 rgb距離:

この方法は、色のRGB値間の直接距離を測定します。色の差は、RGB空間のユークリッド距離として計算され、この違いを最小限に抑えることで最も近い色が見つかります。重み付き色相、飽和、および明るさの比較:

この方法は、色合い、飽和、および明るさを加重方法で組み合わせます。知覚された明るさが計算され、飽和と明るさに基づいて色の数が計算されます。最も近い色は、色の差と色相距離の加重合計を最小化することによって決定されます。 int coldestcolor1(list 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距離比較 int coldestcolor2(list colors、color Target) { var colordiffs = colors.select(n => colordiff(n、ターゲット))。min(n => n); colors.findindex(n => colordiff(n、ターゲット)== colordiffs); } //加重色相、飽和、および明るさの比較 int coldestcolor3(list colors、color Target) { float hue1 = target.gethue(); var num1 = colornum(ターゲット); var diffs = colors.select(n => math.abs(colornum(n)-num1)gethedistance(n.gethue()、hue1)); var diffmin = diffs.min(x => x); return diffs.tolist()。findindex(n => n == diffmin); }

ヘルパー機能

//知覚される色の明るさ: Float GetBrightness(Color C)=>(C.R * 0.299F C.G * 0.587F C.B * 0.114F) / 256F; // 2つの色相間の距離: float gethuedistance(float hue1、float hue2)=> math.abs(hue1 -hue2)> 180? 360 -math.abs(hue1 -hue2):math.abs(hue1 -hue2); //飽和と明るさによって計量されています: float colornum(color c)=> c.getSaturation() * factorsat getbrightness(c) * factorbri; // RGBスペースの距離: int colordiff(color c1、color c2)=>(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)色距離メトリックの選択は、特定のアプリケーションによって異なります。色相が主な考慮事項である場合、色相のみの比較で十分です。より一般的な色のマッチングのために、RGB距離または加重色相、飽和、および明るさの比較方法は、より正確な結果を提供します。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3