【AE表达式】RGB与HSB(HSV)转换

function rgbToHsv(rgbArray) {

    var r = rgbArray[0];

    var g = rgbArray[1];

    var b = rgbArray[2];


    var a = 1;

    if (rgbArray.length > 3) {

        a = rgbArray[3];

    }


    var max = Math.max(r, g, b),

        min = Math.min(r, g, b);

    var h, s, v = max;


    var d = max - min;

    s = max == 0 ? 0 : d / max;


    if (max == min) {

        h = 0; // achromatic

    } else {

        switch (max) {

            case r:

                h = (g - b) / d + (g < b ? 6 : 0);

                break;

            case g:

                h = (b - r) / d + 2;

                break;

            case b:

                h = (r - g) / d + 4;

                break;

        }

        h /= 6;

    }


    return [h, s, v, a];

}


function hsvToRgb(hsvArray) {

    var h = hsvArray[0];

    var s = hsvArray[1];

    var v = hsvArray[2];

    

    var a = 1;

    if (hsvArray.length > 3) {

        a = hsvArray[3];

    }

    

    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, g, b, a];

}

/* https://github.com/dyygtfx/EveryDayCode/issues/68 */



__________2017年11月4日__________

function hsvToRgb(hsvArray){var h=hsvArray[0];var s=hsvArray[1];var v=hsvArray[2];var a=1;if(hsvArray.length>3){a=hsvArray[3]}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,g,b,a];}/* https://github.com/dyygtfx/EveryDayCode/issues/68 */


function rgbToHsv(rgbArray){var r=rgbArray[0];var g=rgbArray[1];var b=rgbArray[2];var a=1;if(rgbArray.length>3){a=rgbArray[3]}var max=Math.max(r,g,b),min=Math.min(r,g,b);var h,s,v=max;var d=max-min;s=max==0?0:d/max;if(max==min){h=0}else{switch(max){case r:h=(g-b)/d+(g<b?6:0);break;case g:h=(b-r)/d+2;break;case b:h=(r-g)/d+4;break;}h/=6;}return [h,s,v,a];}

评论
热度 ( 1 )

© leizingjiu | Powered by LOFTER