Как преобразовать простой поток (http webresponse) в растровое изображение в С# Windows 8?

Я пытаюсь 1000 раз преобразовать простой поток (http webresponse) в растровое изображение, но ни один учебник не работает в С# 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);

person flatronka    schedule 30.12.2011    source источник
comment
Вы уверены, что поток возвращается с просто необработанными данными изображения?   -  person ranksrejoined    schedule 30.12.2011
comment
Да, но проблема в том, что я не знаю правильных методов, которыми я могу это сделать.   -  person flatronka    schedule 30.12.2011
comment
Превосходно! Я рад, что вы нашли дополнительную строку, которая была необходима, чтобы заставить его работать!   -  person Mike Nakis    schedule 30.12.2011


Ответы (2)


Вы пробовали это?

InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream();
DataWriter writer = new DataWriter(randomAccessStream.GetOutputStreamAt(0));
writer.WriteBytes(response.Content.ReadAsByteArray());
BitmapImage image = new BitmapImage();
image.SetSource(randomAccessStream);
person Mike Nakis    schedule 30.12.2011
comment
Где вы изменяете randomAccessStream, просто инициализируете? - person flatronka; 30.12.2011
comment
поток randomacces остается 0 - person flatronka; 30.12.2011
comment
randomAccessStream {Windows.Storage.Streams.InMemoryRandomAccessStream} Windows.Storage.Streams.InMemoryRandomAccessStream Размер 0 ulong записывающий {Windows.Storage.Streams.DataWriter} Windows.Storage.Streams.DataWriter ByteOrder BigEndian Windows.Storage.Streams.ByteOrder UnicodeEncoding Utf8 Windows. Storage.Streams.UnicodeEncoding UnstoredBufferLength 10134 uint (byte[])e.responseObject {byte[10134]} byte[] - person flatronka; 30.12.2011
comment
Я понимаю. Я предполагаю, что весь ответ должен быть получен, прежде чем вы сможете выполнить этот код. Я не знаю, как ждать, пока не будет получен весь ответ. Идеи, кто-нибудь? - person Mike Nakis; 30.12.2011
comment
image {Windows.UI.Xaml.Media.Imaging.BitmapImage} Windows.UI.Xaml.Media.Imaging.BitmapImage base {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 - person flatronka; 30.12.2011
comment
я пытаюсь использовать InMemoryRandomAccessStream randomAccessStream = new InMemoryRandomAccessStream(); Средство записи данных = новое средство записи данных (randomAccessStream.GetOutputStreamAt (0)); Writer.WriteBytes((byte[])command); ожидайте писателя.StoreAsync(); - person flatronka; 30.12.2011
comment
Привет, ребята, response.Content.ReadAsByteArray() выдает ошибку в предварительном просмотре выпуска Windows... есть идеи, почему??? - person Inder Kumar Rathore; 09.07.2012

Попробуйте этот код:

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();
            }
        }
    }
}
person Vulcan Lee    schedule 25.11.2012