.Net Color结构是否使用HSB或HSL颜色空间?

时间:2014-07-14 08:56:22

标签: .net system.drawing hsl hsb color-theory

据我所知它HSL and HSB colour spaces非常相似,两者都使用相同的0-360色轮作为色调,并使用相同的0-1值进行饱和。它们之间的一个区别是在HSB模型中你有亮度,其中0是黑色,1是全强度的颜色,而在HSL中你有亮度/亮度,其中0仍然是黑色但是1是白色。

.net Color结构使用RGB空间,但具有GetHue()GetSaturation()GetBrightness()函数。

此处的文档令人困惑。对于GetBrightness()

/// <summary>Gets the hue-saturation-brightness (HSB) brightness value for this 
/// System.Drawing.Color structure.</summary>

好的,这很有意义,.Net似乎正在使用HSB ......

/// <returns>The brightness of this System.Drawing.Color. The brightness ranges 
/// from 0.0 through 1.0, where 0.0 represents black and 1.0 represents white.
/// </returns>

呃...所以最大值代表白色,而不是最亮的颜色。尽管他们的文档和命名始终引用亮度我很确定返回的值实际上是亮度/亮度,即.Net实际上使用HSL模型和不是HSB。

任何人都可以证实吗?这是文档中的错误,GetBrightness()中的错误,还是我以某种方式误解了理论?

1 个答案:

答案 0 :(得分:6)

您链接的页面提供了一系列颜色的L和V(又名B)的示例。将Color.FromArgb(255, 255, 0, 0).GetBrightness(0.5)的结果与示例进行比较表明.NET正在使用HSL模型。检查Color.FromArgb(255, 128, 255, 255).GetSaturation(1.0)确认它。

其他人发现了同样的事情,例如Chris {(MSFT)在Converting from HSB to RGB in .NET&#34;底层问题是.NET Framework将颜色空间称为HSB,即使它实际上是HSL。 (颜色选择器控件正确引用它。)框架中的颜色结构提供了GetBrightness()方法,在文档中描述为&#34;获取此Color结构的色调饱和度 - 亮度(HSB)亮度值&#34;这是错的吗?你打赌。它应该被称为GetLuminance()。&#34;