Есть цвет, а точнее, три числа, задающие этот цвет в RBG.
Как определить, темный или светлый этот цвет? Вначале считал, что темный — это когда хотя бы одно из чисел меньше 127 (~255/2). Но сейчас заметил, что ведь #FF000 можно назвать светлым, но по моему алгоритму он будет темным.
Есть идея, что надо по очереди сравнивать сразу два числа друг с другом, ни у кого нет готового алгоритма? :-)
С яркостью все правильно выбрано, вот только подсчет яркости…
Если интересно более точное определение яркости, тут статья на английском языке про расчет яркости.
Вот только я не понял смысла усложнять выражение и добавлять лишние арифметические операции. Вот математически эквивалентное выражение, в котором меньше на одну операцию деления и сложения:
if ( 0.299 * red + 0.587 * green + 0.114 * blue > 127.5 )
// светлый
else
// темный
Я конечно может чего-то не понимаю, но. «Сумма» R, G, B — определяет исключительно цвет. Светлость или темность определяется значением каждой их компоненты. Светлое это когда хотя бы 1 компонета имеет значение выше 127 (255/2). Темное — когда ВСЕ значения меньше 127 (по отдельности, а не сумма). Причем светлость всегда определяется наивысшей компонентой.
Спасибо, сейчас ваш вариант тоже попробую. Вариант из SO, похоже, делает тоже самое, но только берет не «все меньше 127», а с какими-то более точными коэффициентами.
Общепринято вроде бы как что-то вроде Gray = 0.3R + 0.59G + 0.11B, а визуальная середина яркости градаций серого — это 18%, т.е. где-то 256 * 0.18 = 46.
Вы наверно имелии ввиду YUV?
NTSC вобще-то стандарт передачи аналогового видео, также как PAL или SECAM, а RGB и YUV цветовая модель для кодирования цветов, тогда да, там по другому но можно перекодировать YUV в RGB формула там простая.