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

C# 有没有一种简单的方法可以根据背景颜色改变文本颜色?,c#,C#,我有一个菜单,用户可以在其中选择颜色,我显示它们如下: 因为我用黑色写颜色代码,深蓝色的背景使它很难阅读,而黑色显然是完全隐藏的。首先,这并不特别重要,颜色是用户感兴趣的 我可以将颜色代码放在白色背景上的一个单独的框中,但出于兴趣,我想知道是否有一些标准代码来处理这个问题,或者可以应用一些简单的方法来确保文本始终可读?如果有人能为我提供任何帮助,我将不胜感激。如果颜色是深色,我会选择白色,如果颜色是浅色,我会选择黑色。许多应用程序都这样做,但我认为在.net库中没有标准的实现 尝试以下方法: C

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

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


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

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

尝试以下方法:

Color ForegroundForBackground(Color bg) {
    if(bg.R*2 + bg.G*7 + bg.B < 500)
        return Color.White;
    else
        return Color.Black;
}
您希望在纯蓝色上使用白色,但不要在纯灰色和纯红色上使用白色,因为它们看起来更亮。调整数字,使其看起来合理


编辑:由于j.k.善意地提供了指向的链接,我已经更改了线性组合,以便更好地将数字四舍五入到1位,不需要更多。虽然我怀疑绿色的系数在测试中可能太大。

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

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

第一个是两者中比较复杂的一个。我看到两个主要选择:

通过继承现有控件来创建自己的控件,并重写相应的函数来检查背景,以返回对比的前景色

创建一个和您的前景色从转换器返回

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


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

您只需反转背景颜色的所有位即可。适合多种颜色。但是你会得到像洋红ff00ff上的亮绿色00ff00这样的东西,这会增加你设计团队的自杀率。@thorstenmüller用808080试试看谢谢你的链接。看起来这不是特别简单。真的,人们投反对票是怎么回事。不要只是投反对票,解释一下你为什么这么做。记住这个网站的用途。天哪Louise@Family我没有否决投票,但我建议这样做,因为你要求被指向接近投票的资源,它的标记C代表移民投票+1。这基本上是我会这样做的,尽管我可能会查找比例因子,例如,而不是捏造我自己的。我会说第二个更复杂,人类感知是一件棘手的事情