5

我在画布上添加了Windows.UI.Xaml.Controls.Image。我正在使用HttpClient使http调用来下载图像。我以流的形式获取图像并添加为BitmapImage对象的源,但图像未加载。谁能告诉我什么,我做错了C#Metro应用程序如何从网页加载图片

代码:

 var httpClient = new HttpClient(); 
     var content = await httpClient.GetStreamAsync(imageUrl); 


      var ras = new InMemoryRandomAccessStream(); 
      await content.CopyToAsync(ras.AsStreamForWrite()); 
      bitmap = new BitmapImage(); 
      bitmap.SetSource(ras); 

      myImage.Source = bitmap; 
+1

在桌面Silverlight中,您可以简单地将图像的源代码设置为期望的URL,它将为您处理所有这些。你能在这里做同样的事吗? – 2012-08-01 12:59:57

回答

10

我设法让它工作。以下是代码:

 var httpClient = new HttpClient();    
    var contentBytes = await httpClient.GetByteArrayAsync(uri);       
    var ims = new InMemoryRandomAccessStream();     
    var dataWriter = new DataWriter(ims); 
    dataWriter.WriteBytes(contentBytes); 
    await dataWriter.StoreAsync(); 
    ims.Seek(0); 

    bitmap = new BitmapImage();     
    bitmap.SetSource(ims);     

    myImage.Source = bitmap;     
+2

这可能是互联网上最好的东西。我几乎放弃并将文件下载到本地存储,这不是我想要做的。非常感谢! – jbkkd 2012-11-30 15:44:10

+1

三年后仍然有帮助!谢谢saikamesh;为我解决了一个为期一周的问题._ – iSofia 2015-08-15 13:27:27

5

我相信这将工作:

myImage.Source = new BitmapImage(new Uri(imageUrl)); 
2

下面的代码片段,我已经成功地用来下载图像来自网络。它将图像复制到本地存储并将URI返回到新的(本地)位置。

 using (var response = await HttpWebRequest.CreateHttp(internetUri).GetResponseAsync()) 
     { 
      using (var stream = response.GetResponseStream()) 
      { 
       var desiredName = string.Format("{0}.jpg", uniqueName); 
       var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(desiredName, CreationCollisionOption.ReplaceExisting); 

       using (var filestream = await file.OpenStreamForWriteAsync()) 
       { 
        await stream.CopyToAsync(filestream); 
        return new Uri(string.Format("ms-appdata:///local/{0}.jpg", uniqueName), UriKind.Absolute); 
       } 
      } 
     } 
1

你能做到这一点使用XAML:

操作系统会做一些缓存,但是,这并不在每次需要它会在缓存中的图像时保证它。如果你想达到这个目标,你需要将它保存到本地存储。

相关问题