2011년 3월 11일 금요일

core4

/**
 *
 * http://ntt.cc/2010/07/27/how-to-calculate-the-average-between-2-colors-in-actionscript3.html
 */
package com.na4.color
{
public class Coloring
{
public function Coloring()
{
} // End of the public function


public function HSBtoRGB(h:int, s:int, v:int)
{
var _loc2:N;
var _loc4:int;
var _loc1:int;

h = Math.round(h);
s = Math.round(s * 255 / 100);
v = Math.round(v * 255 / 100);

if (s == 0)
{
_loc1 = v;
_loc4 = v;
_loc2 = v;
}
else
{
var _loc5 = v;
var _loc3 = (255 - s) * v / 255;
var _loc7 = (_loc5 - _loc3) * (h % 60) / 60;
if (h == 360)
{
h = 0;
} // end if
if (h < 60)
{
_loc2 = _loc5;
_loc1 = _loc3;
_loc4 = _loc3 + _loc7;
}
else if (h < 120)
{
_loc2 = _loc5 - _loc7;
_loc4 = _loc5;
_loc1 = _loc3;
}
else if (h < 180)
{
_loc2 = _loc3;
_loc4 = _loc5;
_loc1 = _loc3 + _loc7;
}
else if (h < 240)
{
_loc2 = _loc3;
_loc4 = _loc5 - _loc7;
_loc1 = _loc5;
}
else if (h < 300)
{
_loc2 = _loc3 + _loc7;
_loc4 = _loc3;
_loc1 = _loc5;
}
else if (h < 360)
{
_loc2 = _loc5;
_loc4 = _loc3;
_loc1 = _loc5 - _loc7;
}
else
{
_loc2 = 0;
_loc4 = 0;
_loc1 = 0;
} // end else if
} // end else if
_loc2 = Math.round(_loc2);
_loc4 = Math.round(_loc4);
_loc1 = Math.round(_loc1);
return (_loc2 << 16 | _loc4 << 8 | _loc1);
} // End of the public function


public function RGBtoHSB(rgb)
{
var _loc3 = rgb >> 16;
var _loc1 = (rgb & 65280) >> 8;
var _loc2 = rgb & 255;
var _loc4 = new Object();
_loc4.b = Math.max(Math.max(_loc3, _loc1), _loc2);
var _loc6 = Math.min(Math.min(_loc3, _loc1), _loc2);
_loc4.s = _loc4.b <= 0 ? (0) : (Math.round(100 * (_loc4.b - _loc6) / _loc4.b));
_loc4.b = Math.round(_loc4.b / 255 * 100);
_loc4.h = 0;
if (_loc3 == _loc1 && _loc1 == _loc2)
{
_loc4.h = 0;
}
else if (_loc3 >= _loc1 && _loc1 >= _loc2)
{
_loc4.h = 60 * (_loc1 - _loc2) / (_loc3 - _loc2);
}
else if (_loc1 >= _loc3 && _loc3 >= _loc2)
{
_loc4.h = 60 + 60 * (_loc1 - _loc3) / (_loc1 - _loc2);
}
else if (_loc1 >= _loc2 && _loc2 >= _loc3)
{
_loc4.h = 120 + 60 * (_loc2 - _loc3) / (_loc1 - _loc3);
}
else if (_loc2 >= _loc1 && _loc1 >= _loc3)
{
_loc4.h = 180 + 60 * (_loc2 - _loc1) / (_loc2 - _loc3);
}
else if (_loc2 >= _loc3 && _loc3 >= _loc1)
{
_loc4.h = 240 + 60 * (_loc3 - _loc1) / (_loc2 - _loc1);
}
else if (_loc3 >= _loc2 && _loc2 >= _loc1)
{
_loc4.h = 300 + 60 * (_loc3 - _loc2) / (_loc3 - _loc1);
}
else
{
_loc4.h = 0;
} // end else if
_loc4.h = Math.round(_loc4.h);
return (_loc4);
} // End of the public function
}
}

댓글 없음:

댓글 쓰기