我有一个用户设置,他们可以选择警报的颜色.警报是文本或按钮上的背景颜色.但问题出在哪,如果他们选择一个深蓝色,我们有黑色字母,对比度是不够的,你不能读它.
我试图做一个功能来获得反向相反的颜色,但没有太多.
有这样的功能吗?
解决方法
我发现对我来说最好的解决方案是将RGB值转换为
YIQ值.由于我们只对亮度值(由Y表示)感兴趣,所以需要进行一个单独的计算:Y =(299 * R 587 * G 114 * B)/ 1000. Java代码将如下所示:
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)与眼睛的灵敏度(或视网膜的灵敏度)相对于相应的颜色成比例.