Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Регулировка "яркости" RGB (http://www.flasher.ru/forum/showthread.php?t=85897)

Andrew_Drone 03.10.2006 02:47

Регулировка "яркости" RGB
 
хочу создать что-то типа Paint'овской палитры, а именно ту часть где выбирается произвольный цвет.
собственно, генерация цвета (ось Х) и его насыщенности (ось Y) проблем не составляют, а вот как реализовать регулировку яркости? Это тот ползунок что справа. Пробовал перемножать каждый канал на некий коэфициент - получил болт.

iNils 03.10.2006 03:18

http://www.peterjoel.com/Samples/index.php
Зайти в пункт меню colour wheel

Andrew_Drone 03.10.2006 04:11

О, спасибо большое!

vic_ 03.10.2006 11:57

вот еще класс, RGB-HLS-HSB
http://dev.etcs.ru/blog/as2/ru/etcs/draw/colorobject/

StrangeMan 17.01.2007 12:32

подскажите я вот скопировал флэшку по вот этой ссылке 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' .. не могу понять я ведь всё копирую...

vic_ 17.01.2007 13:29

http://www.peterjoel.com/Samples/pet..._colorproto.as

Llex3D 17.01.2007 13:34

Прям от сердца оторвал :)

Код:

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);
        }

Вот, сделали рпототип для класса Color

Теперь к примеру для _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))

Вот, при этом мы проверили, если при увеличении на 10% будет больше 100%, то мы ставим 100%. Рекомендую проверять параметры при их присвоении:

HSBColor[0] - Hue - тон, может принимать значение от 0 до 359
HSBColor[1] - Saturation - насыщенность, может принимать значение от 0 и до 100
HSBColor[2] - Brightness - яркость, может принимать значени еот 0 до 100

Вроде бы всё правильно :)

Andrew_Drone 17.01.2007 21:21

а БЕЗ преобразования RGB -> HSB сабж невозможен в принципе?

vic_ 17.01.2007 21:34

HSB - это цветовая модель, где по координатам отложены Hue, Saturation, Brightness. Она же HSV.
http://en.wikipedia.org/wiki/HSV_color_space
Вы ставите задачу - откорректировать положение точки по координате Brightness (Яркость). Нет проблем, но сначала надо перейти в эту модель из модели RGB.

Andrew_Drone 18.01.2007 06:03

изначально я имел в виду возможность увеличения/уменьшения значений RGB на некий процент используя какую-нибудь простейшую формулу

vic_ 18.01.2007 06:17

все уже придумано до нас. находясь в координатах RGB можно менять только RGB.

silin 18.01.2007 10:50

глянь: не совсем яркость, но зато простейшая формула..

Andrew_Drone 18.01.2007 11:12

о! как раз то что я искал.
но класс в хозяйстве тоже пригодится=)

etc 18.01.2007 11:18

Мне показалось, или там цвет всё же скачет?


Часовой пояс GMT +4, время: 21:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.