反向相反的颜色
我有一个用户设置,他们可以在其中选择警报的颜色。警报是文本或按钮上的背景色。但问题在于,如果他们选择深蓝色,而我们有黑色字母,对比度是不够的,你无法阅读它。
我试图做一个函数来获得相反的相反颜色,但还没有走得太远。
有这样的功能吗?
我有一个用户设置,他们可以在其中选择警报的颜色。警报是文本或按钮上的背景色。但问题在于,如果他们选择深蓝色,而我们有黑色字母,对比度是不够的,你无法阅读它。
我试图做一个函数来获得相反的相反颜色,但还没有走得太远。
有这样的功能吗?
我发现对我来说最好的解决方案是将RGB值转换为YIQ值。由于我们只对亮度值(由Y表示)感兴趣,因此需要执行一个单一的计算:。它的 Java 代码如下所示:Y = (299*R + 587*G + 114*B)/1000
public static Color getContrastColor(Color color) {
double y = (299 * color.getRed() + 587 * color.getGreen() + 114 * color.getBlue()) / 1000;
return y >= 128 ? Color.black : Color.white;
}
您可以看到,它只是根据原始颜色的亮度决定使用黑色或白色。在我看来,结果非常好。权重(299,587,114)与眼睛对相应颜色的敏感性(或更确切地说是视网膜的敏感性)成正比。
使用补色:
算法很简单,从255中减去每个颜色分量以获得新的颜色分量
Color textColor = Color.rgb(255-Color.red(bgColor),
255-Color.green(bgColor),
255-Color.blue(bgColor));
-----编辑(因为基于RGB的补码可能并不总是--------
这两个链接非常有帮助,并且主题相关:
http://www.splitbrain.org/blog/2008-09/18-calculating_color_contrast_with_php