C# 若表单是黑色的,那个么表单上的文本应该是浅色的
我有60%不透明的表格。当用户更改表单的颜色时,有时(取决于选择的颜色),他们无法再看到表单上的文本,因为它与表单的颜色太相似。所以,我试着做一个if/switch,看看表单的背景色是暗的还是亮的。如果它是黑色的,那么表单上的所有文本都应该是白色的。如果是浅颜色,则窗体上的所有文本都应为黑色 这有可能吗?我到处都看到了这个,但不知道要搜索什么,除非把整个问题都写在搜索栏里 如有任何帮助/建议,将不胜感激 谢谢,C# 若表单是黑色的,那个么表单上的文本应该是浅色的,c#,winforms,forms,colors,C#,Winforms,Forms,Colors,我有60%不透明的表格。当用户更改表单的颜色时,有时(取决于选择的颜色),他们无法再看到表单上的文本,因为它与表单的颜色太相似。所以,我试着做一个if/switch,看看表单的背景色是暗的还是亮的。如果它是黑色的,那么表单上的所有文本都应该是白色的。如果是浅颜色,则窗体上的所有文本都应为黑色 这有可能吗?我到处都看到了这个,但不知道要搜索什么,除非把整个问题都写在搜索栏里 如有任何帮助/建议,将不胜感激 谢谢, jason。用它来计算光线有多亮如何?你可以检查三个rgb值之和是否超过最大值的一半
jason。用它来计算光线有多亮如何?你可以检查三个rgb值之和是否超过最大值的一半 ->因为255255==白色(亮)和0,0,0==黑色(暗) : f、 e 最大值: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);
}
有背景色寻找可读的前景色吗?是反转背景色的一种简单且相当好的方法。
NB:此反转并不意味着颜色和反转颜色的亮度不同,但如果两种颜色的亮度差异至少为0.5,则通常会显示可读的对比度 单击处理程序按钮1的测试代码
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;
}
}
Random r=new Random();
而(1<2)
{
//获得一个随机的前后颜色
Color FORECLOR=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));
//对比度可读吗?
if(对比度可读性(前向色、后向色))
{
按钮1.前景色=前景色;
按钮1.背景色=背景色;
System.Media.SystemSounds.Beep.Play();
打破
}
}
谢谢@Jon。非常感谢。:)谢谢你@Lichtamberg,我原本是这么想的,但后来我说服自己这是行不通的。但它确实如此,非常感谢。这将使黄色变暗,因为它是(255,255,0)。还有另一种解决方案
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;
}
}