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 {