我有一个包含超过500个Bitmaps对象的位图数组。我需要将Array中的每个Bitmap对象转换为二进制数组。我正在使用MemoryStream类来实现这个目标:
using (MemoryStream ms = new MemoryStream())
{
images[0].Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
byte[] byteData = ms.ToArray();
}
我想知道是否有其他方法可以实现这一目标。我不确定这个过程有多贵。
由于
答案 0 :(得分:1)
我做了一些速度测试并转换为ImageFormat.Bmp是最快的。它不需要进行任何压缩。虽然最佳格式也取决于您计划在此之后对数据做什么。
首先考虑Bitmaps的来源也值得考虑。如果你从一个文件中加载它们,那么首先切换并读取文件数据可能是值得的,然后在那之后从它创建你的Bitmap对象。
答案 1 :(得分:1)
通过选择Gif,您正在进行CPU /内存交易,这是您最不希望的。具体来说,Gif会变小,但是相对于使用BMP,需要一些时间来压缩(除非图像已经是格式)。
如果你正在复制它们以至于存在内存带宽问题(并且无法修复),这是一个好主意,但除此之外你应该坚持使用BMP。实际上,对于500张图像,我预计最多需要1-2秒,所以你可能不需要担心这种微观优化。如果它花费很长时间你可以转移到非托管代码,这可能会更好,因为你可以更好地控制内存分配和副本。