2009-10-02 17 views
5

現在のオブジェクトの色に基づいて項目を「選択済み」として強調表示する色を生成しようとしています。私はHSB値のいくつかを増やしてみましたが、一般化された式を思いつくことはできません。特に、私は白で作業するときに問題があります(明るい白は普通の白と大きく違って見えません)。私はそれをより明るくする必要があるという要件はないので、ある種の「逆」色もうまくいくでしょう。このようなことをするための標準的なアルゴリズムやテクニックはありますか(私は「はい」と推測していますが、何も見つかりませんでした - 名前があるかどうかわかりません)。選択色付けアルゴリズム

おかげで、

ジェフ

答えて

3

多分negatif効果:

擬似:

int red = originalColor.red 
int green = originalColor.green 
int blue = originalColor.blue 

int newRed = 255 - red 
int newGreen = 255 - green 
int newBlue = 255 - blue 

Color negativeColor = new Color(newRed, newGreen, newBlue) 

または青の色効果を追加:

int red = originalColor.red 
int green = originalColor.green 
int blue = originalColor.blue 

int newRed = 255 - red 
int newGreen = 255 - green 
int newBlue = 255 - blue + 100 
if newBlue > 255 { 
    newBlue = 255 
    newRed = newRed - 50 
    newGreen = newGreen - 50 
    if newRed < 0 {newRed = 0} 
    if newGreen < 0 {newGreen = 0} 
} 

Color negativeColor = new Color(newRed, newGreen, newBlue) 
+2

(128,128,128)とのコントラストがゼロです。 – recursive

3

一つの技術よあなたはアイテムの前景(テキスト)の色とその背景色を入れ替えることができます。あなたのアイテムのテキストと背景の色が既に好感度を持っている場合、選択したアイテムは引き続き良好に見えるはずです。このサイト上で使用される技術(スタックオーバーフロー)するときにマウスオーバータグあなたのポストである

alt text http://rcartaino.wordpress.com/files/2009/10/selected-tag.png

。 DarkBlue-on-LightBlueからLightBlue-on-DarkBlueに変わります。それを試してみてください。

+0

Robert、これはうまくいくでしょうが、私が扱っているケースは堅実な背景がありません。それは非固体の背景にプロットされたアイテムです。 –

3

HSBを使用している場合は、最大値の半分を上または下に移動してみてください。これは、「反対」の色(補色とも呼ばれます)を与えます。しかし、これは色相がなく、同じように見える灰色のスペクトルには適していません。

色相と明るさの両方でこれを行うと、すべての場合に機能する一種の「ネガティブ」が得られます。真のネガティブは、中間点の周りで明るさの値を「反転」させるでしょうが、中間色のグレーでは機能しません。

色を明るくすることは常に可能ではありません(白で何をしていますか?)ので、コントラストを探している場合は、色相と明るさの両方を半分にシフトすることが最も信頼できます。