10

据我了解,HSL 和 HSB 色彩空间非常相似,都使用相同的 0-360 色轮作为色调,使用相同的 0-1 值作为饱和度。它们之间的一个区别是,在 HSB 模型中,您有亮度,其中 0 是黑色,1 是全强度的颜色,而在 HSL 中,您有亮度/亮度,其中 0 仍然是黑色,但 1 是白色。

.netColor结构使用 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>

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

谁能证实这一点?是文档中的错误,中的错误GetBrightness(),还是我以某种方式误解了理论?

4

1 回答 1

6

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

其他人也发现了同样的事情,例如 Chris Jackson (MSFT) 在从 HSB 转换为 .NET 中的 RGB 中“根本问题是 .NET 框架将颜色空间称为 HSB,即使它实际上是 HSL。(颜色选择器控件正确引用了它。)框架中的 Color 结构提供了一个 GetBrightness() 方法,在文档中描述为“获取此 Color 结构的色调-饱和度-亮度 (HSB) 亮度值。”这是错误的吗?你打赌。它应该被称为 GetLuminance()。

于 2014-07-14T09:36:10.733 回答