Форум 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=80877)

Nirth 12.06.2006 22:58

Нету комментариев в стиле JavaDoc, если не знаешь что такое то пишутся они так
Код:

/**
 * Descriotion goes here
 *
 * @usage                        some example of usage
 * @param    paramName          Type of param, decription
 * @return    type              Type,decription
 */


iNils 12.06.2006 23:47

Оригинал?
Код:

/*****************************************************
*
*        Peter Hall 2002
*        www.peterjoel.com
*
*        HSB conversion methods for the Color object
*
*        myCol.setHSB({H:hue, S:sat, B:bri})
*        myCol.getHSB()
*                - returns {H:hue, S:sat, B:bri}
*
*        Static methods:
*
*        Color.RGB_to_HSB(0xRRGGBB)
*                - returns {H:hue, S:sat, B:bri}
*        Color.HSB_to_RGB({H:hue, S:sat, B:bri})
*                - returns 0xRRGGBB
*
*        The colour-space conversion is based purely on
*        my own interpretation and intuitive notion of the
*        colour spaces. These methods may produce results
*        which vary slightly from conversions carried out
*        by different graphical software that you may be
*        used to.
*
*  If this script enables you or your company to make
*        significant financial gain, you might like to make
*        a contribution to show your appreciation. Please
*  see my site for more information.
*
******************************************************/


Color.prototype.setHSB = function(colHSB){
        var hue = (colHSB.H == null) ? 0 : (360+colHSB.H)%360;
        var sat = (colHSB.S == null) ? 100 : colHSB.S;
        var bri = (colHSB.B == null) ? 100 : colHSB.B;
        this.setRGB(Color.HSB_to_RGB({H:hue,S:sat,B:bri}));
}

Color.prototype.getHSB = function(){
        return Color.RGB_to_HSB(this.getRGB());
}

Color.RGB_to_HSB = function(colRGB){

        var red = (colRGB&0xFF0000)>>16;
        var gre = (colRGB&0x00FF00)>>8;
        var blu = colRGB&0x0000FF;

        var max = Math.max(red,Math.max(gre,blu));
        var min = Math.min(red,Math.min(gre,blu));

        var colHSB = {}
        colHSB.B = Math.round(max*100/255);

        if(max==min){ // if grey
                colHSB.S = 0;
                colHSB.H = 0;
        }else{
                colHSB.S = Math.round(100*(max-min)/max);
                // find hue
                var hue;
                var tmpR = (max-red)/(max-min);
                var tmpG = (max-gre)/(max-min);
                var tmpB = (max-blu)/(max-min);
                if(red==max){
                        hue = tmpB - tmpG;
                }else if(gre==max){
                        hue = 2 + tmpR - tmpB;
                }else if(blu==max){
                        hue = 4 + tmpG - tmpR;
                }
                colHSB.H = (Math.round(hue*60) + 360)%360;
        }

        return colHSB;

}

Color.HSB_to_RGB = function(colHSB){
        var sat = colHSB.S;
        var bri = colHSB.B;

        var red, gre, blu;
        // if grey don't bother doing any more
        if(sat==0){
                red = bri;
                gre = bri;
                blu = bri;
        }else{

                var hue = (colHSB.H+360)%360;
                var hue2 = Math.floor(hue/60);

                var dif = (hue%60)/60;
                var mid1 = bri*(100-sat*dif)/100;
                var mid2 = bri*(100-sat*(1-dif))/100;
                var min = bri*(100-sat)/100;

                if(hue2 == 0){
                        red = bri;
                        gre = mid2;
                        blu = min;
                }else if(hue2 == 1){
                        red = mid1;
                        gre = bri;
                        blu = min;
                }else if(hue2 == 2){
                        red = min;
                        gre = bri;
                        blu = mid2;
                }else if(hue2 == 3){
                        red = min;
                        gre = mid1;
                        blu = bri;
                }else if(hue2 == 4){
                        red = mid2;
                        gre = min;
                        blu = bri;
                }else{
                        red = bri;
                        gre = min;
                        blu = mid1;
                }
        }
        return (Math.round(red*255/100)<<16 | Math.round(gre*255/100) <<8 | Math.round(blu*255/100));
}


artcraft 13.06.2006 00:27

нет - этот круче

bbexp 13.06.2006 14:42

Не знаю, насколько нужны точные вычисления цвета, но просто затемнить или высветлить - по моему не так уж и сложно.
Когда то решал подобную задачу но в пределах RGB - без классов и прочего (извините, если не модно))


Код:

function deRGB(colour:Number):Object  {
        var rr:Number = (colour & 0xFF0000) >> 16;
        var gg:Number = (colour & 0x00FF00) >> 8;
        var bb:Number = colour & 0x0000FF;
        return {R:rr,G:gg,B:bb}
}

var color:Number = 0xFF0000;

var colors:Object = deRGB(color);
                        var mr:Number = Math.floor(colors.R/3);
                        var mg:Number = Math.floor(colors.G/3);
                        var mb:Number = Math.floor(colors.B/3);
                        var darkerColor:Number = (mr << 16) + (mg << 8) + mb;



Конечно, коды уже приведенные здесь, безусловно круче и техничнее )) Но помоему решают несколько другие задачи.

artcraft 13.06.2006 15:08

нет они решают именно те задачи, но и еще и дрегие заодно, например с этим классом совсем нетрудно "сдвинуть цвет по спектру" (поменять hue) или поменять насыщенность

teka 13.06.2006 18:48

RGB to LAB
 
Цитата:

Сообщение от iNils
Причем тут это? Надо цвет RGB сначала перегнать в LAB, потом изменить значение L, и обратно перегнать RGB.

Смысл конвертации я понял, но как можно это сделать? Поискал по нету инфу, но толком ничего.

teka 13.06.2006 18:50

Кривое-то решение я нашел на скорую руку. Задаю вторым цветом черный либо белый (в зависимости от оттенка второго цвета, который мне нужен) и выношу его "начало" подальше от заливаемой области. Получается эдакая имитация :-)

iNils 13.06.2006 19:02

Цитата:

Сообщение от teka
Смысл конвертации я понял, но как можно это сделать? Поискал по нету инфу, но толком ничего.

Чуть по позже время будет, я тебе постараюсь написать.


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

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