4

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

绘图颜色

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

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

4

2 回答 2

7

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

尝试类似:

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

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

编辑:由于 jk 友好地提供了Luminance (colorimetry)的链接,我已经更改了线性组合以更好地匹配(将数字四舍五入为 1 位,实际上不需要更多)。虽然我怀疑绿色的系数在测试中可能会太大。

于 2013-10-14T11:07:24.460 回答
1

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

你的问题有两个部分。第一个是更改颜色,第二个是确定将颜色更改为什么。

第一个是两者中更复杂的一个。我看到两个主要选项:

  1. 通过从现有控件继承来创建您自己的控件,并重写适当的函数来检查背景,以返回对比鲜明的前景色。

  2. 创建一个值转换器并将前景色绑定到转换器的返回值。

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

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

于 2013-10-14T11:34:12.583 回答