Оцените, является ли ШЕСТНАДЦАТЕРИЧНОЕ значение темным или легким

(Украденный от Joel: o))

не отключают/удаляют опции - скорее дают полезное сообщение, когда пользователь нажимает/выбирает его.

12
задан Chris 18 November 2009 в 07:29
поделиться

3 ответа

Вместо того, чтобы складывать компоненты 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, как умно прокомментировал

15
ответ дан 2 December 2019 в 05:15
поделиться

Преобразуйте в HSL и посмотрите на значение L uminance. Это покажет вам, насколько оно яркое.

Вот функция javascript для преобразования.

10
ответ дан 2 December 2019 в 05:15
поделиться

Шестнадцатеричный цветовой код состоит из трех значений интенсивности: одного для красного, одного для зеленого и одного для синего, с двумя шестнадцатеричными цифрами для каждого. Чтобы определить темное против светлого, просто сложите три значения вместе. Меньшие числа будут темнее, чем большие значения.

Для # 010203 сложение значений RGB вместе дает 01 + 02 + 03 = 06. Это будет темнее, чем # 102030 = 60.

1
ответ дан 2 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

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