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 の色空間間の変換が役立つ場合があります。