2012-11-13 13 views
11

Co mam jest R: 255 G: 181 B: 178, a ja pracuję w C# (dla WP8, aby być bardziej szczegółowe)Konwersja z int RGB, HEX

Chciałbym przekonwertować to do liczba szesnastkowa do użycia jako kolor (aby ustawić kolor piksela na WriteableBitmap). To, co robię, jest następujące:

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

Ale kiedy to robię, po prostu robię się niebieski.

Jakieś pomysły, co robię źle?

Ponadto, aby cofnąć to, aby sprawdzić wartości RGB, ja jadę:

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

Istnieje na przykład format szesnastkowy koloru używanego w CSS. Czy masz na myśli że? Na przykład biały -> FFFFFF, niebieski -> 0000FF? –

+0

Co masz na myśli "po prostu nabrać koloru niebieskiego" - pokaż, czego się spodziewasz i co otrzymujesz ... (np. Aktualny kod i wartości dadzą FFFFB5B2) –

+0

Mam na myśli, zamiast uzyskać to, co kiedykolwiek kolor: r: 255, g: 181, b: 178 powinno być (jasny różowy), właśnie dostaję 0000FF (niebieski) – Toadums

Odpowiedz

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

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

Lub po prostu użyj części ToString ("X2") na bajtach – NoPyGod

+0

Mówisz "przekonwertuj to na liczbę szesnastkową", ale HEX nie jest liczbą, jest to ciąg używany do reprezentowania liczby. – NoPyGod

+0

Oh..sorry Sądzę, że heks jest właśnie używany, aby ułatwić użytkownikowi zobaczenie. Ale tablica pikseli mapy bitowej to int [], więc potrzebuję tej liczby, aby była int (tj. Wymyślić, jak dodać R, G, B) – Toadums

1

Można użyć krótszego format string, aby uniknąć powiązań, ciągów.

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