簡體   English   中英

Windows 8.1運行時(C#) - 將HttpResponseMessage內容轉換為BitmapImage

[英]Windows 8.1 Runtime (C#) - Convert HttpResponseMessage content to BitmapImage

我正在為使用MVVM構建的Windows Phone 8.1 RT應用程序添加功能。 我需要能夠將圖像下載到設備並保存/顯示它。 我已經可以使用固定URL中的圖像執行此操作。

我們有一個隨附的網站和API與應用程序一起使用。 它的工作方式是應用程序向API發送請求以獲取相關圖像的下載代碼,然后將此代碼連同文檔的ID一起發送到網站,驗證用戶是否可以訪問如果成功,應該提供文件。 API和網站已經與iOS和Android等效應用程序一起使用,所以我知道它們有效。

要檢索圖像,我正在嘗試使用HttpClient。 這是我當前的代碼,它從服務器獲得響應,包含一些內容和圖像的文件名(看起來是正確的):

Uri uri = new Uri("<website address>");

Dictionary<string, string> pairs = new Dictionary<string, string>();                
pairs.Add("RequestToken", response.DownloadToken);
pairs.Add("DocumentID", "<doc ID>");

HttpFormUrlEncodedContent formContent = new HttpFormUrlEncodedContent(pairs);                             

HttpClient client = new HttpClient();
HttpResponseMessage response2 = await client.PostAsync(uri, formContent);

var imageContent = response2.Content.ReadAsInputStreamAsync();

我正在嘗試將內容寫入流,然后將其轉換為BitmapImage對象,然后我可以將其保存到設備並顯示給用戶。 這是我正在努力的轉變。 我的計划是將InputStream轉換為bytearray,然后將其轉換為Bitmap。 問題是,我在8.1中找不到任何可以做到這一點的擴展方法,而且文檔的幫助方式也很少。

任何人都能指出我在正確的方向嗎? 也許有更好的方法從HttpResponseMessage.Content轉換到BitmapImage?

確保您導入正確的HttpClient

using Windows.Web.Http;

並導入其他必要的命名空間:

using Windows.Storage.Streams;
using Windows.UI.Xaml.Media.Imaging;

然后,正如您在qurestion中所寫,獲取IInputStream ,但請確保使用awaitReadAsInputStreamAsync()

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.PostAsync(uri, formContent);

// Do not forget to use an 'await'.
IInputStream imageStream = await response.Content.ReadAsInputStreamAsync();

然后,將IInputStream復制到IRandomAccessStream中

InMemoryRandomAccessStream randomAccessStream =
    new InMemoryRandomAccessStream();
await RandomAccessStream.CopyAsync(imageStream, randomAccessStream);

這一點很重要, 快退 IRandomAccessStream:

// Rewind.
randomAccessStream.Seek(0);

最后,創建一個BitmapImage並將其分配給您的XAML Image控件:

var bitmap = new BitmapImage();
bitmap.SetSource(randomAccessStream);

MyImage.Source = bitmap;

就這樣!

如果您需要測試URI,請嘗試以下方法:

Uri uri = new Uri("http://heyhttp.org/emoji.png");
HttpResponseMessage response = await client.GetAsync(uri);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM