保存图像会引发内存不足异常

本文关键字:内存不足 异常 图像 保存 | 更新日期: 2023-09-27 18:32:25

这是我下载和保存图像的代码:

using (var webClient = new WebClient())
        {
            byte[] data = webClient.DownloadData(string.Format("http://muserver.com/{0}", url.TrimStart('/')));
            var memory = new MemoryStream(data);
            var image = System.Drawing.Image.FromStream(memory);
            image.Save(pathOriginal, ImageFormat.Png);
            ResizeImageFixedWidth(image, 350).Save(pathDetails, ImageFormat.Png);
        }
public static System.Drawing.Image ResizeImageFixedWidth(System.Drawing.Image imgToResize, int width)
    {
        int sourceWidth = imgToResize.Width;
        if (sourceWidth > width)
        {
            int sourceHeight = imgToResize.Height;
            float nPercent = ((float)width / (float)sourceWidth);
            int destWidth = (int)(sourceWidth * nPercent);
            int destHeight = (int)(sourceHeight * nPercent);
            Bitmap b = new Bitmap(destWidth, destHeight);
            Graphics g = Graphics.FromImage((System.Drawing.Image)b);
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
            g.Dispose();
            return (System.Drawing.Image)b;
        }
        else
        {
            return imgToResize;
        }
    }
调整图像固定

宽度(0 是我用来调整图像大小但保存宽高比的方法。我想做的是:将相同的图像保存在 2 个文件夹中,一个是原始大小,一次是宽度为 350。ResizeImageFixedWidth(image, 350) 返回一个图像,它不会崩溃。但是在 Save() 方法上它崩溃了,说我内存不足。值得注意的是,对于很多图像,我执行相同的方法大约 100 次。我做错了什么?

保存图像会引发内存不足异常

将语句包装到 using 语句中,以便自动关闭和处置流。

using (MemoryStream stream = new MemoryStream(data)
{
    using(Image myImage = Image.FromStream(stream))
    {
        //do stuff
    }
}