2009-08-25 12 views
8

Ich habe einen ARGB-Wert als Int-Typ gespeichert. Es wurde durch den Aufruf von ToArgb gespeichert.ARGB in Bytewerte teilen

Ich möchte jetzt die Byte-Werte der einzelnen Farbkanäle vom int-Wert.

zum Beispiel

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

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

Wie würden Sie GetBytesFromColor implementieren?

Um den Kontext zu übergeben, übergebe ich einen Farbwert in db als int in einer Silverlight-Anwendung, die die einzelnen Byte-Werte benötigt, um ein Farbobjekt zu konstruieren.

Antwort

13

Sie sind nach den 4 aufeinanderfolgenden 8-Bit-Blöcken aus einer 32-Bit-Ganzzahl; so eine Kombination von Maskierung und Verschiebung:

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

Wie wird dieser Prozess umgekehrt? – 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 hat diese Überladung von FromArgb nicht. – AnthonyWJones