2015-06-01 60 views
0

我試圖根據它後面的圖像的平均顏色來設置標籤的顏色。如果平均顏色較暗,則將UILabel文本顏色設置爲白色,否則將其設置爲黑色。爲什麼黑色以外的結果的平均顏色屈服?

我按照教程here的平均顏色邏輯,似乎工作得很好。然後我按照接受的答案here瞭解是否將其設置爲白色或黑色,這是我認爲問題所在的邏輯。出於某種原因,無論圖像是黑色還是白色,文本顏色總是黑色。

這是我在斯威夫特代碼:

var averageColor = thumbnailImage.image!.averageColor() 
     var red = 0.0 as CGFloat, green = 0.0 as CGFloat, blue = 0.0 as CGFloat, alpha = 0.0 as CGFloat 
     averageColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha) 
     let threshold = 150 
     var bgDelta = ((red * 0.299) + (green * 0.587) + (blue * 0.114)) 

     if (255 - Double(bgDelta) > Double(threshold)) { 
      self.eventName.textColor = .blackColor() 
      println("black") 
     } else { 
      println("white") 
      self.eventName.textColor = .whiteColor() 
     } 

注:我試着改變閾無濟於事。似乎產生結果的唯一值是255,這是最大值。

+0

您是否嘗試過看你的代碼運行時不同的變量是什麼?例如,「255 - Double(bgDelta)」評估的是什麼? – oisdk

回答

3

UIColor的RGBA組件在範圍0.0 ... 1.0浮點數,因此這

averageColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha) 
var bgDelta = ((red * 0.299) + (green * 0.587) + (blue * 0.114)) 

還計算在該範圍內的值bgDelta。因此, treshold還必須擴展到這個範圍內,像

let threshold = CGFloat(150.0/255.0) 
if 1.0 - bgDelta > threshold { ... } 
+0

現在一切都評價爲白色 – cyril

+0

@cyril:你對'bgDelta'有什麼價值? –

+0

它工作!剛剛大於小於 – cyril

相關問題