From d95f5e30adeca5ceedc7aeccb198e61ade189401 Mon Sep 17 00:00:00 2001 From: Jaex Date: Sun, 10 Oct 2021 13:17:20 +0300 Subject: [PATCH] Added Threshold option --- ShareX.HelpersLib/Helpers/ImageHelpers.cs | 12 ++++++++++-- ShareX.ImageEffectsLib/Adjustments/ReplaceColor.cs | 5 ++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ShareX.HelpersLib/Helpers/ImageHelpers.cs b/ShareX.HelpersLib/Helpers/ImageHelpers.cs index ee43faea6..0d7355d16 100644 --- a/ShareX.HelpersLib/Helpers/ImageHelpers.cs +++ b/ShareX.HelpersLib/Helpers/ImageHelpers.cs @@ -2325,7 +2325,7 @@ public static void SelectiveColor(Bitmap bmp, Color lightColor, Color darkColor, } } - public static void ReplaceColor(Bitmap bmp, Color sourceColor, Color targetColor, bool autoSourceColor = false) + public static void ReplaceColor(Bitmap bmp, Color sourceColor, Color targetColor, bool autoSourceColor = false, int threshold = 0) { ColorBgra sourceBgra = new ColorBgra(sourceColor); ColorBgra targetBgra = new ColorBgra(targetColor); @@ -2335,13 +2335,21 @@ public static void ReplaceColor(Bitmap bmp, Color sourceColor, Color targetColor if (autoSourceColor) { sourceBgra = unsafeBitmap.GetPixel(0); + sourceColor = sourceBgra.ToColor(); } for (int i = 0; i < unsafeBitmap.PixelCount; i++) { ColorBgra color = unsafeBitmap.GetPixel(i); - if (color == sourceBgra) + if (threshold == 0) + { + if (color == sourceBgra) + { + unsafeBitmap.SetPixel(i, targetBgra); + } + } + else if (ColorHelpers.ColorsAreClose(color.ToColor(), sourceColor, threshold)) { unsafeBitmap.SetPixel(i, targetBgra); } diff --git a/ShareX.ImageEffectsLib/Adjustments/ReplaceColor.cs b/ShareX.ImageEffectsLib/Adjustments/ReplaceColor.cs index 9ed17b51d..10d89773f 100644 --- a/ShareX.ImageEffectsLib/Adjustments/ReplaceColor.cs +++ b/ShareX.ImageEffectsLib/Adjustments/ReplaceColor.cs @@ -42,6 +42,9 @@ internal class ReplaceColor : ImageEffect [DefaultValue(typeof(Color), "Transparent"), Editor(typeof(MyColorEditor), typeof(UITypeEditor)), TypeConverter(typeof(MyColorConverter))] public Color TargetColor { get; set; } + [DefaultValue(0)] + public int Threshold { get; set; } + public ReplaceColor() { this.ApplyDefaultPropertyValues(); @@ -49,7 +52,7 @@ public ReplaceColor() public override Bitmap Apply(Bitmap bmp) { - ImageHelpers.ReplaceColor(bmp, SourceColor, TargetColor, AutoSourceColor); + ImageHelpers.ReplaceColor(bmp, SourceColor, TargetColor, AutoSourceColor, Threshold); return bmp; } }