【问题标题】:C# Saving Images From ArrayC# 从数组中保存图像
【发布时间】:2011-08-02 07:14:22
【问题描述】:

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

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+ 中发生一般错误”,并且我知道这与保存方法有关。我假设以前有人问过这个问题,如果是这样的话,我很抱歉。在网上搜索了几个小时后,我尝试了许多不同的修复方法,我认为这可能是我的程序特有的。有什么想法吗?

【问题讨论】:

  • 首先,我希望 n 初始化为零。我猜我会说 Resizedimages 中的图像是错误的。
  • 我已经说过,除了 save 方法,问题不在于代码中的任何内容,是的,它的值为 0。Resizedimages 没有任何问题。

标签: c# image bitmap save-image


【解决方案1】:

问题可能是某些东西被 Bitmap 对象或 Graphics 对象锁定。调用 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);

【讨论】:

  • 复制图像并没有阻止错误。流的想法是从路径中获取图像,这不起作用,因为我只在数组中获取图像,我只需要保存它。
  • 其他要尝试的方法是在保存和/或保存到 Stream 之前处理 Graphics 对象,而不是指定文件名。
  • 我听说过 dispose 解决方案,但我一直使图像为空,所以我认为我做错了。愿意解释一下我该怎么做吗?
  • 在调用 Image.Save() 之前释放 Graphics 对象。您也可以在处理原始 Image 对象后尝试使用复制位图解决方案。
猜你喜欢
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
  • 2013-10-19
  • 1970-01-01
相关资源
最近更新 更多