C#如何从KnownColor中删除较暗的颜色

4

我从系统中得到了已知颜色列表,但我想删除一些太暗的颜色,这会导致前景字符无法看到。我尝试了以下代码,但是KnownColor.Black仍然出现了。有没有办法按它们的黑暗程度进行排序?

if (knownColor > KnownColor.Transparent && knownColor < KnownColor.MidnightBlue && knownColor < KnownColor.Navy)
            {
                //add it to our list
                colors.Add(knownColor);
            }
2个回答

7
你可以将已知的颜色转换为Color实例,然后使用GetBrightness()方法比较亮度:

获取此Color结构的色相-饱和度-亮度(HSB)亮度值。亮度范围从0.0到1.0,其中0.0表示黑色,1.0表示白色。

float brightness = Color.FromKnownColor(KnownColor.Transparent).GetBrightness();

应用于您的示例,类似以下内容应该有效(已测试黑色和黄色):
KnownColor knownColor = KnownColor.Yellow;

float transparentBrightness = Color.FromKnownColor(KnownColor.Transparent).GetBrightness();
float midnightBlueBrightness = Color.FromKnownColor(KnownColor.MidnightBlue).GetBrightness();
float navyBrightness = Color.FromKnownColor(KnownColor.Navy).GetBrightness();
float knownColorBrightness = Color.FromKnownColor(knownColor).GetBrightness();

if (knownColorBrightness  < transparentBrightness 
    && knownColorBrightness > midnightBlueBrightness 
    && knownColorBrightness > navyBrightness)
{
    //add it to our list
    colors.Add(knownColor);
}

注释是因为KnownColor是我的网络用户名。 - KnownColor

3

请看我有关确定前景色的答案 - 它涉及计算背景颜色的感知亮度,以决定在前景中显示白色或黑色。您可以使用相同的方法,并选择消除过于暗淡的颜色:

根据背景使前景色为黑色或白色


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接