如何在C# Windows 8中将简单的流(HTTP WebResponse)转换为BitmapImage?

6

我尝试了1000次将简单的流(http webresponse)转换为位图图像,但在c# windows 8中没有一个教程是有效的。

例如:

BitmapImage image = new BitmapImage();
image.SetSource(stream);
image1.Source = image; 

感谢所有的回复。
解决方案:
InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
DataWriter writer = new DataWriter(randomAccessStream.GetOutputStreamAt(0));
writer.WriteBytes((byte[])command);
await writer.StoreAsync();
BitmapImage image = new BitmapImage();
image.SetSource(randomAccessStream);

你确定这个流返回的只是原始图像数据吗? - ranksrejoined
是的,但问题是我不知道正确的方法可以做到这一点。 - flatronka
太好了!我很高兴你找到了需要的额外代码行,让它正常工作了! - Mike Nakis
2个回答

7
你尝试过这个吗?
InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
DataWriter writer = new DataWriter(randomAccessStream.GetOutputStreamAt(0));
writer.WriteBytes(response.Content.ReadAsByteArray());
BitmapImage image = new BitmapImage();
image.SetSource(randomAccessStream);

随机访问流仍然为0。 - flatronka
随机访问流 {Windows.Storage.Streams.InMemoryRandomAccessStream} Windows.Storage.Streams.InMemoryRandomAccessStream 大小 0 ulong 写入器 {Windows.Storage.Streams.DataWriter} Windows.Storage.Streams.DataWriter 字节顺序 大端 Windows.Storage.Streams.ByteOrder Unicode编码 Utf8 Windows.Storage.Streams.UnicodeEncoding 未存储缓冲区长度 10134 uint (byte[])e.responseObject {byte[10134]} byte[] - flatronka
1
我明白了。我想在执行此代码之前必须接收整个响应。我不确定如何等待直到完整的响应已经被接收。有什么想法吗? - Mike Nakis
图像 {Windows.UI.Xaml.Media.Imaging.BitmapImage} Windows.UI.Xaml.Media.Imaging.BitmapImage 基础 {Windows.UI.Xaml.Media.Imaging.BitmapImage} Windows.UI.Xaml.Media.Imaging.BitmapSource {Windows.UI.Xaml.Media.Imaging.BitmapImage} CreateOptions DelayCreation Windows.UI.Xaml.Media.Imaging.BitmapCreateOptions DecodePixelHeight 0 int DecodePixelWidth 0 int UriSource null Sys - flatronka
我尝试使用 InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream(); DataWriter writer = new DataWriter(randomAccessStream.GetOutputStreamAt(0)); writer.WriteBytes((byte[])command); await writer.StoreAsync(); - flatronka
显示剩余2条评论

1

尝试这段代码:

private async Task GetLocalImageAsync(string internetUri, string folderName, 
                                      string uniqueName)
{
    using (var response = await HttpWebRequest.CreateHttp(internetUri)
                                .GetResponseAsync())
    {
        using (var stream = response.GetResponseStream())
        {
            var folder = await ApplicationData.Current.LocalFolder
                               .CreateFolderAsync(folderName, 
                                        CreationCollisionOption.OpenIfExists);
            var file = await folder.CreateFileAsync(
                                    string.Format("{0}", uniqueName),
                                    CreationCollisionOption.ReplaceExisting);
            using (var filestream = await file.OpenStreamForWriteAsync())
            {
                await stream.CopyToAsync(filestream);
                await filestream.FlushAsync();
            }
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接