反向相反的颜色

2022-09-02 11:05:36

我有一个用户设置,他们可以在其中选择警报的颜色。警报是文本或按钮上的背景色。但问题在于,如果他们选择深蓝色,而我们有黑色字母,对比度是不够的,你无法阅读它。

我试图做一个函数来获得相反的相反颜色,但还没有走得太远。

有这样的功能吗?


答案 1

我发现对我来说最好的解决方案是将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)与眼睛对相应颜色的敏感性(或更确切地说是视网膜的敏感性)成正比。


答案 2

使用补色

算法很简单,从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

http://24ways.org/2010/calculating-color-contrast