2009-06-24 61 views
7

的保存方法的圖像我有我在哪裏調整圖像的文件夾中。我正在使用GDI +做一個ASP.NET C#頁面this.I要調整大小的圖像,代之以舊的圖像。所以,當我試圖用現有名稱保存時,Save方法會拋出一個錯誤。但是如果我給出不同的名稱,它會被保存。但是,我想爲新創建的調整大小的圖像具有相同的文件名因爲我需要使用調整大小的新文件覆蓋現有文件。任何想法如何繼續前進。 我的代碼是C#:GDI +:覆蓋使用位圖

 oldImagePath= oldImagePath.Replace(".jpg", "NEW.jpg"); 

     try 
     { 
      ImageCodecInfo[] Info = ImageCodecInfo.GetImageEncoders(); 
      EncoderParameters Params = new EncoderParameters(1); 
      Params.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L); 
      target.Save(oldImagePath, Info[1], Params); 
     } 

如果我評論其爲目標文件創建一個新名稱的第一個行,它不會工作,其他wose它will.But我想有相同的名稱。任何想法? ? ?在此先感謝

回答

11

您需要先刪除原始文件。做出區分非常重要 - 當您在.NET中處理圖像操作時,您正在處理內存中的對象,該對象的字節通過讀取原始圖像進行填充。您沒有使用實際的原始圖像。所以,當你去保存這個全新的對象(恰好使用來自現有圖像的數據),並且你嘗試使用已經在使用的路徑時,你會得到一個異常。

您還需要確保原始文件是不是仍然在這一點上打開;請務必處理您用來填充正在操作的Image對象的原始文件流。然後刪除,然後保存。

+0

很多燈的出發生在我的國家,這不是最好的主意。 – deadManN 2016-05-31 05:02:29

18

如果您使用的技術在下面的行

Image imgPhoto = Image.FromFile("myphoto.jpg"); 

那麼這個保持打開該文件,所以當你試圖覆蓋它的文件句柄仍然被使用,所以你是加載圖像無法寫信給它。

要解決這個問題,如果你將文件加載到流那麼這可以讓你覆蓋原文件作爲圖像信息已被寫入到內存中的文件句柄已被釋放。

您可以通過以下方式做到這一點:

FileStream fs = new FileStream("myphoto.jpg", FileMode.Open); 
Image imgPhoto = Image.FromStream(fs); 
fs.Close(); 
+0

http://msdn.microsoft.com/en-us/library/93z9ee4x(v=vs.110).aspx:「您必須保持該流在圖像的生命週期中打開。」 – Tewr 2014-07-21 10:37:22