1

私は2つのことをしたいと思います:

  1. 2 つの色 (RGB) を比較すると、色が同じ場合は 1、比較対象の色が黒と白のように RGB の反対側にある場合は 0、それらが何らかの形で等しい場合は 0 から 1 の数値が返されます。 (どちらも赤っぽい)
  2. 2 つ以上の色を混ぜて新しい色を生成します。青と黄色を混ぜると緑になり、赤と緑を混ぜると黒になります。

質問: Java API の一部でこのようなことができるものはありますか? そうでない場合、それを容易にするサードパーティのオープン ソース Java ライブラリはありますか?

ありがとう。

4

1 に答える 1

1

1.

色を比較するには、さまざまな方法があります。知覚的な違いが必要な場合は、他のユーザーのコメントをチェックしてください。指示を与える単純なものが必要な場合は、次のコードを使用します。

int rgb1 = ...
int rgb2 = ...
int r, g, b;

r = (rgb1 >> 16) & 0x000000ff;
g = (rgb1 >> 8) & 0x000000ff;
b = rgb1 & 0x000000ff;

r -= (rgb2 >> 16) & 0x000000ff;
g -= (rgb2 >> 8) & 0x000000ff;
b -= rgb2 & 0x000000ff;

double answer = (r*r+g*g+b*b)/(255*255*3.0);

ユークリッド距離を計算し、0 から 1 の範囲にスケーリングします。

2.

色を比較する方法がたくさんあるように、色を組み合わせる方法もたくさんあります。それはあなたが望むものに依存します。平均を取ることもできますが、それはあなたが望むものではありません。結果の色が暗くなるからです。

編集:平均をとるコードは次のとおりです。

r = (rgb1 >> 16) & 0x000000ff;
g = (rgb1 >> 8) & 0x000000ff;
b = rgb1 & 0x000000ff;

r += (rgb2 >> 16) & 0x000000ff;
g += (rgb2 >> 8) & 0x000000ff;
b += rgb2 & 0x000000ff;

int average = ((r/2)<<16)+((g/2)<<8)+(b/2);

多少数学に傾倒している場合は、実際にどのような動作を求めているかを考えて、それを数式 (または、赤、緑、青の 3 つの数式) に入れてみてください。変換するのは難しくありません。数式を Java コードに変換します。

を使用して、個々の r、g、および b 値を単一の rgb 値に戻すことができます。

int rgb = (r<<16) | (g<<8) | b

編集: コンピューターは「red GREEN blue」で動作することに注意してください。ここで、黄色は緑と青の組み合わせであり、その逆ではありません。変換はできますが、まだ行っていません。おそらく、rgb と ryb の色空間間の変換が役立つ場合があります。

于 2012-09-13T15:36:05.723 に答える