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:

操作系統會做一些緩存,但是,這並不在每次需要它會在緩存中的圖像時保證它。如果你想達到這個目標,你需要將它保存到本地存儲。

相關問題