Показать сообщение отдельно
Старый 12.06.2006, 21:02
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 13  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
Код:
class col {
	
	static function toHSB(rgb:Number):Object{
		var r = (rgb >> 16) & 0xFF;
		var g = (rgb >> 8) & 0xFF;
		var b = rgb & 0xFF;
		var hsb = new Object();
		hsb.b = Math.max(Math.max(r, g), b);
		var min = Math.min(Math.min(r, g), b);
		hsb.s = (hsb.b<=0) ? 0 : Math.round(100*(hsb.b-min)/hsb.b);
		hsb.b = Math.round((hsb.b/255)*100);
		hsb.h = 0;
		if ((r == g) && (g == b)) {hsb.h = 0;} 
		else if (r>=g && g>=b) {	hsb.h = 60*(g-b)/(r-b);} 
		else if (g>=r && r>=b) {hsb.h = 60+60*(g-r)/(g-b);} 
		else if (g>=b && b>=r) {hsb.h = 120+60*(b-r)/(g-r);} 
		else if (b>=g && g>=r) {hsb.h = 180+60*(b-g)/(b-r);} 
		else if (b>=r && r>=g) {hsb.h = 240+60*(r-g)/(b-g);} 
		else if (r>=b && b>=g) {hsb.h = 300+60*(r-b)/(r-g);} 
		else {	hsb.h = 0;	}
		hsb.h = Math.round(hsb.h);
		return hsb;
	}
	
	
	static function toRGB(hsb:Object):Number {
		var r,g,b,rgb;
		var h = Math.round(hsb.h);
		var s = Math.round(hsb.s*255/100);
		var v = Math.round(hsb.b*255/100);
		if(s == 0) {
			r = g = b = v;
		} else {
			var t1 = v;	
			var t2 = (255-s)*v/255;	
			var t3 = (t1-t2)*(h%60)/60;
			if(h==360) h = 0;
			if(h<60) {r=t1;	b=t2;	g=t2+t3}
			else if(h<120) {g=t1;	b=t2;	r=t1-t3}
			else if(h<180) {g=t1;	r=t2;	b=t2+t3}
			else if(h<240) {b=t1;	r=t2;	g=t1-t3}
			else if(h<300) {b=t1;	g=t2;	r=t2+t3}
			else if(h<360) {r=t1;	g=t2;	b=t1-t3}
			else {r=0;	g=0;	b=0}
		}
		//trace(r+' '+g+' '+b);
		rgb = r << 16 | g << 8 | b;
		return rgb;
	}

	static function modRGB(rgb:Number, s:Number, b:Number):Number {
		var hsb:Object = col.toHSB(rgb);
		hsb.s+=s; 
		if (hsb.s>100) {hsb.s=100}
		if (hsb.s<0) {hsb.s=0}
		hsb.b+=b;
		if (hsb.b>100) {hsb.b=100}
		if (hsb.b<0) {hsb.b=0}
		return (col.toRGB(hsb));		
	}

}
как использовать:
Код:
var color1=0xEEEEEE;
var color2=col.modRGB(color1, 0, 10);//увеличивает яркость
var color3=col.modRGB(color1, 0, -10);//уменьшает яркость
(что происходит: цвет из ргб конвертируется в HSB, меняется яркость и цвет конвертируется обратно )

кроме того этот класс может менять насыщенность цвета, ну и конвертировать туда и обратно
__________________
Хороший отдых - половина работы.


Последний раз редактировалось artcraft; 12.06.2006 в 21:06.