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 Responses to ru.etcs.draw.ColorObject

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

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

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

  3. тест:
    [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. Сделал округления в hsbToRGB (во всех остальных есть), добавил toString для удобства трейса

    Спасибо.

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

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

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

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

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

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

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

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

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>