我有一个非透明的彩色位图,长度为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]并读取该像素的颜色信息。
事实证明,我的字节数组比我预期的要大。我以为我会得到一个2480 x 3507 = 8697360元素的数组。相反,我得到一个包含8698438个元素的数组 - 我认为是某种标题。
我的数组中的字节以什么格式存储?是否有一个1078字节长的标题,后跟每个字节元素的Alpha,Red,Green,Blue值,还是其他什么?
我需要的只是每个像素的颜色信息。我不关心标题(或确实是透明度),除非我需要它来获取颜色信息。
答案 0 :(得分:3)
你正在调用返回基础字节数组的GetBuffer
- 它大于流的实际长度。
使用
byte[] bytes = ms.ToArray();
或使用GetBuffer
但与ms.Length
结合使用。
话虽如此,你将它保存为BMP - 所以也会有标题信息;它不像第一个字节将代表第一个像素。不幸的是,据我所知,没有“原始”图像格式......这听起来像你真正想要的。
您可以使用Bitmap.LockBits
,然后根据需要复制数据......
答案 1 :(得分:0)
如果我正确理解了有关Bitmap.Save
的文档,它会以指定的格式保存图像,这意味着您将在bytes数组中使用位图标头。我想您应该阅读一些关于bitmap format的文档,以了解如何在数组中获取所需信息