代码之家  ›  专栏  ›  技术社区  ›  Jamey McElveen

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

  •  3
  • Jamey McElveen  · 技术社区  · 16 年前

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

    2 回复  |  直到 13 年前
        1
  •  5
  •   Matt Lacey    16 年前

    如果将文件保存到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 Gracewood 和 Peter Nowaks . 它们都显示将图像保存到独立的存储中并从中加载图像。

        2
  •  0
  •   Mick N    16 年前

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