将位图转换为二进制数组性能

时间:2011-09-29 15:40:15

标签: c# performance bitmap memorystream

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

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

我想知道是否有其他方法可以实现这一目标。我不确定这个过程有多贵。

由于

2 个答案:

答案 0 :(得分:1)

我做了一些速度测试并转换为ImageFormat.Bmp是最快的。它不需要进行任何压缩。虽然最佳格式也取决于您计划在此之后对数据做什么。

首先考虑Bitmaps的来源也值得考虑。如果你从一个文件中加载它们,那么首先切换并读取文件数据可能是值得的,然后在那之后从它创建你的Bitmap对象。

答案 1 :(得分:1)

通过选择Gif,您正在进行CPU /内存交易,这是您最不希望的。具体来说,Gif会变小,但是相对于使用BMP,需要一些时间来压缩(除非图像已经是格式)。

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