Получить фото файл Uri с помощью PhotoChooserTask wp8

Для моего текущего проекта у меня есть свойство ImageCollection IEnumerable, как показано ниже,

    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, в базе данных. Я узнал, что даже если сохранить копию в изолированном хранилище, я не смогу достичь того, что ищу - получить ссылку на файлы, выбранные с помощью photoChooserTask. Я могу ошибаться

Несмотря на то, что моей первоначальной идеей было добавить файл Uri of Gallery в мою коллекцию изображений и сохранить индекс в базе данных для каждого элемента, приветствуются любые предложения или импровизации.

Примечание. Добавленный тег CameraCaptureTask в качестве тега PhotoChooserTask недоступен, и основная логика та же.

Редактировать код, используемый для хранения и извлечения из Isolated Storage

Я связываю результат метода GetImageFromIsolatedStorage() со мной Источник управления изображением. Это не работает.. Что я делаю не так...

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 ответ

Это невозможно. ChooserTask и полный доступ к библиотеке устройства - это две разные вещи в Windows Phone.

Либо вы указываете, что ваше приложение имеет полный доступ к библиотеке и обрабатываете его таким образом, либо используете ChooserTask, позволяете пользователю выбрать фотографию (есть также возможность обрезать ее), а затем сохраните это изображение в изолированном хранилище приложения.

Другие вопросы по тегам