2009-08-25 8 views
8

Mam wartość ARGB zapisaną jako typ int. Został on zapisany przez wywołanie ToArgb.Podział ARGB na wartości bajtowe

Chcę teraz wartości bajtów poszczególnych kanałów kolorów od wartości int.

np

int mycolor = -16744448; 
byte r,g,b,a; 

GetBytesFromColor(mycolor,out a, out r, out g, out b); 

Jak wdrożyć GetBytesFromColor?

Aby podać kontekst, który przekazuję, wartość koloru utrwalono w db jako int do aplikacji silverlight, która potrzebuje indywidualnych wartości bajtowych do skonstruowania obiektu koloru.

System.Windows.Media.Color.FromArgb(byte a, byte r, byte g, byte b) 

Odpowiedz

13

Jesteś po 4 kolejnych 8-bitowych porcjach z 32-bitowej liczby całkowitej; więc kombinacja maskowanie i przesuwanie:

b = (byte)(myColor & 0xFF); 
g = (byte)((myColor >> 8) & 0xFF); 
r = (byte)((myColor >> 16) & 0xFF); 
a = (byte)((myColor >> 24) & 0xFF); 
+0

Jak odwrócić ten proces? – nebkat

+0

'mycolor = (a << 24) + (r << 16) + (g << 8) + b;' –

2
public void GetBytesFromColor(int color, out a, out r, out g, out b) 
{ 
    Color c = Color.FromArgb(color); 
    a = c.A; 
    r = c.R; 
    g = c.G; 
    b = c.B; 
} 
+1

-1. Silverlight nie ma tego przeciążenia FromArgb. – AnthonyWJones