对于我当前的项目,我有一个IEnumerable属性ImageCollection如下,
public static IEnumerable<Uri> ImageCollection { get; set; }
其中包含可供用户选择的所有应用内照片的集合。该功能包括用户可以从图库中选择。我正在使用PhotoChooserTask及以下代码使用下面的代码设置图像源
private void photoChooserTask_Completed(object sender, PhotoResult e)
{
try
{
if (e.TaskResult == TaskResult.OK)
{
BitmapImage image = new BitmapImage();
image.SetSource(e.ChosenPhoto);
LibrImage.Source = image;
ViewModelLocator.SelectedImage = image;
}
}
catch (Exception)
{
Common.ShowMessageBox("Error occured while saving pic.");
}
}
但是,我想将引用Uri或e.OriginalFileName存储在数据库中。我了解到即使将副本存储在Isolated Storage中,我也无法实现我想要的 - 获取对使用photoChooserTask选择的文件的引用。我可能错了。
即使我最初的想法是将Uri of Gallery文件添加到我的ImageCollection并将索引存储在每个项目的数据库中,我们也会感谢任何建议或即兴创作。
注意:添加CameraCaptureTask标签为PhotoChooserTask标签不可用且基本逻辑相同。
编辑用于存储和检索IsolatedStorage的代码
我将GetImageFromIsolatedStorage()方法的结果绑定到我的Image控件源。这不起作用..我做错了什么......
public static string SaveImageToIsolatedStorage(BitmapImage bitImg)
{
string fname = null;
if (bitImg != null)
{
fname = GetImageName();
WriteableBitmap wbmp = new WriteableBitmap(bitImg);
IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();
using (isf)
{
if (isf.FileExists(fname)) { isf.DeleteFile(fname); }
using (var stream = isf.OpenFile(fname, System.IO.FileMode.OpenOrCreate))
{
wbmp.SaveJpeg(stream, bitImg.PixelWidth, bitImg.PixelHeight, 0, 100);
stream.Close();
}
}
}
return fname;
}
private static string GetImageName()
{
return string.Format(
"{0}/GalleryImage{1}.jpg",
FileDir,
ImageCount++);
}
public static BitmapImage GetImageFromIsolatedStorage(string fname)
{
BitmapImage img = new BitmapImage();
try
{
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream fileStream = isf.OpenFile(fname, FileMode.Open, FileAccess.Read))
{
img.SetSource(fileStream);
fileStream.Close();
}
}
}
catch { }
return img;
}
答案 0 :(得分:0)
这是不可能的。 ChooserTask和对设备库的完全访问权限在Windows Phone中是两回事。
您指定您的应用程序可以完全访问库并以这种方式处理它或使用ChooserTask,让用户选择照片(还可以裁剪它),然后将此图像保存到应用程序的独立存储中。