我从系统中获得了一份Knowncolor列表,但是我想删除一些太暗的内容并使前景字符看不见。我尝试了以下代码,但KnownColor.Black仍然出现。无论如何要在他们的黑暗中命令他们?
if (knownColor > KnownColor.Transparent && knownColor < KnownColor.MidnightBlue && knownColor < KnownColor.Navy)
{
//add it to our list
colors.Add(knownColor);
}
答案 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)
看看我关于确定前景色的答案 - 它涉及计算背景色的感知亮度,以决定是将白色还是黑色作为前景。您可以使用相同的方法,只需选择消除太暗的颜色: