topical media & game development

talk show tell print

#graphic-flex-image-effects-07-source-aether-utils-ColorUtil.ax

#graphic-flex-image-effects-07-source-aether-utils-ColorUtil.ax [swf] [flash] flex


  package aether.utils {
  
          import flash.display.DisplayObject;
          import flash.geom.ColorTransform;
  
          public class @ax-graphic-flex-image-effects-07-source-aether-utils-ColorUtil {
          
                  static public var RED:uint = 0xFF0000;
                  static public var BLUE:uint = 0x0000FF;
                  static public var CYAN:uint = 0x00FFFF;
                  static public var GREEN:uint = 0x00FF00;
                  static public var YELLOW:uint = 0xFFFF00;
                  static public var PURPLE:uint = 0xFF00FF;
                  static public var BLACK:uint = 0x000000;
                  static public var WHITE:uint = 0xFFFFFF;
                  static public var ORANGE:uint = 0xFF6600;
  
                  static public function colorRGB(object:DisplayObject, color:uint):void {
                          object.transform.colorTransform = new ColorTransform(0, 0, 0, 1, color>>16&0xFF, color>>8&0xFF, color&0xFF);
                  }
  
                  static public function decToHex(num:uint):String {
                          var hex:String = num.toString(16);
                          while (hex.length < 6) hex = "0" + hex;
                          return hex;
                  }
          
                  static public function decToHexString(num:uint):String {
                          return "#" + decToHex(num).toUpperCase();
                  }
          
                  static public function decToHex32(num:uint):String {
                          var hex:String = num.toString(24);
                          while (hex.length < 6) hex = "0" + hex;
                          return hex;
                  }
          
                  static public function decToHexString32(num:uint):String {
                          return "#" + decToHex32(num).toUpperCase();
                  }
  
                  static public function toRGB(c:uint):Object {
                          return         {
                                          r:        c >> 16 & 0xFF,
                                          g:        c >> 8 & 0xFF,
                                          b:        c & 0xFF
                                          };
                  }
          
                  static public function fromRGB(r:Number, g:Number, b:Number):Number {
                          return (r << 16 | g << 8 | b);
                  }
          
                  static public function RGBtoHSV(r:Number, g:Number, b:Number):Object {
                          if (arguments.length == 1) {
                                  var c:Number = r;
                                  r = c >> 16 & 0xFF;
                                  var g:Number = c >> 8 & 0xFF;
                                  var b:Number = c & 0xFF;
                          }
                          var hsv:Object = {};
                          hsv.v = Math.max(Math.max(r,g),b);
                          var min:Number = Math.min(Math.min(r,g),b);
                          hsv.s = (hsv.v <= 0) ? 0 : Math.round(100*(hsv.v - min)/hsv.v);
                          hsv.v = Math.round((hsv.v /255)*100);
                          hsv.h = 0;
                          if((r==g) && (g==b))  hsv.h = 0;
                          else if(r>=g && g>=b) hsv.h = 60*(g-b)/(r-b);
                          else if(g>=r && r>=b) hsv.h = 60  + 60*(g-r)/(g-b);
                          else if(g>=b && b>=r) hsv.h = 120 + 60*(b-r)/(g-r);
                          else if(b>=g && g>=r) hsv.h = 180 + 60*(b-g)/(b-r);
                          else if(b>=r && r>=g) hsv.h = 240 + 60*(r-g)/(b-g);
                          else if(r>=b && b>=g) hsv.h = 300 + 60*(r-b)/(r-g);
                          else hsv.h = 0;
                          hsv.h = Math.round(hsv.h);
                          return hsv;
                  }
          
                  static public function findHue(r:Number, g:Number, b:Number):Object {
                          var h:Number=0;
                          if(r==g==b)return 0;
                          else if(r>=g&&g>=b)h=60*(g-b)/(r-b);
                          else if(g>=r&&r>=b)h=60+60*(g-r)/(g-b);
                          else if(g>=b&&b>=r)h=120+60*(b-r)/(g-r);
                          else if(b>=g&&g>=r)h=180+60*(b-g)/(b-r);
                          else if(b>=r&&r>=g)h=240+60*(r-g)/(b-g);
                          else if(r>=b&&b>=g)h=300+60*(r-b)/(r-g);
                          else return 0;
                          return h|0;
                  }
          
                  static public function HSVtoRGB(h:Number, s:Number, v:Number):Object {
                          var rgb:Object = {};
                          h = Math.round(h);
                          s = Math.round(s*255/100);
                          v = Math.round(v*255/100);
                          if(s == 0) {
                                  rgb.r = rgb.g = rgb.b = v;
                          } else {
                                  var t1:Number = v;        
                                  var t2:Number = (255-s)*v/255;        
                                  var t3:Number = (t1-t2)*(h%60)/60;
                                  if(h==360) h = 0;
                                  if(h<60) {rgb.r=t1;        rgb.b=t2;        rgb.g=t2+t3}
                                  else if(h<120) {rgb.g=t1;        rgb.b=t2;        rgb.r=t1-t3}
                                  else if(h<180) {rgb.g=t1;        rgb.r=t2;        rgb.b=t2+t3}
                                  else if(h<240) {rgb.b=t1;        rgb.r=t2;        rgb.g=t1-t3}
                                  else if(h<300) {rgb.b=t1;        rgb.g=t2;        rgb.r=t2+t3}
                                  else if(h<360) {rgb.r=t1;        rgb.g=t2;        rgb.b=t1-t3}
                                  else {rgb.r=0;        rgb.g=0;        rgb.b=0}
                          }
                          return rgb;
                  }
          
                  static public function HSVtoInt(h:Number, s:Number, v:Number):Number {
                          var rgb:Object = HSVtoRGB(h, s, v);
                          return (rgb.r<<16|rgb.g<<8|rgb.b);
                  }
          
                  static public function darken(c:Number, v:Number):Number {
                          var r:Number=c>>16&0xFF;
                          var g:Number=c>>8&0xFF;
                          var b:Number=c&0xFF;
                          r=(r-(r)*v)|0;
                          g=(g-(g)*v)|0;
                          b=(b-(b)*v)|0;
                          return r<<16|g<<8|b;
                  }
  
                  static public function brighten(c:Number, v:Number):Number {
                          var r:Number=c>>16&0xFF;
                          var g:Number=c>>8&0xFF;
                          var b:Number=c&0xFF;
                          r=Math.min(255,(r+(r)*v)|0);
                          g=Math.min(255,(g+(g)*v)|0);
                          b=Math.min(255,(b+(b)*v)|0);
                          return r<<16|g<<8|b;
                  }
  
          }
  
  }


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.