问题
How do I retrieve the same photo from the media library between application instances? I launch the photo library for the user to select a photo via:
PhotoChooserTask myPhotoChooser = new PhotoChooserTask();
myPhotoChooser.ShowCamera = true;
myPhotoChooser.Show();
myPhotoChooser.Completed += new EventHandler<PhotoResult>(cameraCaptureTask_Completed);
and then in the Event handler, I retrieve the file name of the selected file like this:
private void cameraCaptureTask_Completed(object sender, PhotoResult e)
{
if (e.TaskResult == TaskResult.OK)
{
string imagePath = e.OriginalFileName.ToString();
}
}
I persist this information in isolated storage so that when a user launches the application again I can retrieve the path and display the image like this:
private BitmapImage ConvertUriToBitmap(string pathToImage)
{
StreamResourceInfo streamResInfo = null;
Uri uri = new Uri(pathToImage, UriKind.Relative);
streamResInfo = Application.GetResourceStream(uri); //This fails! StreamResInfo is null
BitmapImage convertedBitmap = new BitmapImage();
convertedBitmap.SetSource(streamResInfo.Stream);
return convertedBitmap;
}
However, this doesn't seem to work as the photo path from the photo chooser is some sort of guid in the form: "\Applications\Data\02E58193-119F-42E2-AD85-C24247BE2AB0\Data\PlatformData\PhotoChooser-4edd185d-d934-4dac-8a34-758cac09d338.jpg"
Application.GetResourceStream(uri) is null whenenever I switch out of the application or move between pages. Is there a better way to do this?
How do I retrieve the same path everytime so that when I tombstone or kill the app, i can retireve the file and display it? Or is there a different /more efficient way of doing it.
回答1:
I found the answer in the documentation: http://msdn.microsoft.com/en-us/library/gg680264%28v=pandp.11%29.aspx Basically, there is a bug in the photo chooser which returns a temporary path. Microsofts recommendation is to copy the picture to isolated storage if you want to use it between app instances.
回答2:
Application.GetResourceStream will return null for that path because the GetResourceStream method is looking for a resource within the application itself, not from the device.
To re-load the same image on resume from tombstoning simply persist the OriginalFileName property, and then use that to create a BitmapImage
as follows:
string path = /* Load the saved OriginalFileName */;
var bitmap = new BitmapImage(new Uri(path, UriKind.Absolute));
myImageControl.Source = bitmap;
NOTE: The OriginalFileName property is already a string, so you don't need to call .ToString() on it.
来源:https://stackoverflow.com/questions/5740552/windows-phone-how-to-retrieve-the-same-photo-from-media-library-between-applica