diff --git a/MapControl/Shared/ImageLoader.cs b/MapControl/Shared/ImageLoader.cs index f5cf5f5e..a83e70cb 100644 --- a/MapControl/Shared/ImageLoader.cs +++ b/MapControl/Shared/ImageLoader.cs @@ -44,7 +44,7 @@ namespace MapControl { var response = await GetHttpResponseAsync(uri, progress); - if (response != null && response.Buffer != null) + if (response?.Buffer != null) { image = await LoadImageAsync(response.Buffer); } diff --git a/MapControl/WinUI/ImageLoader.WinUI.cs b/MapControl/WinUI/ImageLoader.WinUI.cs index 4c2b3e82..39fc41c4 100644 --- a/MapControl/WinUI/ImageLoader.WinUI.cs +++ b/MapControl/WinUI/ImageLoader.WinUI.cs @@ -70,17 +70,25 @@ namespace MapControl return image; } - internal static async Task LoadWriteableBitmapAsync(Uri uri) + internal static async Task LoadWriteableBitmapAsync(Uri uri, IProgress progress) { WriteableBitmap bitmap = null; + progress.Report(0d); + try { - using (var stream = await RandomAccessStreamReference.CreateFromUri(uri).OpenReadAsync()) - { - var decoder = await BitmapDecoder.CreateAsync(stream); + var response = await GetHttpResponseAsync(uri, progress); - bitmap = await LoadWriteableBitmapAsync(decoder); + if (response?.Buffer != null) + { + using (var memoryStream = new MemoryStream(response.Buffer)) + using (var randomAccessStream = memoryStream.AsRandomAccessStream()) + { + var decoder = await BitmapDecoder.CreateAsync(randomAccessStream); + + bitmap = await LoadWriteableBitmapAsync(decoder); + } } } catch (Exception ex) @@ -88,16 +96,20 @@ namespace MapControl Debug.WriteLine($"{nameof(ImageLoader)}: {uri}: {ex.Message}"); } + progress.Report(1d); + return bitmap; } internal static async Task LoadMergedImageAsync(Uri uri1, Uri uri2, IProgress progress) { WriteableBitmap mergedBitmap = null; + var p1 = 0d; + var p2 = 0d; - progress?.Report(0d); - - var bitmaps = await Task.WhenAll(LoadWriteableBitmapAsync(uri1), LoadWriteableBitmapAsync(uri2)); + var bitmaps = await Task.WhenAll( + LoadWriteableBitmapAsync(uri1, new Progress(p => { p1 = p; progress.Report((p1 + p2) / 2d); })), + LoadWriteableBitmapAsync(uri2, new Progress(p => { p2 = p; progress.Report((p1 + p2) / 2d); }))); if (bitmaps.Length == 2 && bitmaps[0] != null && @@ -122,8 +134,6 @@ namespace MapControl } } - progress?.Report(1d); - return mergedBitmap; } }