Windows 8.1运行时(C#)-将HttpResponseMessage内容转换为位图图像

Windows 8.1运行时(C#)-将HttpResponseMessage内容转换为位图图像,c#,windows-phone-8.1,C#,Windows Phone 8.1,我正在向使用MVVM构建的Windows Phone 8.1 RT应用程序添加功能。我需要能够将图像下载到设备并保存/显示它。我已经可以使用固定URL中的图像执行此操作 我们有一个附带的网站和应用程序接口。它的工作方式是,应用程序向API发送请求,获取相关图像的下载代码,然后将该代码连同请求中的文档ID一起发送到网站,网站验证用户是否有权访问文档,如果成功,则应提供图像。API和网站已经与iOS和Android应用程序的等价物一起使用,所以我知道它们可以工作 为了检索图像,我尝试使用HttpCl

我正在向使用MVVM构建的Windows Phone 8.1 RT应用程序添加功能。我需要能够将图像下载到设备并保存/显示它。我已经可以使用固定URL中的图像执行此操作

我们有一个附带的网站和应用程序接口。它的工作方式是,应用程序向API发送请求,获取相关图像的下载代码,然后将该代码连同请求中的文档ID一起发送到网站,网站验证用户是否有权访问文档,如果成功,则应提供图像。API和网站已经与iOS和Android应用程序的等价物一起使用,所以我知道它们可以工作

为了检索图像,我尝试使用HttpClient。这是我当前的代码,它从服务器得到响应,带有一些内容和图像的文件名(看起来是正确的):

Uri=newuri(“”);
字典对=新字典();
Add(“RequestToken”,response.DownloadToken);
pairs.Add(“DocumentID”和“”);
HttpFormUrlEncodedContent formContent=新的HttpFormUrlEncodedContent(成对);
HttpClient=新的HttpClient();
HttpResponseMessageResponse2=等待客户端.PostAsync(uri,formContent);
var imageContent=response2.Content.ReadAsInputStreamAsync();
我试图将内容写入流,然后将其转换为BitmapImage对象,然后将其保存到设备并显示给用户。这是我正在努力的转变。我的计划是将InputStream转换为bytearray,然后将其转换为位图。问题是,我在8.1中找不到任何可以做到这一点的扩展方法,在文档方面也没有什么帮助


有人能给我指一下正确的方向吗?也许有更好的方法将HttpResponseMessage.Content转换为BitmapImage?

请确保导入正确的HttpClient:

并导入其他必要的名称空间:

using Windows.Storage.Streams;
using Windows.UI.Xaml.Media.Imaging;
然后,正如您在qrestion中所写的,获取IIInputStream,但请确保将wait与ReadAsInputStreamAsync()一起使用:

然后,将IIInputStream复制到IRandomAccessStream中:

这一点很重要,回放iRandomaccesstream:

最后,创建BitmapImage并将其分配给XAML图像控件:

就这些

如果需要测试URI,请尝试以下方法:

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

为什么不将流转换为字节数组,然后将字节数组转换为位图图像呢?这就是我试图做的,但我无法在8.1中找到它,不幸的是链接的链接库。事实上,我今天已经读了很多遍了这个答案(这是我尝试过的许多术语在谷歌搜索结果中排名第一),但我一直无法从中找到我需要的东西。例如,公认的答案建议创建一个.NET流对象,然后使用HttpClient.GetStreamAsync方法。但是GetStreamAsync对我不可用。。。我假设它是一个8.0方法,除非我缺少一个名称空间?我已经在谷歌上搜索了很多关于如何将IInputStream转换成字节数组的信息,但是还没有找到一个基于Silverlight或者Win RT?的解决方案,完美的解释,正是我想要的!谢谢
using Windows.Storage.Streams;
using Windows.UI.Xaml.Media.Imaging;
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.PostAsync(uri, formContent);

// Do not forget to use an 'await'.
IInputStream imageStream = await response.Content.ReadAsInputStreamAsync();
InMemoryRandomAccessStream randomAccessStream =
    new InMemoryRandomAccessStream();
await RandomAccessStream.CopyAsync(imageStream, randomAccessStream);
// Rewind.
randomAccessStream.Seek(0);
var bitmap = new BitmapImage();
bitmap.SetSource(randomAccessStream);

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