From c843ba01ccaca22eb7ad5df6e31a22cf5cfda4ad Mon Sep 17 00:00:00 2001 From: Andreas Date: Wed, 24 Dec 2025 16:40:58 +0100 Subject: [PATCH 1/2] Added `ToArray(Image image)` to `ImageHelper` Fixed #325 --- .../Utilities/ImageHelper.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/SharedMauiCoreLibrary/Utilities/ImageHelper.cs b/src/SharedMauiCoreLibrary/Utilities/ImageHelper.cs index 286b25a..f8edd14 100644 --- a/src/SharedMauiCoreLibrary/Utilities/ImageHelper.cs +++ b/src/SharedMauiCoreLibrary/Utilities/ImageHelper.cs @@ -7,10 +7,23 @@ public partial class ImageHelper public static byte[] ToArray(Microsoft.Maui.Graphics.IImage image) { using MemoryStream memory = new(); - image.Save(memory); return memory.ToArray(); } + + public static byte[] ToArray(Image image) + { + // Based on https://github.com/CommunityToolkit/Maui/blob/main/src/CommunityToolkit.Maui/Converters/ByteArrayToImageSourceConverter.shared.cs + if (image?.Source is not StreamImageSource streamImageSource) + return []; + + using MemoryStream memory = new(); + Stream? streamFromImageSource = streamImageSource.Stream(CancellationToken.None).GetAwaiter().GetResult(); + if (streamFromImageSource is null) + return []; + streamFromImageSource.CopyTo(memory); + return memory.ToArray(); + } #endregion } } From 0bd4e69a4e6ef37647ad1210a5e662e6fcf9ecb8 Mon Sep 17 00:00:00 2001 From: Andreas Date: Wed, 24 Dec 2025 19:01:56 +0100 Subject: [PATCH 2/2] Improved `ImageHelper` --- common.props | 1 + .../Utilities/ImageHelper.cs | 30 ++++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/common.props b/common.props index 158bd39..714d10f 100644 --- a/common.props +++ b/common.props @@ -36,6 +36,7 @@ false false + true diff --git a/src/SharedMauiCoreLibrary/Utilities/ImageHelper.cs b/src/SharedMauiCoreLibrary/Utilities/ImageHelper.cs index f8edd14..6adf41e 100644 --- a/src/SharedMauiCoreLibrary/Utilities/ImageHelper.cs +++ b/src/SharedMauiCoreLibrary/Utilities/ImageHelper.cs @@ -10,20 +10,34 @@ public static byte[] ToArray(Microsoft.Maui.Graphics.IImage image) image.Save(memory); return memory.ToArray(); } - - public static byte[] ToArray(Image image) + public static byte[] ToArray(FileStream imageStream) { - // Based on https://github.com/CommunityToolkit/Maui/blob/main/src/CommunityToolkit.Maui/Converters/ByteArrayToImageSourceConverter.shared.cs - if (image?.Source is not StreamImageSource streamImageSource) + if (imageStream is null) return []; - using MemoryStream memory = new(); - Stream? streamFromImageSource = streamImageSource.Stream(CancellationToken.None).GetAwaiter().GetResult(); - if (streamFromImageSource is null) + imageStream.CopyTo(memory); + return memory.ToArray(); + } + public static async Task ToArrayAsync(FileStream imageStream) + { + if (imageStream is null) return []; - streamFromImageSource.CopyTo(memory); + using MemoryStream memory = new(); + await imageStream.CopyToAsync(memory); return memory.ToArray(); } + public static Task ToArrayAsync(string imagePath) => ToArrayAsync(GetImageStream(imagePath)); + public static FileStream GetImageStream(string filePath) => File.OpenRead(filePath); + public static Task GetImageStreamAsync(string filePath) => Task.Run(() => File.OpenRead(filePath)); + public static async Task LoadImageFromStream(string filePath) + { + if (File.Exists(filePath)) + { + using FileStream imageStream = await GetImageStreamAsync(filePath).ConfigureAwait(false); + return ImageSource.FromStream(() => imageStream); + } + else return null; + } #endregion } }