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

我需要准确地将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


梦里花落0921
浏览 1103回答 3
3回答

守候你守候我

我曾经写过这个函数:function mix(a, b, v){&nbsp; &nbsp; return (1-v)*a + v*b;}function HSVtoRGB(H, S, V){&nbsp; &nbsp; var V2 = V * (1 - S);&nbsp; &nbsp; var r&nbsp; = ((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)));&nbsp; &nbsp; var g&nbsp; = (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)));&nbsp; &nbsp; var b&nbsp; = (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)));&nbsp; &nbsp; return {&nbsp; &nbsp; &nbsp; &nbsp; r : Math.round(r * 255),&nbsp; &nbsp; &nbsp; &nbsp; g : Math.round(g * 255),&nbsp; &nbsp; &nbsp; &nbsp; b : Math.round(b * 255)&nbsp; &nbsp; };}它期望0 <= H <= 360、0 <= S <= 1和0 <= V <= 1,并返回包含R,G和B(0到255之间的整数值)的对象。我使用此图像来创建代码。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript