2015-10-05 83 views
0

我試圖根據背景顏色確定textColor應該是黑色還是白色,但它似乎不起作用。首先我創建了一個擴展名來檢索rgb值。然後我使用下面的算法來計算,然後確定該值是否高於186.問題是,每次我運行該算法時,它總是返回1左右的值,這低於186這應該是中間值,它決定了文本是否應該是黑或白。我爲了計算186左右的數值而做錯了什麼?這是我發現的是什麼確定它是否爲黑色或白色,從這個問題根據背景決定textColor應該是白色還是黑色

How to decide font color in white or black depending on background color?

Extenstion

extension UIColor { 
    var components:(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) { 
     var r:CGFloat = 0 
     var g:CGFloat = 0 
     var b:CGFloat = 0 
     var a:CGFloat = 0 
     getRed(&r, green: &g, blue: &b, alpha: &a) 
     return (r,g,b,a) 
    } 
} 

viewDidLoad中

let colorComp = UIColor(rgba: "#f2f2f2").components 
    let colorCheck = colorComp.red * 0.299 + colorComp.green * 0.587 + colorComp.blue * 0.114 
    print(colorCheck) 
在這種情況下 red

,​​和blue每個返回0.949019607843137

+2

這似乎是正確的。 'components'被定義爲返回一個介於0.0和1.0之間的值。您顯示的返回值對'f2'除以'ff'看起來很好。如果你想要一個範圍在0..255的值,你需要乘以縮放你的結果。 –

回答

1

的RGB的範圍是從0(BLAK)到255(白),但是在這種情況下,範圍是0到1應該與此操作計算的新值:

值=(1/255) * 186 = 0.729;

0xF2 = 242 dec = 242/255 = 0.949

+0

那麼我在哪裏確定它是高於還是低於186? –

+0

在您的函數「let colorComp = UIColor(rgba:」#f2f2f2「)。components」後,您可以將顏色空間從0.0/1.0轉換爲RG和B的顏色空間1/255,然後對於每種顏色檢查值是>還是<186。 – Lorenzo

相關問題