我有一个提取8位值的方法(下面),虽然我对输出的印象如下:
010 020 030 = Specific Colour
135 250 250 = Specific Colour
我的方法返回数组中的8位值 - 如果方法不返回多维数组中的8位值(如上所述),因为所有3组8位相互对应形成颜色? / p>
当前方法:
private static byte[] GetColorData(Bitmap bmp)
{
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData bmpdata = bmp.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
IntPtr ptr = bmpdata.Scan0;
int bytes = bmpdata.Stride * bmp.Height;
byte[] results = new byte[bytes];
Marshal.Copy(ptr, results, 0, bytes);
bmp.UnlockBits(bmpdata);
return results;
}
当前方法输出:
100
101
000
255
250
答案 0 :(得分:1)
位图的颜色值只是一个字节数组。这取决于如何对它们进行分组的价值的解释。您的代码显式将图像转换为24bpp RGB,因此您可以自行进行分组。
另外,您返回byte[]
,根据定义,它只有一个维度。如果你想要一个三维数组,你需要自己创建一个数组并自己将results
中的值添加到新的多维数组中。
答案 1 :(得分:0)
当您以请求的方式读取像素数据时,您将获取请求的数据作为字节数组,每个字节 - 三元组定义1个像素。
您可以为每个像素创建一个Tuple<byte,byte,byte>
个实例,您可以在其中对像素级别的值进行分组,然后返回ICollection<Tuple<byte,byte,byte>>
以此分组方式获取所有像素。