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