保存图像时出现 GDI+ 一般错误

getting GDI+ generic error while saving the image

我的问题是无法覆盖最近打开的图像。 所以,假设我用 openfiledialog:

打开文件
OpenFileDialog OpenFileDialog1 = new OpenFileDialog();

OpenFileDialog1.InitialDirectory = "c:\";
OpenFileDialog1.Filter = "Images|*.GIF;*.TIF;*.JPG;*.BMP";
OpenFileDialog1.RestoreDirectory = true;

if (OpenFileDialog1.ShowDialog() == DialogResult.OK)
{
      if ((OpenFileDialog1.OpenFile()) != null)
      {
           if (string.IsNullOrEmpty(OpenFileDialog1.FileName))
                return;

           pictureBox1.Image = Image.FromFile(OpenFileDialog1.FileName);
      }
}
OpenFileDialog1.Dispose();

在我对图片框做了一些更正(例如画了一些东西)之后,我想用 savefiledialog.[=15 保存图像(到我打开图像的同一个文件) =]

SaveFileDialog saveFileDialog1 = new SaveFileDialog();

saveFileDialog1.Filter = "BMP File|*.BMP";
saveFileDialog1.RestoreDirectory = true;

if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
     pictureBox1.Image.Save(saveFileDialog1.FileName, ImageFormat.Bmp);
}

它给我一个错误 (System.Runtime.InteropServices.ExternalException),也称为 GDI+ 一般错误。所以,这基本上是一个错误,拒绝覆盖我最近打开的文件。

Image.FromFile() 加载的 Image 使文件保持打开状态。

您可以 Dispose() 图片来释放资源,但我认为 PictureBox 如果它仍然显示旧图片,他们不会太高兴。

或者您可以在 MemoryStream 中加载文件的内容并使用 Image.FromStream()