2009-11-02 43 views
0

我試圖「重新保存」一個圖像,並得到錯誤「GDI +中發生了一般性錯誤」。我已經做了一些搜索這個錯誤,但還沒有找到解決方案!大部分的建議提到:「在GDI +中發生了一般性錯誤」保存

  • 檢查該流不使用或鎖定(即文件流)
  • 確保流未設置爲對象的生命週期(不應該因爲你見下文)
  • 試圖將位圖對象中複製的對象,並用它來保存(沒有爲我工作)

我正在使用的代碼如下:

using (Stream @imageStream = ResourceManager.CreateFile(finalResourceId, imageFileName)) 
{ 
    using (MemoryStream ms = new MemoryStream(imageFile.ResourceObject)) 
    { 
     using (Image img = Image.FromStream(ms)) 
     { 
      imageWidth = img.Width; 
      imageHeight = img.Height; 
      img.Save(@imageStream, img.RawFormat); 
     } 
    } 
} 

在上面的代碼中,ResourceManager.CreateFile返回相當於MemoryStream,因此不應該有任何「資源問題」。

我不假設其他人遇到過這個問題,並且能夠分享他們的解決方案嗎?在此先感謝您的幫助!

+0

只要你知道,你可以結合那些使用語句。 – 2009-11-02 04:04:27

+0

有你要保存的文件夾獲得ASPNET_MACHINE和NETWORKSERVICE寫入權限? – Scozzard 2009-11-02 04:10:50

+0

嗨,感謝您對使用陳述的建議。 至於權限查詢 - 這些不應該發揮作用,因爲我沒有寫入文件系統,而是將所有內容都保存在內存中。 – 2009-11-02 04:13:22

回答

1

感謝@Scozzard提示我想出一個解決方法!

int imageWidth, imageHeight; 
using (Stream imageStream = ResourceManager.CreateFile(finalResourceId, imageFileName)) 
{ 
    using (Image img = Image.FromStream(new MemoryStream(imageFile.ResourceObject))) 
    { 
     imageWidth = img.Width; 
     imageHeight = img.Height; 
    } 
    imageStream.Write(imageFile.ResourceObject, 0, imageFile.ResourceObject.Length); 
} 

因爲我完全在內存中工作,我並不真的需要使用圖像對象重新保存它,因爲它是在同一圖像格式 - 我可以隻字節緩衝區複製到新的流。

感謝您的意見!

+0

哈哈不用擔心 - 不錯的工作! – Scozzard 2009-11-02 04:22:09

相關問題