Jak mogę przekonwertować całkowitą ARGB na odpowiadającą jej krotkę ARGB (A, R, G, B)?
Otrzymuję kod XML, w którym podana jest etykieta kolorówz pewną liczbą całkowitą (np. -16777216). Muszę narysować prostokąt wypełniony tym kolorem. Ale nie jestem w stanie pobrać wartości składników A, R, G, B z wartości całkowitej.
Odpowiedzi:
3 dla odpowiedzi № 1Jeśli liczbą całkowitą jest ARGB, myślę, że powinno to być:
unsigned char b = color & 0x000000FF;
unsigned char g = (color>> 8) & 0x000000FF;
unsigned char r = (color>>16) & 0x000000FF;
unsigned char a = (color>>24) & 0x000000FF;
2 dla odpowiedzi nr 2
Użyj bitowego AND i przesuń w prawo, aby wybrać pojedyncze bajty z 32-bitowej liczby całkowitej.
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 dla odpowiedzi nr 3
Możesz spróbować użyć związków. Coś takiego
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 dla odpowiedzi nr 4
Spróbuj następującego kodu:
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;