Возник вопрос: Есть панель, которая меняет свой цвет в зависимости от действий пользователя, а на ней должен отображаться текст. Из-за того что цвет фона может быть любым, необходимо обеспечить читабельность текста на нём.
Изначально думал инвертировать цвет панели и окрашивать ним текст. Но это не обеспечивает должной контрастности.
Решил это так: Суммировал RGB каналы фона и делил на 3 (получал Ч/Б альтернативу), затем если значение превышало 127 (Ч/Б версия цвета была ближе к белому) окрашивал текст в черный, иначе в белый.
Существуют ли другие (возможно более интересные) способы решения этой задачи?
Я обычно когда цвет фона непредсказуем поверх фона накладываю полупрозрачный белый, и поверх него уже черный текст, разумеется это не всегда уместно в дизайне.
Существуют ли другие (возможно более интересные) способы решения этой задачи?
Существует CSS свойство mix-blend-mode
. Может не "интересно", зато эффективно.
Ведущей тройкой браузеров поддерживается полностью (в статье по ссылке инфа не обновлена, Оперой тоже поддерживается... уже 2 года как).
В графических библиотеках тоже есть работа с режимами наложения.
А если интересуют самостоятельные вычисления, то лучшие результаты будут с преобразованием RGB → HSV → RGB (т.е., изменения производить в пространстве HSV). Но, в сумме все это будет весьма медленно.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужно редактировать сжатый js-кодНикогда раньше с этим не сталкивался
Возможно ли создать своё событие на jquery? Допустим нужно выполнять какое то действие, если у определенного контейнера сменился классПроблема...
Загружаю маркеры на картуКак правильно их отфильтровывать? Пробовал удалить все маркеры через функцию RemoveMarkers(), но они все равно остаются...