В Windows Phone 7 как я могу сохранить BitmapImage в локальном хранилище? - PullRequest
3 голосов
/ 03 сентября 2010

В Windows Phone 7 как я могу сохранить BitmapImage в локальном хранилище? Мне нужно сохранить изображение для кеширования и перезагрузить его, если оно будет запрошено снова в ближайшие дни.

Ответы [ 2 ]

5 голосов
/ 03 сентября 2010

Если вы сохраните файл в IsolatedStorage, вы можете установить относительный путь для его просмотра оттуда.

Вот краткий пример сохранения файла, который был включен в XAP (в качестве ресурса), в изолированное хранилище.

using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
{
  if (!isoStore.FileExists(fileName)
  {
    var sr = Application.GetResourceStream(new Uri(fileName, UriKind.Relative));

    using (var br = new BinaryReader(sr.Stream))
    {
      byte[] data = br.ReadBytes((int)sr.Stream.Length);
      string strBaseDir = string.Empty;
      const string DelimStr = "/";
      char[] delimiter = DelimStr.ToCharArray();
      string[] dirsPath = fileName.Split(delimiter);

      // Recreate the directory structure
      for (int i = 0; i < dirsPath.Length - 1; i++)
      {
          strBaseDir = Path.Combine(strBaseDir, dirsPath[i]);
          isoStore.CreateDirectory(strBaseDir);
      }

      using (BinaryWriter bw = new BinaryWriter(isoStore.CreateFile(fileName)))
      {
          bw.Write(data);
      }
    }
  }
}

Вам также могут быть интересны конвертеры кэширования изображений, созданные Беном Грейсвудом и Питером Новаксом .Они оба показывают сохранение изображений в изолированное хранилище и загрузку их оттуда.

0 голосов
/ 31 октября 2010

Другой подход, который я использовал, - передать поток, который вы извлекаете для изображения в вашем xap, прямо в изолированный файл хранилища. Не много движущихся частей.

        using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication()) {

            var bi = new BitmapImage();
            bi.SetSource(picStreamFromXap);
            var wb = new WriteableBitmap(bi);

            using (var isoFileStream = isoStore.CreateFile("pic.jpg")) 
                Extensions.SaveJpeg(wb, isoFileStream, wb.PixelWidth, wb.PixelHeight, 0, 100);

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...