如何在应用程序使用图像文件时保存它?

时间:2012-10-30 09:15:49

标签: .net image c#-4.0 windows-applications

我的应用程序中的图片框控件中显示了一个图像。现在,我希望在我的应用程序运行时更新该Image,并且应用程序已经使用了该图像。

我使用代码这一行来更新我的徽标图片:更新代码

  public void showRow()
  {
      string _fileName = Application.StartupPath + "\\Logo" + ".png";

      using (var stream = new FileStream(_fileName, FileMode.Open, FileAccess.Read))
      {
          var img = Image.FromStream(stream);
          pbStoreLogo.Image = img;
      }
  }

  private void btnsave_Click(object sender, EventArgs e)
  {
      using (var m = new MemoryStream())
      {
          pbStoreLogo.Image.Save(m,System.Drawing.Imaging.ImageFormat.Png);
          var img = Image.FromStream(m);
          img.Save(Application.StartupPath + "\\Logo" + ".png");
      }
  }

它通过例外:A generic error occurred in GDI+.

因此,请建议我如何在运行时更改我的图像或为我提供此异常的解决方案。

1 个答案:

答案 0 :(得分:1)

要将Image对象从应用程序保存到文件系统中的物理路径,必须确保应用程序或任何其他应用程序不使用该文件。因此,您不仅要注意如何保存文件,还要注意如何将图像读取到图片框。

要释放物理资源,您必须将文件读取到流中,然后从流中形成图像,然后将图像分配给图片框。像这样:

string _fileName = Application.StartupPath + "\\Logo" + ".png";

using (var stream = new FileStream(_fileName, FileMode.Open, FileAccess.Read))
{
    var img = Image.FromStream(stream);
    pbStoreLogo.Image = img;
}

保存时:

using (var m = new MemoryStream())
{
    pbStoreLogo.Image.Save(m, ImageFormat.Png);
    var img = Image.FromStream(m);
    img.Save(_fileName);
}

如果您将文件作为项目中的资源文件,那么所有这些麻烦都不应该存在。你可以这样做:

pbStoreLogo.Image = Properties.Resources.Image1;

pbStoreLogo.Image.Save(_fileName);

您可以找到更多info in this SO question.