2016-08-12 10 views
0

私は色を比較するための闘争を続けてきました。あまりにも光っているだけで私はちょうど言うことができるようになりたい、これは青、または紫、またはオレンジなどの色合いである必要はありません。色を比較する良い方法はありますか?

私がオンラインで試したソリューションの中には、Colorオブジェクト.ToArgb()をキャストし、その値が対応する値よりも大きいか小さいかをチェックしています。だから何かのようにif (Color.ToArgb() < -13107000 && Color.ToArgb() > -15000000) // Color is blueish

しかし、これは非効率的であることが判明している。いくつかのカラーチャートがない限り、私はこれらの値をどこで簡単に見つけることができないのか分かりません。私はまったく間違った方向に指摘されていますか? C#で色を適切に比較する方法を教えてください。

+1

あなたがここで何を求めているのかははっきりしません。 「青」とは何ですか?いつ青は止まり、青緑に戻りますか? –

+0

2^24色がありますので、ありがたいことにすべての名前が付けられていません。あなたがADAでコーディングしている場合は、おそらくすべてが名前を持っています。とにかく、陰影が主観的になるので、私は自分の定数を作り、それを適用することをお勧めします。 – nicomp

+1

定義した色をあらかじめ決めておくか(システムの色のような色のセットを使用)、テストカラーと各セットのユークリッド距離を計算します。 – jdphenix

答えて

0

青の「陰影」のしきい値を視覚的に整数値に変換する方法を探していました。このチャートと少しのC#コードと@jdphenixの提案を使用して、私はこれを実行できます。 2つ置く

enter image description here

private Color FromHex(string hex) 
    { 
     if (hex.StartsWith("#")) 
      hex = hex.Substring(1); 

     if (hex.Length != 6) throw new Exception("Color not valid"); 

     return Color.FromArgb(
      int.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber), 
      int.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber), 
      int.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber)); 
    } 

  // Starting blue threshold, or whatever your desired threshold is 
      Color BlueLowThreshold = FromHex("#00B4FF"); 
      int blueLowThreshold = BlueLowThreshold.ToArgb(); 
      // Ending blue threshold, or whatever your desired end threshold is 
      Color BlueHighThreshold = FromHex("#5000FF"); 
      int blueHighThreshold = BlueHighThreshold.ToArgb(); 

をご提案いただきありがとうございます。

関連する問題