diff --git a/src/ImageSharp/Processing/ColorMatrix/BlackWhite.cs b/src/ImageSharp/Processing/ColorMatrix/BlackWhite.cs
index a8c946a73..d64db34ba 100644
--- a/src/ImageSharp/Processing/ColorMatrix/BlackWhite.cs
+++ b/src/ImageSharp/Processing/ColorMatrix/BlackWhite.cs
@@ -1,9 +1,7 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-using System;
using SixLabors.ImageSharp.PixelFormats;
-using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors;
using SixLabors.Primitives;
diff --git a/src/ImageSharp/Processing/ColorMatrix/Filter.cs b/src/ImageSharp/Processing/ColorMatrix/Filter.cs
new file mode 100644
index 000000000..7eb684978
--- /dev/null
+++ b/src/ImageSharp/Processing/ColorMatrix/Filter.cs
@@ -0,0 +1,47 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using System.Numerics;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.ImageSharp.Processing.Processors;
+using SixLabors.Primitives;
+
+namespace SixLabors.ImageSharp
+{
+ ///
+ /// Extension methods for the type.
+ ///
+ public static partial class ImageExtensions
+ {
+ ///
+ /// Filters an image but the given color matrix
+ ///
+ /// The pixel format.
+ /// The image this method extends.
+ /// The filter color matrix
+ /// The .
+ public static IImageProcessingContext Filter(this IImageProcessingContext source, Matrix4x4 matrix)
+ where TPixel : struct, IPixel
+ {
+ source.ApplyProcessor(new FilterProcessor(matrix));
+ return source;
+ }
+
+ ///
+ /// Filters an image but the given color matrix
+ ///
+ /// The pixel format.
+ /// The image this method extends.
+ /// The filter color matrix
+ ///
+ /// The structure that specifies the portion of the image object to alter.
+ ///
+ /// The .
+ public static IImageProcessingContext Filter(this IImageProcessingContext source, Matrix4x4 matrix, Rectangle rectangle)
+ where TPixel : struct, IPixel
+ {
+ source.ApplyProcessor(new FilterProcessor(matrix), rectangle);
+ return source;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/ImageSharp/Processing/ColorMatrix/Matrix4x4Extensions.cs b/src/ImageSharp/Processing/ColorMatrix/MatrixFilters.cs
similarity index 79%
rename from src/ImageSharp/Processing/ColorMatrix/Matrix4x4Extensions.cs
rename to src/ImageSharp/Processing/ColorMatrix/MatrixFilters.cs
index 37aa0f629..8cbc21b2a 100644
--- a/src/ImageSharp/Processing/ColorMatrix/Matrix4x4Extensions.cs
+++ b/src/ImageSharp/Processing/ColorMatrix/MatrixFilters.cs
@@ -9,9 +9,126 @@ namespace SixLabors.ImageSharp.Processing
///
/// Provides extensions methods for the struct
///
- // ReSharper disable once InconsistentNaming
- public static class Matrix4x4Extensions
+ public static class MatrixFilters
{
+ ///
+ /// Gets a filter recreating Achromatomaly (Color desensitivity) color blindness
+ ///
+ public static Matrix4x4 AchromatomalyFilter { get; } = new Matrix4x4
+ {
+ M11 = .618F,
+ M12 = .163F,
+ M13 = .163F,
+ M21 = .320F,
+ M22 = .775F,
+ M23 = .320F,
+ M31 = .062F,
+ M32 = .062F,
+ M33 = .516F,
+ M44 = 1
+ };
+
+ ///
+ /// Gets a filter recreating Achromatopsia (Monochrome) color blindness.
+ ///
+ public static Matrix4x4 AchromatopsiaFilter { get; } = new Matrix4x4
+ {
+ M11 = .299F,
+ M12 = .299F,
+ M13 = .299F,
+ M21 = .587F,
+ M22 = .587F,
+ M23 = .587F,
+ M31 = .114F,
+ M32 = .114F,
+ M33 = .114F,
+ M44 = 1
+ };
+
+ ///
+ /// Gets a filter recreating Deuteranomaly (Green-Weak) color blindness.
+ ///
+ public static Matrix4x4 DeuteranomalyFilter { get; } = new Matrix4x4
+ {
+ M11 = 0.8F,
+ M12 = 0.258F,
+ M21 = 0.2F,
+ M22 = 0.742F,
+ M23 = 0.142F,
+ M33 = 0.858F,
+ M44 = 1
+ };
+
+ ///
+ /// Gets a filter recreating Deuteranopia (Green-Blind) color blindness.
+ ///
+ public static Matrix4x4 DeuteranopiaFilter { get; } = new Matrix4x4
+ {
+ M11 = 0.625F,
+ M12 = 0.7F,
+ M21 = 0.375F,
+ M22 = 0.3F,
+ M23 = 0.3F,
+ M33 = 0.7F,
+ M44 = 1
+ };
+
+ ///
+ /// Gets a filter recreating Protanomaly (Red-Weak) color blindness.
+ ///
+ public static Matrix4x4 ProtanomalyFilter { get; } = new Matrix4x4
+ {
+ M11 = 0.817F,
+ M12 = 0.333F,
+ M21 = 0.183F,
+ M22 = 0.667F,
+ M23 = 0.125F,
+ M33 = 0.875F,
+ M44 = 1
+ };
+
+ ///
+ /// Gets a filter recreating Protanopia (Red-Blind) color blindness.
+ ///
+ public static Matrix4x4 ProtanopiaFilter { get; } = new Matrix4x4
+ {
+ M11 = 0.567F,
+ M12 = 0.558F,
+ M21 = 0.433F,
+ M22 = 0.442F,
+ M23 = 0.242F,
+ M33 = 0.758F,
+ M44 = 1
+ };
+
+ ///
+ /// Gets a filter recreating Tritanomaly (Blue-Weak) color blindness.
+ ///
+ public static Matrix4x4 TritanomalyFilter { get; } = new Matrix4x4
+ {
+ M11 = 0.967F,
+ M21 = 0.33F,
+ M22 = 0.733F,
+ M23 = 0.183F,
+ M32 = 0.267F,
+ M33 = 0.817F,
+ M44 = 1
+ };
+
+ ///
+ /// Gets a filter recreating Tritanopia (Blue-Blind) color blindness.
+ ///
+ public static Matrix4x4 TritanopiaFilter { get; } = new Matrix4x4
+ {
+ M11 = 0.95F,
+ M21 = 0.05F,
+ M22 = 0.433F,
+ M23 = 0.475F,
+ M32 = 0.567F,
+ M33 = 0.525F,
+ M44 = 1
+ };
+
///
/// Gets an approximated black and white filter
///
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/AchromatomalyProcessor.cs b/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/AchromatomalyProcessor.cs
deleted file mode 100644
index 91e5c7f68..000000000
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/AchromatomalyProcessor.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) Six Labors and contributors.
-// Licensed under the Apache License, Version 2.0.
-
-using System.Numerics;
-using SixLabors.ImageSharp.PixelFormats;
-
-namespace SixLabors.ImageSharp.Processing.Processors
-{
- ///
- /// Converts the colors of the image recreating Achromatomaly (Color desensitivity) color blindness.
- ///
- /// The pixel format.
- internal class AchromatomalyProcessor : ColorMatrixProcessor
- where TPixel : struct, IPixel
- {
- ///
- public override Matrix4x4 Matrix => new Matrix4x4
- {
- M11 = .618F,
- M12 = .163F,
- M13 = .163F,
- M21 = .320F,
- M22 = .775F,
- M23 = .320F,
- M31 = .062F,
- M32 = .062F,
- M33 = .516F,
- M44 = 1
- };
-
- ///
- public override bool Compand => false;
- }
-}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/AchromatopsiaProcessor.cs b/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/AchromatopsiaProcessor.cs
deleted file mode 100644
index 0d6578852..000000000
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/AchromatopsiaProcessor.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) Six Labors and contributors.
-// Licensed under the Apache License, Version 2.0.
-
-using System.Numerics;
-using SixLabors.ImageSharp.PixelFormats;
-
-namespace SixLabors.ImageSharp.Processing.Processors
-{
- ///
- /// Converts the colors of the image recreating Achromatopsia (Monochrome) color blindness.
- ///
- /// The pixel format.
- internal class AchromatopsiaProcessor : ColorMatrixProcessor
- where TPixel : struct, IPixel
- {
- ///
- public override Matrix4x4 Matrix => new Matrix4x4
- {
- M11 = .299F,
- M12 = .299F,
- M13 = .299F,
- M21 = .587F,
- M22 = .587F,
- M23 = .587F,
- M31 = .114F,
- M32 = .114F,
- M33 = .114F,
- M44 = 1
- };
-
- ///
- public override bool Compand => false;
- }
-}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/ProtanomalyProcessor.cs b/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/ProtanomalyProcessor.cs
deleted file mode 100644
index 4e32cb529..000000000
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/ProtanomalyProcessor.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) Six Labors and contributors.
-// Licensed under the Apache License, Version 2.0.
-
-using System.Numerics;
-using SixLabors.ImageSharp.PixelFormats;
-
-namespace SixLabors.ImageSharp.Processing.Processors
-{
- ///
- /// Converts the colors of the image recreating Protanopia (Red-Weak) color blindness.
- ///
- /// The pixel format.
- internal class ProtanomalyProcessor : ColorMatrixProcessor
- where TPixel : struct, IPixel
- {
- ///
- public override Matrix4x4 Matrix => new Matrix4x4
- {
- M11 = 0.817F,
- M12 = 0.333F,
- M21 = 0.183F,
- M22 = 0.667F,
- M23 = 0.125F,
- M33 = 0.875F,
- M44 = 1
- };
-
- ///
- public override bool Compand => false;
- }
-}
\ No newline at end of file
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorMatrixProcessor.cs b/src/ImageSharp/Processing/Processors/ColorMatrix/ColorMatrixProcessor.cs
deleted file mode 100644
index 4a64bfaa0..000000000
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorMatrixProcessor.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright (c) Six Labors and contributors.
-// Licensed under the Apache License, Version 2.0.
-
-using System;
-using System.Numerics;
-using System.Threading.Tasks;
-using SixLabors.ImageSharp.Advanced;
-using SixLabors.ImageSharp.PixelFormats;
-using SixLabors.Primitives;
-
-namespace SixLabors.ImageSharp.Processing.Processors
-{
- ///
- /// The color matrix filter. Inherit from this class to perform operation involving color matrices.
- ///
- /// The pixel format.
- internal abstract class ColorMatrixProcessor : ImageProcessor, IColorMatrixProcessor
- where TPixel : struct, IPixel
- {
- ///
- public abstract Matrix4x4 Matrix { get; }
-
- ///
- public virtual bool Compand { get; set; } = true;
-
- ///
- protected override void OnApply(ImageFrame source, Rectangle sourceRectangle, Configuration configuration)
- {
- int startY = sourceRectangle.Y;
- int endY = sourceRectangle.Bottom;
- int startX = sourceRectangle.X;
- int endX = sourceRectangle.Right;
-
- // Align start/end positions.
- int minX = Math.Max(0, startX);
- int maxX = Math.Min(source.Width, endX);
- int minY = Math.Max(0, startY);
- int maxY = Math.Min(source.Height, endY);
-
- // Reset offset if necessary.
- if (minX > 0)
- {
- startX = 0;
- }
-
- if (minY > 0)
- {
- startY = 0;
- }
-
- Matrix4x4 matrix = this.Matrix;
- bool compand = this.Compand;
-
- Parallel.For(
- minY,
- maxY,
- configuration.ParallelOptions,
- y =>
- {
- Span row = source.GetPixelRowSpan(y - startY);
-
- for (int x = minX; x < maxX; x++)
- {
- ref TPixel pixel = ref row[x - startX];
- var vector = pixel.ToVector4();
-
- if (compand)
- {
- vector = vector.Expand();
- }
-
- vector = Vector4.Transform(vector, matrix);
- pixel.PackFromVector4(compand ? vector.Compress() : vector);
- }
- });
- }
- }
-}
\ No newline at end of file
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/IColorMatrixProcessor.cs b/src/ImageSharp/Processing/Processors/ColorMatrix/IColorMatrixProcessor.cs
deleted file mode 100644
index 84e7461b5..000000000
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/IColorMatrixProcessor.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) Six Labors and contributors.
-// Licensed under the Apache License, Version 2.0.
-
-using System.Numerics;
-using SixLabors.ImageSharp.PixelFormats;
-
-namespace SixLabors.ImageSharp.Processing.Processors
-{
- ///
- /// Encapsulates properties and methods for creating processors that utilize a matrix to
- /// alter the image pixels.
- ///
- /// The pixel format.
- internal interface IColorMatrixProcessor : IImageProcessor
- where TPixel : struct, IPixel
- {
- ///
- /// Gets the used to alter the image.
- ///
- Matrix4x4 Matrix { get; }
-
- ///
- /// Gets or sets a value indicating whether to compress or expand individual pixel color values on processing.
- ///
- bool Compand { get; set; }
- }
-}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/BlackWhiteProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/BlackWhiteProcessor.cs
similarity index 92%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/BlackWhiteProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/BlackWhiteProcessor.cs
index 0745b7ba7..30fcfab4f 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/BlackWhiteProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/BlackWhiteProcessor.cs
@@ -16,7 +16,7 @@ namespace SixLabors.ImageSharp.Processing.Processors
/// Initializes a new instance of the class.
///
public BlackWhiteProcessor()
- : base(Matrix4x4Extensions.BlackWhiteFilter)
+ : base(MatrixFilters.BlackWhiteFilter)
{
}
}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/BrightnessProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/BrightnessProcessor.cs
similarity index 94%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/BrightnessProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/BrightnessProcessor.cs
index 051a74ba2..b1a68a9c9 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/BrightnessProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/BrightnessProcessor.cs
@@ -21,7 +21,7 @@ namespace SixLabors.ImageSharp.Processing.Processors
///
/// The proportion of the conversion. Must be greater than or equal to 0.
public BrightnessProcessor(float amount)
- : base(Matrix4x4Extensions.CreateBrightnessFilter(amount))
+ : base(MatrixFilters.CreateBrightnessFilter(amount))
{
this.Amount = amount;
}
diff --git a/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/AchromatomalyProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/AchromatomalyProcessor.cs
new file mode 100644
index 000000000..8d9bf9857
--- /dev/null
+++ b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/AchromatomalyProcessor.cs
@@ -0,0 +1,23 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using SixLabors.ImageSharp.PixelFormats;
+
+namespace SixLabors.ImageSharp.Processing.Processors
+{
+ ///
+ /// Converts the colors of the image recreating Achromatomaly (Color desensitivity) color blindness.
+ ///
+ /// The pixel format.
+ internal class AchromatomalyProcessor : FilterProcessor
+ where TPixel : struct, IPixel
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public AchromatomalyProcessor()
+ : base(MatrixFilters.AchromatomalyFilter)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/AchromatopsiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/AchromatopsiaProcessor.cs
new file mode 100644
index 000000000..f19c55933
--- /dev/null
+++ b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/AchromatopsiaProcessor.cs
@@ -0,0 +1,23 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using SixLabors.ImageSharp.PixelFormats;
+
+namespace SixLabors.ImageSharp.Processing.Processors
+{
+ ///
+ /// Converts the colors of the image recreating Achromatopsia (Monochrome) color blindness.
+ ///
+ /// The pixel format.
+ internal class AchromatopsiaProcessor : FilterProcessor
+ where TPixel : struct, IPixel
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public AchromatopsiaProcessor()
+ : base(MatrixFilters.AchromatopsiaFilter)
+ {
+ }
+ }
+}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/DeuteranomalyProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/DeuteranomalyProcessor.cs
similarity index 50%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/DeuteranomalyProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/ColorBlindness/DeuteranomalyProcessor.cs
index c4bb41ceb..20a1d4ab4 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/DeuteranomalyProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/DeuteranomalyProcessor.cs
@@ -1,7 +1,6 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-using System.Numerics;
using SixLabors.ImageSharp.PixelFormats;
namespace SixLabors.ImageSharp.Processing.Processors
@@ -10,22 +9,15 @@ namespace SixLabors.ImageSharp.Processing.Processors
/// Converts the colors of the image recreating Deuteranomaly (Green-Weak) color blindness.
///
/// The pixel format.
- internal class DeuteranomalyProcessor : ColorMatrixProcessor
+ internal class DeuteranomalyProcessor : FilterProcessor
where TPixel : struct, IPixel
{
- ///
- public override Matrix4x4 Matrix => new Matrix4x4
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public DeuteranomalyProcessor()
+ : base(MatrixFilters.DeuteranomalyFilter)
{
- M11 = 0.8F,
- M12 = 0.258F,
- M21 = 0.2F,
- M22 = 0.742F,
- M23 = 0.142F,
- M33 = 0.858F,
- M44 = 1
- };
-
- ///
- public override bool Compand => false;
+ }
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/DeuteranopiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/DeuteranopiaProcessor.cs
similarity index 51%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/DeuteranopiaProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/ColorBlindness/DeuteranopiaProcessor.cs
index 598af12ff..e5e022571 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/DeuteranopiaProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/DeuteranopiaProcessor.cs
@@ -1,7 +1,6 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-using System.Numerics;
using SixLabors.ImageSharp.PixelFormats;
namespace SixLabors.ImageSharp.Processing.Processors
@@ -10,22 +9,15 @@ namespace SixLabors.ImageSharp.Processing.Processors
/// Converts the colors of the image recreating Deuteranopia (Green-Blind) color blindness.
///
/// The pixel format.
- internal class DeuteranopiaProcessor : ColorMatrixProcessor
+ internal class DeuteranopiaProcessor : FilterProcessor
where TPixel : struct, IPixel
{
- ///
- public override Matrix4x4 Matrix => new Matrix4x4
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public DeuteranopiaProcessor()
+ : base(MatrixFilters.DeuteranopiaFilter)
{
- M11 = 0.625F,
- M12 = 0.7F,
- M21 = 0.375F,
- M22 = 0.3F,
- M23 = 0.3F,
- M33 = 0.7F,
- M44 = 1
- };
-
- ///
- public override bool Compand => false;
+ }
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/ProtanomalyProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/ProtanomalyProcessor.cs
new file mode 100644
index 000000000..b7b61d5e5
--- /dev/null
+++ b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/ProtanomalyProcessor.cs
@@ -0,0 +1,23 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using SixLabors.ImageSharp.PixelFormats;
+
+namespace SixLabors.ImageSharp.Processing.Processors
+{
+ ///
+ /// Converts the colors of the image recreating Protanomaly (Red-Weak) color blindness.
+ ///
+ /// The pixel format.
+ internal class ProtanomalyProcessor : FilterProcessor
+ where TPixel : struct, IPixel
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public ProtanomalyProcessor()
+ : base(MatrixFilters.ProtanomalyFilter)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/ProtanopiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/ProtanopiaProcessor.cs
similarity index 53%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/ProtanopiaProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/ColorBlindness/ProtanopiaProcessor.cs
index d49b4a2cc..54753f5b5 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/ProtanopiaProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/ProtanopiaProcessor.cs
@@ -10,22 +10,15 @@ namespace SixLabors.ImageSharp.Processing.Processors
/// Converts the colors of the image recreating Protanopia (Red-Blind) color blindness.
///
/// The pixel format.
- internal class ProtanopiaProcessor : ColorMatrixProcessor
+ internal class ProtanopiaProcessor : FilterProcessor
where TPixel : struct, IPixel
{
- ///
- public override Matrix4x4 Matrix => new Matrix4x4
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public ProtanopiaProcessor()
+ : base(MatrixFilters.ProtanopiaFilter)
{
- M11 = 0.567F,
- M12 = 0.558F,
- M21 = 0.433F,
- M22 = 0.442F,
- M23 = 0.242F,
- M33 = 0.758F,
- M44 = 1
- };
-
- ///
- public override bool Compand => false;
+ }
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/README.md b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/README.md
similarity index 100%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/README.md
rename to src/ImageSharp/Processing/Processors/Filters/ColorBlindness/README.md
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/TritanomalyProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/TritanomalyProcessor.cs
similarity index 50%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/TritanomalyProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/ColorBlindness/TritanomalyProcessor.cs
index d34f22343..57f4d4fa8 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/TritanomalyProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/TritanomalyProcessor.cs
@@ -1,7 +1,6 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-using System.Numerics;
using SixLabors.ImageSharp.PixelFormats;
namespace SixLabors.ImageSharp.Processing.Processors
@@ -10,22 +9,15 @@ namespace SixLabors.ImageSharp.Processing.Processors
/// Converts the colors of the image recreating Tritanomaly (Blue-Weak) color blindness.
///
/// The pixel format.
- internal class TritanomalyProcessor : ColorMatrixProcessor
+ internal class TritanomalyProcessor : FilterProcessor
where TPixel : struct, IPixel
{
- ///
- public override Matrix4x4 Matrix => new Matrix4x4
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public TritanomalyProcessor()
+ : base(MatrixFilters.TritanomalyFilter)
{
- M11 = 0.967F,
- M21 = 0.33F,
- M22 = 0.733F,
- M23 = 0.183F,
- M32 = 0.267F,
- M33 = 0.817F,
- M44 = 1
- };
-
- ///
- public override bool Compand => false;
+ }
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/TritanopiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/TritanopiaProcessor.cs
similarity index 50%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/TritanopiaProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/ColorBlindness/TritanopiaProcessor.cs
index 453ac99a7..b03a18cf7 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorBlindness/TritanopiaProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/ColorBlindness/TritanopiaProcessor.cs
@@ -1,7 +1,6 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-using System.Numerics;
using SixLabors.ImageSharp.PixelFormats;
namespace SixLabors.ImageSharp.Processing.Processors
@@ -10,22 +9,15 @@ namespace SixLabors.ImageSharp.Processing.Processors
/// Converts the colors of the image recreating Tritanopia (Blue-Blind) color blindness.
///
/// The pixel format.
- internal class TritanopiaProcessor : ColorMatrixProcessor
+ internal class TritanopiaProcessor : FilterProcessor
where TPixel : struct, IPixel
{
- ///
- public override Matrix4x4 Matrix => new Matrix4x4
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public TritanopiaProcessor()
+ : base(MatrixFilters.TritanopiaFilter)
{
- M11 = 0.95F,
- M21 = 0.05F,
- M22 = 0.433F,
- M23 = 0.475F,
- M32 = 0.567F,
- M33 = 0.525F,
- M44 = 1
- };
-
- ///
- public override bool Compand => false;
+ }
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/ContrastProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/ContrastProcessor.cs
similarity index 94%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/ContrastProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/ContrastProcessor.cs
index a46d0c1de..8ebeb939f 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/ContrastProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/ContrastProcessor.cs
@@ -21,7 +21,7 @@ namespace SixLabors.ImageSharp.Processing.Processors
///
/// The proportion of the conversion. Must be greater than or equal to 0.
public ContrastProcessor(float amount)
- : base(Matrix4x4Extensions.CreateContrastFilter(amount))
+ : base(MatrixFilters.CreateContrastFilter(amount))
{
this.Amount = amount;
}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/FilterProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/FilterProcessor.cs
similarity index 100%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/FilterProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/FilterProcessor.cs
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/GrayscaleBt601Processor.cs b/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt601Processor.cs
similarity index 93%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/GrayscaleBt601Processor.cs
rename to src/ImageSharp/Processing/Processors/Filters/GrayscaleBt601Processor.cs
index fde0665d3..7ea52dcb9 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/GrayscaleBt601Processor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt601Processor.cs
@@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.Processing.Processors
///
/// The proportion of the conversion. Must be between 0 and 1.
public GrayscaleBt601Processor(float amount)
- : base(Matrix4x4Extensions.CreateGrayscaleBt601Filter(amount))
+ : base(MatrixFilters.CreateGrayscaleBt601Filter(amount))
{
this.Amount = amount;
}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/GrayscaleBt709Processor.cs b/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt709Processor.cs
similarity index 93%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/GrayscaleBt709Processor.cs
rename to src/ImageSharp/Processing/Processors/Filters/GrayscaleBt709Processor.cs
index 92195a30d..2d97f6584 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/GrayscaleBt709Processor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/GrayscaleBt709Processor.cs
@@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.Processing.Processors
///
/// The proportion of the conversion. Must be between 0 and 1.
public GrayscaleBt709Processor(float amount)
- : base(Matrix4x4Extensions.CreateGrayscaleBt709Filter(amount))
+ : base(MatrixFilters.CreateGrayscaleBt709Filter(amount))
{
this.Amount = amount;
}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/HueProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/HueProcessor.cs
similarity index 93%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/HueProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/HueProcessor.cs
index edb61855e..302314db4 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/HueProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/HueProcessor.cs
@@ -16,7 +16,7 @@ namespace SixLabors.ImageSharp.Processing.Processors
///
/// The angle of rotation in degrees
public HueProcessor(float degrees)
- : base(Matrix4x4Extensions.CreateHueFilter(degrees))
+ : base(MatrixFilters.CreateHueFilter(degrees))
{
this.Degrees = degrees;
}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/InvertProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/InvertProcessor.cs
similarity index 93%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/InvertProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/InvertProcessor.cs
index 1a78c22b5..e258e9d96 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/InvertProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/InvertProcessor.cs
@@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.Processing.Processors
///
/// The proportion of the conversion. Must be between 0 and 1.
public InvertProcessor(float amount)
- : base(Matrix4x4Extensions.CreateInvertFilter(amount))
+ : base(MatrixFilters.CreateInvertFilter(amount))
{
this.Amount = amount;
}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/KodachromeProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/KodachromeProcessor.cs
similarity index 92%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/KodachromeProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/KodachromeProcessor.cs
index 1f644247b..6f27a0453 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/KodachromeProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/KodachromeProcessor.cs
@@ -16,7 +16,7 @@ namespace SixLabors.ImageSharp.Processing.Processors
/// Initializes a new instance of the class.
///
public KodachromeProcessor()
- : base(Matrix4x4Extensions.KodachromeFilter)
+ : base(MatrixFilters.KodachromeFilter)
{
}
}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/LomographProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/LomographProcessor.cs
similarity index 95%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/LomographProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/LomographProcessor.cs
index 62e9e7d62..5ea57fd27 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/LomographProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/LomographProcessor.cs
@@ -22,7 +22,7 @@ namespace SixLabors.ImageSharp.Processing.Processors
///
/// The options effecting blending and composition.
public LomographProcessor(GraphicsOptions options)
- : base(Matrix4x4Extensions.LomographFilter)
+ : base(MatrixFilters.LomographFilter)
{
this.options = options;
}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/OpacityProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/OpacityProcessor.cs
similarity index 93%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/OpacityProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/OpacityProcessor.cs
index 7247cec40..1c0d2600e 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/OpacityProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/OpacityProcessor.cs
@@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.Processing.Processors
///
/// The proportion of the conversion. Must be between 0 and 1.
public OpacityProcessor(float amount)
- : base(Matrix4x4Extensions.CreateOpacityFilter(amount))
+ : base(MatrixFilters.CreateOpacityFilter(amount))
{
this.Amount = amount;
}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/PolaroidProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor.cs
similarity index 96%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/PolaroidProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor.cs
index 60a48e131..5491db7ef 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/PolaroidProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/PolaroidProcessor.cs
@@ -22,7 +22,7 @@ namespace SixLabors.ImageSharp.Processing.Processors
///
/// The options effecting blending and composition.
public PolaroidProcessor(GraphicsOptions options)
- : base(Matrix4x4Extensions.PolaroidFilter)
+ : base(MatrixFilters.PolaroidFilter)
{
this.options = options;
}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/SaturateProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/SaturateProcessor.cs
similarity index 94%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/SaturateProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/SaturateProcessor.cs
index 0a25161a8..44b3fe3ce 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/SaturateProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/SaturateProcessor.cs
@@ -21,7 +21,7 @@ namespace SixLabors.ImageSharp.Processing.Processors
///
/// The proportion of the conversion. Must be greater than or equal to 0.
public SaturateProcessor(float amount)
- : base(Matrix4x4Extensions.CreateSaturateFilter(amount))
+ : base(MatrixFilters.CreateSaturateFilter(amount))
{
this.Amount = amount;
}
diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/SepiaProcessor.cs b/src/ImageSharp/Processing/Processors/Filters/SepiaProcessor.cs
similarity index 93%
rename from src/ImageSharp/Processing/Processors/ColorMatrix/SepiaProcessor.cs
rename to src/ImageSharp/Processing/Processors/Filters/SepiaProcessor.cs
index 9cd7c6861..b30d0fe05 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/SepiaProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Filters/SepiaProcessor.cs
@@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.Processing.Processors
///
/// The proportion of the conversion. Must be between 0 and 1.
public SepiaProcessor(float amount)
- : base(Matrix4x4Extensions.CreateSepiaFilter(amount))
+ : base(MatrixFilters.CreateSepiaFilter(amount))
{
this.Amount = amount;
}
diff --git a/tests/ImageSharp.Tests/Processing/ColorMatrix/BlackWhiteTest.cs b/tests/ImageSharp.Tests/Processing/Filters/BlackWhiteTest.cs
similarity index 65%
rename from tests/ImageSharp.Tests/Processing/ColorMatrix/BlackWhiteTest.cs
rename to tests/ImageSharp.Tests/Processing/Filters/BlackWhiteTest.cs
index f6efdc9a9..4ade9fe64 100644
--- a/tests/ImageSharp.Tests/Processing/ColorMatrix/BlackWhiteTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Filters/BlackWhiteTest.cs
@@ -1,12 +1,10 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
-using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing.Processors;
-using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Filters
{
public class BlackWhiteTest : BaseImageOperationsExtensionTest
{
@@ -14,14 +12,14 @@ namespace SixLabors.ImageSharp.Tests.Processing.ColorMatrix
public void BlackWhite_CorrectProcessor()
{
this.operations.BlackWhite();
- var p = this.Verify>();
+ BlackWhiteProcessor p = this.Verify>();
}
[Fact]
public void BlackWhite_rect_CorrectProcessor()
{
this.operations.BlackWhite( this.rect);
- var p = this.Verify>(this.rect);
+ BlackWhiteProcessor p = this.Verify>(this.rect);
}
}
}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Processing/ColorMatrix/BrightnessTest.cs b/tests/ImageSharp.Tests/Processing/Filters/BrightnessTest.cs
similarity index 100%
rename from tests/ImageSharp.Tests/Processing/ColorMatrix/BrightnessTest.cs
rename to tests/ImageSharp.Tests/Processing/Filters/BrightnessTest.cs
diff --git a/tests/ImageSharp.Tests/Processing/ColorMatrix/ColorBlindnessTest.cs b/tests/ImageSharp.Tests/Processing/Filters/ColorBlindnessTest.cs
similarity index 97%
rename from tests/ImageSharp.Tests/Processing/ColorMatrix/ColorBlindnessTest.cs
rename to tests/ImageSharp.Tests/Processing/Filters/ColorBlindnessTest.cs
index cc80e32d5..2dc695f56 100644
--- a/tests/ImageSharp.Tests/Processing/ColorMatrix/ColorBlindnessTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Filters/ColorBlindnessTest.cs
@@ -9,7 +9,7 @@ using SixLabors.ImageSharp.Tests.TestUtilities;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Filters
{
public class ColorBlindnessTest : BaseImageOperationsExtensionTest
{
diff --git a/tests/ImageSharp.Tests/Processing/ColorMatrix/ContrastTest.cs b/tests/ImageSharp.Tests/Processing/Filters/ContrastTest.cs
similarity index 100%
rename from tests/ImageSharp.Tests/Processing/ColorMatrix/ContrastTest.cs
rename to tests/ImageSharp.Tests/Processing/Filters/ContrastTest.cs
diff --git a/tests/ImageSharp.Tests/Processing/Filters/FilterTest.cs b/tests/ImageSharp.Tests/Processing/Filters/FilterTest.cs
new file mode 100644
index 000000000..d1e9c0ba0
--- /dev/null
+++ b/tests/ImageSharp.Tests/Processing/Filters/FilterTest.cs
@@ -0,0 +1,26 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using SixLabors.ImageSharp.Processing;
+using SixLabors.ImageSharp.Processing.Processors;
+using Xunit;
+
+namespace SixLabors.ImageSharp.Tests.Processing.Filters
+{
+ public class FilterTest : BaseImageOperationsExtensionTest
+ {
+ [Fact]
+ public void Filter_CorrectProcessor()
+ {
+ this.operations.Filter(MatrixFilters.AchromatomalyFilter * MatrixFilters.CreateHueFilter(90F));
+ FilterProcessor p = this.Verify>();
+ }
+
+ [Fact]
+ public void Filter_rect_CorrectProcessor()
+ {
+ this.operations.Filter(MatrixFilters.AchromatomalyFilter * MatrixFilters.CreateHueFilter(90F), this.rect);
+ FilterProcessor p = this.Verify>(this.rect);
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Processing/ColorMatrix/GrayscaleTest.cs b/tests/ImageSharp.Tests/Processing/Filters/GrayscaleTest.cs
similarity index 96%
rename from tests/ImageSharp.Tests/Processing/ColorMatrix/GrayscaleTest.cs
rename to tests/ImageSharp.Tests/Processing/Filters/GrayscaleTest.cs
index 14697c623..80c377eb1 100644
--- a/tests/ImageSharp.Tests/Processing/ColorMatrix/GrayscaleTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Filters/GrayscaleTest.cs
@@ -10,7 +10,7 @@ using SixLabors.ImageSharp.Tests.TestUtilities;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Filters
{
public class GrayscaleTest : BaseImageOperationsExtensionTest
{
diff --git a/tests/ImageSharp.Tests/Processing/ColorMatrix/HueTest.cs b/tests/ImageSharp.Tests/Processing/Filters/HueTest.cs
similarity index 93%
rename from tests/ImageSharp.Tests/Processing/ColorMatrix/HueTest.cs
rename to tests/ImageSharp.Tests/Processing/Filters/HueTest.cs
index b8da495ca..bf03ee4f8 100644
--- a/tests/ImageSharp.Tests/Processing/ColorMatrix/HueTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Filters/HueTest.cs
@@ -6,7 +6,7 @@ using SixLabors.ImageSharp.Processing.Processors;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Filters
{
public class HueTest : BaseImageOperationsExtensionTest
{
diff --git a/tests/ImageSharp.Tests/Processing/ColorMatrix/InvertTest.cs b/tests/ImageSharp.Tests/Processing/Filters/InvertTest.cs
similarity index 100%
rename from tests/ImageSharp.Tests/Processing/ColorMatrix/InvertTest.cs
rename to tests/ImageSharp.Tests/Processing/Filters/InvertTest.cs
diff --git a/tests/ImageSharp.Tests/Processing/ColorMatrix/KodachromeTest.cs b/tests/ImageSharp.Tests/Processing/Filters/KodachromeTest.cs
similarity index 92%
rename from tests/ImageSharp.Tests/Processing/ColorMatrix/KodachromeTest.cs
rename to tests/ImageSharp.Tests/Processing/Filters/KodachromeTest.cs
index 61a4124c9..b3731d43c 100644
--- a/tests/ImageSharp.Tests/Processing/ColorMatrix/KodachromeTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Filters/KodachromeTest.cs
@@ -6,7 +6,7 @@ using SixLabors.ImageSharp.Processing.Processors;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Filters
{
public class KodachromeTest : BaseImageOperationsExtensionTest
{
diff --git a/tests/ImageSharp.Tests/Processing/ColorMatrix/LomographTest.cs b/tests/ImageSharp.Tests/Processing/Filters/LomographTest.cs
similarity index 100%
rename from tests/ImageSharp.Tests/Processing/ColorMatrix/LomographTest.cs
rename to tests/ImageSharp.Tests/Processing/Filters/LomographTest.cs
diff --git a/tests/ImageSharp.Tests/Processing/ColorMatrix/OpacityTest.cs b/tests/ImageSharp.Tests/Processing/Filters/OpacityTest.cs
similarity index 100%
rename from tests/ImageSharp.Tests/Processing/ColorMatrix/OpacityTest.cs
rename to tests/ImageSharp.Tests/Processing/Filters/OpacityTest.cs
diff --git a/tests/ImageSharp.Tests/Processing/ColorMatrix/PolaroidTest.cs b/tests/ImageSharp.Tests/Processing/Filters/PolaroidTest.cs
similarity index 92%
rename from tests/ImageSharp.Tests/Processing/ColorMatrix/PolaroidTest.cs
rename to tests/ImageSharp.Tests/Processing/Filters/PolaroidTest.cs
index 10433aa9b..5661851a5 100644
--- a/tests/ImageSharp.Tests/Processing/ColorMatrix/PolaroidTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Filters/PolaroidTest.cs
@@ -6,7 +6,7 @@ using SixLabors.ImageSharp.Processing.Processors;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Filters
{
public class PolaroidTest : BaseImageOperationsExtensionTest
{
diff --git a/tests/ImageSharp.Tests/Processing/ColorMatrix/SaturateTest.cs b/tests/ImageSharp.Tests/Processing/Filters/SaturateTest.cs
similarity index 93%
rename from tests/ImageSharp.Tests/Processing/ColorMatrix/SaturateTest.cs
rename to tests/ImageSharp.Tests/Processing/Filters/SaturateTest.cs
index abac9fc1c..e3b9e3d3b 100644
--- a/tests/ImageSharp.Tests/Processing/ColorMatrix/SaturateTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Filters/SaturateTest.cs
@@ -4,7 +4,7 @@
using SixLabors.ImageSharp.Processing.Processors;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Filters
{
public class SaturateTest : BaseImageOperationsExtensionTest
{
diff --git a/tests/ImageSharp.Tests/Processing/ColorMatrix/SepiaTest.cs b/tests/ImageSharp.Tests/Processing/Filters/SepiaTest.cs
similarity index 92%
rename from tests/ImageSharp.Tests/Processing/ColorMatrix/SepiaTest.cs
rename to tests/ImageSharp.Tests/Processing/Filters/SepiaTest.cs
index b2117b94a..498331388 100644
--- a/tests/ImageSharp.Tests/Processing/ColorMatrix/SepiaTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Filters/SepiaTest.cs
@@ -6,7 +6,7 @@ using SixLabors.ImageSharp.Processing.Processors;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Filters
{
public class SepiaTest : BaseImageOperationsExtensionTest
{
diff --git a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/BlackWhiteTest.cs b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/BlackWhiteTest.cs
index c3250ccfc..c0481809a 100644
--- a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/BlackWhiteTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/BlackWhiteTest.cs
@@ -7,7 +7,7 @@ using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.Processors.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{
public class BlackWhiteTest : FileTestBase
{
diff --git a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/ColorBlindnessTest.cs b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/ColorBlindnessTest.cs
index 122ff5a64..cbc4a2810 100644
--- a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/ColorBlindnessTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/ColorBlindnessTest.cs
@@ -8,7 +8,7 @@ using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.Processors.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{
public class ColorBlindnessTest : FileTestBase
{
diff --git a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/FilterTest.cs b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/FilterTest.cs
new file mode 100644
index 000000000..cae8d1296
--- /dev/null
+++ b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/FilterTest.cs
@@ -0,0 +1,44 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.ImageSharp.Processing;
+using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
+
+using SixLabors.Primitives;
+using Xunit;
+
+namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
+{
+ public class FilterTest : FileTestBase
+ {
+ [Theory]
+ [WithFileCollection(nameof(DefaultFiles), DefaultPixelType)]
+ public void ImageShouldApplyFilter(TestImageProvider provider)
+ where TPixel : struct, IPixel
+ {
+ using (Image image = provider.GetImage())
+ {
+ image.Mutate(x => x.Filter(MatrixFilters.CreateBrightnessFilter(1.2F) * MatrixFilters.CreateContrastFilter(1.2F)));
+ image.DebugSave(provider);
+ }
+ }
+
+ [Theory]
+ [WithFileCollection(nameof(DefaultFiles), DefaultPixelType)]
+ public void ImageShouldApplyFilterInBox(TestImageProvider provider)
+ where TPixel : struct, IPixel
+ {
+ using (Image source = provider.GetImage())
+ using (Image image = source.Clone())
+ {
+ var bounds = new Rectangle(10, 10, image.Width / 2, image.Height / 2);
+
+ image.Mutate(x => x.Filter(MatrixFilters.CreateBrightnessFilter(1.2F) * MatrixFilters.CreateContrastFilter(1.2F), bounds));
+ image.DebugSave(provider);
+
+ ImageComparer.Tolerant().VerifySimilarityIgnoreRegion(source, image, bounds);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/GrayscaleTest.cs b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/GrayscaleTest.cs
index 0fbc54b8f..c870659a6 100644
--- a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/GrayscaleTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/GrayscaleTest.cs
@@ -9,7 +9,7 @@ using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.Processors.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{
public class GrayscaleTest : FileTestBase
{
diff --git a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/HueTest.cs b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/HueTest.cs
index 5a1ea16a7..743d46efa 100644
--- a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/HueTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/HueTest.cs
@@ -7,7 +7,7 @@ using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.Processors.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{
public class HueTest : FileTestBase
{
diff --git a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/KodachromeTest.cs b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/KodachromeTest.cs
index ebf163ab8..587ff0c01 100644
--- a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/KodachromeTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/KodachromeTest.cs
@@ -7,7 +7,7 @@ using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.Processors.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{
public class KodachromeTest : FileTestBase
{
diff --git a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/LomographTest.cs b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/LomographTest.cs
index 48a58580a..7087ac7b9 100644
--- a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/LomographTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/LomographTest.cs
@@ -7,7 +7,7 @@ using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.Processors.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{
public class LomographTest : FileTestBase
{
diff --git a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/PolaroidTest.cs b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/PolaroidTest.cs
index 2e61e3f02..57d6cdd1d 100644
--- a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/PolaroidTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/PolaroidTest.cs
@@ -7,7 +7,7 @@ using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.Processors.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{
public class PolaroidTest : FileTestBase
{
diff --git a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/SaturateTest.cs b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/SaturateTest.cs
index 4ef39a8ab..b9e2c3f0f 100644
--- a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/SaturateTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/SaturateTest.cs
@@ -7,7 +7,7 @@ using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.Processors.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{
public class SaturateTest : FileTestBase
{
diff --git a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/SepiaTest.cs b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/SepiaTest.cs
index 28b1f6256..71a35a773 100644
--- a/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/SepiaTest.cs
+++ b/tests/ImageSharp.Tests/Processing/Processors/ColorMatrix/SepiaTest.cs
@@ -7,7 +7,7 @@ using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using SixLabors.Primitives;
using Xunit;
-namespace SixLabors.ImageSharp.Tests.Processing.Processors.ColorMatrix
+namespace SixLabors.ImageSharp.Tests.Processing.Processors.Filters
{
public class SepiaTest : FileTestBase
{