Revision: 40682
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at February 5, 2011 03:07 by adrianparr
Initial Code
package net.scratchbrain.color
{
import net.scratchbrain.color.AverageColor;
public class AverageColor
{
public static function averageHex(_hex1:uint,_hex2:uint):uint
{
var rgb1:Object = ConvertColor.HexToRGB(_hex1);
var rgb2:Object = ConvertColor.HexToRGB(_hex2);
var hsb1:Object = ConvertColor.RGBToHSB(rgb1.r, rgb1.g, rgb1.b);
var hsb2:Object = ConvertColor.RGBToHSB(rgb2.r, rgb2.g, rgb2.b);
return averageHsb(hsb1.h, hsb1.s, hsb1.b, hsb2.h, hsb2.s, hsb2.b);
}
public static function averageRgb(_r1:int,_g1:int,_b1:int,_r2:int,_g2:int,_b2:int):uint
{
var hsb1:Object = ConvertColor.RGBToHSB(_r1, _g1, _b1);
var hsb2:Object = ConvertColor.RGBToHSB(_r2, _g2, _b2);
return averageHsb(hsb1.h, hsb1.s, hsb1.b, hsb2.h, hsb2.s, hsb2.b);
}
public static function averageHsb(_h1:int, _s1:int, _b1:int, _h2:int, _s2:int, _b2:int):uint
{
var _h:int;
var _s:int;
var _b:int;
if(_h1 <= 18 && _s1 != 0 && _h2 >= 180){
_h1 = 360;
}
if(_h2 <= 18 && _s2 != 0 && _h1 >= 180){
_h2 = 360;
}
if(_s1 != 0 && _s2 != 0){
_h = (_h1 + _h2)/2;
_s = (_s1 + _s2)/2;
_b = (_b1 + _b2)/2;
}else if(_s1 == 0 && _s2 == 0){
_h = 0;
_s = 0;
_b = (_b1 + _b2)/2;
}else{
_h = (_h1 != 0) ? _h1 : _h2;
_s = (_s1 + _s2)/2;
_b = (_b1 + _b2)/2;
}
var rgb:Object = ConvertColor.HSBToRGB(_h, _s, _b);
return ConvertColor.RGBToHex(rgb.r, rgb.g, rgb.b);
}
}
}
package net.scratchbrain.color
{
public class ConvertColor
{
public static function RGBToHex(r:int,g:int,b:int):uint
{
var hex:uint = r<<16 | g<<8 | b;
return hex;
}
public static function HexToRGB(value:uint):Object{
var rgb:Object = new Object();
rgb.r = (value >> 16) & 0xFF
rgb.g = (value >> 8) & 0xFF
rgb.b = value & 0xFF
return rgb;
}
public static function RGBToHSB(r:int,g:int,b:int):Object{
var hsb:Object = new Object;
var _max:Number = Math.max(r,g,b);
var _min:Number = Math.min(r,g,b);
hsb.s = (_max != 0) ? (_max - _min) / _max * 100: 0;
hsb.b = _max / 255 * 100;
if(hsb.s == 0){
hsb.h = 0;
}else{
switch(_max)
{
case r:
hsb.h = (g - b)/(_max - _min)*60 + 0;
break;
case g:
hsb.h = (b - r)/(_max - _min)*60 + 120;
break;
case b:
hsb.h = (r - g)/(_max - _min)*60 + 240;
break;
}
}
hsb.h = Math.min(360, Math.max(0, Math.round(hsb.h)))
hsb.s = Math.min(100, Math.max(0, Math.round(hsb.s)))
hsb.b = Math.min(100, Math.max(0, Math.round(hsb.b)))
return hsb;
}
public static function HSBToRGB(h:int,s:int,b:int):Object{
var rgb:Object = new Object();
var max:Number = (b*0.01)*255;
var min:Number = max*(1-(s*0.01));
if(h == 360){
h = 0;
}
if(s == 0){
rgb.r = rgb.g = rgb.b = b*(255*0.01) ;
}else{
var _h:Number = Math.floor(h / 60);
switch(_h){
case 0:
rgb.r = max ;
rgb.g = min+h * (max-min)/ 60;
rgb.b = min;
break;
case 1:
rgb.r = max-(h-60) * (max-min)/60;
rgb.g = max;
rgb.b = min;
break;
case 2:
rgb.r = min ;
rgb.g = max;
rgb.b = min+(h-120) * (max-min)/60;
break;
case 3:
rgb.r = min;
rgb.g = max-(h-180) * (max-min)/60;
rgb.b =max;
break;
case 4:
rgb.r = min+(h-240) * (max-min)/60;
rgb.g = min;
rgb.b = max;
break;
case 5:
rgb.r = max;
rgb.g = min;
rgb.b = max-(h-300) * (max-min)/60;
break;
case 6:
rgb.r = max;
rgb.g = min+h * (max-min)/ 60;
rgb.b = min;
break;
}
rgb.r = Math.min(255, Math.max(0, Math.round(rgb.r)))
rgb.g = Math.min(255, Math.max(0, Math.round(rgb.g)))
rgb.b = Math.min(255, Math.max(0, Math.round(rgb.b)))
}
return rgb;
}
}
}
Initial URL
http://www.libspark.org/wiki/scratchbrain/AverageColor
Initial Description
Full credit for this code goes to Scratchbrain (http://www.scratchbrain.net/blog/ver2/)
Initial Title
AS3 Average Colour Between Two Colours
Initial Tags
color
Initial Language
ActionScript 3