我正在尝试从MemoryStream获取图像。当在MemoryStream中有一个很大的JPG图像(在步骤中被注释为有问题的步骤转换为位图后,其大小从38MB增加到1.3GB以上),我收到了OutOfMemory异常。使用较小的图像,一切正常。如何处理这样的问题?对我来说,可接受的解决方案是将存储在_imgArray中的图像调整为1.3GB以下。是否可以在调用Image.FromStream方法之前执行此操作?

public static Image GetImageFromByteArray(byte[] _imgArray)
{
    Image imgFromArray = null;
    MemoryStream stream = null;
    try
    {
        stream = new MemoryStream(_imgArray, 0, _imgArray.Length);
        imgFromArray = Image.FromStream(stream, true);//this line throws an Out of memory exception
    }
    catch(OutOfMemoryException)
    {
        Error.Warning("Das Bild ist zu groß!");
    }
    catch (Exception ex)
    {
        throw new FacadeException("Fehler beim Laden des Bildes.", ex);
    }
    finally
    {
        if (stream != null)
        {
            stream.Close();
        }
    }
    return imgFromArray;
}

最佳答案

原因:

当您在应用程序32bit(x86)上创建大于〜1.3GB的对象时,将抛出OutOfMemory期望。

解:

尝试将应用程序更改为64bit(x64),如下图所示:

c# - Image.FromStream OutOfMemory异常-LMLPHP

关于c# - Image.FromStream OutOfMemory异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44102724/

10-13 09:05