RGB和HSL转换

    在计算机里,RGB(Red,Green,Blue)红绿蓝和HSL(Hue,Saturation,Lightness)色调,饱和度,亮度是我们最常用的两种颜色格式,在有些时候我们需要在它们之间做相应的转换。以下是它们之间转换的原理:(更多的颜色格式转换可以查看:http://www.easyrgb.com/index.php?X=MATH

 

RGB------》HSL 代码
 
var_R = ( R / 255 )                     //RGB from 0 to 255
var_G = ( G / 255 )
var_B 
= ( B / 255 )

var_Min 
= min( var_R, var_G, var_B )    //Min. value of RGB
var_Max = max( var_R, var_G, var_B )    //Max. value of RGB
del_Max = var_Max - var_Min             //Delta RGB value

= ( var_Max + var_Min ) / 2

if ( del_Max == 0 )                     //This is a gray, no chroma...
{
   H 
= 0                                //HSL results from 0 to 1
   S = 0
}
else                                    //Chromatic data...
{
   
if ( L < 0.5 ) S = del_Max / ( var_Max + var_Min )
   
else           S = del_Max / ( 2 - var_Max - var_Min )

   del_R 
= ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max
   del_G 
= ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max
   del_B 
= ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max

   
if      ( var_R == var_Max ) H = del_B - del_G
   
else if ( var_G == var_Max ) H = ( 1 / 3 ) + del_R - del_B
   
else if ( var_B == var_Max ) H = ( 2 / 3 ) + del_G - del_R

   
if ( H < 0 ) ; H += 1
   
if ( H > 1 ) ; H -= 1
}

 

 

HSL-----》RGB 代码
 
 
if ( S == 0 )                       //HSL from 0 to 1
{
   R 
= L * 255                      //RGB results from 0 to 255
   G = L * 255
   B 
= L * 255
}
else
{
   
if ( L < 0.5 ) var_2 = L * ( 1 + S )
   
else           var_2 = ( L + S ) - ( S * L )

   var_1 
= 2 * L - var_2

   R 
= 255 * Hue_2_RGB( var_1, var_2, H + ( 1 / 3 ) ) 
   G 
= 255 * Hue_2_RGB( var_1, var_2, H )
   B 
= 255 * Hue_2_RGB( var_1, var_2, H - ( 1 / 3 ) )



--------------------------------------------------------------------------------

Hue_2_RGB( v1, v2, vH )             
//Function Hue_2_RGB
{
   
if ( vH < 0 ) vH += 1
   
if ( vH > 1 ) vH -= 1
   
if ( ( 6 * vH ) < 1 ) return ( v1 + ( v2 - v1 ) * 6 * vH )
   
if ( ( 2 * vH ) < 1 ) return ( v2 )
   
if ( ( 3 * vH ) < 2 ) return ( v1 + ( v2 - v1 ) * ( ( 2 / 3 ) - vH ) * 6 )
   
return ( v1 )
}

 

 

posted @ 2010-04-09 00:17  codingspace  阅读(1729)  评论(0)    收藏  举报