有没有一种简单的方法可以根据背景颜色改变文字颜色?

时间:2013-10-14 10:18:15

标签: c#

我有一个菜单,用户可以选择颜色,我这样显示:

Plot Colours

因为我用黑色写下颜色代码,深蓝色背景使得难以阅读,黑色显然是完全隐藏的。首先,这不是特别重要,颜色是用户感兴趣的。

我可以将颜色代码放在白色背景上的单独框中,但出于兴趣,我想知道是否有一些标准代码来处理这个或一些简单的方法可以应用于确保文本始终可读?如果有人可以在任何帮助下指出我的资源,我们将不胜感激。

2 个答案:

答案 0 :(得分:7)

如果颜色是黑色,我会选择白色,如果是浅色则选择黑色。许多应用程序都这样做,但我认为.net库中没有标准的实现。

尝试类似:

Color ForegroundForBackground(Color bg) {
    if(bg.R*2 + bg.G*7 + bg.B < 500)
        return Color.White;
    else
        return Color.Black;
}

你想在纯蓝色上使用白色,但在纯gren和纯红色上使用白色,因为它们看起来更亮。将数字调整为看起来合理的数字。

编辑:自j.k.请提供Luminance (colorimetry)的链接,我更改了线性组合以更好地匹配(将数字四舍五入到一位数,不需要更多)。虽然我怀疑绿色系数在测试中可能证明太大了。

答案 1 :(得分:1)

是的,应该可以动态调整颜色。

您的问题分为两部分。第一个是改变颜色,第二个是确定要改变颜色的内容。

首先是两者中较为复杂的。我看到两个主要选项:

  1. 通过继承现有控件创建自己的控件,并覆盖相应的函数以检查背景,以便返回对比鲜明的前景色。

  2. 为转化器的返回创建value converterbind前景色。

  3. 在这两个选项中,值转换器为您提供跨控件的最大可移植性。但它可能适用于您正在使用的UI技术,也可能不适用。

    第二步,确定使用什么颜色,更简单一点。 Thisthis是两个涉及反转或反转颜色的SO问题。有一些基于饱和度的边缘情况可能无法按预期的方式工作。或者,如果您的背景颜色有限,您可以简单地使用查找表并确保结果符合您的预期。