Записки о Flash

ru.etcs.draw.ColorObject

Написал довольно удобный класс ru.etcs.draw.ColorObject v1.2.1 10.03.07.

Данный класс хранит в себе цвет чего-либо в любом из удобных представлений — RGB, HSB, HLS, HEX и просто числом. Задать цвет можно любым образом, будь то число, RGB, HSB или HLS-компоненты. При задании цвета любым из способов, все остальные компоненты (R,G,B, h, l, s, H, S, B автоматически поменяют свои значения в соответствии с заданным цветом.

Документация в теле класса.
Класс доступен во фреймворке.

з.Ы. Отдельное спасибо Prometh с proto.layer51.com за алгоритмы конвертирования HSB <-> RGB, HLS <-> RGB.


11 comments

11 Comments so far

  1. root July 9th, 2006 19:34

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

    offtop: удивился увидев в RSS-ридере своей Оперы полноценные SWF с FTF с кодом. Раньше код из FTF ввобще не отображался в RSS.
    Не знаю, следствие это развития Оперы, WordPress или FTF )

  2. __etc July 10th, 2006 13:27

    Скорее всего первое

  3. proll July 17th, 2006 16:11

    тест:
    [code]
    import ru.etcs.draw.ColorObject
    var h:Number=248;
    var s:Number=40;
    var b:Number=18;
    var rgbObj:Object=ColorObject.hsbToRGB(h,s,b);
    trace("h:"+h+" s:"+s+" b:"+b+"r:"+rgbObj.r+" g:"+rgbObj.g+" b:"+rgbObj.b)
    [/code]

    результат:
    h:248 s:40 b:18r:30.0533333333333 g:27.6 b:46

    фотошоп:
    h:248 s:40 b:18r:30 g:28 b:46

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

    Спасибо за хороший класс

  4. __etc July 17th, 2006 16:55

    Сделал округления в hsbToRGB (во всех остальных есть), добавил toString для удобства трейса

    Спасибо.

  5. proll July 17th, 2006 17:17

    нет ну смотри округление это хорошо конечно, когда оно не 3 раза подряд будет округление, т.е например переход rgb->hsb->hls даст значительно бОльшую погрешность при переходе обратно, чем просто rgb->hls, если с округлениями. В общем тут еще боольшой вопрос где эти округления нужны…

  6. __etc July 17th, 2006 17:38

    Такую же погрешность даст и фотошоп. Да и реально я не вижу смысла в подобных цепочках. Разве что hsb <—> hls имеет бОльшую погрешность, чем остальные переводы. Добится идеальной точности можно, в принципе, отказавшись от округлений внутри класса.
    Но! Методы перевода являются статическими и публичными, позволяют пользоваться ими, не создавая ColorObject. А здесь как раз нужны округления

  7. proll July 17th, 2006 17:58

    ну фотошоп это понятно. кста идеальной точности не добится не нуу никак, переводы эти не абсолютны, каждая система захватывает только часть всего цветового пространства, нууу ты знаешь :) я это так другим почитать, дискуссию создать :) (http://graphics.cs.msu.su/courses/cg/lectures/2006/lecture3/lect03_06.pdf)

    я просто говорил о том что может округления эти задать скажем флажком, если он не задан, или фальш то тогда используем эти округления, иначе более гибко можно округлять переходя между системами…

  8. __etc July 17th, 2006 18:00

    Эта мысль мне уже приходила в голову, наверное, будет в следующей версии.

  9. proll July 17th, 2006 18:26

    ага, спасибо в общем большое за проделанную работу,
    будет всем полезна, по крайней мере я сталкиваюсь с этим довольно часто

  10. miramax October 28th, 2006 06:20

    Респект __etc, сэкономил мне кучу времени :)

  11. MagicEgg January 23rd, 2010 01:55

    public static function hsbToRGB(h:Number,s:Number,v:Number)

    кажется, тут опечатка, вместо переменной v должна быть b

    и, конечно, спасибо за класс :)

Leave a reply