【问题标题】:HSB vs HSL vs HSVHSB vs HSL vs HSV
【发布时间】:2013-03-18 02:39:45
【问题描述】:

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

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

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

  1. HSB 和 HSL 一样吗?

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

  3. 我找到了许多不同的方法来计算这些值,谁能告诉我最快的方法吗?

【问题讨论】:

  • HSV == HSB。 HSL != HSB。
  • @RichardJ.RossIII 我无法在这些方面找到合适的比较。这就是我发布这个的原因:)

标签: c++ colors hsv hsl hsb


【解决方案1】:

HSB 和 HSL 一样吗?

不,HSB 与 HSV 相同,但 HSL 不同。所有这些都被用作表示 RGB 颜色的友好方式。关于 HSL 和 HSV 的 Wikipedia 文章使用彩色圆柱体解释了差异:HSL and HSV 基本上 HSB 和 HSL 的 Hue 是一样的,只是 Saturation 取值不同,Brightness 和 Lightness 也不同。

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

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

我找到了许多不同的方法来计算这些值,谁能告诉我最快的方法吗?

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

【讨论】:

  • 虽然这是一个很老的问题,但感谢您的回答:)
  • 链接已过时,(参见 HSL vs HSB vs HSV)
  • "HSB/HSV 和 HSL 都可以表示任何 RGB 颜色。"反过来也是真的吗?
  • colorizer.org 我想添加这个引用以便于可视化
【解决方案2】:
  1. HSB!=HSL 和 HSB==HSV
  2. HSBL 和 HSBLV 不存在,因为 Lightness 和 Brightness(也称为 Value)是替代品
  3. 这里是转换方法(更多关于 wiki HSL2RGBHSV2RGB

HSV -> RGB(在js中实现here

RGB -> HSV(在js中实现here

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2011-03-26
          • 1970-01-01
          • 2012-08-02
          • 1970-01-01
          • 2012-07-24
          • 2015-03-11
          • 2011-02-04
          • 1970-01-01
          • 2015-06-10
          相关资源
          最近更新 更多