2011-02-05 52 views
2

我使用創建的在線圖像的縮略圖:節約縮略圖,讓GDI中發生一般性錯誤+

public static string SaveThumbnail(string imageUrl, int newWidth, int newHeight, string id) 
{ 
    string uploadImagePath = "/UploadedImages/"; 
    Stream str = null; 
    HttpWebRequest wReq = (HttpWebRequest)WebRequest.Create(imageUrl); 
    HttpWebResponse wRes = (HttpWebResponse)(wReq).GetResponse(); 
    str = wRes.GetResponseStream(); 

    using (var image = Image.FromStream(str, false, true)) 
    { 
     Image thumb = image.GetThumbnailImage(newWidth, newHeight,() => false, IntPtr.Zero); 
     string pathAndName = Path.ChangeExtension(uploadImagePath + id, "thumb"); 
     thumb.Save(pathAndName); 
     return pathAndName; 
    } 
} 

但即時得到這個錯誤

說明:期間,出現未處理的異常執行當前的網頁
請求。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及它在代碼中的起源位置

異常詳細信息

System.Runtime.InteropServices.ExternalException:GDI +中發生一般性錯誤。

什麼想法?

+0

我也在幾天前遇到過這個錯誤。這是因爲我用來保存圖像的路徑是錯誤的。它仍然拋出GDI +錯誤! – Mayank

回答

0

Iirc這是因爲它喜歡可以搜索的流,而網絡流則不是。嘗試先將流複製到MemoryStream中(或者是一個臨時的FileStream,如果很大的話),然後從中讀取(記住在讀取之前將位置設置回0)。

using(var ms = new MemoryStream()) { 
    str.CopyTo(ms); // a 4.0 extension method 
    ms.Position = 0; 
    // TODO: read from ms etc 
} 

在FileStream的情況下,您可能會發現WebClient.DownloadFile更方便。內存中方法的同上WebClient.DownloadData。

0

當GDI無法分配內存來執行圖像處理時發生GDI +錯誤。當圖像相當大時,會發生這種情況,並且ASP.NET工作進程會限制整個進程使用的內存。

我們創建了接受文件的路徑和收益大小的文件路徑的自承載WCF服務,該服務是內部窗口服務,它有它自己的過程,並沒有像ASP.NET內存限制。在ASP.NET內部,我們將文件存儲在臨時路徑中,並調用具有相同路徑的調整器服務,然後我們可以訪問調整大小的圖像。

基本上我們已經轉移從ASP.NET應用調整大小的窗口服務的ASP.NET和窗口服務之間的工作量,並且通信被限制在相同的主機。

相關問題