Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 若表单是黑色的,那个么表单上的文本应该是浅色的_C#_Winforms_Forms_Colors - Fatal编程技术网

C# 若表单是黑色的,那个么表单上的文本应该是浅色的

C# 若表单是黑色的,那个么表单上的文本应该是浅色的,c#,winforms,forms,colors,C#,Winforms,Forms,Colors,我有60%不透明的表格。当用户更改表单的颜色时,有时(取决于选择的颜色),他们无法再看到表单上的文本,因为它与表单的颜色太相似。所以,我试着做一个if/switch,看看表单的背景色是暗的还是亮的。如果它是黑色的,那么表单上的所有文本都应该是白色的。如果是浅颜色,则窗体上的所有文本都应为黑色 这有可能吗?我到处都看到了这个,但不知道要搜索什么,除非把整个问题都写在搜索栏里 如有任何帮助/建议,将不胜感激 谢谢, jason。用它来计算光线有多亮如何?你可以检查三个rgb值之和是否超过最大值的一半

我有60%不透明的表格。当用户更改表单的颜色时,有时(取决于选择的颜色),他们无法再看到表单上的文本,因为它与表单的颜色太相似。所以,我试着做一个if/switch,看看表单的背景色是暗的还是亮的。如果它是黑色的,那么表单上的所有文本都应该是白色的。如果是浅颜色,则窗体上的所有文本都应为黑色

这有可能吗?我到处都看到了这个,但不知道要搜索什么,除非把整个问题都写在搜索栏里

如有任何帮助/建议,将不胜感激

谢谢,
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;
    }
}