ImageLoader

This commit is contained in:
ClemensFischer 2025-09-11 16:46:42 +02:00
parent 789fc98789
commit 07548efb93
4 changed files with 32 additions and 24 deletions

View file

@ -13,7 +13,7 @@ namespace MapControl
{ {
public static IImage LoadImage(Uri uri) public static IImage LoadImage(Uri uri)
{ {
throw new NotSupportedException(); return new Bitmap(AssetLoader.Open(uri));
} }
public static IImage LoadImage(Stream stream) public static IImage LoadImage(Stream stream)
@ -21,6 +21,11 @@ namespace MapControl
return new Bitmap(stream); return new Bitmap(stream);
} }
public static IImage LoadImage(string path)
{
return File.Exists(path) ? new Bitmap(path) : null;
}
public static Task<IImage> LoadImageAsync(Stream stream) public static Task<IImage> LoadImageAsync(Stream stream)
{ {
return Thread.CurrentThread.IsThreadPoolThread ? return Thread.CurrentThread.IsThreadPoolThread ?
@ -28,19 +33,11 @@ namespace MapControl
Task.Run(() => LoadImage(stream)); Task.Run(() => LoadImage(stream));
} }
public static async Task<IImage> LoadImageAsync(string path) public static Task<IImage> LoadImageAsync(string path)
{ {
IImage image = null; return Thread.CurrentThread.IsThreadPoolThread ?
Task.FromResult(LoadImage(path)) :
if (File.Exists(path)) Task.Run(() => LoadImage(path));
{
using (var stream = File.OpenRead(path))
{
image = await LoadImageAsync(stream);
}
}
return image;
} }
internal static async Task<IImage> LoadMergedImageAsync(Uri uri1, Uri uri2, IProgress<double> progress) internal static async Task<IImage> LoadMergedImageAsync(Uri uri1, Uri uri2, IProgress<double> progress)

View file

@ -61,6 +61,7 @@ namespace MapControl
} }
memoryStream.Seek(0, SeekOrigin.Begin); memoryStream.Seek(0, SeekOrigin.Begin);
Image.Source = await ImageLoader.LoadImageAsync(memoryStream); Image.Source = await ImageLoader.LoadImageAsync(memoryStream);
} }
} }

View file

@ -28,14 +28,7 @@ namespace MapControl
return image; return image;
} }
public static Task<ImageSource> LoadImageAsync(Stream stream) public static ImageSource LoadImage(string path)
{
return Thread.CurrentThread.IsThreadPoolThread ?
Task.FromResult(LoadImage(stream)) :
Task.Run(() => LoadImage(stream));
}
public static async Task<ImageSource> LoadImageAsync(string path)
{ {
ImageSource image = null; ImageSource image = null;
@ -43,13 +36,27 @@ namespace MapControl
{ {
using (var stream = File.OpenRead(path)) using (var stream = File.OpenRead(path))
{ {
image = await LoadImageAsync(stream); image = LoadImage(stream);
} }
} }
return image; return image;
} }
public static Task<ImageSource> LoadImageAsync(Stream stream)
{
return Thread.CurrentThread.IsThreadPoolThread ?
Task.FromResult(LoadImage(stream)) :
Task.Run(() => LoadImage(stream));
}
public static Task<ImageSource> LoadImageAsync(string path)
{
return Thread.CurrentThread.IsThreadPoolThread ?
Task.FromResult(LoadImage(path)) :
Task.Run(() => LoadImage(path));
}
internal static async Task<ImageSource> LoadMergedImageAsync(Uri uri1, Uri uri2, IProgress<double> progress) internal static async Task<ImageSource> LoadMergedImageAsync(Uri uri1, Uri uri2, IProgress<double> progress)
{ {
WriteableBitmap mergedBitmap = null; WriteableBitmap mergedBitmap = null;

View file

@ -26,7 +26,9 @@ namespace MapControl
public static async Task<ImageSource> LoadImageAsync(IRandomAccessStream randomAccessStream) public static async Task<ImageSource> LoadImageAsync(IRandomAccessStream randomAccessStream)
{ {
var image = new BitmapImage(); var image = new BitmapImage();
await image.SetSourceAsync(randomAccessStream); await image.SetSourceAsync(randomAccessStream);
return image; return image;
} }
@ -48,9 +50,9 @@ namespace MapControl
{ {
var file = await StorageFile.GetFileFromPathAsync(path); 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<WriteableBitmap> LoadWriteableBitmapAsync(BitmapDecoder decoder) internal static async Task<WriteableBitmap> LoadWriteableBitmapAsync(BitmapDecoder decoder)
{ {
var image = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight); var image = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight);
var pixelData = await decoder.GetPixelDataAsync( var pixelData = await decoder.GetPixelDataAsync(
BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, new BitmapTransform(), BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, new BitmapTransform(),
ExifOrientationMode.IgnoreExifOrientation, ColorManagementMode.DoNotColorManage); ExifOrientationMode.IgnoreExifOrientation, ColorManagementMode.DoNotColorManage);