RGB和HSL转换

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

 

ExpandedBlockStart.gif 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
}

 

 

ExpandedBlockStart.gif 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 )
}

 

 

转载于:https://www.cnblogs.com/codingspace/archive/2010/04/09/1707900.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值