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)
{
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<IImage> LoadImageAsync(Stream stream)
{
return Thread.CurrentThread.IsThreadPoolThread ?
@ -28,19 +33,11 @@ namespace MapControl
Task.Run(() => LoadImage(stream));
}
public static async Task<IImage> LoadImageAsync(string path)
public static Task<IImage> 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<IImage> LoadMergedImageAsync(Uri uri1, Uri uri2, IProgress<double> progress)

View file

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

View file

@ -28,14 +28,7 @@ namespace MapControl
return image;
}
public static Task<ImageSource> LoadImageAsync(Stream stream)
{
return Thread.CurrentThread.IsThreadPoolThread ?
Task.FromResult(LoadImage(stream)) :
Task.Run(() => LoadImage(stream));
}
public static async Task<ImageSource> 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<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)
{
WriteableBitmap mergedBitmap = null;

View file

@ -26,7 +26,9 @@ namespace MapControl
public static async Task<ImageSource> 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<WriteableBitmap> 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);