2012-10-30 233 views
1

我已经一个图像显示在我的应用程序的图片框控件。现在,当我的应用程序正在运行且图像已被应用程序使用时,我想更新该图像。如何将图像文件保存到应用程序中?

我用这条线的代码更新我的logo图片:更新的代码

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

所以,请建议我如何在运行改变我的形象或者为我提供这个例外的解决方案。

+0

更新或写?两者都是两种不同的操作。你想刷新picturebox中的现有图像吗?或者你想将pb图像保存到某个文件? – nawfal

+0

我想将pb图像保存到当前正在运行的应用程序中使用的现有文件。 –

回答

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.

+0

当我使用此代码,它会通过同样的异常**的GDI +。发生一般性错误**在节省时间。 –

+0

@BumbleBee即使您使用上述代码保存文件,您也会收到该错误。这里的关键是甚至可以通过我指定的方法将图片加载到pb。你是否按照我指定的方式加载到了pb?那么应该没有错误。 – nawfal

+0

我在PB加载图像按照你的建议之后,我是要来挽救形象在指定的位置,虽然我得到了同样的错误。 –

相关问题