据我了解 HSL and HSB colour spaces非常相似,都使用相同的 0-360 色轮作为色调,使用相同的 0-1 值作为饱和度。它们之间的一个区别是,在 HSB 模型中你有亮度,其中 0 是黑色,1 是全强度的颜色,而在 HSL 中你有亮度/亮度,其中 0 仍然是黑色但 1 是白色。
.net Color
struct 使用 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()
中的错误吗? ,还是我以某种方式误解了这个理论?
最佳答案
您链接到的页面提供了一系列颜色的 L 和 V(又名 B)示例。比较 Color.FromArgb(255, 255, 0, 0).GetBrightness
的结果(0.5) 示例表明 .NET 正在使用 HSL 模型。支票 Color.FromArgb(255, 128, 255, 255).GetSaturation
(1.0) 证实了这一点。
其他人也发现了同样的事情,例如克里斯· jackson (MSFT) 在 Converting from HSB to RGB in .NET :“潜在的问题是 .NET 框架将颜色空间称为 HSB,即使它实际上是 HSL。(颜色选择器控件正确地引用它。)框架中的颜色结构提供了一个 GetBrightness() 方法,描述在文档中,“获取此颜色结构的色调-饱和度-亮度(HSB)亮度值。”这是错误的吗?你打赌。它应该被称为 GetLuminance()。
关于.net - .Net Color 结构是否使用 HSB 或 HSL 颜色空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24732836/