2015-10-05 99 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