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

时间:2011-02-02 23:39:57

标签: c# colors

我从系统中获得了一份Knowncolor列表,但是我想删除一些太暗的内容并使前景字符看不见。我尝试了以下代码,但KnownColor.Black仍然出现。无论如何要在他们的黑暗中命令他们?

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

2 个答案:

答案 0 :(得分:7)

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

  

获取色调饱和度 - 亮度   (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);
}

答案 1 :(得分:3)

看看我关于确定前景色的答案 - 它涉及计算背景色的感知亮度,以决定是将白色还是黑色作为前景。您可以使用相同的方法,只需选择消除太暗的颜色:

Make foregroundcolor black or white depending on background