Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ HSV(0..255)到RGB(0..255)_C++_Algorithm_Graphics_Colors_Color Picker - Fatal编程技术网

C++ HSV(0..255)到RGB(0..255)

C++ HSV(0..255)到RGB(0..255),c++,algorithm,graphics,colors,color-picker,C++,Algorithm,Graphics,Colors,Color Picker,可能重复: 有人能解释一下当HSV值为0到255时如何将其转换为RGB吗?而且 ,我尝试在C++中做这件事。 在这里找到它 编辑: 我曾经写过一个颜色选择器,并且习惯于理解所有这些。当时,我看着photoshop颜色选择器,试着在十字线周围移动,观察hsv/rgb数字的变化,并找出它们是如何工作的。在这种情况下,i似乎可以确定主色调指向它的位置。色调的值实际上是以红色开始,以红色结束的循环中完全饱和的颜色的程度。有一个三角形,每个点代表R,G和B,其中0度是R。在R和G之间是黄色,在R和B之

可能重复:

有人能解释一下当HSV值为0到255时如何将其转换为RGB吗?而且

<参考>,我尝试在C++中做这件事。

在这里找到它

编辑:


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

您不了解从-转换为RGB的哪一部分?简单地在这里重新发布一个算法是没有意义的,请告诉我们哪个部分不起作用/你不理解它@Ravadre,我希望用更“蹩脚的术语”来描述它。维基百科以比必要的更复杂的方式呈现公式而臭名昭著。@Kerrek SB,粗鲁真的是必要的吗?@detunized,事实上,不是。通常为(0…1)至(0…255),etc@judeclarke:所以,缩放它:如果你有(0…255),只需将你的值除以255,然后它们就会变成(0…1),那么你就可以使用这些算法了!很抱歉,我应该发布我希望HSV(0..255)到RGB(0..255)的结果,并对其进行了很好的解释。输出已经在0..255范围内。通过将h、s、v分别除以255,可以将算法的输入范围转换为0..255。但是坦率地说,如果你没有看到这一点,你就有一个更大的问题@drhirsch,粗鲁是没有帮助的。我看不出输入是如何的(0..255),因为代码中没有解释。例如,为什么会出现这样的情况?每个案例都有什么作用?如果你看一看上面提到的维基百科文章,你就会认出这六个案例。不要告诉我,我应该用外行的方式向你解释这篇文章,因为你不想读它——我会认为这很粗鲁。
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];
}