C# 从16位获取颜色

C# 从16位获取颜色,c#,image,16-bit,C#,Image,16 Bit,我正在玩C#中的颜色,我想知道如何从16位字节数组中获取颜色值。下面是我使用32位字节数组的代码 var colorArray = new Color[b.Length/4]; for (var i = 0; i < b.Length; i += 4) { var color = Color.FromArgb(b[i + 0

我正在玩C#中的颜色,我想知道如何从16位字节数组中获取颜色值。下面是我使用32位字节数组的代码

                var colorArray = new Color[b.Length/4];                
                for (var i = 0; i < b.Length; i += 4)
                {
                    var color = Color.FromArgb(b[i + 0], b[i + 1], b[i + 2], b[i + 3]);
                    colorArray[i / 4] = color;
                }
var colorArray=新颜色[b.Length/4];
对于(变量i=0;i
基本上,您可以将每个字段的最高有效位以新格式移到正确的位置,并将所有缺失的位屏蔽为零。绿色被分成两个字节。如果数组是一个16位整数的数组,这会更容易,但是如果它是以字节为单位的,那么对一对字节的位操作大致如下

+----+----+----+----+----+----+---+---+---+---+---+---+---+---+---+---+
|               byte1                 |             byte0             |
+----+----+----+----+----+----+---+---+---+---+---+---+---+---+---+---+
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+----+----+----+----+----+----+---+---+---+---+---+---+---+---+---+---+
| -  |          Red           |       Green       |       Blue        |
+----+----+----+----+----+----+---+---+---+---+---+---+---+---+---+---+

B8 = (byte0 << 3) & 0xF8;
G8 = ((byte1 << 6) & 0xC0) || ((byte0 >> 2) & 0x38);
R8 = (byte1 << 1) & 0xF8;

B8G8R8 = B8 | (G8 << 8) || (R8 << 16);
+----+----+----+----+----+----+---+---+---+---+---+---+---+---+---+---+
|字节1 |字节0|
+----+----+----+----+----+----+---+---+---+---+---+---+---+---+---+---+
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+----+----+----+----+----+----+---+---+---+---+---+---+---+---+---+---+
|-|红|绿|蓝|
+----+----+----+----+----+----+---+---+---+---+---+---+---+---+---+---+
B8=(字节02)&0x38);

R8=(字节1)16位格式的打包方式是什么?是B5G6R5?还是B5G5R5A1?还是你在谈论B16G16R16?你的问题中几乎没有足够的信息来尝试回答。你遇到了什么问题?你读过维基文章吗()?格式为RGB555,因此您需要访问位的帮助?您知道如何进行位操作吗?例如:
(数据[0]>>5)&0x1F
再说一遍,您遇到了什么问题?我想这是位操作。我有一个16位字节数组,我想从16位中获取颜色值,并将其存储在颜色变量中,然后将该颜色变量添加到数组中。