Контрастный текст на фоне произвольного цвета
May 10, 2009 – 4:11 pmНедавно встала задача найти алгоритм как сделать контрастный текст на фоне произвольного цвета.
В начале я поэксперементировал с HSL и HSB представлением цвета. Для HSB я нашел алгорим на ActionScript 1, экспортнул его, но он оказался глючным. Поискав далее я нашел класс HSBColor от Adobe на ActionScript3. Его нет в 3 flexframework и как я понимаю это запчасть от Gumbo (Flex 4). Работает он хорошо, но не решает нужной мне задачи: в синих оттенках текст не контрастный.
Затем в чате UAFPUG мне посоветовал Nicolas Prof пример от Lee Brimelow, пример работал отлично, но был написан на ActionScript 2 и использовал класс ColorMatrix от Quasimondo. Я было уже совсем расстроился, но Татьяна Белая быстренько портнула класс ColorMatrix на ActionScript 3.0 и вместе с ним пример.
Я немного изменил пример, можно полистать, как по мне работает на отлично:
Your browser does not support iframes.
Пример контрастного текста отдельной страницей
Исходники по правой кнопке мыши или в архиве.
Удачи!

8 Responses to “Контрастный текст на фоне произвольного цвета”
Там же у Марио(Quasimondo) был и на AS3 ColorMatrix http://www.quasimondo.com/archives/000671.php
Пользуемся, незаменимый класс!
хотя есть аналоги, вот ColorMatrix от Гранта Скиннера(автора флешовых UI компонентов) http://www.gskinner.com/blog/archives/2007/12/colormatrix_upd.html причем это версия на AS3 появилась на полгода раньше чем у Марио
By Exey on May 11, 2009
Упс. Если честно то я не сильно хотел вдаваться в подробности алгоритма и поэтому просто не стал искать альтернативы или готовые решения. А Белая решила помочь по быстренькому ).
By Ilja on May 11, 2009
А можно сервер/канал чата UAFPUG?
By FakeAccounter on May 12, 2009
Вы пробовали использовать BlendMode?
By Eugene on Jul 7, 2009
В плане? каким образом это сделать?
By Ilja on Jul 7, 2009
У всякого DisplayObject-а есть свойство blendMode.
выставляем $do.blendMode = BlendMode.INVERT;
и радуемся жизни.
BlendMode.INVERT гораздо универсальнее, т.к. нативно выполняется попиксельная инверсия.
By Ilya Rumeev on Sep 2, 2009
BlendMode.INVERT не подходит, оно делает “негатив” цвета, если попадаються “средние” цвета (например 0×7f7f7f) то ты ничего не увидешь.
Тут более мощная магия, теории я уже правда непомню, но она работает. Смотреть нужно в сторону интенсивности и яркости цвета.
By Ilja on Sep 2, 2009
Мега респект Иллюха тебе и конечно Белой. Отличнейший пример. Спасибо
By Denis Papazov on Sep 14, 2009