2012-03-07 94 views
3

尊敬的專家爲什麼我在保存圖像得到一個錯誤的代碼如下gdi +發生了一般性錯誤。而保存圖像

ClsImageManager objImgManager = new ClsImageManager(); 
    Bitmap ImageBitmap = objImgManager.GetBitmapFromBytes(ImageData); 
    Response.ContentType = "image/tiff"; 
    ImageBitmap.Save(Response.OutputStream, ImageFormat.Tiff); 
    ImageBitmap.Dispose(); 
    Response.End(); 

當我用Image.format.jpeg的代碼工作很好,但是當我把它變成的imageformat。 Tiff然後我得到一個錯誤在gdi +中發生了一個通用錯誤。

+0

用了幾個小時來追蹤這個問題,結果我沒有看到真正的信息。我的服務器有一個與上傳有關的磁盤空間配額,圖像無法保存,因此給我gdi +異常。 – 2013-07-11 06:18:47

回答

4

你應該注意到,GDI/GDI +(System.Drawing命名空間)是不是正式ASP.NET支持 - 請參閱http://msdn.microsoft.com/en-us/library/system.drawing.aspx中的「小心」。
WIC應該用於代替GDI +(請參閱http://weblogs.asp.net/bleroy/archive/2009/12/10/resizing-images-from-the-server-using-wpf-wic-instead-of-gdi.aspx

說的是,很多人都成功地在ASP.NET中使用GDI +。最有可能的是,您應該嘗試將圖像保存到內存流(或文件)中,然後將保存的圖像寫入響應中。請參閱此鏈接瞭解詳情:http://www.west-wind.com/weblog/posts/2006/Oct/19/Common-Problems-with-rendering-Bitmaps-into-ASPNET-OutputStream

另一種解決方法可能與用戶帳戶有關。顯然,GDI/GDI +綁定到設備上下文(屏幕,打印機等),它們可能無法在服務帳戶下使用。所以你可以嘗試在一些普通的用戶帳戶上運行你的ASP.NET代碼,如果有幫助的話。

2

您可能需要嘗試顯式編碼圖像保存。
查看此MSDN文檔底部的代碼示例.Save
Image.Save Method (String, ImageCodecInfo, EncoderParameters)
相同的操作可應用於您的保存。

但是,它也可能是您的objImgManager在保存圖像之前將其放置在緩衝區。

Bitmap ImageBitmap = objImgManager.GetBitmapFromBytes(ImageData); 

您可以通過這樣做,創建圖像的副本解決這個問題:

Bitmap ImageBitmap = new Bitmap(objImgManager.GetBitmapFromBytes(ImageData)); 
+0

此變通辦法解決了我的GDI +通用錯誤問題,同時將TIFF轉換爲JPG。謝謝! – Tomino 2013-08-28 07:23:57

相關問題