50

我正在制作一个 Color 类作为 C++ 中非常基本的图形 API 的一部分。所以我决定看一下微软的 .NET 框架,并注意到他们的 Color 类具有 HSB 的功能。

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

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

  1. HSB 和 HSL 一样吗?

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

  3. 我找到了许多不同的计算这些值的方法,有人可以告诉我最快的方法吗?

4

5 回答 5

43

HSB 和 HSL 一样吗?

不,HSB 与 HSV 相同,但 HSL 不同。所有这些都被用作表示 RGB 颜色的友好方式。关于 HSL an HSV 的 Wikipedia 文章使用颜色 cilinders 解释了差异:HSL 和 HSV 基本上,HSB 和 HSL 的色调相同,但饱和度采用不同的值,亮度和亮度也不同。

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

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

我找到了许多不同的计算这些值的方法,有人可以告诉我最快的方法吗?

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

于 2013-10-26T03:39:31.090 回答
8

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

于 2019-08-31T15:36:41.437 回答
5
  1. HSB!=HSL 和 HSB==HSV
  2. HSBL 和HSBLV不存在,因为Lightness 和B rightness(也称为价值)是替代品
  3. 以下是转换方法(更多关于 wiki HSL2RGBHSV2RGB

HSV -> RGB (js 中实现)

在此处输入图像描述

RGB -> HSV (js 中实现)

在此处输入图像描述

于 2019-01-08T07:24:34.753 回答
1

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

于 2020-12-06T23:41:49.833 回答
1

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

于 2021-05-03T13:24:28.123 回答