【问题标题】:Does the .Net Color struct use an HSB or HSL colour space?.Net Color 结构是否使用 HSB 或 HSL 颜色空间?
【发布时间】:2014-09-04 03:37:51
【问题描述】:

据我了解,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>

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-26
      • 2012-07-08
      • 1970-01-01
      • 2011-03-01
      • 2017-11-25
      • 2013-03-18
      • 1970-01-01
      • 2012-08-02
      相关资源
      最近更新 更多