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 转换为字节数组,然后将其转换为位图。问题是,我在 8.1 中找不到任何可以执行此操作的扩展方法,而且几乎没有提供帮助的文档。
任何人都可以在这里指出正确的方向吗?也许有更好的方法将 HttpResponseMessage.Content 转换为 BitmapImage?
确保您正在导入正确的 HttpClient:
using Windows.Web.Http;
并导入其他必要的命名空间:
using Windows.Storage.Streams;
using Windows.UI.Xaml.Media.Imaging;
然后,正如您在问题中所写,获取 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);
这很重要,rewind 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);
我正在向使用 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 转换为字节数组,然后将其转换为位图。问题是,我在 8.1 中找不到任何可以执行此操作的扩展方法,而且几乎没有提供帮助的文档。
任何人都可以在这里指出正确的方向吗?也许有更好的方法将 HttpResponseMessage.Content 转换为 BitmapImage?
确保您正在导入正确的 HttpClient:
using Windows.Web.Http;
并导入其他必要的命名空间:
using Windows.Storage.Streams;
using Windows.UI.Xaml.Media.Imaging;
然后,正如您在问题中所写,获取 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);
这很重要,rewind 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);