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 с за алгоритмы конвертирования HSB <-> RGB, HLS <-> RGB.
11 comments
11 Comments so far
Leave a reply
спасибо за действительно удобный класс.
ьуквально на днях была работа, где он мог бы сэкономить мне приличное кол-во времени. )
offtop: удивился увидев в RSS-ридере своей Оперы полноценные SWF с FTF с кодом. Раньше код из FTF ввобще не отображался в RSS.
Не знаю, следствие это развития Оперы, WordPress или FTF )
Скорее всего первое
тест:
[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
добавить надо только что, как и всегда поскольку переходы между системами цветов не абсолютны, нужно следить за появлением дробной части и округлениями.
Спасибо за хороший класс
Сделал округления в hsbToRGB (во всех остальных есть), добавил toString для удобства трейса
Спасибо.
нет ну смотри округление это хорошо конечно, когда оно не 3 раза подряд будет округление, т.е например переход rgb->hsb->hls даст значительно бОльшую погрешность при переходе обратно, чем просто rgb->hls, если с округлениями. В общем тут еще боольшой вопрос где эти округления нужны…
Такую же погрешность даст и фотошоп. Да и реально я не вижу смысла в подобных цепочках. Разве что hsb <—> hls имеет бОльшую погрешность, чем остальные переводы. Добится идеальной точности можно, в принципе, отказавшись от округлений внутри класса.
Но! Методы перевода являются статическими и публичными, позволяют пользоваться ими, не создавая ColorObject. А здесь как раз нужны округления
ну фотошоп это понятно. кста идеальной точности не добится не нуу никак, переводы эти не абсолютны, каждая система захватывает только часть всего цветового пространства, нууу ты знаешь
я это так другим почитать, дискуссию создать
(http://graphics.cs.msu.su/courses/cg/lectures/2006/lecture3/lect03_06.pdf)
я просто говорил о том что может округления эти задать скажем флажком, если он не задан, или фальш то тогда используем эти округления, иначе более гибко можно округлять переходя между системами…
Эта мысль мне уже приходила в голову, наверное, будет в следующей версии.
ага, спасибо в общем большое за проделанную работу,
будет всем полезна, по крайней мере я сталкиваюсь с этим довольно часто
Респект __etc, сэкономил мне кучу времени
public static function hsbToRGB(h:Number,s:Number,v:Number)
кажется, тут опечатка, вместо переменной v должна быть b
и, конечно, спасибо за класс