1

我的应用程序的图片框控件中显示了一张图像。现在我想在我的应用程序正在运行并且该应用程序已经使用该图像时更新该图像。

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

  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+.

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

4

1 回答 1

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);

您可以在这个 SO question中找到更多信息。

于 2012-10-30T15:21:53.830 回答