diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/DownSizeImageAppearProperly.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/DownSizeImageAppearProperly.png
new file mode 100644
index 000000000000..137c2c8266de
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/DownSizeImageAppearProperly.png differ
diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue30350.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue30350.xaml
new file mode 100644
index 000000000000..364ed042ca83
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue30350.xaml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue30350.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue30350.xaml.cs
new file mode 100644
index 000000000000..0b0f68add01a
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue30350.xaml.cs
@@ -0,0 +1,142 @@
+using System;
+using System.ComponentModel;
+using System.IO;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Threading.Tasks;
+using Microsoft.Maui.Graphics;
+using Microsoft.Maui.Graphics.Platform;
+using IImage = Microsoft.Maui.Graphics.IImage;
+
+namespace Maui.Controls.Sample.Issues
+{
+ [Issue(IssueTracker.Github, 30350, "IImage downsize broken starting from 9.0.80 and not fixed in 9.0.81", PlatformAffected.iOS)]
+ public partial class Issue30350 : TestContentPage
+ {
+ private ImageSource _originalSource;
+ private string _originalSize;
+ private ImageSource _downsizedSource;
+ private string _downsizedImageSize;
+
+ public Issue30350()
+ {
+ InitializeComponent();
+ BindingContext = this;
+ }
+
+ protected override void Init()
+ {
+ // Delay loading to ensure all controls are initialized
+ Dispatcher.Dispatch(async () => await LoadImagesAsync());
+ }
+
+ public ImageSource OriginalSource
+ {
+ get => _originalSource;
+ set
+ {
+ if (Equals(value, _originalSource))
+ return;
+ _originalSource = value;
+ OnPropertyChanged();
+ }
+ }
+
+ public ImageSource DownsizedSource
+ {
+ get => _downsizedSource;
+ set
+ {
+ if (Equals(value, _downsizedSource))
+ return;
+ _downsizedSource = value;
+ OnPropertyChanged();
+ }
+ }
+
+ public string OriginalSize
+ {
+ get => _originalSize;
+ set
+ {
+ if (value == _originalSize)
+ return;
+ _originalSize = value;
+ OnPropertyChanged();
+ }
+ }
+
+ public string DownsizedImageSize
+ {
+ get => _downsizedImageSize;
+ set
+ {
+ if (value == _downsizedImageSize)
+ return;
+ _downsizedImageSize = value;
+ OnPropertyChanged();
+ }
+ }
+
+ private async Task LoadImagesAsync()
+ {
+ try
+ {
+ // Check if StatusLabel is available
+ if (StatusLabel != null)
+ StatusLabel.Text = "Loading images...";
+
+ // Load original image from embedded resource
+ OriginalSource = ImageSource.FromResource("Controls.TestCases.HostApp.Resources.Images.royals.png");
+
+ // Load IImage for processing
+ var assembly = GetType().GetTypeInfo().Assembly;
+ using var stream = assembly.GetManifestResourceStream("Controls.TestCases.HostApp.Resources.Images.royals.png");
+
+ if (stream == null)
+ {
+ if (StatusLabel != null)
+ StatusLabel.Text = "Error: Could not load royals.png resource";
+ return;
+ }
+
+ var originalImage = PlatformImage.FromStream(stream);
+ if (originalImage == null)
+ {
+ if (StatusLabel != null)
+ StatusLabel.Text = "Error: Could not create IImage from stream";
+ return;
+ }
+
+ OriginalSize = $"{originalImage.Width}x{originalImage.Height}";
+
+ // Perform downsize operation - this is where the issue occurs in MAUI 9.0.80+
+ // The downsized image should be flipped/rotated incorrectly on iOS 9.0.80+
+ var downsizedImage = originalImage.Downsize(100);
+ if (downsizedImage == null)
+ {
+ if (StatusLabel != null)
+ StatusLabel.Text = "Error: Downsize operation failed";
+ return;
+ }
+
+ DownsizedImageSize = $"{downsizedImage.Width}x{downsizedImage.Height}";
+
+ // Convert downsized IImage to ImageSource
+ using var downsizedStream = new MemoryStream();
+ await downsizedImage.SaveAsync(downsizedStream, ImageFormat.Png);
+ downsizedStream.Position = 0;
+
+ DownsizedSource = ImageSource.FromStream(() => new MemoryStream(downsizedStream.ToArray()));
+
+ if (StatusLabel != null)
+ StatusLabel.Text = "Images loaded. Compare for flipping/rotation issues in MAUI 9.0.80+";
+ }
+ catch (Exception ex)
+ {
+ if (StatusLabel != null)
+ StatusLabel.Text = $"Error loading images: {ex.Message}";
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue30426.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue30426.xaml
new file mode 100644
index 000000000000..c796c306d141
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue30426.xaml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue30426.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue30426.xaml.cs
new file mode 100644
index 000000000000..f59cd99ffe52
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue30426.xaml.cs
@@ -0,0 +1,137 @@
+using System.Reflection;
+using Microsoft.Maui.Graphics.Platform;
+using IImage = Microsoft.Maui.Graphics.IImage;
+
+namespace Maui.Controls.Sample.Issues
+{
+ [Issue(IssueTracker.Github, 30426, "IImage Downsize() throws Exception in 9.0.81 when called from background thread on iOS", PlatformAffected.iOS)]
+ public partial class Issue30426 : TestContentPage
+ {
+ private IImage _originalImage;
+
+ public Issue30426()
+ {
+ InitializeComponent();
+ }
+
+ protected override void Init()
+ {
+
+ }
+
+ private async void OnSelectImageClicked(object sender, EventArgs e)
+ {
+ await LoadEmbeddedImageAsync();
+ }
+
+ private async Task LoadEmbeddedImageAsync()
+ {
+ try
+ {
+ var assembly = GetType().GetTypeInfo().Assembly;
+ using (var stream = assembly.GetManifestResourceStream("Controls.TestCases.HostApp.Resources.Images.royals.png"))
+ {
+ _originalImage = PlatformImage.FromStream(stream);
+ using var memoryStream = new MemoryStream();
+ await stream.CopyToAsync(memoryStream);
+
+ FileSizeLabel.Text = $"File Size: {stream.Length / 1024:N0} KB";
+ DimensionsLabel.Text = $"Dimensions: {_originalImage.Width} x {_originalImage.Height}";
+ }
+
+ ProcessImageButton.IsEnabled = true;
+ StatusLabel.Text = "Status: Image loaded successfully";
+ }
+ catch (Exception ex)
+ {
+ ShowError($"Failed to load image: {ex.Message}");
+ }
+ }
+
+ private void OnResizeSliderChanged(object sender, ValueChangedEventArgs e)
+ {
+ var percentage = (int)e.NewValue;
+ ResizeLabel.Text = $"{percentage}%";
+ }
+
+ private async void OnProcessImageClicked(object sender, EventArgs e)
+ {
+ if (_originalImage == null)
+ {
+ ShowError("No image loaded");
+ return;
+ }
+
+ try
+ {
+ StatusLabel.Text = "Status: Processing image...";
+ ErrorLabel.IsVisible = false;
+ ProcessImageButton.IsEnabled = false;
+
+ var resizePercentage = ResizeSlider.Value / 100f;
+ var newWidth = (float)(_originalImage.Width * resizePercentage);
+ var newHeight = (float)(_originalImage.Height * resizePercentage);
+
+ // This should cause the issue on iOS 9.0.81 when called from background thread
+ await Task.Run(() => ProcessImageOnBackgroundThread(newWidth, newHeight));
+
+ }
+ catch (Exception ex)
+ {
+ ShowError($"Image processing failed: {ex.Message}");
+ }
+ finally
+ {
+ ProcessImageButton.IsEnabled = true;
+ }
+ }
+
+ private void ProcessImageOnBackgroundThread(float newWidth, float newHeight)
+ {
+ try
+ {
+ // This call should throw UIKitThreadAccessException on iOS 9.0.81
+ var resizedImage = _originalImage.Downsize(newWidth, newHeight, false);
+
+ MainThread.BeginInvokeOnMainThread(() =>
+ {
+ UpdateImageDisplay(resizedImage, "Background Thread");
+ });
+ }
+ catch (Exception ex)
+ {
+ MainThread.BeginInvokeOnMainThread(() =>
+ {
+ ShowError($"Background thread processing failed: {ex.Message}");
+ });
+ }
+ }
+
+ private async void UpdateImageDisplay(IImage resizedImage, string processingMethod)
+ {
+ try
+ {
+ using var stream = new MemoryStream();
+ await resizedImage.SaveAsync(stream, ImageFormat.Jpeg, 0.8f);
+
+ stream.Position = 0;
+ DisplayImage.Source = ImageSource.FromStream(() => new MemoryStream(stream.ToArray()));
+
+ FileSizeLabel.Text = $"File Size: {stream.Length / 1024:N0} KB";
+ DimensionsLabel.Text = $"Dimensions: {resizedImage.Width} x {resizedImage.Height}";
+ StatusLabel.Text = $"Status: Image processed successfully";
+ }
+ catch (Exception ex)
+ {
+ ShowError($"Failed to update display: {ex.Message}");
+ }
+ }
+
+ private void ShowError(string message)
+ {
+ ErrorLabel.Text = message;
+ ErrorLabel.IsVisible = true;
+ StatusLabel.Text = "Status: Error occurred";
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/DownSizeImageAppearProperly.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/DownSizeImageAppearProperly.png
new file mode 100644
index 000000000000..9077225a21a8
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/DownSizeImageAppearProperly.png differ
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30350.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30350.cs
new file mode 100644
index 000000000000..24024de4b296
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30350.cs
@@ -0,0 +1,23 @@
+using NUnit.Framework;
+using UITest.Appium;
+using UITest.Core;
+
+namespace Microsoft.Maui.TestCases.Tests.Issues
+{
+ public class Issue30350 : _IssuesUITest
+ {
+ public Issue30350(TestDevice device) : base(device)
+ {
+ }
+
+ public override string Issue => "IImage downsize broken starting from 9.0.80 and not fixed in 9.0.81";
+
+ [Test]
+ [Category(UITestCategories.Image)]
+ public void DownSizeImageAppearProperly()
+ {
+ App.WaitForElement("WaitForStubControl");
+ VerifyScreenshot();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30426.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30426.cs
new file mode 100644
index 000000000000..51f79dc53576
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30426.cs
@@ -0,0 +1,30 @@
+using NUnit.Framework;
+using UITest.Appium;
+using UITest.Core;
+
+namespace Microsoft.Maui.TestCases.Tests.Issues
+{
+ public class Issue30426 : _IssuesUITest
+ {
+ public Issue30426(TestDevice device) : base(device)
+ {
+ }
+
+ public override string Issue => "IImage Downsize() throws Exception in 9.0.81 when called from background thread on iOS";
+
+ [Test]
+ [Category(UITestCategories.Image)]
+ public void LoadTestImageButtonShouldLoadImageWithoutException()
+ {
+ App.WaitForElement("WaitForStubControl");
+ App.WaitForElement("LoadImageButton");
+ App.Tap("LoadImageButton");
+ App.WaitForElement("StatusLabel");
+ Assert.That(App.WaitForElement("StatusLabel").GetText(), Is.EqualTo("Status: Image loaded successfully"));
+ App.WaitForElement("ProcessImageButton");
+ App.Tap("ProcessImageButton");
+ App.WaitForElement("StatusLabel");
+ Assert.That(App.WaitForElement("StatusLabel").GetText(), Is.EqualTo("Status: Image processed successfully"));
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/DownSizeImageAppearProperly.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/DownSizeImageAppearProperly.png
new file mode 100644
index 000000000000..4c2597ff9952
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/DownSizeImageAppearProperly.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/DownSizeImageAppearProperly.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/DownSizeImageAppearProperly.png
new file mode 100644
index 000000000000..79d08e141924
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/DownSizeImageAppearProperly.png differ