Вместо того чтобы добавлять компоненты RGB вместе, как сказал другой отвечающий (ricknz), вы должны взять их среднее значение.
Кроме того, поскольку зеленый цвет более заметен человеческому глазу, чем синий, вам также следует добавить вес.
Таким образом, вы должны умножить красный компонент сначала на 0,299, зеленый на 0,587 и синий на 0,114
, поэтому яркость определяется как: Яркость = (r * 0,299 + г * 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;
}
p.s. деление на 256, так как мы RGB работал от 0-256 (вместо 0-1)
edit: изменение калькуляции для деления на 256, а не на 768, как разумно прокомментировано