HSB vs HSL vs HSV

Giw*_*lou 36 c++ hsl colors hsv hsb

我正在将Color类作为c ++中非常基本的图形API的一部分.所以我决定看一下微软的.NET框架,发现他们的Color类有HSB的功能.

然后我开始研究,以确定我是否应该在课堂上提供HSB,HSL或HSV或所有这些.

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

  1. HSB与HSL相同吗?

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

  3. 我发现有很多不同的计算这些值的方法,有人能告诉我最快的吗?

Jos*_*seV 38

HSB与HSL相同吗?

不,HSB与HSV相同,但HSL不同.所有这些都用作表示RGB颜色的友好方式.维基百科关于HSL和HSV的文章解释了使用彩色激光器的差异:HSL和HSV 基本上,Hue对于HSB和HSL是相同的,但饱和度采用不同的值,亮度和亮度也不同.

如果没有,为什么没有HSBL甚至HSBLV?

我不明白这一点.HSB/HSV和HSL都可以表示任何RGB颜色.由于它们的定义方式,不可能独立地具有B和L. 给定的HSB亮度和饱和度与固定的亮度相关联.事实上,在它们之间进行转换非常容易.

我发现有很多不同的计算这些值的方法,有人能告诉我最快的吗?

这里有一个类似的问题用于从RGB计算HSB:C中的快速,优化和准确的RGB < - > HSB转换代码那里有一个可能有用的Java实现.对于HSB/HSV和HSL之间的转换,请参阅HSL与HSB对HSV

  • 虽然这是一个非常古老的问题,感谢答案:) (5认同)

小智 13

HSB 和 HSV 相同,但HSL不同。

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

这是与维基百科的视觉差异: 显示多个彩色图表的 hsl 与 hsv 比较


Kam*_*ski 10

  1. HSB!=HSL 且 HSB==HSV
  2. HSBL 和 HSBLV 不存在,因为LightnessB rightness(也称为Value)是替代品
  3. 以下是转换方法(更多关于 wiki HSL2RGBHSV2RGB

HSV -> RGB (这里用js实现)

在此输入图像描述

RGB -> HSV (这里用js实现)

在此输入图像描述


小智 8

原来亮度和亮度之间的区别是。“亮度”用于减色,“亮度”用于加色。现在,如果您的程序正在处理像 CMYK 系统这样的减色法,那么最好使用 HSB,否则使用 HSL 会更好。