在Windows Phone 7中,如何将BitmapImage保存到本地存储?

时间:2010-09-03 00:50:37

标签: caching windows-phone-7

在Windows Phone 7中,如何将BitmapImage保存到本地存储?如果在接下来的几天内再次请求,我需要保存图像以进行缓存和重新加载。

2 个答案:

答案 0 :(得分:5)

如果将文件保存到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);
      }
    }
  }
}

您可能还对Ben GracewoodPeter Nowaks创建的图片缓存转换器感兴趣。它们都将保存的图像显示在隔离的存储中并从那里加载它们。

答案 1 :(得分:0)

我使用的另一种方法是将您为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);

        }