HSB、HSL和HSV之间的区别

66

我正在编写一个基于C++的基础图形API,其中包含一个颜色类。因此,我决定查看微软的.NET框架,并注意到他们的Color类具有HSB函数。

然后,我开始研究确定是否应该在我的类中提供HSB、HSL或HSV或它们全部都提供。

所以,我有三个关于HSB、HSL、HSV的问题:

  1. HSB和HSL相同吗?

  2. 如果不是,为什么没有HSBL甚至HSBLV?

  3. 我发现许多不同的计算这些值的方法,有人能向我展示最快的方法吗?


6
HSV 等同于 HSB。HSL 与 HSB 不同。 - Richard J. Ross III
3
@RichardJ.RossIII 我找不到一个像样的比较。这就是为什么我发了这篇文章 :) - Giwrgos Tsopanoglou
5个回答

61
HSB和HSL是一样的吗?
不是的。HSB和HSV是一样的,但是HSL是不同的。所有这些都是用一种友好的方式来表示RGB颜色。维基百科上关于HSL和HSV的文章用颜色圆柱体解释了它们之间的区别:HSL and HSV
基本上,色调在HSB和HSL中是相同的,但饱和度取值不同,亮度和明度也不同。
如果不是这样,为什么没有HSBL甚至HSBLV?
我不明白你的意思。HSB/HSV和HSL都可以表示任何RGB颜色。由于它们的定义方式不同,独立地拥有亮度和明度是不可能的。事实上,它们之间的转换非常容易。
我发现有很多不同的计算这些值的方法,有人能给我展示最快的方法吗?
这里有一个类似的问题,用于从RGB计算HSB的方法:在C语言中快速、优化和准确的RGB <-> HSB转换代码。那里有一个Java实现可能会有所帮助。要在HSB/HSV和HSL之间进行转换,请参考HSL vs HSB vs HSV

6
虽然这是一个非常古老的问题,感谢你提供答案 :) - Giwrgos Tsopanoglou
链接已过时,(请参阅HSL vs HSB vs HSV)。 - SwiftMatt
HSB/HSV和HSL都可以表示任何RGB颜色。反过来也是吗? - zzxjoanw
http://colorizer.org/ 我想添加这个参考链接以便于可视化。 - Barnack

12

原本,“亮度”和“明度”的区别是,“亮度”用于减色,而“明度”用于加色。如果您的程序正在处理CMYK系统等减色,则最好使用HSB;否则,最好使用HSL。


12

HSB和HSV是一样的,但HSL不同。

  • HSB代表色相、饱和度、亮度。
  • HSV代表色相、饱和度、明度。
  • HSL代表色相、饱和度、亮度。

以下是来自维基百科的视觉差异:(链接) hsl v hsv comparison showing multiple colour graphs


10
  1. HSB!=HSL,但HSB==HSV
  2. 不存在HSBL和HSBLV,因为Lightness和Brightness(也称为Value)是可以替代的
  3. 以下是转换方法(更多信息请参见维基HSL2RGBHSV2RGB

HSV -> RGB(JavaScript实现请参见此处

enter image description here

RGB -> HSV(JavaScript实现请参见此处

enter image description here


2

如果您正在进行UI设计,使用HSL比HSV更合理,因为您需要控制颜色调色板的亮度(L)值。


1
这只是个人偏好问题。一个颜色空间有3个轴,因此每种颜色表示都需要两个控件。你的HSL描述听起来像是一个HS颜色圆加上一个L滑块。HSV传统上是用一个HV矩形再加上一个S滑块。无论哪种方式都可以。 - ToolmakerSteve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接