HSB vs HSL vs HSV

时间:2013-03-27 20:20:05

标签: c++ colors hsv hsl hsb

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

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

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

  1. HSB与HSL相同吗?

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

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

5 个答案:

答案 0 :(得分:34)

  

HSB与HSL相同吗?

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

  

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

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

  

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

这里有一个类似的问题用于从RGB计算HSB:Fast, optimized and accurate RGB <-> HSB conversion code in C那里有一个Java实现可能有所帮助。要在HSB / HSV和HSL之间进行转换,请参阅HSL vs HSB vs HSV

答案 1 :(得分:2)

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

答案 2 :(得分:0)

  1. HSB!= HSL && HSB == HSV
  2. 因为亮度和亮度(值)是替代品,所以不存在HSBL和HSBLV
  3. 以下是转换方法(有关维基HSL2RGBHSV2RGB的更多信息)

HSV-> RGB (在js here中实现)

enter image description here

RGB-> HSV (在js here中实现)

enter image description here

答案 3 :(得分:0)

HSB和HSV相同,但HSL不同。 HSB代表色相,饱和度和亮度,HSV代表色相,饱和度和值。 HSL代表色相,饱和度,光。这是与Medium.com的视觉区别:https://i.stack.imgur.com/nX8NL.png

答案 4 :(得分:0)

如果您正在做 UI,那么使用 HSL 而不是 HSV 更有意义,因为您需要控制调色板的亮度 (L) 值。