我的表单设置了60%不透明度。当用户更改表单的颜色时,有时(取决于所选的颜色),他们无法看到表单上的文本,因为它与表单的颜色过于相似。因此,我想尝试使用if/switch语句来查看表单的背景颜色是暗色还是浅色。如果背景颜色为暗色,则所有表单上的文本都应该是白色。如果背景颜色为浅色,则所有表单上的文本都应该是黑色。
这是否可能实现?我在许多地方看到了这个问题,但不确定在搜索框中不写整个问题要搜索什么。
任何帮助/建议都将不胜感激。
谢谢, Jason。
我的表单设置了60%不透明度。当用户更改表单的颜色时,有时(取决于所选的颜色),他们无法看到表单上的文本,因为它与表单的颜色过于相似。因此,我想尝试使用if/switch语句来查看表单的背景颜色是暗色还是浅色。如果背景颜色为暗色,则所有表单上的文本都应该是白色。如果背景颜色为浅色,则所有表单上的文本都应该是黑色。
这是否可能实现?我在许多地方看到了这个问题,但不确定在搜索框中不写整个问题要搜索什么。
任何帮助/建议都将不胜感激。
谢谢, Jason。
您可以检查三个RGB值的总和是否超过最大值的一半。
-> 因为255, 255, 255等于白色(亮),而0, 0, 0等于黑色(暗):
例如:
R 255
G 140
B 170
=====
565
最大值: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);
}
您是否遇到了背景色和前景色搭配不佳的情况?
这里提供了一个简单有效的方法,可以翻转背景色。
注意:这种翻转并不意味着颜色和反色之间的亮度差异,但如果两种颜色的亮度相差至少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;
}
}