![]() |
|
||||||||||
|
|||||
|
хочу создать что-то типа Paint'овской палитры, а именно ту часть где выбирается произвольный цвет.
собственно, генерация цвета (ось Х) и его насыщенности (ось Y) проблем не составляют, а вот как реализовать регулировку яркости? Это тот ползунок что справа. Пробовал перемножать каждый канал на некий коэфициент - получил болт.
__________________
When you kill for money, there are no rules... |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
http://www.peterjoel.com/Samples/index.php
Зайти в пункт меню colour wheel |
|
|||||
|
О, спасибо большое!
__________________
When you kill for money, there are no rules... |
|
|||||
|
Регистрация: Sep 2006
Адрес: Zaporozhye, Ukraine
Сообщений: 141
|
вот еще класс, RGB-HLS-HSB
http://dev.etcs.ru/blog/as2/ru/etcs/draw/colorobject/ |
|
|||||
|
Регистрация: Jul 2006
Сообщений: 72
|
подскажите я вот скопировал флэшку по вот этой ссылке http://www.peterjoel.com/Samples/index.php но почему то ни куда её встроить не могу.. подскажет в чём причина.. флэш пишет There is no method with the name 'HSB_to_RGB', либо There is no method with the name 'RGB_to_HSB' .. не могу понять я ведь всё копирую...
|
|
|||||
|
Регистрация: Sep 2006
Адрес: Zaporozhye, Ukraine
Сообщений: 141
|
|
|
|||||
|
Регистрация: Oct 2004
Сообщений: 149
|
Прям от сердца оторвал
![]() Color.prototype.RGBtoHSB (rgb:Number)
{
var R = (rgb&0xff0000)>>16;
var G = (rgb&0xff00)>>8;
var B = (rgb&0xff);
var Br = Math.max(Math.max(R,G),B);
var minVal = Math.min(Math.min(R,G),B);
var delta = Br - minVal;
if ( Br == 0 ) { S = 0 } else { S = delta/Br*100; }
if ( S == 0) { H = 0 } else if (R == Br) { H = 60*(G-B)/delta } else if ( G == Br ) { H = 120+60*(B-R)/delta } else {
H = 240+60*(R-G)/delta;}
if ( H < 0) { H +=360 };
return ([Math.round(H), Math.round(S), Math.round(Br/255*100)])
}
Color.prototype.HSBtoRGB(H, S, Br)
{
Br = Br/100*255;
if ( S == 0) {
R = G = B = Br
} else {
var resH = H/60-Math.floor(H/60);
var bot = (Br*(1-S/100));
var dec = (Br*(1-(S*resH)/100));
var inc = (Br*(1-(S*(1-resH)/100)));
switch (Math.floor(H/60)){
case 0: R = Br; G = inc; B = bot; break;
case 1: R = dec; G = Br; B = bot; break;
case 2: R = bot; G = Br; B = inc; break;
case 3: R = bot; G = dec; B = Br; break;
case 4: R = inc; G = bot; B = Br; break;
case 5: R = Br; G = bot; B = dec; break;
}
}
return Math.round(R)<<16|Math.round(G)<<8|Math.round(B);
}
Теперь к примеру для _root.circle подымим яркость на 10% circleColor = new Color (_root.circle); HSBColor = circleColor.RGBtoHSB(circleColor.getRGB()) circleColor.setRGB(circleColor.HSBtoRGB(HSBColor[0], HSBColor[1], (((HSBColor[2]+10) < 100 ) ? HSBColor[2]+10 : 100)) HSBColor[0] - Hue - тон, может принимать значение от 0 до 359 HSBColor[1] - Saturation - насыщенность, может принимать значение от 0 и до 100 HSBColor[2] - Brightness - яркость, может принимать значени еот 0 до 100 Вроде бы всё правильно ![]() |
|
|||||
|
а БЕЗ преобразования RGB -> HSB сабж невозможен в принципе?
__________________
When you kill for money, there are no rules... |
|
|||||
|
Регистрация: Sep 2006
Адрес: Zaporozhye, Ukraine
Сообщений: 141
|
HSB - это цветовая модель, где по координатам отложены Hue, Saturation, Brightness. Она же HSV.
http://en.wikipedia.org/wiki/HSV_color_space Вы ставите задачу - откорректировать положение точки по координате Brightness (Яркость). Нет проблем, но сначала надо перейти в эту модель из модели RGB. |
|
|||||
|
изначально я имел в виду возможность увеличения/уменьшения значений RGB на некий процент используя какую-нибудь простейшую формулу
__________________
When you kill for money, there are no rules... |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:44. |
|
|
« Предыдущая тема | Следующая тема » |
|
|