2013-03-13 5 views
5

Ich versuche, eine Farbe in eine Datenbank zu speichern. Ich weiß, ich könnte die Farbe in 4 Teile, RGBA schneiden, aber es scheint albern, eine Farbe mit 3 Spalten zu speichern. Also dann habe ich es einfach mit einem Limiter in einer Saite gespeichert, oder einfach nur 3 Zeichen pro Farbe. Aber wieder scheint es albern. Die Color-Struktur hat eine packedValue-Eigenschaft, die etwas mit den Werten zu tun scheint, um eine Uint zu erstellen. aber ich weiß nicht, wie ich es auspacken soll. Wer irgendwelche IdeenWie entpacken Sie einen Color.PackedValue

Color c = new Color.Black; 
uint i = c.PackedValue; 
Color newColor=Color.FromUINT(i); // This doesn't work of course 
+0

Die properites A, B, G und R (Farbe) geben die vier compnents als Byte-Werte. –

Antwort

5

PackedValue ist ein Lese-/Schreibeigenschaft. Sie müssen kein bisschen verschieben, um es zu nutzen.

+0

Funktioniert perfekt, danke –

2

Von the first Google result:

//First lets pack the color 
Color color = new Color(155, 72, 98, 255); 
uint packedColor = color.PackedValue; 
//Now unpack it to get the original value. 
Color unpackedColor = new Color(); 
unpackedColor.B = (byte)(packedColor); 
unpackedColor.G = (byte)(packedColor >> 8); 
unpackedColor.R = (byte)(packedColor >> 16); 
unpackedColor.A = (byte)(packedColor >> 24); 
+0

Sorry, ich wollte nicht unhöflich sein! Geben Sie einfach eine Referenz für meine Antwort an. Ich kann sehen, wie es dazu kam, sorry! –

+0

Diese Antwort hat nicht ganz richtig funktioniert. wahrscheinlich wegen der Byte-Verschiebung ich weiß nicht. Nicht zu sagen, es wird nicht funktionieren, aber die Antwort von Cole Campbell funktioniert perfekt –

1

Sie müssen die B- und R-Kanäle austauschen, wenn Sie die Bitverschiebung durchführen. IIRC DirectX verwendet BGRA-Farbe, während XNA RGBA verwendet. Wenn wir also den Beispielcode ändern oben

//First lets pack the color 
Color color = new Color(155, 72, 98, 255); 
uint packedColor = color.PackedValue; 
//Now unpack it to get the original value. 
Color unpackedColor = new Color(); 
unpackedColor.R = (byte)(packedColor); 
unpackedColor.G = (byte)(packedColor >> 8); 
unpackedColor.B = (byte)(packedColor >> 16); 
unpackedColor.A = (byte)(packedColor >> 24); 

Sie erhalten den richtigen Farbwert zu lesen, zurück aus ihm