質問

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つしかないことを意味します。

  1. 赤は最大のコンポーネント、緑は次に大きいコンポーネントgtです。 rgb(255、[0-255]、0)
  2. 赤は最大のコンポーネント、青は次に大きいコンポーネントgtです。 rgb(255,0、[0-255])
  3. 緑が最大の構成要素であり、赤が次に大きな構成要素です。 rgb([0-255]、255,0)
  4. 緑が最大の構成要素であり、青が次に大きな構成要素です。 rgb([0-255]、0,255)
  5. 青が最大のコンポーネント、赤が次に大きい=&gt。 rgb([0-255]、0,255)
  6. 青は最大のコンポーネント、緑は次に大きいコンポーネント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) {
   .
   .
   .
}

問題の解決に役立つことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top