locked
Не отображаются изображения, загруженные с диска RRS feed

  • Вопрос

  • Сохраняю изображение так:

    var buffer = new byte[randomAccessStream.Size];
    await randomAccessStream.ReadAsync(buffer.AsBuffer(), (uint)randomAccessStream.Size, InputStreamOptions.None);
    file = await ApplicationData.Current.LocalCacheFolder.CreateFileAsync(ID.ToString());
    await FileIO.WriteBytesAsync(file, buffer);


    потом читаю так:

    var bmp = new BitmapImage();
    using (var randomAccessStream = await file.OpenAsync(FileAccessMode.Read))
         {
             bmp.SetSourceAsync(randomAccessStream);
             return bmp;
         }

    никаких ошибок нет, файл явно создаётся, но картинка не отображается. В XAML разметке всё ок, так как подставленные туда же изображения из интернета отображаются

    -------

    Обнаружил, что в файле на диске одни нули.


    • Изменено SUDALV92 20 сентября 2014 г. 8:39
    19 сентября 2014 г. 11:13

Ответы

  • Работать заставил, но так и не понял причину, по которой не работает старый код.

    Вобщем там изначально идёт запрос на сервер за картинкой, мы получаем HttpContent.

    Далее в старом коде я читал этот HttpContent методом ReadAsStreamAsync(), после чего записывал его в IRandomAccessStream методом расширения .AsRandomAccessStream(). Далее я сначала записывал его в BitmapImage, чтобы отобразить на экране, а после этого пытался записать этот IRandomAccessStream на диск, преобразовывая его в массив байтов и так далее.

    Так вот именно массив байтов и выходит пустой почему-то.

    Но теперь я просто для записи в файл повторно читаю HttpContent но методом ReadAsByteArrayAsync(), который на выходе даёт уже нормальный, не пустой массив байтов, который уже собственно записывается на диск и потом прекрасно читается. 

    • Помечено в качестве ответа SUDALV92 20 сентября 2014 г. 8:03
    20 сентября 2014 г. 8:03

Все ответы

  • Вытащите картинку через Windows Phone Power Tools и посмотрите нормально она создается или нет. Если нет, будем уже смотреть что не так.
    19 сентября 2014 г. 12:13
  • выше уже добавил, что нет, не нормально, там нули одни в файле.
    19 сентября 2014 г. 12:38
  • Когда речь о C# тыкаю пальцем в небо, но кажется проблема в том, что после WriteBytesAsync файл еще нужно закрыть.

    VB.Net - WPF, WinRT, WP

    19 сентября 2014 г. 12:40
  • в самом массиве byte[] buffer содержатся нули, сразу после ReadAsync
    19 сентября 2014 г. 12:43
  • Работать заставил, но так и не понял причину, по которой не работает старый код.

    Вобщем там изначально идёт запрос на сервер за картинкой, мы получаем HttpContent.

    Далее в старом коде я читал этот HttpContent методом ReadAsStreamAsync(), после чего записывал его в IRandomAccessStream методом расширения .AsRandomAccessStream(). Далее я сначала записывал его в BitmapImage, чтобы отобразить на экране, а после этого пытался записать этот IRandomAccessStream на диск, преобразовывая его в массив байтов и так далее.

    Так вот именно массив байтов и выходит пустой почему-то.

    Но теперь я просто для записи в файл повторно читаю HttpContent но методом ReadAsByteArrayAsync(), который на выходе даёт уже нормальный, не пустой массив байтов, который уже собственно записывается на диск и потом прекрасно читается. 

    • Помечено в качестве ответа SUDALV92 20 сентября 2014 г. 8:03
    20 сентября 2014 г. 8:03