使用PhotoChooserTask wp8获取照片文件Uri

时间:2014-09-19 14:41:21

标签: windows-phone-8 isolatedstorage cameracapturetask

对于我当前的项目,我有一个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;
        }

1 个答案:

答案 0 :(得分:0)

这是不可能的。 ChooserTask和对设备库的完全访问权限在Windows Phone中是两回事。

您指定您的应用程序可以完全访问库并以这种方式处理它或使用ChooserTask,让用户选择照片(还可以裁剪它),然后将此图像保存到应用程序的独立存储中。