flex:颜色相关

 package VFCommon
{
 public class Utility
 {
  public static var STANDARD_L:Number = 0.5;
  public static function RoundAngle(angle:Number):Number
  {
   if (angle >= Math.PI * 2)
    return angle % Math.PI * 2;
   if (angle < 0)
    return Math.PI * 2 + angle % Math.PI * 2;
   return angle;
  }
  public static function GetBright(color:int):int // for HSV
  {
   var min:Number = 0;
   var max:Number = 0;
   var v:Number = 0;
   // blue
   v = color & 0x0000ff;
   min = v;
   max = v;
   // green
   v = (color & 0x00ff00) >> 8;
   if (v > max)
    max = v;
   if (v < min)
    min = v;
   // red
   v = (color & 0xff0000) >> 16;
   if (v > max)
    max = v;
   if (v < min)
    min = v;
   // return
   return (min + max) / 2;
  }
  /*******************************************************/
  public static function GetRightFontColor(rgb_color:uint):uint{
   var L:Number = RGB2HSL(rgb_color);
   if(L >= STANDARD_L){
    return 0x000000;
   }else{
    return 0xffffff;
   }
  }
  public static function RGB2HSL(rgb_color:uint):Number{
   var R:Number = GetRValue(rgb_color)/255.0;
   var G:Number = GetGValue(rgb_color)/255.0;
   var B:Number = GetBValue(rgb_color)/255.0;
   var cmax:Number = Math.max(R,Math.max(G,B));
     var cmin:Number = Math.min(R,Math.min(G,B));
     var L:Number = (cmax+cmin)/2.0;
     return L;
  }
  public static function GetRValue(color:uint):Number{
   var r:Number = color >> 16 & 0xff;
   trace(r);
      return r;
  }
  public static function GetGValue(color:uint):Number{
   var g:Number = color >> 8 & 0xff;
   trace(g);
      return g;
  }
  public static function GetBValue(color:uint):Number{
   var b:Number = color & 0xff;
   trace(b);
      return b;
  }
  
  /*******************************************************/
 }
}

 

算法:

 

void RGBtoHSL(COLORREF rgb, double* H, double* S, double* L)
{
  double delta;
  double r = (double)GetRValue(rgb)/255;
  double g = (double)GetGValue(rgb)/255;
  double b = (double)GetBValue(rgb)/255;
  double cmax = max(r,max(g,b));
  double cmin = min(r,min(g,b));
  *L = (cmax+cmin)/2.0;
  if (cmax == cmin)
  {
    *S = 0;
    *H = 0; // it's really undefined
  }
  else
  {
    if (*L < 0.5)
      *S = (cmax-cmin)/(cmax+cmin);
    else
      *S = (cmax-cmin)/(2.0-cmax-cmin);
    delta = cmax - cmin;
    if (r==cmax)
      *H = (g-b)/delta;
    else if (g==cmax)
      *H = 2.0 +(b-r)/delta;
    else
      *H = 4.0+(r-g)/delta;
    *H /= 6.0;
    if (*H < 0.0)
      *H += 1;
  }
}

 

COLORREF HLStoRGB(const double& H, const double& L, const double& S)
{
  double r,g,b;
  double m1, m2;

  if (S==0)
  {
    r=g=b=L;
  }
  else
  {
    if (L <= 0.5)
      m2 = L*(1.0+S);
    else
      m2 = L+S-L*S;
    m1 = 2.0*L-m2;
    r = HuetoRGB(m1, m2, H+1.0/3.0);
    g = HuetoRGB(m1, m2, H);
    b = HuetoRGB(m1, m2, H-1.0/3.0);
  }
  return RGB((BYTE)(r*255),(BYTE)(g*255),(BYTE)(b*255));
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值