WebEnh

.net7 mvc jquery bootstrap json 学习中 第一次学PHP,正在研究中。自学进行时... ... 我的博客 https://enhweb.github.io/ 不错的皮肤:darkgreentrip,iMetro_HD
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

WPF显示网络图片的几种方法

Posted on 2023-12-21 15:40  WebEnh  阅读(283)  评论(0编辑  收藏  举报

1、利用数据流

复制代码
 1 Image img;
 2 byte[] btyarray = GetImageFromResponse(imageUrl);
 3  
 4 //字节数据转流
 5 MemoryStream ms = new MemoryStream(btyarray);
 6  
 7 //重点:设置Image控件的Source为流格式的图片数据
 8 img.Source = BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.Default);
 9  
10  
11 //从图片地址获取图片字节数据
12 public byte[] GetImageFromResponse(string url, string cookie = null)
13 {
14         try
15         {
16                 System.Net.WebRequest request = System.Net.WebRequest.Create(url);
17                 if (!string.IsNullOrWhiteSpace(cookie))
18                 {
19                         request.Headers[System.Net.HttpRequestHeader.Cookie] = cookie;
20                 }
21  
22                 System.Net.WebResponse response = request.GetResponse();
23  
24                 using (Stream stream = response.GetResponseStream())
25                 {
26                         using (MemoryStream ms = new MemoryStream())
27                         {
28                                 Byte[] buffer = new Byte[1024];
29                                 int current = 0;
30                                 do
31                                 {
32                                         ms.Write(buffer, 0, current);
33                                 } while ((current = stream.Read(buffer, 0, buffer.Length)) != 0);
34                                 return ms.ToArray();
35                         }
36                 }
37         }
38         catch (Exception ex)
39         {
40                 Console.WriteLine(ex.Message);
41                 //throw new Exception(ex.Message);
42                 return null;
43         }
44 }
复制代码

2、利用BitmapImage

1 BitmapImage bitImage = new BitmapImage();
2 bitImage.BeginInit();
3 bitImage.UriSource = new Uri(imageUrl, UriKind.Absolute);
4 bitImage.EndInit();
5 img.Source = bitImage;

总结

两种方式都用过了,觉得第一种好点,因为第一种可以判断是否加载成功,这样可以做后续操作