How to retrieve image from saved location?
By default, in Image editor when we save image, the image will be getting saved in gallery. We can also able to retrieve and display the image which is stored in the location. ImageSavedEventArgs used to get the saved image location as its argument. Please follow the following steps to retrieve image from saved location.
Step 1: Create image editor sample with all necessary assemblies.
Please refer the below link to create a simple SfImageEditor sample along with the ways to configure it.
https://help.syncfusion.com/xamarin/sfimageeditor/getting-started
Step 2: To retrieve image in all the Xamarin platforms. For this, you need to implement a DependencyService which is implemented across all the platform specific projects.
For adding the DependencyService, first you need to add an interface in the PCL project as in the below code snippet:
public interface IDependency { void RetriveImageFromLocation(string location,Image image); }
Now, you must implement and register the DependencyService in the assembly based on platform specific. This can be done as follows:
Android
public class DependencyImplementation : IDependency { public async void RetriveImageFromLocation(string location,Image image) { var memoryStream = new MemoryStream(); using (var source = System.IO.File.OpenRead(location)) { await source.CopyToAsync(memoryStream); } image.Source = ImageSource.FromStream(() => memoryStream); } }
iOS
public void RetriveImageFromLocation(string location,Image image) { string[] str = location.Split('/'); PHFetchResult assetResult = PHAsset.FetchAssetsUsingLocalIdentifiers(str, null); PHAsset asset = assetResult.firstObject as PHAsset; PHImageManager.DefaultManager.RequestImageData(asset, null, (data, dataUti, orientation, info) => { var stream = data.AsStream(); image.Source = ImageSource.FromStream(() => stream); }); }
UWP
public async void RetriveImageFromLocation(string location,Image image) { var file = await StorageFile.GetFileFromPathAsync(@""+location); var stream = await file.OpenStreamForReadAsync(); image.Source = ImageSource.FromStream(() => stream); }
Step 3: Get the saved image from DependencyService method call and retrieve the image.
private void ImageEditor_ImageSaved(object sender, ImageSavedEventArgs args) { DependencyService.Get<IDependency().RetriveImageFromLocation(args.Location,newImage); }
Sample Link: