diff --git a/src/ImageProcessor/Filters/ColorMatrix/BlackWhite.cs b/src/ImageProcessor/Filters/ColorMatrix/BlackWhite.cs index e1fc20b70..f1c8c78d8 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/BlackWhite.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/BlackWhite.cs @@ -15,7 +15,7 @@ namespace ImageProcessor.Filters /// /// The BlackWhite matrix. /// - private static readonly Matrix4x4 Matrix = new Matrix4x4() + private static readonly Matrix4x4 ColorMatrix = new Matrix4x4() { M11 = 1.5f, M12 = 1.5f, @@ -35,7 +35,7 @@ namespace ImageProcessor.Filters /// Initializes a new instance of the class. /// public BlackWhite() - : base(Matrix) + : base(ColorMatrix) { } } diff --git a/src/ImageProcessor/Filters/ColorMatrix/ColorMatrixFilter.cs b/src/ImageProcessor/Filters/ColorMatrix/ColorMatrixFilter.cs index 730d212ff..337dd7b57 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/ColorMatrixFilter.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/ColorMatrixFilter.cs @@ -11,7 +11,7 @@ namespace ImageProcessor.Filters /// /// The color matrix filter. /// - public class ColorMatrixFilter : ParallelImageProcessor + public class ColorMatrixFilter : ParallelImageProcessor, IColorMatrixFilter { /// /// Initializes a new instance of the class. @@ -26,13 +26,11 @@ namespace ImageProcessor.Filters /// The to apply. public ColorMatrixFilter(Matrix4x4 matrix) { - this.Value = matrix; + this.Matrix = matrix; } - /// - /// Gets or sets the matrix value. - /// - public Matrix4x4 Value { get; set; } + /// + public Matrix4x4 Matrix { get; set; } /// protected override void Apply(ImageBase target, ImageBase source, Rectangle targetRectangle, Rectangle sourceRectangle, int startY, int endY) @@ -41,7 +39,7 @@ namespace ImageProcessor.Filters int sourceBottom = sourceRectangle.Bottom; int startX = sourceRectangle.X; int endX = sourceRectangle.Right; - Matrix4x4 matrix = this.Value; + Matrix4x4 matrix = this.Matrix; Parallel.For( startY, diff --git a/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt601.cs b/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt601.cs index 7c9a6b7d9..25bc63213 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt601.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt601.cs @@ -16,7 +16,7 @@ namespace ImageProcessor.Filters /// /// The greyscale matrix. /// - private static readonly Matrix4x4 Matrix = new Matrix4x4() + private static readonly Matrix4x4 ColorMatrix = new Matrix4x4() { M11 = .299f, M12 = .299f, @@ -33,7 +33,7 @@ namespace ImageProcessor.Filters /// Initializes a new instance of the class. /// public GreyscaleBt601() - : base(Matrix) + : base(ColorMatrix) { } } diff --git a/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt709.cs b/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt709.cs index b2f1834c7..7e4559f83 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt709.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt709.cs @@ -16,7 +16,7 @@ namespace ImageProcessor.Filters /// /// The greyscale matrix. /// - private static readonly Matrix4x4 Matrix = new Matrix4x4() + private static readonly Matrix4x4 ColorMatrix = new Matrix4x4() { M11 = .2126f, M12 = .2126f, @@ -33,7 +33,7 @@ namespace ImageProcessor.Filters /// Initializes a new instance of the class. /// public GreyscaleBt709() - : base(Matrix) + : base(ColorMatrix) { } } diff --git a/src/ImageProcessor/Filters/ColorMatrix/IColorMatrixFilter.cs b/src/ImageProcessor/Filters/ColorMatrix/IColorMatrixFilter.cs new file mode 100644 index 000000000..fdc0fcafa --- /dev/null +++ b/src/ImageProcessor/Filters/ColorMatrix/IColorMatrixFilter.cs @@ -0,0 +1,21 @@ +// +// Copyright (c) James South and contributors. +// Licensed under the Apache License, Version 2.0. +// + +namespace ImageProcessor.Filters +{ + using System.Numerics; + + /// + /// Encapsulates properties and methods for creating processors that utilize a matrix to + /// alter the image pixels. + /// + public interface IColorMatrixFilter + { + /// + /// Gets the used to alter the image. + /// + Matrix4x4 Matrix { get; } + } +} diff --git a/src/ImageProcessor/Filters/ColorMatrix/Kodachrome.cs b/src/ImageProcessor/Filters/ColorMatrix/Kodachrome.cs index 4468ec70e..464c3fcf6 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/Kodachrome.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/Kodachrome.cs @@ -15,7 +15,7 @@ namespace ImageProcessor.Filters /// /// The Kodachrome matrix. Purely artistic in composition. /// - private static readonly Matrix4x4 Matrix = new Matrix4x4() + private static readonly Matrix4x4 ColorMatrix = new Matrix4x4() { M11 = 0.6997023f, M22 = 0.4609577f, @@ -29,7 +29,7 @@ namespace ImageProcessor.Filters /// Initializes a new instance of the class. /// public Kodachrome() - : base(Matrix) + : base(ColorMatrix) { } } diff --git a/src/ImageProcessor/Filters/ColorMatrix/Lomograph.cs b/src/ImageProcessor/Filters/ColorMatrix/Lomograph.cs index 870c0d4a2..399c61e1d 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/Lomograph.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/Lomograph.cs @@ -15,7 +15,7 @@ namespace ImageProcessor.Filters /// /// The Lomograph matrix. Purely artistic in composition. /// - private static readonly Matrix4x4 Matrix = new Matrix4x4() + private static readonly Matrix4x4 ColorMatrix = new Matrix4x4() { M11 = 1.5f, M22 = 1.45f, @@ -29,7 +29,7 @@ namespace ImageProcessor.Filters /// Initializes a new instance of the class. /// public Lomograph() - : base(Matrix) + : base(ColorMatrix) { } } diff --git a/src/ImageProcessor/Filters/ColorMatrix/Polaroid.cs b/src/ImageProcessor/Filters/ColorMatrix/Polaroid.cs index 3c190a836..c4661033e 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/Polaroid.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/Polaroid.cs @@ -14,9 +14,8 @@ namespace ImageProcessor.Filters { /// /// The Polaroid matrix. Purely artistic in composition. - /// TODO: Calculate a matrix that works in the linear color space. /// - private static readonly Matrix4x4 Matrix = new Matrix4x4() + private static readonly Matrix4x4 ColorMatrix = new Matrix4x4() { M11 = 1.538f, M12 = -0.062f, @@ -36,7 +35,7 @@ namespace ImageProcessor.Filters /// Initializes a new instance of the class. /// public Polaroid() - : base(Matrix) + : base(ColorMatrix) { } } diff --git a/src/ImageProcessor/Filters/ColorMatrix/Saturation.cs b/src/ImageProcessor/Filters/ColorMatrix/Saturation.cs index 17a932cf2..55bb06e1e 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/Saturation.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/Saturation.cs @@ -50,7 +50,7 @@ namespace ImageProcessor.Filters M33 = saturationComplementB + saturationFactor, }; - this.Value = matrix; + this.Matrix = matrix; } } } diff --git a/src/ImageProcessor/Filters/ColorMatrix/Sepia.cs b/src/ImageProcessor/Filters/ColorMatrix/Sepia.cs index 73cc4b312..fbc33a7f3 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/Sepia.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/Sepia.cs @@ -15,7 +15,7 @@ namespace ImageProcessor.Filters /// /// The sepia matrix. /// - private static readonly Matrix4x4 Matrix = new Matrix4x4() + private static readonly Matrix4x4 ColorMatrix = new Matrix4x4() { M11 = .393f, M12 = .349f, @@ -32,7 +32,7 @@ namespace ImageProcessor.Filters /// Initializes a new instance of the class. /// public Sepia() - : base(Matrix) + : base(ColorMatrix) { } } diff --git a/src/ImageProcessor/Settings.StyleCop b/src/ImageProcessor/Settings.StyleCop index af9369585..dd461b1f1 100644 --- a/src/ImageProcessor/Settings.StyleCop +++ b/src/ImageProcessor/Settings.StyleCop @@ -18,6 +18,7 @@ lomograph polaroid colorspace + kodachrome \ No newline at end of file diff --git a/tests/ImageProcessor.Tests/Processors/Filters/FilterTests.cs b/tests/ImageProcessor.Tests/Processors/Filters/FilterTests.cs index 42b1d7076..c5fb051d7 100644 --- a/tests/ImageProcessor.Tests/Processors/Filters/FilterTests.cs +++ b/tests/ImageProcessor.Tests/Processors/Filters/FilterTests.cs @@ -12,22 +12,22 @@ namespace ImageProcessor.Tests { public static readonly TheoryData Filters = new TheoryData { - //{ "Brightness-50", new Brightness(50) }, - //{ "Brightness--50", new Brightness(-50) }, - //{ "Contrast-50", new Contrast(50) }, - //{ "Contrast--50", new Contrast(-50) }, - //{ "Blend", new Blend(new Image(File.OpenRead("../../TestImages/Formats/Bmp/Car.bmp")),15)}, - //{ "Saturation-50", new Saturation(50) }, - //{ "Saturation--50", new Saturation(-50) }, - //{ "Alpha--50", new Alpha(50) }, - //{ "Invert", new Invert() }, - //{ "Sepia", new Sepia() }, - //{ "BlackWhite", new BlackWhite() }, - //{ "Lomograph", new Lomograph() }, - //{ "Polaroid", new Polaroid() }, - //{ "Kodachrome", new Kodachrome() }, - //{ "GreyscaleBt709", new GreyscaleBt709() }, - //{ "GreyscaleBt601", new GreyscaleBt601() },` + { "Brightness-50", new Brightness(50) }, + { "Brightness--50", new Brightness(-50) }, + { "Contrast-50", new Contrast(50) }, + { "Contrast--50", new Contrast(-50) }, + { "Blend", new Blend(new Image(File.OpenRead("../../TestImages/Formats/Bmp/Car.bmp")),15)}, + { "Saturation-50", new Saturation(50) }, + { "Saturation--50", new Saturation(-50) }, + { "Alpha--50", new Alpha(50) }, + { "Invert", new Invert() }, + { "Sepia", new Sepia() }, + { "BlackWhite", new BlackWhite() }, + { "Lomograph", new Lomograph() }, + { "Polaroid", new Polaroid() }, + { "Kodachrome", new Kodachrome() }, + { "GreyscaleBt709", new GreyscaleBt709() }, + { "GreyscaleBt601", new GreyscaleBt601() }, { "Kayyali", new Kayyali() }, { "Kirsch", new Kirsch() }, { "Laplacian3X3", new Laplacian3X3() }, diff --git a/tests/ImageProcessor.Tests/Processors/ProcessorTestBase.cs b/tests/ImageProcessor.Tests/Processors/ProcessorTestBase.cs index d7580defb..0e33d5438 100644 --- a/tests/ImageProcessor.Tests/Processors/ProcessorTestBase.cs +++ b/tests/ImageProcessor.Tests/Processors/ProcessorTestBase.cs @@ -19,20 +19,20 @@ namespace ImageProcessor.Tests /// public static readonly List Files = new List { - //"../../TestImages/Formats/Jpg/Backdrop.jpg", + "../../TestImages/Formats/Jpg/Backdrop.jpg", "../../TestImages/Formats/Jpg/Calliphora.jpg", "../../TestImages/Formats/Jpg/lomo.jpg", "../../TestImages/Formats/Jpg/shaftesbury.jpg", - //"../../TestImages/Formats/Jpg/gamma_dalai_lama_gray.jpg", - //"../../TestImages/Formats/Jpg/greyscale.jpg", - //"../../TestImages/Formats/Bmp/Car.bmp", - //"../../TestImages/Formats/Png/cmyk.png", - //"../../TestImages/Formats/Png/gamma-1.0-or-2.2.png", - //"../../TestImages/Formats/Png/splash.png", - //"../../TestImages/Formats/Gif/leaf.gif", - //"../../TestImages/Formats/Gif/rings.gif", - //"../../TestImages/Formats/Gif/ani2.gif", - //"../../TestImages/Formats/Gif/giphy.gif" + "../../TestImages/Formats/Jpg/gamma_dalai_lama_gray.jpg", + "../../TestImages/Formats/Jpg/greyscale.jpg", + "../../TestImages/Formats/Bmp/Car.bmp", + "../../TestImages/Formats/Png/cmyk.png", + "../../TestImages/Formats/Png/gamma-1.0-or-2.2.png", + "../../TestImages/Formats/Png/splash.png", + "../../TestImages/Formats/Gif/leaf.gif", + "../../TestImages/Formats/Gif/rings.gif", + "../../TestImages/Formats/Gif/ani2.gif", + "../../TestImages/Formats/Gif/giphy.gif" }; } }