Контрастный текст на фоне произвольного цвета
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 не подходит, оно делает “негатив” цвета, если попадаються “средние” цвета (например 0x7f7f7f) то ты ничего не увидешь.
Тут более мощная магия, теории я уже правда непомню, но она работает. Смотреть нужно в сторону интенсивности и яркости цвета.
By Ilja on Sep 2, 2009
Мега респект Иллюха тебе и конечно Белой. Отличнейший пример. Спасибо
By Denis Papazov on Sep 14, 2009