Форум 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)
-   -   Как сделать цвет темнее? (http://www.flasher.ru/forum/showthread.php?t=92945)

enepx 10.03.2007 15:38

Как сделать цвет темнее?
 
Здравствуйте, есть какой-либо цвет, например, 0x2C9100.
Нужно сделать его темнее на какое-то заданное значение (в процентах приблизить к 0x000000). Как это делается в теории я понимаю, нужно по каждой компоненте отнять процент, и все! Как поступить тут?
Может это может класс ColorTransform (flash.geom.ColorTransform)? Но я чего-то там не разобрался.
Спасибо. :wacko:

etc 10.03.2007 15:41

Перевести его в HSB, потом менять B.

http://dev.etcs.ru/blog/as2/ru/etcs/draw/colorobject/ в помощь.

etc 10.03.2007 16:23

Пример использования:

Код:

import ru.etcs.draw.ColorObject;
drawRect = function (color, y) {
        this.beginFill(color, 100);
        this.moveTo(0, y);
        this.lineTo(100, y);
        this.lineTo(100, y+2);
        this.lineTo(0, y+2);
        this.endFill();
};
var color = new ColorObject();
color.rgb = 0x2C9100;
var y = 0;
trace(color);
while (color.B>0) {
        trace('Brightness: '+color.B+', color: '+color.hex);
        drawRect(color.rgb, y += 2);
        color.B--;
}
while (color.B<100) {
        trace('Brightness: '+color.B+', color: '+color.hex);
        drawRect(color.rgb, y += 2);
        color.B++;
}

Или: http://dev.etcs.ru/blog/as2/ru/etcs/...implegradient/
Пример:
Код:

import ru.etcs.draw.SimpleGradient;
drawRect = function (color, y) {
        this.beginFill(color, 100);
        this.moveTo(0, y);
        this.lineTo(100, y);
        this.lineTo(100, y+2);
        this.lineTo(0, y+2);
        this.endFill();
};
var gradient = new SimpleGradient(0x2C9100,0x000000,100);
for (var i = 0;i<200;i+=2) {
        color = gradient.getColor(i/2);
        drawRect(color,i);
}


enepx 10.03.2007 17:44

Цитата:

Сообщение от __etc
Пример использования:

ругается на var color = new ColorObject();
The class or interface 'ru.etcs.draw.ColorObject' could not be loaded.
var color = new ColorObject();

etc 10.03.2007 17:46

Класс можно взять тут: http://dev.etcs.ru/framework.zip и распаковать архив как есть рядом с исходником (должны появится две папки ru и com), затем запустить.

enepx 10.03.2007 17:48

да я давно скачал положил его к общим Флешовым классам, думал должно прокатить, на import же он не ругался )

etc 10.03.2007 17:50

Распакуй архив в c:\Documents and Settings\USER\Local Settings\Application Data\Macromedia\Flash 8\en\Configuration\Classes\

enepx 10.03.2007 17:54

А я в Program Files в флешовую распаковывал!
Кстати, все заработало! Спасибо.

etc 10.03.2007 18:03

Изучи справку по этим классам, особенно по ColorObject.
Возможно, сегодня обновлю все классы, допишу JavaDoc и оформлю, как полагается. Т.е. архив можно будет перезакачать.

Llex3D 11.03.2007 00:52

Всячески пытаются свои классы дать человеку в руки...
Вот, самый простой код, взятый с учебника:

Код:

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

Выполняешь следующее
Код:

HSBColor =  RGBtoHSB(0х2C9100) // HSBColor становится масивом
                                            // HSBColor[0] - Hue - тон ( тон цвета)
                                            // HSBColor[1] - Saturation - насыщенность (%)
                                            // HSBColor[2] - Brightnes, а вот это нам интересно, увеличивая или уменьшая этот параметр, мы увеличиваем или уменьшаем яркость цвета (%)

changeBrightnessOn = -10 // уменьшим яркость на 10%
myMcColor = new Cоlor (my_mc)
myMcColor.setRGB(HSBtoRGB(HSBColor[0], HSBColor[1], HSBColor[2]+changeBrightnessOn))

Вот и всего-то делов...
Эта схема перевода стандартная наработка, если хочешь, напиши себе универсальный клас и используй его на здоровье :) :yahoo:


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

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