/ / Как мога да конвертирам RGB цяло число в съответната RGB тона (R, G, B)? - цел-c, c

Как мога да конвертирам цялото RGB в съответната RGB тона (R, G, B)? - цел-c, c

Как мога да конвертирам ARGB цяло число в съответната ARGB тона (A, R, G, B)?

Получавам някои XML, където е даден цветен маркерс някаква цялостна стойност (например -16777216). Трябва да нарисувам правоъгълник, пълен с този цвят. Но не мога да извличам стойностите на компонентите A, R, G, B от цяло число.

Отговори:

3 за отговор № 1

Ако цяло число е ARGB мисля, че трябва да бъде:

unsigned char b = color & 0x000000FF;
unsigned char g = (color>> 8) & 0x000000FF;
unsigned char r = (color>>16) & 0x000000FF;
unsigned char a = (color>>24) & 0x000000FF;

2 за отговор № 2

Използвайте бита AND и преместете надясно, за да изберете отделни байтове от 32-битовото цяло число.

uint32_t color = -16777216;

uint8_t b = (color & 0x000000ff);
uint8_t g = (color & 0x0000ff00) >> 8;
uint8_t r = (color & 0x00ff0000) >> 16;
uint8_t a = (color & 0xff000000) >> 24;

1 за отговор № 3

Можете да опитате да използвате съюзи. Нещо като това

struct color
{
unsigned char alpha:8;
unsigned char r:8;
unsigned char g:8;
unsigned char b:8;
};

union
{
struct color selector;
unsigned int base:32;
};

0 за отговор № 4

Опитайте следния код:

unsigned a = (color >> 24) & 0x000000FF;
unsigned b = (color >> 16) & 0x000000FF;
unsigned g = (color >> 8) & 0x000000FF;
unsigned r = color & 0x000000FF;

CGFloat rf = (CGFloat)r / 255.f;
CGFloat gf = (CGFloat)g / 255.f;
CGFloat bf = (CGFloat)b / 255.f;
CGFloat af = (CGFloat)a / 255.f;