Как определить, темный ли цвет?

Есть цвет, а точнее, три числа, задающие этот цвет в RBG.

Как определить, темный или светлый этот цвет? Вначале считал, что темный — это когда хотя бы одно из чисел меньше 127 (~255/2). Но сейчас заметил, что ведь #FF000 можно назвать светлым, но по моему алгоритму он будет темным.

Есть идея, что надо по очереди сравнивать сразу два числа друг с другом, ни у кого нет готового алгоритма? :-)
  • Вопрос задан
  • 8745 просмотров
Решения вопроса 1
С яркостью все правильно выбрано, вот только подсчет яркости…
Если интересно более точное определение яркости, тут статья на английском языке про расчет яркости.
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
kafeman
@kafeman Автор вопроса
Прошу прощения, уже сам нашел аналогичный вопрос на Stack Overflow.

Вот, кому надо, пример на Си, который у меня вроде бы заработал:

if (1 - (0.299 * red + 0.587 * green + 0.114 * blue) / 255 < 0.5)
    // светлый
else
    // темный
Ответ написан
sledopit
@sledopit
RGB → HSL.
Инструкций по способам конвертирования в интернетах пруд пруди.
Ну а дальше дело техники.
Ответ написан
ag666
@ag666
Я конечно может чего-то не понимаю, но. «Сумма» R, G, B — определяет исключительно цвет. Светлость или темность определяется значением каждой их компоненты. Светлое это когда хотя бы 1 компонета имеет значение выше 127 (255/2). Темное — когда ВСЕ значения меньше 127 (по отдельности, а не сумма). Причем светлость всегда определяется наивысшей компонентой.
Ответ написан
@Maximus5
Я в своем ConEmu при отрисовке курсора считаю цвет «темным» если все 3 компонента <= 0xC0. В первом приближении работает.

Хотя по хорошему, его надо сконвертить в Lab/HSV/HSL и смотреть яркостную компоненту :) Ну, это смотря какая задача…
Ответ написан
@olekl
Общепринято вроде бы как что-то вроде Gray = 0.3R + 0.59G + 0.11B, а визуальная середина яркости градаций серого — это 18%, т.е. где-то 256 * 0.18 = 46.
Ответ написан
Sergei_Erjemin
@Sergei_Erjemin
Улыбайся, будь самураем...
en.wikipedia.org/wiki/HSL_and_HSV
Для RGB уравнение правильное, но для NTSC другие коэффициенты…
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы