2010-01-28 5 views
7

Ho un colore RGB memorizzato come uint. Posso creare questa dai valori RGB utilizzando la sinistra bit a bit e bit a bit o l'operatore in un'espressione come questa:Divisione di un uint RGB nei suoi componenti R G B separati

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

voglio fare il contrario. Ho il numero finale e voglio i valori r, g eb. Qualcuno sa come fare questo?

+0

Grazie a tutti per le vostre risposte rapide. Tutti e 3 sono corretti. Immagino che stavi scrivendo tutti allo stesso tempo. –

risposta

15
r = (colour >> 16) & 0xff; 
g = (colour >> 8) & 0xff; 
b = colour & 0xff; 
7

Qualcosa di simile a questo:

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

Assumendo valori dei componenti a 8 bit. Le maschere bitmap e esadecimale 0xFF selezionano solo gli 8 bit per ciascun componente.

5

si utilizza turno, e quindi l'operatore & per mascherare i bit indesiderati:

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

alternativa:

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