如果Form为暗,则表单上的Text应为Light

jay*_*t55 10 c# forms colors winforms

我有60%不透明的形式.当用户更改表单的颜色时,有时(取决于所选颜色),他们不再能够看到表单上的文本,因为它与表单的颜色非常相似.所以,我试图做一个if/switch来看看表格中选择的BackColor是Dark还是Light.如果是黑暗,则表单上的所有文本都应为白色.如果是Light,则表单上的所有文本都应为黑色.

这是可能吗?我已经看到了这个地方,但不知道在没有在搜索字段中写完整个问题的情况下搜索什么.

任何帮助/建议将不胜感激.

谢谢你,杰森.

Jon*_*eet 21

如何用Color.GetBrightness()它来计算它的亮度?


Bvu*_*Ic7 8

如果三个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 <光),颜色很浅.因此,您可以将文本颜色更改为黑暗.


Pol*_*zer 5

此方法检查两种颜色的对比度是否可读:

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)