2016-04-22 10 views
1

私は周期表の各要素が異なる色を持つ周期表を持つアプリケーションを開発しています。今私は、ユーザーがピッカーから色を選択し、私は周期表で選択された色をマッチし、それに対応する要素を表示するユーザーに色の選択を表示しています。私はピッカーから色を選択し、2つの色を一致させる方法を知っています。私の質問は、周期表の要素が#FF0000の赤色で、ユーザーが赤い色を正確に同じ赤色のコード(#FF0000)ではないと仮定しています。この場合、ユーザーがピッカーから正確な色を選択することはほとんどありません。彼はわずかに異なるコードで同様の赤色を選ぶかもしれません。だから私はこの場合どのように一致します。 RGBのすべての怒りの中で赤色または特定の色を一致させる方法があるので、ユーザーがその範囲内の任意の色を選択すると、その色をテーブル内の任意の色に一致させることができます。RGBを使用して2つのほぼ同じマッチの色を一致させる方法

答えて

1

手順1:ユーザーが選択した3色のRGB値を抽出します。

int colorSelected = Color.RED; //#FF0000 
int r = (colorSelected >> 16) & 0xFF; //255 
int g = (colorSelected >> 8) & 0xFF; //0 
int b = (colorSelected >> 0) & 0xFF; //0 

ステップ2:周期律表の各色について、ステップ1を繰り返し、そして各値が範囲内

int currentCellColor = getCellColor(); //Let's say #FF0100 
int currentRed = (currentCellColor >> 16) & 0xFF; //255 
int currentGreen = (currentCellColor >> 8) & 0xFF; //0 
int currentBlue = (currentCellColor >> 0) & 0xFF; //0 
if (((currentRed >= (r - threshold)) && (currentRed <= (r + threshold)) 
    && ((currentGreen >= (g - threshold)) && (currentGreen <= (g + threshold)) 
    && ((currentBlue >= (b - threshold)) && (currentBlue <= (b + threshold))) { 
    //CurrentColor is within the desired threshold 
} else { 
    //CurrentColor is not within the desired threshold 
} 
であることを一致:あなたの閾値

int threshold = 15 

ステップ3を定義

技術的には、カラースペクトルは線形ではないと考えられますが、このように近似すると良いでしょう。さらなる研究のためには、まずあなたがintにそのhexacodeを変換することができ、あなたがこのような何かを行うことができ

https://en.wikipedia.org/wiki/Color_difference

+0

感謝ニコラスに役立ちます。 私が考えることができる閾値の最大範囲は何でしょうか。 0-255または0-100の間ですか。 –

+0

私が書いた例では、各色が0から255の範囲に変換されます。私はあなたの実装の残りの部分を知らないが、私はあなたが10と20の間のしきい値で "正しい"結果を期待できると言うだろう。明らかに、これはあなたが行ったことに応じていくつかの微調整が必​​要な場合があります:) – NSimon

0

を閲覧することができます。いくつかの範囲、例えば20と設定します。両方の色のためにヘキサから得たintを比較してください。例えば、差が範囲20より大きい場合、非常に近いマッチングは存在しない。それが20未満であれば、非常に近いマッチングである。

私はあなたが結果として整数を取得した後、第2色の整数を取得し、両方の数字をint型の比較、

unsigned result = 0; 
NSScanner *scanner = [NSScanner scannerWithString:@"#FF0000"]; 

[scanner setScanLocation:1]; // bypass '#' character 
[scanner scanHexInt:&result]; 

NSLog(@"result :%d",result); 

をヘキサで数を変換するためにObjective Cのコードを書いています。数字があなたの設定された範囲に応じて十分に近い場合、そうでなければ一致する色になります。

「ヘキサコードは、それが無視できるほどの違いがある場合は、すべての色のため、常にユニークその後もなります」

希望これは私が実装し、私のフィードバックを送信しようとします。.. :)

関連する問題