Bitmap.Save(Stream,ImageFormat)如何格式化数据?

我有一个非透明的彩色位图,长度为2480,宽度为3507。

使用Bitmap.GetPixel(int x, int y)我能够获得位图中每个像素的颜色信息。

如果我将位图喷射到byte []:

 MemoryStream ms = new MemoryStream(); bmp.Save(ms, ImageFormat.Bmp); ms.Position = 0; byte[] bytes = ms.ToArray(); 

然后我希望有相同的信息,即我可以转到字节[1000]并读取该像素的颜色信息。

事实certificate,我的字节数组比我预期的要大。 我以为我会得到一个2480 x 3507 = 8697360元素的数组。 相反,我得到一个包含8698438个元素的数组 – 我认为是某种标题。

我的数组中的字节以什么格式存储? 是否有一个1078字节长的标题,后跟每个字节元素的Alpha,Red,Green,Blue值,还是其他什么?

我只需要每个像素的颜色信息。 我不关心标题(或确实是透明度),除非我需要它来获取颜色信息。

您正在调用GetBuffer ,它返回基础字节数组 – 它大于流的实际长度。

要么使用

 byte[] bytes = ms.ToArray(); 

或者使用GetBuffer但与ms.Length一起使用。

话虽如此,你将它保存为BMP – 所以也会有标题信息; 它不像第一个字节将代表第一个像素。 不幸的是,据我所知,没有“原始”的图像格式……这听起来像你真正想要的。

你可以使用Bitmap.LockBits ,然后从那里复制数据,如果你想…

如果我正确理解了有关Bitmap.Save的文档,它会以指定的格式保存图像,这意味着您将在您的bytes数组中使用位Bitmap.Save头。 我想你应该阅读一些关于位图格式的文档,以了解如何在数组中获取所需的信息