如何打开一个Color.PackedValue
本文关键字:一个 Color PackedValue 何打开 | 更新日期: 2023-09-27 18:03:58
我正在尝试保存一个颜色到数据库。我知道我可以把颜色分成4个部分,RGBA,但用3列保存颜色似乎很愚蠢。然后我想用限制符把它保存成字符串,或者每个颜色只用3个字符。但这似乎又很愚蠢。Color结构有一个packedValue属性,它似乎对值做了一些事情来创建一个int。但我不知道怎么打开它。有人有什么想法吗?
Color c = new Color.Black;
uint i = c.PackedValue;
Color newColor=Color.FromUINT(i); // This doesn't work of course
PackedValue
是一个读写属性。你不需要做任何位移位来使用它
var c = new Color() { PackedValue = packedColor };
Console.WriteLine(c.A);
Console.WriteLine(c.R);
Console.WriteLine(c.G);
Console.WriteLine(c.B);
从第一个Google结果:
//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);
在进行位移位时需要交换B和R通道。IIRC DirectX使用BGRA颜色,而XNA使用RGBA。因此,如果我们将上面的示例代码修改为
//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);
你会得到正确的颜色值