【问题标题】:HSV (0 .. 255) to RGB (0 .. 255) [duplicate]HSV (0 .. 255) 到 RGB (0 .. 255) [重复]
【发布时间】:2011-11-21 08:09:47
【问题描述】:

可能重复:
Algorithm to convert RGB to HSV and HSV to RGB?

当值是 0 到 255 时,有人可以解释如何将 HSV 值转换为 RGB 吗?还有,

作为参考,我正在尝试在 C++ 中执行此操作。

【问题讨论】:

  • en.wikipedia.org/wiki/HSL_and_HSV 的哪一部分 - 转换为 RGB 你不明白?在这里简单地转发一个算法是没有意义的,请告诉我们哪个部分不起作用/你不明白它
  • @Ravadre,我希望能有更多“笨拙的术语”。维基百科以过于复杂的方式呈现公式而臭名昭著。
  • @Kerrek SB,粗鲁真的有必要吗?
  • @失谐,实际上,它不是。这些通常是 (0 ... 1) 到 (0 .. 255) 等
  • @judeclarke:所以,缩放它:如果你有 (0 ... 255),只需将你的值除以 255,然后它们将在 (0 ... 1),那么你重新使用这些算法就好了!

标签: c++ algorithm graphics colors color-picker


【解决方案1】:

在这里找到 http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript

function hsvToRgb(h, s, v){
    var r, g, b;

    var i = Math.floor(h * 6);
    var f = h * 6 - i;
    var p = v * (1 - s);
    var q = v * (1 - f * s);
    var t = v * (1 - (1 - f) * s);

    switch(i % 6){
        case 0: r = v, g = t, b = p; break;
        case 1: r = q, g = v, b = p; break;
        case 2: r = p, g = v, b = t; break;
        case 3: r = p, g = q, b = v; break;
        case 4: r = t, g = p, b = v; break;
        case 5: r = v, g = p, b = q; break;
    }

    return [r * 255, g * 255, b * 255];
}

编辑:

我曾经写过一个颜色选择器,并且习惯于理解所有这些。那时,我查看了 Photoshop 颜色选择器,尝试在十字准线周围移动,观察 hsv/rgb 数字的变化并弄清楚它们是如何工作的。在这种情况下,i 似乎定位主要颜色,色调,指向它。色调的值实际上是循环中颜色完全饱和的程度,以红色开始,以红色结束。有一个三角形,每个点代表 R、G 和 B,其中 0 度是 R。在 R 和 G 之间是黄色,在 R 和 B 之间是洋红色,在 B 和 G 之间是青色。我们总共有 6 种颜色。这 6 种颜色是从 case 0 到 case 5。

【讨论】:

  • 对不起,我应该发布我希望 HSV (0 .. 255) 到 RGB (0 .. 255) 并对其进行很好的解释
  • 输出已经在 0..255 范围内。您可以通过将 h,s,v 每个除以 255 将算法转换为 0..255 的输入范围。但坦率地说,如果您没有看到,那么您有一个更大的问题
  • @ drhirsch,粗鲁是没有帮助的。我看不到输入是如何(0 .. 255),因为代码中没有解释。例如,为什么会出现这样的情况?每个案例的作用是什么?
  • 如果你看过上面提到的维基百科文章,你就会认出这六个案例。不要告诉我我应该用外行的方式向你解释这篇文章,因为你不想读它——我会认为这很粗鲁
  • @drhirsch 维基没有解释每个案例
猜你喜欢
  • 1970-01-01
  • 2011-03-02
  • 2011-07-09
  • 2018-03-10
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
相关资源
最近更新 更多