为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript将HSB / HSV颜色准确转换为RGB

Javascript将HSB / HSV颜色准确转换为RGB

梦里花落0921 2019-10-11 11:15:31
我需要准确地将HSB转换为RGB,但是我不确定如何解决将小数转换为整数而不四舍五入的问题。这是我从colorpicker库中获得的当前函数:HSBToRGB = function (hsb) {    var rgb = { };    var h = Math.round(hsb.h);    var s = Math.round(hsb.s * 255 / 100);    var v = Math.round(hsb.b * 255 / 100);        if (s == 0) {        rgb.r = rgb.g = rgb.b = v;        } else {        var t1 = v;        var t2 = (255 - s) * v / 255;        var t3 = (t1 - t2) * (h % 60) / 60;            if (h == 360) h = 0;                if (h < 60) { rgb.r = t1; rgb.b = t2; rgb.g = t2 + t3 }                else if (h < 120) { rgb.g = t1; rgb.b = t2; rgb.r = t1 - t3 }                else if (h < 180) { rgb.g = t1; rgb.r = t2; rgb.b = t2 + t3 }                else if (h < 240) { rgb.b = t1; rgb.r = t2; rgb.g = t1 - t3 }                else if (h < 300) { rgb.b = t1; rgb.g = t2; rgb.r = t2 + t3 }                else if (h < 360) { rgb.r = t1; rgb.g = t2; rgb.b = t1 - t3 }                else { rgb.r = 0; rgb.g = 0; rgb.b = 0 }        }    return { r: Math.round(rgb.r), g: Math.round(rgb.g), b: Math.round(rgb.b) };如您所见,此函数的不准确性来自Math.round
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

我曾经写过这个函数:


function mix(a, b, v)

{

    return (1-v)*a + v*b;

}


function HSVtoRGB(H, S, V)

{

    var V2 = V * (1 - S);

    var r  = ((H>=0 && H<=60) || (H>=300 && H<=360)) ? V : ((H>=120 && H<=240) ? V2 : ((H>=60 && H<=120) ? mix(V,V2,(H-60)/60) : ((H>=240 && H<=300) ? mix(V2,V,(H-240)/60) : 0)));

    var g  = (H>=60 && H<=180) ? V : ((H>=240 && H<=360) ? V2 : ((H>=0 && H<=60) ? mix(V2,V,H/60) : ((H>=180 && H<=240) ? mix(V,V2,(H-180)/60) : 0)));

    var b  = (H>=0 && H<=120) ? V2 : ((H>=180 && H<=300) ? V : ((H>=120 && H<=180) ? mix(V2,V,(H-120)/60) : ((H>=300 && H<=360) ? mix(V,V2,(H-300)/60) : 0)));


    return {

        r : Math.round(r * 255),

        g : Math.round(g * 255),

        b : Math.round(b * 255)

    };

}

它期望0 <= H <= 360、0 <= S <= 1和0 <= V <= 1,并返回包含R,G和B(0到255之间的整数值)的对象。我使用此图像来创建代码。


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 1091 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信