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

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

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

相关文章:

c# - .NET CLR 是否预先计算属性值?

.net - 在服务器推送应用程序中维护.NET异步套接字连接

c# - COM 返回不实现任何接口(interface)的类型

c# - 源文件正确,使用system.drawing打印将实际打印移至右侧和底部

c# - 如何截取WPF控件的屏幕截图?

c# - 将字节数组转换为 X.509 证书

vb.net - 如何使用 system.drawing.stringformat 获得垂直 nowrap 字符串

colors - 将 YUV 绕过 RGB 步骤转换为 HSL 或 HSV

python - 在python3中将hsl转换为十六进制

objective-c - RGB 到 HSL 的转换似乎在数值上还可以,但在视觉上却不是这样