2012-10-30 214 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加載圖像按照你的建議之後,我是要來挽救形象在指定的位置,雖然我得到了同樣的錯誤。 –

相關問題