diff --git a/MapControl/Avalonia/ImageLoader.Avalonia.cs b/MapControl/Avalonia/ImageLoader.Avalonia.cs index 647f6c81..10c14b9c 100644 --- a/MapControl/Avalonia/ImageLoader.Avalonia.cs +++ b/MapControl/Avalonia/ImageLoader.Avalonia.cs @@ -13,7 +13,7 @@ namespace MapControl { public static IImage LoadImage(Uri uri) { - throw new NotSupportedException(); + return new Bitmap(AssetLoader.Open(uri)); } public static IImage LoadImage(Stream stream) @@ -21,6 +21,11 @@ namespace MapControl return new Bitmap(stream); } + public static IImage LoadImage(string path) + { + return File.Exists(path) ? new Bitmap(path) : null; + } + public static Task LoadImageAsync(Stream stream) { return Thread.CurrentThread.IsThreadPoolThread ? @@ -28,19 +33,11 @@ namespace MapControl Task.Run(() => LoadImage(stream)); } - public static async Task LoadImageAsync(string path) + public static Task LoadImageAsync(string path) { - IImage image = null; - - if (File.Exists(path)) - { - using (var stream = File.OpenRead(path)) - { - image = await LoadImageAsync(stream); - } - } - - return image; + return Thread.CurrentThread.IsThreadPoolThread ? + Task.FromResult(LoadImage(path)) : + Task.Run(() => LoadImage(path)); } internal static async Task LoadMergedImageAsync(Uri uri1, Uri uri2, IProgress progress) diff --git a/MapControl/Shared/GroundOverlay.cs b/MapControl/Shared/GroundOverlay.cs index 74cfb570..be62309c 100644 --- a/MapControl/Shared/GroundOverlay.cs +++ b/MapControl/Shared/GroundOverlay.cs @@ -61,6 +61,7 @@ namespace MapControl } memoryStream.Seek(0, SeekOrigin.Begin); + Image.Source = await ImageLoader.LoadImageAsync(memoryStream); } } diff --git a/MapControl/WPF/ImageLoader.WPF.cs b/MapControl/WPF/ImageLoader.WPF.cs index 233441e3..f28b6f8a 100644 --- a/MapControl/WPF/ImageLoader.WPF.cs +++ b/MapControl/WPF/ImageLoader.WPF.cs @@ -28,14 +28,7 @@ namespace MapControl return image; } - public static Task LoadImageAsync(Stream stream) - { - return Thread.CurrentThread.IsThreadPoolThread ? - Task.FromResult(LoadImage(stream)) : - Task.Run(() => LoadImage(stream)); - } - - public static async Task LoadImageAsync(string path) + public static ImageSource LoadImage(string path) { ImageSource image = null; @@ -43,13 +36,27 @@ namespace MapControl { using (var stream = File.OpenRead(path)) { - image = await LoadImageAsync(stream); + image = LoadImage(stream); } } return image; } + public static Task LoadImageAsync(Stream stream) + { + return Thread.CurrentThread.IsThreadPoolThread ? + Task.FromResult(LoadImage(stream)) : + Task.Run(() => LoadImage(stream)); + } + + public static Task LoadImageAsync(string path) + { + return Thread.CurrentThread.IsThreadPoolThread ? + Task.FromResult(LoadImage(path)) : + Task.Run(() => LoadImage(path)); + } + internal static async Task LoadMergedImageAsync(Uri uri1, Uri uri2, IProgress progress) { WriteableBitmap mergedBitmap = null; diff --git a/MapControl/WinUI/ImageLoader.WinUI.cs b/MapControl/WinUI/ImageLoader.WinUI.cs index a8c59e27..0ed33215 100644 --- a/MapControl/WinUI/ImageLoader.WinUI.cs +++ b/MapControl/WinUI/ImageLoader.WinUI.cs @@ -26,7 +26,9 @@ namespace MapControl public static async Task LoadImageAsync(IRandomAccessStream randomAccessStream) { var image = new BitmapImage(); + await image.SetSourceAsync(randomAccessStream); + return image; } @@ -48,9 +50,9 @@ namespace MapControl { var file = await StorageFile.GetFileFromPathAsync(path); - using (var stream = await file.OpenReadAsync()) + using (var randomAccessStream = await file.OpenReadAsync()) { - image = await LoadImageAsync(stream); + image = await LoadImageAsync(randomAccessStream); } } @@ -60,6 +62,7 @@ namespace MapControl internal static async Task LoadWriteableBitmapAsync(BitmapDecoder decoder) { var image = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight); + var pixelData = await decoder.GetPixelDataAsync( BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, new BitmapTransform(), ExifOrientationMode.IgnoreExifOrientation, ColorManagementMode.DoNotColorManage);