Разделение RGB Uint на отдельные компоненты R G B - PullRequest
7 голосов
/ 29 января 2010

У меня есть цвет RGB, сохраненный в виде uint. Я могу создать это из значений RGB, используя побитовый левый и побитовый оператор или в выражении вроде этого:

colour = r<<16 | g<<8 | b;

Я хочу сделать наоборот. У меня есть окончательное число и я хочу значения r, g и b. Кто-нибудь знает, как это сделать?

Ответы [ 3 ]

15 голосов
/ 29 января 2010
r = (colour >> 16) & 0xff;
g = (colour >> 8) & 0xff;
b = colour & 0xff;
7 голосов
/ 29 января 2010

Примерно так:

r = ( colour >> 16 ) & 0xFF;
g = ( colour >> 8 )  & 0xFF;
b = colour & 0xFF;

Предполагая 8-битные значения компонентов. Битовые и шестнадцатеричные маски 0xFF выбирают только 8 бит для каждого компонента.

5 голосов
/ 29 января 2010

Вы используете shift, а затем оператор & для маскировки нежелательных битов:

r = color >> 16;
g = (color >> 8) & 255;
b = color & 255;

В качестве альтернативы:

b = color & 255;
color >>= 8;
g = color & 255;
r = color >> 8;
...