2012-11-13 6 views
11

Quello che ho è R: 255 G: 181 B: 178, e sto lavorando in C# (per WP8, per essere più precisi)Conversione da int RGB in esadecimale

vorrei convertire questo ad un numero esadecimale da usare come colore (per impostare il colore del pixel di un WriteableBitmap). Quello che sto facendo è il seguente:

int hex = (255 << 24) | ((byte)R << 16) | ((byte)G << 8) | ((Byte)B<<0); 

Ma quando lo faccio, ottengo solo il blu.

Qualche idea su cosa sto facendo male?

Inoltre, per annullare questo, per controllare i valori RGB, sto andando:

int r = ((byte)(hex >> 16)); // = 0 
int g = ((byte)(hex >> 8)); // = 0 
int b = ((byte)(hex >> 0)); // = 255 
+0

C'è un formato esadecimale di un colore utilizzato nei CSS, ad esempio. Vuoi dire che? Ad esempio Bianco -> FFFFFF, Blu -> 0000FF? –

+0

Cosa intendi per "solo blu" - mostra cosa ti aspetti e cosa ottieni ... (cioè il codice e i valori attuali daranno FFFFB5B2) –

+0

Voglio dire, invece di ottenere ciò che mai colore: r: 255, g: 181, b: 178 dovrebbe essere (rosa chiaro), ottengo solo 0000FF (blu) – Toadums

risposta

25
Color myColor = Color.FromArgb(255, 181, 178); 

string hex = myColor.R.ToString("X2") + myColor.G.ToString("X2") + myColor.B.ToString("X2"); 
+1

O semplicemente usa la parte ToString ("X2") sui byte – NoPyGod

+0

Dici "converti in numero esadecimale" ma HEX non è un numero, è una stringa usata per rappresentare un numero. – NoPyGod

+0

Oh..sorry Suppongo che l'esadecimale sia usato solo per rendere l'utente più facile da vedere. Ma l'array di pixel di una bitmap è un int [], quindi ho bisogno che il numero sia int (es. Capire come aggiungere R, G, B) – Toadums

1

È possibile utilizzare un formato stringa più corta per evitare concatenazioni di stringhe.

string.Format("{0:X2}{1:X2}{2:X2}", r, g, b)