2011-11-21 176 views
0

可能重复:
Algorithm to convert RGB to HSV and HSV to RGB?HSV(0 .. 255)RGB(0 .. 255)

是否有人对如何使用HSV值转换为RGB时解释该值是0到255?此外,

作为参考,我想在C++中做到这一点。

+6

http://en.wikipedia.org/wiki/HSL_and_HSV哪一部分 - 转换为RGB你不明白?简单地在这里重新发布一个算法将是没有意义的,请告诉我们哪个部分不工作/你不明白它 –

+0

@ Ravadre,我希望有更多的“lamens术语”的东西。维基百科以不必要的更复杂的方式呈现公式而臭名昭着。 – judeclarke

+1

@ Kerrek SB,当时真的很粗鲁吗? – judeclarke

回答

2

在这里找到 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种颜色来自情况0至5.

+0

对不起,我应该发布我希望HSV(0..255)到RGB(0..255)和一个很好的解释 – judeclarke

+1

输出已经在0..255范围内。您可以将算法转换为输入范围为0..255,方法是将h,s,v分别除以255.但坦率地说,如果您没有看到,则会出现更大的问题 – hirschhornsalz

+0

@ drhirsch,粗鲁无礼,没有帮助。由于代码中没有解释,因此我看不到输入是如何(0 .. 255)。例如,为什么这样的情况?每个案件都做了什么? – judeclarke