OutOfMemoryException добавление множества кадров изображений в список изображений - PullRequest
1 голос
/ 25 марта 2012

При попытке добавить рамки изображений с помощью SelectActiveFrame в список изображений я получаю исключение "Недостаточно памяти".Все работает на 100%, если я обрабатываю менее 174 страниц, но что-либо из этого вызывает эту ошибкуВ простейшем виде мой код:

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 голосов
/ 26 марта 2012

Интересно, что я могу решить мою проблему путем преобразования кадра в поток байтов, а затем обратно в изображение. Следующее работает на 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);
}
0 голосов
/ 25 марта 2012

Недостаточно памяти. Вам нужно загружать изображения в пакетном режиме (просто загрузите то, что вам нужно, и выгрузите его, когда оно вам больше не нужно.)

В любом случае ... Я не понимаю, зачем вам нужно несколько растровых изображений. Просто сделайте new Bitmap(...) один раз и используйте его повторно (если только код, который вы вставили, на самом деле не является вашим реальным кодом, и вы обрабатываете несколько scannedImage внутри этого цикла for.)

...