summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.WinRT/UriImageSourceHandler.cs
diff options
context:
space:
mode:
authorE.Z. Hart <hartez@users.noreply.github.com>2016-07-18 17:16:47 -0600
committerJason Smith <jason.smith@xamarin.com>2016-07-18 16:16:47 -0700
commit272033723ea275ceb8a288fa605eafd035c79f2d (patch)
treeabc639d0f5627f3877f9e237e473bda168e9e030 /Xamarin.Forms.Platform.WinRT/UriImageSourceHandler.cs
parentc9da550ce4987e01c1bbce9d0a17b860e1d300b3 (diff)
downloadxamarin-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.cs51
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