RGB和HSB颜色代码转换

1、RGB

RGB是色光的色彩模式。即红 (Red)、绿 (Green)、蓝 (Blue)三原色的简称。三种色彩叠加形成了其它的色彩。因为三种颜色都有256个亮度水平级,所以三种色彩叠加就形成1670万种颜色了。也就是真彩 色,通过它们足以在现绚丽的世界。我们日常用的彩色电脑显示器、彩色电视机等的色彩都使用这种模式,在Photoshop使用RGB色彩模式编辑图像时的通道窗口中我们可以看到组成这幅画 面的三种通道。在RGB模式中,由红、绿、蓝相叠加可以产生其它颜色,因此该模式也叫加色模式。所有显示器、投影设备以及电视机等等许多设备都依赖于这种 加色模式来实现的。就编辑图象而言,RGB色彩模式也是最佳的色彩模式,因为它可以提供全屏幕的24bit的色彩范围,即真彩色显示。但是,如果将RGB模式用于打印就不是 最佳的了,因为RGB模式所提供的有些色彩已经超出了打印的范围之外,因此在打印一幅真彩色的图象时,就必然会损失一部分亮度,并且比较鲜艳的色彩肯定会 失真的。。这主要因为打印所用的是CMYK模式,而CMYK模式所定义的色彩要比RGB模式定义的色彩少很多,因此打印时,系统自动将RGB模式转换为 CMYK模式,这样就难免损失一部分颜色,出现打印后失真的现象。

2、HSB

 

HSB是以人类对颜色的感觉为依据而建立的,在HSB模式中,所有的颜色都是根据下列三种基本特征来进行形容和描述的。

色相(Hue):是由物体发射或反射出来的颜色。它是根据色彩在一个0-360的标准色盘上的位置来决定的,通常以颜色的名称来辨识,例如红、橙和绿等等,红色在0度,绿色在120度,蓝色在240度。它基本上是RGB模式全色度的饼状图。

饱和度(Saturation):表示色彩的纯度,有时也被称为彩度,为0%时为灰色。白、黑和其他灰色色彩都没有饱和度的。在最大饱和度时,每一色相具有最纯的色光。

亮度(Brightness):是指颜色相对的亮度和暗度,通常是用为0%(黑)到100%(白)的方式进行测定。

 

转换公式:

/**

 * 将HSB颜色格式转换成RGB格式。

 * 

 * @param H Hue

 * @param S Saturation

 * @param B Brightness

 * @return hash rgb color hash

 */

var HSB_2_RGB = function(H, S, B) {

    var rgb = {R:0, G:0, B:0};

    H = (H >= 360) ? 0 : H;

    if(S == 0) {

        rgb.R = B * 255;

        rgb.G = B * 255;

        rgb.B = B * 255;

    } else {

        i = Math.floor(H / 60) % 6;

        f = H / 60 - i;

        p = B * (1 - S);

        q = B * (1 - S * f);

        t = B * (1 - S * (1 - f));

        switch(hi) {

                case 0:

                    rgb.R = B, rgb.G = t, rgb.B = p;

                    break;

                case 1:

                    rgb.R = q; rgb.G = B; rgb.B = p;

                    break;

                case 2:

                    rgb.R = p; rgb.G = B; rgb.B = t;

                    break;

                case 3:

                    rgb.R = p; rgb.G = q; rgb.B = B;

                    break;

                case 4:

                    rgb.R = t; rgb.G = p; rgb.B = B;

                    break;

                case 5:

                    rgb.R = B; rgb.G = p; rgb.B = q;

                    break;

            }

        rgb.R = rgb.R * 255;

        rgb.G = rgb.G * 255;

        rgb.B = rgb.B * 255;

    }

    return rgb;

};



/**

 * 将RGB颜色格式转换成HSB格式。

 * 

 * @param R Red

 * @param G Green

 * @param B Blue

 * @return hash hsb color

 */

var RGB_2_HSB = function(R, G, B) {

    var var_Min = Math.min(Math.min(R, G), B);

    var var_Max = Math.max(Math.max(R, G), B);

    var hsb = {H:0, S:0, B:0};

    if(var_Min == var_Max) {

        hsb.H = 0;

    } else if(var_Max == R && G >= B) {

        hsb.H = 60 * ( (G - B) / (var_Max - var_Min) );

    } else if(var_Max == R && G < B) {

        hsb.H = 60 * ( (G - B) / (var_Max - var_Min) ) + 360;

    } else if(var_Max == G) {

        hsb.H = 60 * ( (B - R) / (var_Max - var_Min) ) + 120;

    } else if(var_Max == B) {

        hsb.H = 60 * ( (R - G) / (var_Max - var_Min) ) + 240;

    }

    if(var_Max == 0) {

        hsb.S = 0;

    } else {

        hsb.S = 1 - (var_Min / var_Max);

    }

    var var_R = (R / 255);

    var var_G = (G / 255);

    var var_B = (B / 255);

    hsb.B = Math.max(Math.max(var_R, var_G), var_B);

    hsb.H = (hsb.H >= 360) ? 0 : hsb.H;

    return hsb;

};

版权声明:本文为fcrpg2005原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。