如果三个rgb值的总和高于最大值的一半,则可以检查
- >因为255,255,255 ==白色(浅色)和0,0,0 ==黑色(深色):
FE
R 255
G 140
B 170
=====
565
Run Code Online (Sandbox Code Playgroud)
最大值:765(中间382)总和:565
因为总和是565并且高于中间(暗<382 <光),颜色很浅.因此,您可以将文本颜色更改为黑暗.
此方法检查两种颜色的对比度是否可读:
public static bool ContrastReadableIs(Color color_1, Color color_2)
{
// Maximum contrast would be a value of "1.0f" which is the brightness
// difference between "Color.Black" and "Color.White"
float minContrast = 0.5f;
float brightness_1 = color_1.GetBrightness();
float brightness_2 = color_2.GetBrightness();
// Contrast readable?
return (Math.Abs(brightness_1 - brightness_2) >= minContrast);
}
Run Code Online (Sandbox Code Playgroud)
想要寻找可读的原色的背景色?
这是一种简单且非常好的反转背景色的方法。
注意:这种反转并不意味着颜色和反转颜色的亮度不同,但是如果两种颜色的亮度至少相差0.5,则它们通常会显示可读的对比度。
单击处理程序button1的测试代码
Random r = new Random();
while (1 < 2)
{
// Get a random fore- and backcolor
Color foreColor = Color.FromArgb(r.Next(0, 256), r.Next(0, 256), r.Next(0, 256));
Color backColor = Color.FromArgb(r.Next(0, 256), r.Next(0, 256), r.Next(0, 256));
// Contrast readable?
if (ContrastReadableIs(foreColor, backColor))
{
button1.ForeColor = foreColor;
button1.BackColor = backColor;
System.Media.SystemSounds.Beep.Play();
break;
}
}
Run Code Online (Sandbox Code Playgroud)