OutOfMemoryException将许多图像帧添加到图像列表

时间:2012-03-25 18:18:09

标签: c# image out-of-memory

尝试使用SelectActiveFrame将图像帧添加到图像列表时,会出现Out of Memory异常。如果我处理的页数少于174页,那么所有工作都是100%,但是这样做会产生这个错误。在它最简单的形式我的代码是;

var scannedImage = (Bitmap)Image.FromFile(@"C:\Users\rbl\Documents\Modelware\City Prop\TIFF Files\barcodememory.tiff");
var dim = new FrameDimension(scannedImage.FrameDimensionsList[0]);
var imageCount = scannedImage.GetFrameCount(dim);
var currentBatch = new List<Image>();

for (var i = 0; i < imageCount; i++)
{
scannedImage.SelectActiveFrame(dim, i);

currentBatch.Add(new Bitmap(scannedImage));
// Above experiences following error after +/- 174 pages
//System.OutOfMemoryException was unhandled
//Message=Out of memory.
//Source=System.Drawing
}

2 个答案:

答案 0 :(得分:0)

你的内存不足。您需要批量加载图像(只需加载您需要的图像并在不再需要时卸载它。)

无论如何......我不明白为什么你需要几个位图。只需执行一次new Bitmap(...)并重复使用它(除非您粘贴的代码实际上不是您真正的代码,并且您在for循环中处理了多个scannedImage。)

答案 1 :(得分:0)

有趣的是,我能够通过将帧转换为字节流然后再转换回图像来解决我的问题。以下工作100%(只是不确定原因,或者这是否是一个好的解决方案)。

for (int i = 0; i < pageCount; i++)
{
    image.SelectActiveFrame(dim, i);
    var byteStream = new MemoryStream();
    image.Save(byteStream, ImageFormat.Bmp);
    frames[i] = Image.FromStream(byteStream);
}