在Windows Phone 7中,如何将BitmapImage保存到本地存储?
问题描述:
在Windows Phone 7中,如何将BitmapImage保存到本地存储?如果在接下来的几天内再次请求,我需要保存图像进行缓存并重新加载。在Windows Phone 7中,如何将BitmapImage保存到本地存储?
答
如果将文件保存到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创建的图像缓存器。他们都将图像保存到独立存储中,并从那里加载它们。
答
我使用的另一种方法是将您在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);
}
可悲的是,这只适用于JPG文件,不适用于其他媒体类型。 – 2011-12-07 03:31:45