Image擴充套件,如何將網路圖片顯示在自己的程式中
阿新 • • 發佈:2019-02-01
因為圖片來源多種多樣,預設框架已經提供了好幾種圖片讀取方式,比如Image.FromFile,Image.FromHbitmap,Image.FromStream,但就是沒有提供Image.FromNet,所以這裡寫了個通用的擴充套件方法,可以支援從Net環境中讀取圖片(Http、Ftp等),因為只是個擴充套件,也沒啥好說的,直接上程式碼就是
呼叫方法就是using System.Drawing; using System.Net; public static class ImageExtensions { /// <summary> /// 通過NET獲取網路圖片 /// </summary> /// <param name="url">要訪問的圖片所在網址</param> /// <param name="requestAction">對於WebRequest需要進行的一些處理,比如代理、密碼之類</param> /// <param name="responseFunc">如何從WebResponse中獲取到圖片</param> /// <returns></returns> public static Image GetImageFromNet(this string url, Action<WebRequest> requestAction = null, Func<WebResponse, Image> responseFunc = null) { return new Uri(url).GetImageFromNet(requestAction, responseFunc); } /// <summary> /// 通過NET獲取網路圖片 /// </summary> /// <param name="url">要訪問的圖片所在網址</param> /// <param name="requestAction">對於WebRequest需要進行的一些處理,比如代理、密碼之類</param> /// <param name="responseFunc">如何從WebResponse中獲取到圖片</param> /// <returns></returns> public static Image GetImageFromNet(this Uri url, Action<WebRequest> requestAction = null, Func<WebResponse, Image> responseFunc = null) { Image img; try { WebRequest request = WebRequest.Create(url); if (requestAction != null) { requestAction(request); } using (WebResponse response = request.GetResponse()) { if (responseFunc != null) { img = responseFunc(response); } else { img = Image.FromStream(response.GetResponseStream()); } } } catch { img = null; } return img; } }
var uri = "http://t1.mmonly.cc/uploads/allimg/tuku2/16343123c-11.jpg"; //var uri = new Uri("http://t1.mmonly.cc/uploads/allimg/tuku2/16343123c-11.jpg"); var img = uri.GetImageFromNet( //(request) => //{//此處可以對request進行相關設定,因為此部分均為基類,所以也可以用於FtpWebRequest之類 // request.Timeout = 2000; //}, //(response) => //{//此處可以確定如何從response中獲取圖片,同時可以包括相關判斷之類 // return Image.FromStream(response.GetResponseStream()); //} );