如果表格是深色的,那么表格上的文字应该是浅色的

Posted

技术标签:

【中文标题】如果表格是深色的,那么表格上的文字应该是浅色的【英文标题】:If Form is dark, then Text on form should be Light 【发布时间】:2010-12-02 06:30:05 【问题描述】:

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

这有可能吗?我到处都看到过这种情况,但如果不在搜索字段中写下整个问题,我不确定要搜索什么。

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

谢谢, 杰森。

【问题讨论】:

还有一个解决方案here 【参考方案1】:

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

【讨论】:

谢谢@Jon。非常感激。 :)【参考方案2】:

您可以检查三个 rgb 值的总和是否高于最大值的一半

-> 因为 255,255,255 == 白色(浅色)和 0,0,0 == 黑色(深色) :

f.e.

R 255
G 140
B 170
=====
  565

最大:765(中 382) 总和:565

因为总和是565以上中间(深

【讨论】:

谢谢@Lichtamberg,我原本是这么想的,但后来设法说服自己这行不通。但确实如此,非常感谢。 这会使黄色变暗,因为它是 (255, 255, 0)。【参考方案3】:

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

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);

有一个背景色来寻找可读的前景色?Here 是一种简单且非常好的反转背景色的方法。注意:这种反转并不意味着颜色和反转颜色的亮度不同,但如果两种颜色的亮度相差至少 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;
    

【讨论】:

以上是关于如果表格是深色的,那么表格上的文字应该是浅色的的主要内容,如果未能解决你的问题,请参考以下文章

word网格表4着色2怎么设置

有没有办法判断 HTML 十六进制颜色是浅色还是深色

如何在 Qt C++ 中根据主题更改图标?如果可用的主题是深色或浅色

深色主题未在我的 Android 应用中显示表格值

如果用户没有输入任何内容,那么表格中一行的默认日期应该是啥?

EXCEL表格设定宽度以后,文字填满了如何自动换行