2013-10-14 36 views
4

我有一個菜單,從而用戶可以選擇顏色,我顯示它們是這樣的:有沒有簡單的方法來改變基於背景顏色的文本顏色?

Plot Colours

因爲我寫在黑色的顏色代碼,暗藍色背景使得難以讀取和黑色是顯然完全隱藏。首先,這不是特別重要,顏色是用戶感興趣的顏色。

我可以把顏色代碼放在白色背景上的一個單獨的框中,但出於興趣我想知道是否有一些標準代碼處理這個或一些簡單的方法,可以用來確保文本始終可讀?如果有人可以指點我的資源與任何幫助,將不勝感激。

+3

你可以只顛倒背景顏色的所有位。適用於很多顏色。但是你可以在品紅(#ff00ff)上得到亮綠色(#00ff00)等東西,這會增加設計團隊的自殺率。 –

+1

@thorstenmüller嘗試用#808080 –

+1

感謝您的鏈接。看起來這不是特別簡單。 – Family

回答

7

我只是選擇白色,如果顏色是黑色的,黑色的,如果是亮的。許多應用程序都這樣做,但我認爲.net庫中沒有標準實現。

試着這麼做:

Color ForegroundForBackground(Color bg) { 
    if(bg.R*2 + bg.G*7 + bg.B < 500) 
     return Color.White; 
    else 
     return Color.Black; 
} 

你想在純藍色用白色,而不是純粹的格倫和純紅色的,因爲那些看起來更明亮。將數字調整爲看起來合理的數字。

編輯:由於j.k.請提供Luminance (colorimetry)的鏈接,我已經改變了線性組合,以便更好地匹配(將數字四捨五入爲1位數,不需要更多)。儘管我懷疑綠色系數在測試中可能會過大。

+0

+1這實際上是我怎麼做,雖然我可能會查找比例因子,如http://en.wikipedia.org/wiki/Luminance_%28colorimetry%29而不是我自己的 –

1

是的,應該可以動態調整顏色。

有兩個部分給你的問題。第一個是改變顏色,第二個是確定要改變顏色。

首先是兩者中較爲複雜的。我看到兩個主要選擇:

  1. 創建從現有的控制繼承自己的控制,並覆蓋相應的函數來檢查的背景,以回報對比前景色。

  2. 創建一個value converterbind您的前景色從轉換器返回。

這兩個選項中,值轉換器爲您提供跨控件的最大可移植性。但它可能會或可能不適用於您正在使用的UI技術。

第二步,確定使用什麼顏色,有點直截了當。 Thisthis是處理反轉或反轉顏色的兩個SO問題。有一些基於飽和度的邊緣情況可能無法達到您期望的效果。另外,如果你的背景顏色是有限的,你可以簡單地使用查找表,並確保結果是你所期望的。

+0

我會說第二個比較複雜,人類的看法是一件棘手的事情 –