2011-04-10 90 views
2

我有我已经调整图像阵列,我想要做的就是直接将它们保存在数组...C#保存图像从Array

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 +中发生了一个通用错误”,并且我知道这是与保存方法有关的事实。我以前曾经问过这个问题,如果是这种情况,那么我很抱歉。在网上搜索了几个小时后,我尝试了许多不同的修复方法,我认为这可能与我的程序有关。有任何想法吗?

+1

看到:

 Bitmap copy = new Bitmap(I); copy.Save(f, System.Drawing.Imaging.ImageFormat.Jpeg); 

为了避免GDI文件锁定,你可以从一个MemoryStream创建图像这个女士KB http://support.microsoft.com/?id=814675 – 2011-04-10 00:11:20

+0

首先,我希望n被调到零。估计我会说Resizeimages中的图像是错误的。 – 2011-04-10 00:12:26

+0

我已经说过,除了保存方法之外,问题不在代码中的任何地方,并且是0。没有任何错误的Resizedimages。 – Zizo47 2011-04-10 00:16:35

回答

0

问题可能在于被Bitmap对象或Graphics对象锁定的东西。调用的东西Dispose()可能工作或者你可以复制到一个新的位图,保存:

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

制作图像的副本并未停止该错误。流的想法是从一个路径获取图像,这是行不通的,因为我只有一个数组中的图像,我只需要保存它。 – Zizo47 2011-04-10 00:47:39

+0

其他要尝试的事情是在保存和/或保存到Stream之前处理Graphics对象,而不是指定文件名。 – 2011-04-10 00:52:29

+0

我听说过处理解决方案,但我一直让图像为空,所以我认为我做错了。小心解释我该如何去做这件事? – Zizo47 2011-04-10 01:00:19