diff options
Diffstat (limited to 'Xamarin.Forms.Platform.WinRT/UriImageSourceHandler.cs')
-rw-r--r-- | Xamarin.Forms.Platform.WinRT/UriImageSourceHandler.cs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.WinRT/UriImageSourceHandler.cs b/Xamarin.Forms.Platform.WinRT/UriImageSourceHandler.cs new file mode 100644 index 00000000..1263c355 --- /dev/null +++ b/Xamarin.Forms.Platform.WinRT/UriImageSourceHandler.cs @@ -0,0 +1,51 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Windows.Storage.Streams; +using Windows.UI.Xaml.Media.Imaging; + +#if WINDOWS_UWP + +namespace Xamarin.Forms.Platform.UWP +#else + +namespace Xamarin.Forms.Platform.WinRT +#endif +{ + public sealed class UriImageSourceHandler : IImageSourceHandler + { + public async Task<Windows.UI.Xaml.Media.ImageSource> LoadImageAsync(ImageSource imagesource, CancellationToken cancellationToken = new CancellationToken()) + { + var imageLoader = imagesource as UriImageSource; + if (imageLoader?.Uri == null) + return null; + + Stream streamImage = await imageLoader.GetStreamAsync(cancellationToken); + if (streamImage == null || !streamImage.CanRead) + { + return null; + } + + using (IRandomAccessStream stream = streamImage.AsRandomAccessStream()) + { + try + { + var image = new BitmapImage(); + await image.SetSourceAsync(stream); + return image; + } + catch (Exception ex) + { + Log.Warning("Image Loading", $"{nameof(UriImageSourceHandler)} could not load {imageLoader.Uri}: {ex}"); + + // According to https://msdn.microsoft.com/library/windows/apps/jj191522 + // this can happen if the image data is bad or the app is close to its + // memory limit + return null; + } + } + } + } +}
\ No newline at end of file |