为什么黑色以外的结果的平均颜色屈服?
我试图根据背后图像的平均颜色来设置标签的颜色。 如果平均颜色较暗,则将UILabel
文本颜色设置为白色,否则将其设置为黑色。
我在这里接受了这个教程的平均颜色逻辑,这似乎很好地工作。 然后我在这里接受了接受的答案,以确定是否将其设置为白色或黑色,这是我认为问题所在。 出于某种原因,无论图像是黑色还是白色,文本颜色总是黑色。
这是我在Swift中的代码:
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,这是最大值。
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
。 因此,阈值也必须按比例缩放到这个范围
let threshold = CGFloat(150.0/255.0)
if 1.0 - bgDelta > threshold { ... }
链接地址: http://www.djcxy.com/p/87329.html
上一篇: Why won't the average color yield to a result other than black?
下一篇: Android EditText text color auto changing during typing