Значение int достаточно велико, чтобы содержать значение ARGB или любой порядок (RGBA, BGR), а само значение int не так важно, как отдельные байты, которые оно содержит.Разные цветовые пространства требуют разных побитовых операций, так как канал будет расположен в разных байтах.Ниже приведен пример, который будет работать для RGB
и ARGB
.
#define R(rgb) ((rgb) >> 16 & 0xFF)
#define G(rgb) ((rgb) >> 8 & 0xFF)
#define B(rgb) ((rgb) & 0xFF)
int main(int argc, char *argv[])
{
int pale_blue = 5953244;
printf("\nR: 0x%02X G: 0x%02X B: 0x%02X\nR: %03d G: %03d B: %03d",
R(pale_blue), G(pale_blue), B(pale_blue),
R(pale_blue), G(pale_blue), B(pale_blue));
}
Выход:
R: 0x5A G: 0xD6 B: 0xDCR: 090 G: 214 B: 220