diff --git a/src/Artemis.UI/Extensions/Bitmap.cs b/src/Artemis.UI/Extensions/Bitmap.cs new file mode 100644 index 000000000..ce8cba4d2 --- /dev/null +++ b/src/Artemis.UI/Extensions/Bitmap.cs @@ -0,0 +1,40 @@ +using System.IO; +using Avalonia.Media.Imaging; +using SkiaSharp; + +namespace Artemis.UI.Extensions; + +public class BitmapExtensions +{ + public static Bitmap LoadAndResize(string file, int size) + { + using SKBitmap source = SKBitmap.Decode(file); + return Resize(source, size); + } + + public static Bitmap LoadAndResize(Stream stream, int size) + { + using SKBitmap source = SKBitmap.Decode(stream); + return Resize(source, size); + } + + private static Bitmap Resize(SKBitmap source, int size) + { + int newWidth, newHeight; + float aspectRatio = (float) source.Width / source.Height; + + if (aspectRatio > 1) + { + newWidth = size; + newHeight = (int) (size / aspectRatio); + } + else + { + newWidth = (int) (size * aspectRatio); + newHeight = size; + } + + using SKBitmap resizedBitmap = source.Resize(new SKImageInfo(newWidth, newHeight), SKFilterQuality.High); + return new Bitmap(resizedBitmap.Encode(SKEncodedImageFormat.Png, 100).AsStream()); + } +} \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Sidebar/Dialogs/ProfileConfigurationEditViewModel.cs b/src/Artemis.UI/Screens/Sidebar/Dialogs/ProfileConfigurationEditViewModel.cs index 2f45408ed..032f93cbe 100644 --- a/src/Artemis.UI/Screens/Sidebar/Dialogs/ProfileConfigurationEditViewModel.cs +++ b/src/Artemis.UI/Screens/Sidebar/Dialogs/ProfileConfigurationEditViewModel.cs @@ -9,6 +9,7 @@ using Artemis.Core; using Artemis.Core.Modules; using Artemis.Core.Services; using Artemis.UI.DryIoc.Factories; +using Artemis.UI.Extensions; using Artemis.UI.Screens.VisualScripting; using Artemis.UI.Shared; using Artemis.UI.Shared.Services; @@ -231,7 +232,7 @@ public class ProfileConfigurationEditViewModel : DialogViewModelBase