Показать сообщение отдельно
Старый 17.03.2016, 01:09
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Так и не понял, в чем вопрос.
"Как брать цвет с объектов вне колорпикера" ? — делать снимок root в битмапдату и брать из нее пиксель;
"Как поставить маркеры колорпикера и задать базовый цвет квадрата для полученного извне значения" ? — пересчитать HSV "обратно".

// у Вас как то сложно все сделано, куча битмапдат, попиксельное заполнение — зачем? Делаете квадрат базового цвета (из спектрумбара, Н), поверх него квадрат с градиентом белого от прозрачного до непрозрачного, и третий квадрат с градиентом черного. Теперь все, что нужно — менять цвет базового квадрата дравРектом. Все на векторных шейпах, никаких битмап. Цвет РАССЧИТЫВАЕТЕ (a не берете пиксель с квадрата!) из координат маркера внутри квадрата и координаты Y маркера в спектрумбаре.

Добавлено через 5 минут
Да, Вам понадобится класс для пересчета HSV
Код AS3:
package gui.wysiwyg.toolbar.plugins.colorbox 
{
 
	public class HSV 
	{
		//-----------------------------------------------------------------------------------------------
		//      RGB value from Hue, Saturation and Brightness values
		//-----------------------------------------------------------------------------------------------
		public static function toRGB(h:Number, s:Number, v:Number):uint
		{
			var r:Number, g:Number, b:Number;
			var i:int;
			var f:Number, p:Number, q:Number, t:Number;
 
			if (s == 0)
			{
				r = g = b = v;
				return (Math.round(r * 255) << 16) + (Math.round(g * 255) << 8) + Math.round(b * 255);
			}
 
			if (h == 360) h = 0;
 
			h /= 60;
			i  = Math.floor(h);
			f = h - i;
			p = v * (1 - s);
			q = v * (1 - s * f);
			t = v * (1 - s * (1 - f));
 
			switch(i) 
			{
				case 0: r = v; g = t; b = p; break;
				case 1: r = q; g = v; b = p; break;
				case 2: r = p; g = v; b = t; break;
				case 3: r = p; g = q; b = v; break;
				case 4: r = t; g = p; b = v; break;
				default: r = v; g = p; b = q; break;
			}
			return (Math.round(r * 255) << 16) + (Math.round(g * 255) << 8) + Math.round(b * 255);
		}
 
		//-----------------------------------------------------------------------------------------------
		//      HSV value from Red, Green and Blue values
		//-----------------------------------------------------------------------------------------------
		public static function toHSV(r:uint, g:uint, b:uint):Array
		{
			var max:Number = Math.max(r, g, b);
			var min:Number = Math.min(r, g, b);
			var h:Number = 0;
			var s:Number = max != 0 ? (1 - min / max) * 100 : 0;
			var v:Number = (max / 255) * 100;
			if((r==g) && (g==b))  h = 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 h = 0;
			h = Math.min(360, Math.max(0, Math.round(h)));
			s = Math.min(1, Math.max(0, Math.round(s) / 100));
			v = Math.min(1, Math.max(0, Math.round(v) / 100));
 
			return [h, s, v];
		}
	}
 
}
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 17.03.2016 в 01:23.