天天看點

WPF Image控件顯示網絡圖檔

直接上代碼,xaml代碼就貼一個Image控件:

<Image Name="image" HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="100"/>
           

加載代碼也很簡單:

public ImportWindow()
        {
            InitializeComponent();
            //圖檔位址的cookie
            string cookie = "abtest=20170731114831940_65; mobilev=html5; downloadAppPlugIn_downCloseDate=1501473077298_86400000; guid=5786acf72feafd33a77eae9d9e475f39240b9e2d66b01848fe32886f8bc35b9b; shshshfpa=6563e0d9-1cec-0905-8c8f-1066978c7deb-1501473091; whwswswws=U6%2F4jUQFaa%2FLOnmIhn9mEM4lbCRoOqUXtpqaoxofJWhAp7SX6tDsOA%3D%3D; _jrda=1; TrackID=1LniGEEJTwAeWZoQVZcYPveu1zfMu2KFp3P9eOmsTDkaVJDNi2_k3dfUOt3OESuaTOmtFx6L0sBelTdp15kHkLp8bZx1hr7wzJeayWKUSZGk; pinId=FVd6lGAhM3h5HUZeAIYtf7V9-x-f3wj7; pin=jd_78e874d39dc63; unick=52005wpm; _tp=oxWZIWBwtDdSQnvZlRT9LIGj6fHnC1PW3J3xQyQl8vE%3D; _pst=jd_78e874d39dc63; unpl=V2_YDNtbUdQQUF9AREGfklcDGJRQFgSU0sddQpEAXsdXgVgAhtcclRCFXMUR11nGV0UZwMZWEpcQxVFCHZXfBpaAmEBFl5yBBNNIEwEACtaDlwJARRZRFNLFHIITl1LKV8FVwMTbUFfSxd0CkBcfylsAlczIl1EVEYRcjhHZHopHlE7ChRbQ1RKWHYATlZ6G1oNYzMTbUE%3d; __jdv=122270672|baidu-search|t_262767352_baidusearch|cpc|37575906198_0_463e98fc4a184cc4a599133d15316080|1502336952636; ipLoc-djd=1-72-2799-0; mt_xid=V2_52007VwAaWl9ZUFwXTSkMBGcERVBVX04NSx4aQAAwU0FOVQxWDQMbS1RWZlcaBQ1dB1kvShhcA3sCG05dWUNaH0IdXg5iBSJQbVhiWhxMEF4NYAUVYl5fWw%3D%3D; 3AB9D23F7A4B3C9B=IXJUEDXXYNUG6YED62OKBVQ7LGRQHMPTR44MH5CS75ECUCXMCIFCVTJCVKEOAUPXO5MC76L3OFA6NWVPAWT2CLCT3Q; https://m.jd.com?indexloc=1&sid=eca9ca08f981eaa929465178790539f0\"; m_uuid_new=559EE0955CDF39C603C8C45043D2708D; __jda=122270672.299303795.1501033309.1502336953.1502426875.4; __jdc=122270672; __jdu=299303795; autoOpenApp_downCloseDate_auto=1502426897076_1800000; sid=eca9ca08f981eaa929465178790539f0; recommendShow=show; mba_muid=299303795";
            //擷取位址傳回的圖檔位元組資料
            byte[] btyarray = GetImageFromResponse("https://plogin.m.jd.com/cgi-bin/m/authcode?mod=login&v=0.9968985103928236", cookie);
            //位元組資料轉流
            MemoryStream ms = new MemoryStream(btyarray);
            //重點:設定Image控件的Source為流格式的圖檔資料
            //摘自CSDN,17樓Error_Code回複,感謝!回答位址:
            //http://bbs.csdn.net/topics/320086693
            image.Source = BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.Default);
        }
           
//從圖檔位址擷取圖檔位元組資料
public static byte[] GetImageFromResponse(string url, string cookie = null)
        {
        redo:
            try
            {
                System.Net.WebRequest request = System.Net.WebRequest.Create(url);
                if (!string.IsNullOrWhiteSpace(cookie))
                {
                    request.Headers[System.Net.HttpRequestHeader.Cookie] = cookie;
                }

                System.Net.WebResponse response = request.GetResponse();

                using (Stream stream = response.GetResponseStream())
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        Byte[] buffer = new Byte[1024];
                        int current = 0;
                        do
                        {
                            ms.Write(buffer, 0, current);
                        } while ((current = stream.Read(buffer, 0, buffer.Length)) != 0);
                        return ms.ToArray();
                    }
                }
            }
            catch (System.Net.WebException ex)
            {
                if (ex.Message == "基礎連接配接已經關閉: 發送時發生錯誤。")
                {
                    goto redo;
                }
                else
                {
                    throw;
                }
            }
        }