在Windows Phone 7中,如何将BitmapImage保存到本地存储?如果在接下来的几天内再次请求,我需要保存图像以进行缓存和重新加载。
答案 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 Gracewood和Peter 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);
}