質問
1つのRGB値の値から色の範囲を見つけたい
たとえば、rgb(0,100,200)が与えられた場合、rgb(0,0,255)とrgb(0,255,255)の間のすべてが得られます。ただし、rgb(255,0,255)ではありません。
同様にrgb(150,50,0)。戻り値:rgb(255,0,0)およびrgb(255,255,0)。 rgb(255,0,255)ではありません。
理にかなっていますか
PHPを使用しています
解決
説明するアルゴリズムは基本的に次のとおりです。"色は2つのRGBコンポーネントで構成されます。最も強いRGBコンポーネントをS、他のコンポーネントをOとしましょう。Sを(255)、Oの範囲を0〜255にする255個のバリエーションを作成します。"
E.g。以下の例はすべて同じ結果になります。
a) rgb(0,100,200)
b) rgb(0,199,200)
c) rgb(0,254,255)
d) rgb(0,1,2)
Result: rgb(0,[0-255],255)
これは、バリエーションが6つしかないことを意味します。
- 赤は最大のコンポーネント、緑は次に大きいコンポーネントgtです。 rgb(255、[0-255]、0)
- 赤は最大のコンポーネント、青は次に大きいコンポーネントgtです。 rgb(255,0、[0-255])
- 緑が最大の構成要素であり、赤が次に大きな構成要素です。 rgb([0-255]、255,0)
- 緑が最大の構成要素であり、青が次に大きな構成要素です。 rgb([0-255]、0,255)
- 青が最大のコンポーネント、赤が次に大きい=&gt。 rgb([0-255]、0,255)
- 青は最大のコンポーネント、緑は次に大きいコンポーネントgt。 rgb(0、[0-255]、255)
アルゴリズムの意図は明確ではないので、ユースケースは実際にあなたが説明したものとは異なると推測しています。 1つまたは3つのコンポーネントの色は処理しません(実際にはほとんどの色)。
同様の色(特定の距離にある色など)を見つけることが目的の場合、より良いアプローチがあります。たとえば、色をHSV色空間(色相、彩度、明度)に変換し、H、S、またはVのいずれかのコンポーネントがオリジナルから+/- 10ステップの場合、色が似ていると言うことができます。
例:
rgb(255,100,0)=> hsv(24,100,100)
範囲はhsv([14-34]、[90-110]、[90-110])
です。他のヒント
うーん、私はこれを正しく理解しているかはわかりませんが、数字の1つは他の2つよりも大きく、値の1つは常にゼロであると言っていると思います。この場合、次のような単純なif-elseステートメントを使用できるはずです
if (r > g && r > b) {
if (g > 0) {
color1 = rgb(255, 0, 0);
color2 = rgb(255, 255, 0);
}
else {
color1 = rgb(255, 0, 0);
color2 = rgb(255, 0, 255);
}
}
else if (r < g && g > b) {
.
.
.
}
問題の解決に役立つことを願っています。