C#从阵列保存图像

C#从阵列保存图像,c#,image,bitmap,save-image,C#,Image,Bitmap,Save Image,我有一个我已经调整大小的图像数组,我试图做的是直接从数组中保存它们 foreach (Image I in Resizedimages) { string f = Environment.GetFolderPath(Environment.SpecialFolder.Desktop).ToString() + "\\NewImages\\" + names[n]; I.Save(f, System.Draw

我有一个我已经调整大小的图像数组,我试图做的是直接从数组中保存它们

foreach (Image I in Resizedimages)
            {
                string f = Environment.GetFolderPath(Environment.SpecialFolder.Desktop).ToString() + "\\NewImages\\" + names[n];

                I.Save(f, System.Drawing.Imaging.ImageFormat.Jpeg);
                n++;

            }

问题是每次运行程序时,我都会遇到一个未处理的异常“GDI+中发生了一个通用错误”,我知道这与save方法有关。我假设这个问题以前有人问过,如果是这样的话,我很抱歉。在网上搜索数小时后,我尝试了许多不同的修复方法。我想这可能是我的程序特有的。有什么想法吗?

问题可能是某些东西被位图对象或图形对象锁定了。对某些内容调用
Dispose()
可能会起作用,或者您可以复制到新位图并保存该位图:

       Bitmap copy = new Bitmap(I);
       copy.Save(f, System.Drawing.Imaging.ImageFormat.Jpeg);
为了避免GDI锁定文件,您可以从MemoryStream创建映像:

       MemoryStream stream = new MemoryStream(File.ReadAllBytes(fileName));
       Image image = Image.FromStream(stream);

问题可能是位图对象或图形对象锁定了某些内容。对某些内容调用
Dispose()
可能会起作用,或者您可以复制到新位图并保存该位图:

       Bitmap copy = new Bitmap(I);
       copy.Save(f, System.Drawing.Imaging.ImageFormat.Jpeg);
为了避免GDI锁定文件,您可以从MemoryStream创建映像:

       MemoryStream stream = new MemoryStream(File.ReadAllBytes(fileName));
       Image image = Image.FromStream(stream);

首先看这个mskb,我希望n被初始化为零。我猜Resizedimages中的图像是错误的。我已经说过,问题不在于代码中的任何东西,除了save方法,是的,它是0。Resizedimages没有任何问题。请先看这个mskb,我希望n被初始化为零。我猜Resizedimages中的图像是错误的。我已经说过,问题不在于代码中的任何东西,除了save方法,是的,它是0。ResizedImage没有任何问题。复制图像并没有阻止错误。流的想法是从路径获取图像,这不起作用,因为我只在数组中获取图像,我只需要保存它。其他尝试是在保存和/或保存到流之前处理图形对象,而不是指定文件名。我听说过dispose解决方案,但我一直将图像设置为空,所以我认为我做错了。是否要解释一下如何执行此操作?只需在调用Image.Save()之前处理图形对象即可。您也可以在处理原始图像对象后使用“复制位图”解决方案来尝试。复制图像并不会停止错误。流的想法是从路径获取图像,这不起作用,因为我只在数组中获取图像,我只需要保存它。其他尝试是在保存和/或保存到流之前处理图形对象,而不是指定文件名。我听说过dispose解决方案,但我一直将图像设置为空,所以我认为我做错了。是否要解释一下如何执行此操作?只需在调用Image.Save()之前处理图形对象即可。您也可以在处理原始图像对象后,使用“复制位图”解决方案尝试此操作。