From 5b110dc4616912f6b50077f581e146ea398115b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=BCseyin=20Can=20=C3=87ALTI?= Date: Wed, 8 Jul 2026 11:49:44 +0300 Subject: [PATCH] New: Add Bmp and Tiff as supported output types ImageMagick.NET already handles both formats natively; this wires them through the OutputType enum, job factory, default settings, and preset UI following the existing Png/Jpg/Webp pattern. --- .../ConversionJobs/ConversionJobFactory.cs | 2 + .../ConversionJob_ImageMagick.cs | 6 ++ .../ConversionPreset/ConversionPreset.cs | 14 +++++ Application/FileConverter/Helpers.cs | 2 + Application/FileConverter/OutputType.cs | 2 + .../FileConverter/Settings.default.xml | 60 +++++++++++++++++++ .../ViewModels/SettingsViewModel.cs | 4 +- .../Resources/ConversionPresetTemplates.xaml | 6 ++ 8 files changed, 95 insertions(+), 1 deletion(-) diff --git a/Application/FileConverter/ConversionJobs/ConversionJobFactory.cs b/Application/FileConverter/ConversionJobs/ConversionJobFactory.cs index 34886bb2..ae5b02a8 100644 --- a/Application/FileConverter/ConversionJobs/ConversionJobFactory.cs +++ b/Application/FileConverter/ConversionJobs/ConversionJobFactory.cs @@ -44,8 +44,10 @@ public static ConversionJob Create(ConversionPreset conversionPreset, string inp } if (conversionPreset.OutputType == OutputType.Avif || + conversionPreset.OutputType == OutputType.Bmp || conversionPreset.OutputType == OutputType.Jpg || conversionPreset.OutputType == OutputType.Png || + conversionPreset.OutputType == OutputType.Tiff || conversionPreset.OutputType == OutputType.Webp) { return new ConversionJob_ImageMagick(conversionPreset, inputFilePath); diff --git a/Application/FileConverter/ConversionJobs/ConversionJob_ImageMagick.cs b/Application/FileConverter/ConversionJobs/ConversionJob_ImageMagick.cs index 312431f1..bb15e5b7 100644 --- a/Application/FileConverter/ConversionJobs/ConversionJob_ImageMagick.cs +++ b/Application/FileConverter/ConversionJobs/ConversionJob_ImageMagick.cs @@ -220,11 +220,17 @@ private void ConvertImage(MagickImage image, bool ignoreScale = false) image.Quality = this.ConversionPreset.GetSettingsValue(ConversionPreset.ConversionSettingKeys.ImageQuality); break; + case OutputType.Bmp: + break; + case OutputType.Png: // http://stackoverflow.com/questions/27267073/imagemagick-lossless-max-compression-for-png image.Quality = 95; break; + case OutputType.Tiff: + break; + case OutputType.Jpg: image.Quality = this.ConversionPreset.GetSettingsValue(ConversionPreset.ConversionSettingKeys.ImageQuality); break; diff --git a/Application/FileConverter/ConversionPreset/ConversionPreset.cs b/Application/FileConverter/ConversionPreset/ConversionPreset.cs index d06d203e..256c5b68 100644 --- a/Application/FileConverter/ConversionPreset/ConversionPreset.cs +++ b/Application/FileConverter/ConversionPreset/ConversionPreset.cs @@ -518,6 +518,13 @@ private void InitializeDefaultSettings(OutputType outputType) this.InitializeSettingsValue(ConversionPreset.ConversionSettingKeys.VideoFramesPerSecond, "15"); break; + case OutputType.Bmp: + this.InitializeSettingsValue(ConversionPreset.ConversionSettingKeys.ImageScale, "1"); + this.InitializeSettingsValue(ConversionPreset.ConversionSettingKeys.ImageRotation, "0"); + this.InitializeSettingsValue(ConversionPreset.ConversionSettingKeys.ImageClampSizePowerOf2, "False"); + this.InitializeSettingsValue(ConversionPreset.ConversionSettingKeys.ImageMaximumSize, "0"); + break; + case OutputType.Png: this.InitializeSettingsValue(ConversionPreset.ConversionSettingKeys.ImageScale, "1"); this.InitializeSettingsValue(ConversionPreset.ConversionSettingKeys.ImageRotation, "0"); @@ -525,6 +532,13 @@ private void InitializeDefaultSettings(OutputType outputType) this.InitializeSettingsValue(ConversionPreset.ConversionSettingKeys.ImageMaximumSize, "0"); break; + case OutputType.Tiff: + this.InitializeSettingsValue(ConversionPreset.ConversionSettingKeys.ImageScale, "1"); + this.InitializeSettingsValue(ConversionPreset.ConversionSettingKeys.ImageRotation, "0"); + this.InitializeSettingsValue(ConversionPreset.ConversionSettingKeys.ImageClampSizePowerOf2, "False"); + this.InitializeSettingsValue(ConversionPreset.ConversionSettingKeys.ImageMaximumSize, "0"); + break; + case OutputType.Jpg: this.InitializeSettingsValue(ConversionPreset.ConversionSettingKeys.ImageQuality, "90"); this.InitializeSettingsValue(ConversionPreset.ConversionSettingKeys.ImageScale, "1"); diff --git a/Application/FileConverter/Helpers.cs b/Application/FileConverter/Helpers.cs index 1112e10f..9f08775f 100644 --- a/Application/FileConverter/Helpers.cs +++ b/Application/FileConverter/Helpers.cs @@ -214,9 +214,11 @@ public static bool IsOutputTypeCompatibleWithCategory(OutputType outputType, str return category == InputCategoryNames.Video || category == InputCategoryNames.AnimatedImage; case OutputType.Avif: + case OutputType.Bmp: case OutputType.Ico: case OutputType.Jpg: case OutputType.Png: + case OutputType.Tiff: case OutputType.Webp: return category == InputCategoryNames.Image || category == InputCategoryNames.Document || category == InputCategoryNames.AnimatedImage; diff --git a/Application/FileConverter/OutputType.cs b/Application/FileConverter/OutputType.cs index 294ecdfb..ca791ff3 100644 --- a/Application/FileConverter/OutputType.cs +++ b/Application/FileConverter/OutputType.cs @@ -9,6 +9,7 @@ public enum OutputType Aac, Avi, Avif, + Bmp, Flac, Gif, Ico, @@ -20,6 +21,7 @@ public enum OutputType Ogv, Pdf, Png, + Tiff, Wav, Webm, Webp, diff --git a/Application/FileConverter/Settings.default.xml b/Application/FileConverter/Settings.default.xml index 136b2518..2e918fe6 100644 --- a/Application/FileConverter/Settings.default.xml +++ b/Application/FileConverter/Settings.default.xml @@ -579,6 +579,66 @@ (p)(f) + + xcf + arw + avif + bmp + cr2 + dds + dng + exr + heic + ico + jfif + jpg + jpeg + nef + png + psd + raf + svg + tga + tif + tiff + webp + None + + + + + (p)(f) + + + xcf + arw + avif + bmp + cr2 + dds + dng + exr + heic + ico + jfif + jpg + jpeg + nef + png + psd + raf + svg + tga + tif + tiff + webp + None + + + + + (p)(f) + xcf arw diff --git a/Application/FileConverter/ViewModels/SettingsViewModel.cs b/Application/FileConverter/ViewModels/SettingsViewModel.cs index 15d33c87..cd53aa67 100644 --- a/Application/FileConverter/ViewModels/SettingsViewModel.cs +++ b/Application/FileConverter/ViewModels/SettingsViewModel.cs @@ -85,6 +85,8 @@ public SettingsViewModel() outputTypeViewModels.Add(new OutputTypeViewModel(OutputType.Png)); outputTypeViewModels.Add(new OutputTypeViewModel(OutputType.Jpg)); outputTypeViewModels.Add(new OutputTypeViewModel(OutputType.Webp)); + outputTypeViewModels.Add(new OutputTypeViewModel(OutputType.Bmp)); + outputTypeViewModels.Add(new OutputTypeViewModel(OutputType.Tiff)); outputTypeViewModels.Add(new OutputTypeViewModel(OutputType.Ico)); outputTypeViewModels.Add(new OutputTypeViewModel(OutputType.Gif)); outputTypeViewModels.Add(new OutputTypeViewModel(OutputType.Pdf)); @@ -241,7 +243,7 @@ public Helpers.HardwareAccelerationMode[] HardwareAccelerationModes this.hardwareAccelerationModes = value; this.OnPropertyChanged(); } - } + } public ListCollectionView OutputTypes { diff --git a/Application/FileConverter/Views/Resources/ConversionPresetTemplates.xaml b/Application/FileConverter/Views/Resources/ConversionPresetTemplates.xaml index 98ddf1e7..1cc18f47 100644 --- a/Application/FileConverter/Views/Resources/ConversionPresetTemplates.xaml +++ b/Application/FileConverter/Views/Resources/ConversionPresetTemplates.xaml @@ -651,6 +651,12 @@ + + + + + +