为什么平均颜色产量不会超过黑色?

时间:2015-06-01 18:16:22

标签: ios swift colors

我试图根据标签后面图像的平均颜色来设置标签的颜色。如果平均颜色较暗,则将UILabel文本颜色设置为白色,否则将其设置为黑色。

我按照教程here查看了平均颜色逻辑,它似乎完美无缺。然后我按照接受的答案here来确定是否将其设置为白色或黑色,这是我认为问题所在。由于某种原因,无论图像是黑色还是白色,文本颜色总是黑色。

这是我在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,这是最大值。

1 个答案:

答案 0 :(得分: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。因此 阈值也必须缩放到此范围,如

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