2011-09-29 80 views
0

我确实有一个包含超过500个Bitmaps对象的位图数组。我需要将数组中的每个单独的Bitmap对象转换为二进制数组。我正在使用MemoryStream类来实现此目的:将位图转换为二进制数组性能

using (MemoryStream ms = new MemoryStream()) 
{ 
    images[0].Save(ms, System.Drawing.Imaging.ImageFormat.Gif); 
    byte[] byteData = ms.ToArray(); 
} 

我想知道是否有其他方法来实现此目的。我不确定这个过程有多昂贵。

感谢

+1

那么,如果你不知道需要多长时间,我们应该如何.. – Blindy

+0

谢谢Blindy,我只是寻找达到此目的的最佳方式,我不知道使用MemoryStreams有多昂贵 –

+0

这似乎是一个完全有效的方法给我。根据您选择的格式(gif,png等),您将得到不同大小的数组(取决于给定格式具有多少压缩)。 –

回答

1

我已经做了一些速度测试,并转换为ImageFormat.Bmp是最快的。它不需要进行任何压缩。尽管最好的格式也取决于你打算在这之后对数据做什么。

这也是值得考虑位图来自哪里的第一位。如果你从一个文件中加载它们,它可能是值得的,先切换东西并读取文件数据,然后在其中创建你的Bitmap对象。

1

通过选择Gif,您正在使CPU /内存折衷,你很可能不想要。具体来说,Gif将会变小,但与使用BMP相比,需要一些时间来压缩(除非图像已经是格式)。

如果你正在复制这些内容以至于你有内存带宽问题(并且无法解决这个问题),这是一个好主意,但除此之外你应该坚持使用BMP。实际上,对于500张图片,我预计最多需要1-2秒,因此您可能不需要担心这种微型优化。如果花费很长时间,您可以转向非托管代码,这可能会更好地执行,因为您将更好地控制内存分配和副本。

+0

谢谢,它很有用。我使用的过程是假设从PDF文件中提取图像,但我不想将这些图像保存到磁盘,而是将它保存到MemoryStream中,然后向上显示图像在用户界面中。 –