[英]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 ,但請確保使用await與ReadAsInputStreamAsync() :
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.