OutOfMemory异常从文件加载位图

时间:2016-10-12 14:45:00

标签: c# bitmap

我遇到的问题是我将文件加载到位图中,获取我需要的图像属性然后处理位图。

foreach (string file in fiList)
{
    newImage = new imageInfo();
    newImage.OrigName = currFile.Name;
    newImage.Location = currFile.FullName;
    newImage.NewName = cleanFileName(newImage);
    newImage.ManualNameChange = false;
    newImage.Type = type;
    newImage.Size = Math.Round(sizeInMB, 2) + " KB";
    newImage.LastModified = currFile.LastWriteTime;
    newImage.CreateDate = currFile.CreationTime;
    tmpImage = Bitmap.FromFile(currFile.FullName);
    newImage.DPI = 
        (int)Math.Ceiling(tmpImage.HorizontalResolution);
    newImage.Width = tmpImage.Width;
    newImage.Height = tmpImage.Height;
    newImage.PixelFormat = tmpImage.PixelFormat.ToString();

    tmpImage.Dispose();

    ...
}

我一直收到OutOfMemory错误,但是在运行内存分析器时,应用程序只使用它可以分配的200GB的1.4GB。我查看了图像,这个文件只有64MB的jpg,所以即使转换成位图后,也不应该消耗掉1.2GB的大部分内容。错误发生在Bitmap.FromFile方法创建tmpImage

为什么当我还有足够的内存要分配时,我会得到一个OutOfMemory异常?

1 个答案:

答案 0 :(得分:-1)

在进行一些挖掘之后,这实际上与程序的内存分配无关。此问题实际上是由于尝试将损坏的图像加载到内存中。由于某种原因,当图像损坏时,这会导致抛出OutOfMemory异常。这有点误报。