(Украденный от Joel: o))
не отключают/удаляют опции - скорее дают полезное сообщение, когда пользователь нажимает/выбирает его.
Вместо того, чтобы складывать компоненты RGB вместе, как сказал другой ответчик (ricknz), вы должны фактически взять их среднее значение.
Кроме того, поскольку зеленый цвет более заметен для человеческого глаза, чем синего, вам также следует добавить вес.
Таким образом, вам нужно сначала умножить красный компонент на 0,299, зеленый на 0,587 и синий на 0,114
, поэтому яркость определяется по формуле: Яркость = (r * 0,299 + g * 0,587 + b * 0,114) / 3
редактировать: вот фрагмент, который вычисляет это:
float calcLuminance(int rgb)
{
int r = (rgb & 0xff0000) >> 16;
int g = (rgb & 0xff00) >> 8;
int b = (rgb & 0xff);
return (r*0.299f + g*0.587f + b*0.114f) / 256;
}
ps деление на 256, так как мы использовали RGB от 0-256 (вместо 0-1).
edit: изменил расчет на деление на 256, а не на 768, как умно прокомментировал
Преобразуйте в HSL и посмотрите на значение L
uminance. Это покажет вам, насколько оно яркое.
Вот функция javascript для преобразования.
Шестнадцатеричный цветовой код состоит из трех значений интенсивности: одного для красного, одного для зеленого и одного для синего, с двумя шестнадцатеричными цифрами для каждого. Чтобы определить темное против светлого, просто сложите три значения вместе. Меньшие числа будут темнее, чем большие значения.
Для # 010203 сложение значений RGB вместе дает 01 + 02 + 03 = 06. Это будет темнее, чем # 102030 = 60.