Sar*_*fan 24
使用补色:
Algo很简单,从255减去每个颜色分量以获得新的颜色分量
Color textColor = Color.rgb(255-Color.red(bgColor),
255-Color.green(bgColor),
255-Color.blue(bgColor));
Run Code Online (Sandbox Code Playgroud)
-----编辑(基于RGB的补充可能无法正常工作--------
这两个链接非常有用,主题如下:
http://www.splitbrain.org/blog/2008-09/18-calculating_color_contrast_with_php
http://24ways.org/2010/calculating-color-contrast
bri*_*ium 24
我发现对我来说最好的解决方案是将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;
}
Run Code Online (Sandbox Code Playgroud)
根据原始颜色的亮度,您可以看到它只是决定使用黑色或白色.在我看来,结果非常好.权重(299,587,114)与眼睛的灵敏度(或视网膜的灵敏度)成对应于相应的颜色.
根据Marks解决方案,我建议:
public static int getComplementaryColor(int colorToInvert) {
float[] hsv = new float[3];
Color.RGBToHSV(Color.red(colorToInvert), Color.green(colorToInvert),
Color.blue(colorToInvert), hsv);
hsv[0] = (hsv[0] + 180) % 360;
return Color.HSVToColor(hsv);
}
Run Code Online (Sandbox Code Playgroud)
此外,我现在创建了一个类似的方法,用于计算给定颜色的默认背景:
public static int getContrastVersionForColor(int color) {
float[] hsv = new float[3];
Color.RGBToHSV(Color.red(color), Color.green(color), Color.blue(color),
hsv);
if (hsv[2] < 0.5) {
hsv[2] = 0.7f;
} else {
hsv[2] = 0.3f;
}
hsv[1] = hsv[1] * 0.2f;
return Color.HSVToColor(hsv);
}
Run Code Online (Sandbox Code Playgroud)
正如 Sarwar Erfan 指出的那样,使用互补色。为此,您可以使用整数掩码(这将比分别反转 R、G、B 颜色分量更快)。
int textColor = bgColor ^ 0x00ffffff;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29642 次 |
| 最近记录: |