diff options
author | E.Z. Hart <hartez@users.noreply.github.com> | 2016-07-18 17:16:47 -0600 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-07-18 16:16:47 -0700 |
commit | 272033723ea275ceb8a288fa605eafd035c79f2d (patch) | |
tree | abc639d0f5627f3877f9e237e473bda168e9e030 /Xamarin.Forms.Platform.WinRT/UriImageSourceHandler.cs | |
parent | c9da550ce4987e01c1bbce9d0a17b860e1d300b3 (diff) | |
download | xamarin-forms-272033723ea275ceb8a288fa605eafd035c79f2d.tar.gz xamarin-forms-272033723ea275ceb8a288fa605eafd035c79f2d.tar.bz2 xamarin-forms-272033723ea275ceb8a288fa605eafd035c79f2d.zip |
Windows image loader error handling (#260)
* Repros for various image issues
* Log image loading errors
* Better repro instructions and user interface
* Image loading tests now running on WinRT/UWP phone/tablet/desktop
* Move FailImageSource into shared project
* Move FailImageSource into shared project
* Update docs
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 |