将HSV转换为RGB不起作用Javascript

时间:2017-08-27 19:40:15

标签: javascript

我正在尝试使用Javascript将HSV转换为RGB。

由于某种原因,输出不正确。返回的数字很疯狂。例如,在将hsv(0, 100, 100)传递给函数时,它会返回rgb(25500, -2524500, -2524500);

这显然不是有效的RGB值。

以下是将HSV转换为RGB的函数:

function HSVtoRGB(h, s, v) {
    var r, g, b, i, f, p, q, t;
    if (arguments.length === 1) {
        s = h.s, v = h.v, h = h.h;
    }
    i = Math.floor(h * 6);
    f = h * 6 - i;
    p = v * (1 - s);
    q = v * (1 - f * s);
    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: Math.round(r * 255),
        g: Math.round(g * 255),
        b: Math.round(b * 255)
    };
}

1 个答案:

答案 0 :(得分:1)

原来,功能正常。
问题在于我传递的价值观。

而不是hsv(50, 100, 100),请使用hsv(50/360, 1, 1)

您必须将色调除以360,而S和V最多为1,而不是100。