From 9715097a62561048555d56be7fafaf3e55098b1f Mon Sep 17 00:00:00 2001 From: KarthikRajaKalaimani <92777139+KarthikRajaKalaimani@users.noreply.github.com> Date: Tue, 2 Dec 2025 18:15:11 +0530 Subject: [PATCH 1/6] Fixed Image control crashes on Android when image width exceeds height --- .../FileImageSourceService.Android.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Core/src/ImageSources/FileImageSourceService/FileImageSourceService.Android.cs b/src/Core/src/ImageSources/FileImageSourceService/FileImageSourceService.Android.cs index 5f3552dd32b50..838699b9021e8 100644 --- a/src/Core/src/ImageSources/FileImageSourceService/FileImageSourceService.Android.cs +++ b/src/Core/src/ImageSources/FileImageSourceService/FileImageSourceService.Android.cs @@ -4,9 +4,11 @@ using System.Threading; using System.Threading.Tasks; using Android.Content; +using Android.Graphics; using Android.Graphics.Drawables; using Android.Widget; using Microsoft.Extensions.Logging; +using Path = System.IO.Path; namespace Microsoft.Maui { @@ -33,6 +35,12 @@ public partial class FileImageSourceService } var callback = new ImageLoaderCallback(); + var bitmap = BitmapFactory.DecodeFile(file); + if (bitmap != null) + { + imageView.SetImageBitmap(bitmap); + return Task.FromResult(new ImageSourceServiceLoadResult()); + } PlatformInterop.LoadImageFromFile(imageView, file, callback); From ab59452df6ada1ec0176faaae8c189b073bb1ea6 Mon Sep 17 00:00:00 2001 From: KarthikRajaKalaimani <92777139+KarthikRajaKalaimani@users.noreply.github.com> Date: Thu, 4 Dec 2025 16:46:07 +0530 Subject: [PATCH 2/6] Included test case --- .../snapshots/android/Issue32869_Image.png | Bin 0 -> 20704 bytes .../TestCases.HostApp/Issues/Issue32869.cs | 39 ++++++++++++++++++ .../Resources/Raw/Issue32869.png | Bin 0 -> 17897 bytes .../Tests/Issues/Issue32869.cs | 22 ++++++++++ .../snapshots/ios/Issue32869_Image.png | Bin 0 -> 21005 bytes .../com/microsoft/maui/PlatformInterop.java | 35 ++++++++++++---- .../FileImageSourceService.Android.cs | 6 --- 7 files changed, 88 insertions(+), 14 deletions(-) create mode 100644 src/Controls/tests/TestCases.Android.Tests/snapshots/android/Issue32869_Image.png create mode 100644 src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs create mode 100644 src/Controls/tests/TestCases.HostApp/Resources/Raw/Issue32869.png create mode 100644 src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32869.cs create mode 100644 src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/Issue32869_Image.png diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/Issue32869_Image.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/Issue32869_Image.png new file mode 100644 index 0000000000000000000000000000000000000000..12bdbde20a1cb6106c6371c0b5ce1f879456aa00 GIT binary patch literal 20704 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 literal 0 HcmV?d00001 diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs new file mode 100644 index 0000000000000..c31784fb324c5 --- /dev/null +++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs @@ -0,0 +1,39 @@ +using System.ComponentModel; + +namespace Maui.Controls.Sample.Issues; + + [Issue(IssueTracker.Github, 32869, "Image control crashes on Android when image width exceeds height", PlatformAffected.Android)] + public class Issue32869 : ContentPage + { + Image TestImage; + public Issue32869() + { + Title = "Wide Image Test"; + Padding = new Thickness(24); + + TestImage = new Image + { + AutomationId = "TestImage", + }; + + Content = TestImage; + LoadWideImageAsync(); + } + private async void LoadWideImageAsync() + { + // Load the wide image from embedded resources + await using var stream = await FileSystem.OpenAppPackageFileAsync("Issue32869.png"); + using var ms = new MemoryStream(); + await stream.CopyToAsync(ms); + var imageBytes = ms.ToArray(); + + // Write to local storage + var localPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "test_wide_image.png"); + await using var fileStream = new FileStream(localPath, FileMode.Create); + + await fileStream.WriteAsync(imageBytes, 0, imageBytes.Length); + + // Load the image + TestImage.Source = localPath; + } +} \ No newline at end of file diff --git a/src/Controls/tests/TestCases.HostApp/Resources/Raw/Issue32869.png b/src/Controls/tests/TestCases.HostApp/Resources/Raw/Issue32869.png new file mode 100644 index 0000000000000000000000000000000000000000..e39bf98c4c09bd15984c400951f6218605b5fc78 GIT binary patch literal 17897 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 literal 0 HcmV?d00001 diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32869.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32869.cs new file mode 100644 index 0000000000000..51f38ec8912cd --- /dev/null +++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32869.cs @@ -0,0 +1,22 @@ +using NUnit.Framework; +using UITest.Appium; +using UITest.Core; + +namespace Microsoft.Maui.TestCases.Tests.Issues; + +public class Issue32869 : _IssuesUITest +{ + public Issue32869(TestDevice testDevice) : base(testDevice) + { + } + + public override string Issue => "Image control crashes on Android when image width exceeds height"; + + [Test] + [Category(UITestCategories.Image)] + public void Issue32869_Image() + { + App.WaitForElement("TestImage"); + VerifyScreenshot(); + } +} \ No newline at end of file diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/Issue32869_Image.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/Issue32869_Image.png new file mode 100644 index 0000000000000000000000000000000000000000..49f7a7b10787460abd50ac37ddbb74f91ea7c548 GIT binary patch literal 21005 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 literal 0 HcmV?d00001 diff --git a/src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/PlatformInterop.java b/src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/PlatformInterop.java index 10f724424e455..d42f4ace5115e 100644 --- a/src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/PlatformInterop.java +++ b/src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/PlatformInterop.java @@ -297,6 +297,10 @@ static PorterDuff.Mode getPorterMode(int mode) { } private static void prepare(RequestBuilder builder, MauiTarget target, boolean cachingEnabled, ImageLoaderCallback callback) { + prepare(builder, target, cachingEnabled, callback, false); + } + + private static void prepare(RequestBuilder builder, MauiTarget target, boolean cachingEnabled, ImageLoaderCallback callback, boolean constrainSize) { // A special value to work around https://github.com/dotnet/maui/issues/6783 where targets // are actually re-used if all the variables are the same. // Adding this "error image" that will always load a null image makes each request unique, @@ -310,6 +314,13 @@ private static void prepare(RequestBuilder builder, MauiTarget target, .skipMemoryCache(true); } + // Constrain bitmap size to prevent excessive memory allocation + // See https://github.com/dotnet/maui/issues/32869 + if (constrainSize) { + builder = builder + .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL); + } + target.load(builder); } @@ -318,20 +329,28 @@ public static String getGlyphHex(String glyph) { } private static void loadInto(RequestBuilder builder, ImageView imageView, boolean cachingEnabled, ImageLoaderCallback callback, Object model) { + loadInto(builder, imageView, cachingEnabled, callback, model, false); + } + + private static void loadInto(RequestBuilder builder, ImageView imageView, boolean cachingEnabled, ImageLoaderCallback callback, Object model, boolean constrainSize) { MauiCustomViewTarget target = new MauiCustomViewTarget(imageView, callback, model); - prepare(builder, target, cachingEnabled, callback); + prepare(builder, target, cachingEnabled, callback, constrainSize); } private static void load(RequestBuilder builder, Context context, boolean cachingEnabled, ImageLoaderCallback callback, Object model) { + load(builder, context, cachingEnabled, callback, model, false); + } + + private static void load(RequestBuilder builder, Context context, boolean cachingEnabled, ImageLoaderCallback callback, Object model, boolean constrainSize) { MauiCustomTarget target = new MauiCustomTarget(context, callback, model); - prepare(builder, target, cachingEnabled, callback); + prepare(builder, target, cachingEnabled, callback, constrainSize); } public static void loadImageFromFile(ImageView imageView, String file, ImageLoaderCallback callback) { RequestBuilder builder = Glide .with(imageView) .load(file); - loadInto(builder, imageView, true, callback, file); + loadInto(builder, imageView, true, callback, file, true); } public static void loadImageFromUri(ImageView imageView, String uri, boolean cachingEnabled, ImageLoaderCallback callback) { @@ -343,14 +362,14 @@ public static void loadImageFromUri(ImageView imageView, String uri, boolean cac RequestBuilder builder = Glide .with(imageView) .load(androidUri); - loadInto(builder, imageView, cachingEnabled, callback, androidUri); + loadInto(builder, imageView, cachingEnabled, callback, androidUri, true); } public static void loadImageFromStream(ImageView imageView, InputStream inputStream, ImageLoaderCallback callback) { RequestBuilder builder = Glide .with(imageView) .load(inputStream); - loadInto(builder, imageView, false, callback, inputStream); + loadInto(builder, imageView, false, callback, inputStream, true); } public static void loadImageFromFont(ImageView imageView, @ColorInt int color, String glyph, Typeface typeface, float textSize, ImageLoaderCallback callback) { @@ -366,7 +385,7 @@ public static void loadImageFromFile(Context context, String file, ImageLoaderCa RequestBuilder builder = Glide .with(context) .load(file); - load(builder, context, true, callback, file); + load(builder, context, true, callback, file, true); } public static void loadImageFromUri(Context context, String uri, boolean cachingEnabled, ImageLoaderCallback callback) { @@ -378,14 +397,14 @@ public static void loadImageFromUri(Context context, String uri, boolean caching RequestBuilder builder = Glide .with(context) .load(androidUri); - load(builder, context, cachingEnabled, callback, androidUri); + load(builder, context, cachingEnabled, callback, androidUri, true); } public static void loadImageFromStream(Context context, InputStream inputStream, ImageLoaderCallback callback) { RequestBuilder builder = Glide .with(context) .load(inputStream); - load(builder, context, false, callback, inputStream); + load(builder, context, false, callback, inputStream, true); } public static void loadImageFromFont(Context context, @ColorInt int color, String glyph, Typeface typeface, float textSize, ImageLoaderCallback callback) { diff --git a/src/Core/src/ImageSources/FileImageSourceService/FileImageSourceService.Android.cs b/src/Core/src/ImageSources/FileImageSourceService/FileImageSourceService.Android.cs index 838699b9021e8..179a959ae0b3f 100644 --- a/src/Core/src/ImageSources/FileImageSourceService/FileImageSourceService.Android.cs +++ b/src/Core/src/ImageSources/FileImageSourceService/FileImageSourceService.Android.cs @@ -35,12 +35,6 @@ public partial class FileImageSourceService } var callback = new ImageLoaderCallback(); - var bitmap = BitmapFactory.DecodeFile(file); - if (bitmap != null) - { - imageView.SetImageBitmap(bitmap); - return Task.FromResult(new ImageSourceServiceLoadResult()); - } PlatformInterop.LoadImageFromFile(imageView, file, callback); From ac8e570ca9dcce3d510163bf5938eddf4bac5a5e Mon Sep 17 00:00:00 2001 From: KarthikRajaKalaimani <92777139+KarthikRajaKalaimani@users.noreply.github.com> Date: Thu, 4 Dec 2025 16:47:20 +0530 Subject: [PATCH 3/6] removed unwanted changes --- .../FileImageSourceService/FileImageSourceService.Android.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Core/src/ImageSources/FileImageSourceService/FileImageSourceService.Android.cs b/src/Core/src/ImageSources/FileImageSourceService/FileImageSourceService.Android.cs index 179a959ae0b3f..5f3552dd32b50 100644 --- a/src/Core/src/ImageSources/FileImageSourceService/FileImageSourceService.Android.cs +++ b/src/Core/src/ImageSources/FileImageSourceService/FileImageSourceService.Android.cs @@ -4,11 +4,9 @@ using System.Threading; using System.Threading.Tasks; using Android.Content; -using Android.Graphics; using Android.Graphics.Drawables; using Android.Widget; using Microsoft.Extensions.Logging; -using Path = System.IO.Path; namespace Microsoft.Maui { From 2c2072f727e268eed2fde0f8719e8b17bc7f8073 Mon Sep 17 00:00:00 2001 From: KarthikRajaKalaimani <92777139+KarthikRajaKalaimani@users.noreply.github.com> Date: Fri, 12 Dec 2025 15:25:51 +0530 Subject: [PATCH 4/6] copilot suggestion added --- src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs index c31784fb324c5..ac5d2e960da34 100644 --- a/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs +++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs @@ -5,18 +5,18 @@ namespace Maui.Controls.Sample.Issues; [Issue(IssueTracker.Github, 32869, "Image control crashes on Android when image width exceeds height", PlatformAffected.Android)] public class Issue32869 : ContentPage { - Image TestImage; + Image _testImage; public Issue32869() { Title = "Wide Image Test"; Padding = new Thickness(24); - TestImage = new Image + _testImage = new Image { AutomationId = "TestImage", }; - Content = TestImage; + Content = _testImage; LoadWideImageAsync(); } private async void LoadWideImageAsync() From 9a83f88bc6a7286628dce95712f2993934157d47 Mon Sep 17 00:00:00 2001 From: KarthikRajaKalaimani <92777139+KarthikRajaKalaimani@users.noreply.github.com> Date: Fri, 12 Dec 2025 15:43:55 +0530 Subject: [PATCH 5/6] Test case optimized --- .../TestCases.HostApp/Issues/Issue32869.cs | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs index ac5d2e960da34..c29b64ac060fa 100644 --- a/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs +++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs @@ -10,30 +10,40 @@ public Issue32869() { Title = "Wide Image Test"; Padding = new Thickness(24); + _testImage = new Image + { + AutomationId = "TestImage", + }; + Content = _testImage; + } - _testImage = new Image - { - AutomationId = "TestImage", - }; + protected override async void OnAppearing() + { + base.OnAppearing(); + try + { + await LoadWideImageAsync(); + } + catch (Exception ex) + { + // Optionally display error to user or log + _testImage.Source = null; + await DisplayAlert("Error", $"Failed to load image: {ex.Message}", "OK"); + } + } - Content = _testImage; - LoadWideImageAsync(); - } - private async void LoadWideImageAsync() - { + private async Task LoadWideImageAsync() + { // Load the wide image from embedded resources await using var stream = await FileSystem.OpenAppPackageFileAsync("Issue32869.png"); using var ms = new MemoryStream(); await stream.CopyToAsync(ms); var imageBytes = ms.ToArray(); - // Write to local storage var localPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "test_wide_image.png"); - await using var fileStream = new FileStream(localPath, FileMode.Create); - - await fileStream.WriteAsync(imageBytes, 0, imageBytes.Length); - + await using var fileStream = new FileStream(localPath, FileMode.Create); + await fileStream.WriteAsync(imageBytes); // Load the image - TestImage.Source = localPath; - } + _testImage.Source = localPath; + } } \ No newline at end of file From 0cdb53253b1125ebd9fbf6dfb557a502cdc760e0 Mon Sep 17 00:00:00 2001 From: Stephane Delcroix Date: Fri, 19 Dec 2025 11:36:11 +0100 Subject: [PATCH 6/6] Fix code formatting: consistent tabs, trailing newlines, remove unused using --- .../TestCases.HostApp/Issues/Issue32869.cs | 86 +++++++++---------- .../Tests/Issues/Issue32869.cs | 2 +- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs index c29b64ac060fa..ba12d60e3091d 100644 --- a/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs +++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue32869.cs @@ -1,49 +1,49 @@ -using System.ComponentModel; - namespace Maui.Controls.Sample.Issues; - [Issue(IssueTracker.Github, 32869, "Image control crashes on Android when image width exceeds height", PlatformAffected.Android)] - public class Issue32869 : ContentPage +[Issue(IssueTracker.Github, 32869, "Image control crashes on Android when image width exceeds height", PlatformAffected.Android)] +public class Issue32869 : ContentPage +{ + Image _testImage; + + public Issue32869() + { + Title = "Wide Image Test"; + Padding = new Thickness(24); + _testImage = new Image + { + AutomationId = "TestImage", + }; + Content = _testImage; + } + + protected override async void OnAppearing() { - Image _testImage; - public Issue32869() + base.OnAppearing(); + try + { + await LoadWideImageAsync(); + } + catch (Exception ex) { - Title = "Wide Image Test"; - Padding = new Thickness(24); - _testImage = new Image - { - AutomationId = "TestImage", - }; - Content = _testImage; - } + _testImage.Source = null; + await DisplayAlert("Error", $"Failed to load image: {ex.Message}", "OK"); + } + } + + async Task LoadWideImageAsync() + { + // Load the wide image from embedded resources + await using var stream = await FileSystem.OpenAppPackageFileAsync("Issue32869.png"); + using var ms = new MemoryStream(); + await stream.CopyToAsync(ms); + var imageBytes = ms.ToArray(); - protected override async void OnAppearing() - { - base.OnAppearing(); - try - { - await LoadWideImageAsync(); - } - catch (Exception ex) - { - // Optionally display error to user or log - _testImage.Source = null; - await DisplayAlert("Error", $"Failed to load image: {ex.Message}", "OK"); - } - } + // Write to local storage + var localPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "test_wide_image.png"); + await using var fileStream = new FileStream(localPath, FileMode.Create); + await fileStream.WriteAsync(imageBytes); - private async Task LoadWideImageAsync() - { - // Load the wide image from embedded resources - await using var stream = await FileSystem.OpenAppPackageFileAsync("Issue32869.png"); - using var ms = new MemoryStream(); - await stream.CopyToAsync(ms); - var imageBytes = ms.ToArray(); - // Write to local storage - var localPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "test_wide_image.png"); - await using var fileStream = new FileStream(localPath, FileMode.Create); - await fileStream.WriteAsync(imageBytes); - // Load the image - _testImage.Source = localPath; - } -} \ No newline at end of file + // Load the image + _testImage.Source = localPath; + } +} diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32869.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32869.cs index 51f38ec8912cd..734f1ee332cb6 100644 --- a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32869.cs +++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32869.cs @@ -19,4 +19,4 @@ public void Issue32869_Image() App.WaitForElement("TestImage"); VerifyScreenshot(); } -} \ No newline at end of file +}