diff --git a/src/ImageSharp/Drawing/Processors/DrawImageProcessor.cs b/src/ImageSharp/Drawing/Processors/DrawImageProcessor.cs index 05cc7b0dd9..535635a45a 100644 --- a/src/ImageSharp/Drawing/Processors/DrawImageProcessor.cs +++ b/src/ImageSharp/Drawing/Processors/DrawImageProcessor.cs @@ -13,7 +13,7 @@ namespace ImageSharp.Processors /// Combines two images together by blending the pixels. /// /// The pixel format. - public class DrawImageProcessor : ImageFilteringProcessor + public class DrawImageProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Drawing/Processors/DrawPathProcessor.cs b/src/ImageSharp/Drawing/Processors/DrawPathProcessor.cs index dab0baa5a2..a472b6fe6b 100644 --- a/src/ImageSharp/Drawing/Processors/DrawPathProcessor.cs +++ b/src/ImageSharp/Drawing/Processors/DrawPathProcessor.cs @@ -20,8 +20,8 @@ namespace ImageSharp.Drawing.Processors /// Draws a path using the processor pipeline /// /// The type of the color. - /// - public class DrawPathProcessor : ImageFilteringProcessor + /// + public class DrawPathProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { private const float AntialiasFactor = 1f; diff --git a/src/ImageSharp/Drawing/Processors/FillProcessor.cs b/src/ImageSharp/Drawing/Processors/FillProcessor.cs index a2cf12fddf..9a44fc2abc 100644 --- a/src/ImageSharp/Drawing/Processors/FillProcessor.cs +++ b/src/ImageSharp/Drawing/Processors/FillProcessor.cs @@ -16,7 +16,7 @@ namespace ImageSharp.Drawing.Processors /// Using the bursh as a source of pixels colors blends the brush color with source. /// /// The pixel format. - public class FillProcessor : ImageFilteringProcessor + public class FillProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Drawing/Processors/FillShapeProcessor.cs b/src/ImageSharp/Drawing/Processors/FillShapeProcessor.cs index 7da2e041a2..078cffe347 100644 --- a/src/ImageSharp/Drawing/Processors/FillShapeProcessor.cs +++ b/src/ImageSharp/Drawing/Processors/FillShapeProcessor.cs @@ -17,8 +17,8 @@ namespace ImageSharp.Drawing.Processors /// Usinf a brsuh and a shape fills shape with contents of brush the /// /// The type of the color. - /// - public class FillShapeProcessor : ImageFilteringProcessor + /// + public class FillShapeProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { private const float AntialiasFactor = 1f; diff --git a/src/ImageSharp/Filters/ColorMatrix/ColorBlindness.cs b/src/ImageSharp/Filters/ColorMatrix/ColorBlindness.cs index bb30492a7f..d0c61bd739 100644 --- a/src/ImageSharp/Filters/ColorMatrix/ColorBlindness.cs +++ b/src/ImageSharp/Filters/ColorMatrix/ColorBlindness.cs @@ -40,7 +40,7 @@ namespace ImageSharp public static Image ColorBlindness(this Image source, ColorBlindness colorBlindness, Rectangle rectangle) where TColor : struct, IPackedPixel, IEquatable { - IImageFilteringProcessor processor; + IImageProcessor processor; switch (colorBlindness) { diff --git a/src/ImageSharp/Filters/ColorMatrix/Grayscale.cs b/src/ImageSharp/Filters/ColorMatrix/Grayscale.cs index fa024a8527..d98ce27b9a 100644 --- a/src/ImageSharp/Filters/ColorMatrix/Grayscale.cs +++ b/src/ImageSharp/Filters/ColorMatrix/Grayscale.cs @@ -40,8 +40,8 @@ namespace ImageSharp public static Image Grayscale(this Image source, Rectangle rectangle, GrayscaleMode mode = GrayscaleMode.Bt709) where TColor : struct, IPackedPixel, IEquatable { - IImageFilteringProcessor processor = mode == GrayscaleMode.Bt709 - ? (IImageFilteringProcessor)new GrayscaleBt709Processor() + IImageProcessor processor = mode == GrayscaleMode.Bt709 + ? (IImageProcessor)new GrayscaleBt709Processor() : new GrayscaleBt601Processor(); return source.Process(rectangle, processor); diff --git a/src/ImageSharp/Filters/Processors/Binarization/BinaryThresholdProcessor.cs b/src/ImageSharp/Filters/Processors/Binarization/BinaryThresholdProcessor.cs index baf9c36ca0..8a042c3596 100644 --- a/src/ImageSharp/Filters/Processors/Binarization/BinaryThresholdProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Binarization/BinaryThresholdProcessor.cs @@ -9,11 +9,11 @@ namespace ImageSharp.Processors using System.Threading.Tasks; /// - /// An to perform binary threshold filtering against an + /// An to perform binary threshold filtering against an /// . The image will be converted to grayscale before thresholding occurs. /// /// The pixel format. - public class BinaryThresholdProcessor : ImageFilteringProcessor + public class BinaryThresholdProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/ColorMatrix/ColorMatrixFilter.cs b/src/ImageSharp/Filters/Processors/ColorMatrix/ColorMatrixFilter.cs index a3e54cdbb9..67f9525f74 100644 --- a/src/ImageSharp/Filters/Processors/ColorMatrix/ColorMatrixFilter.cs +++ b/src/ImageSharp/Filters/Processors/ColorMatrix/ColorMatrixFilter.cs @@ -13,7 +13,7 @@ namespace ImageSharp.Processors /// The color matrix filter. Inherit from this class to perform operation involving color matrices. /// /// The pixel format. - public abstract class ColorMatrixFilter : ImageFilteringProcessor, IColorMatrixFilter + public abstract class ColorMatrixFilter : ImageProcessor, IColorMatrixFilter where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/ColorMatrix/IColorMatrixFilter.cs b/src/ImageSharp/Filters/Processors/ColorMatrix/IColorMatrixFilter.cs index 9fcda4b95a..295a0d9720 100644 --- a/src/ImageSharp/Filters/Processors/ColorMatrix/IColorMatrixFilter.cs +++ b/src/ImageSharp/Filters/Processors/ColorMatrix/IColorMatrixFilter.cs @@ -13,7 +13,7 @@ namespace ImageSharp.Processors /// alter the image pixels. /// /// The pixel format. - public interface IColorMatrixFilter : IImageFilteringProcessor + public interface IColorMatrixFilter : IImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Convolution/BoxBlurProcessor.cs b/src/ImageSharp/Filters/Processors/Convolution/BoxBlurProcessor.cs index 7780992bbe..98ab075f1d 100644 --- a/src/ImageSharp/Filters/Processors/Convolution/BoxBlurProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Convolution/BoxBlurProcessor.cs @@ -11,7 +11,7 @@ namespace ImageSharp.Processors /// Applies a Box blur sampler to the image. /// /// The pixel format. - public class BoxBlurProcessor : ImageFilteringProcessor + public class BoxBlurProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Convolution/Convolution2DProcessor.cs b/src/ImageSharp/Filters/Processors/Convolution/Convolution2DProcessor.cs index e004953021..9db67f0624 100644 --- a/src/ImageSharp/Filters/Processors/Convolution/Convolution2DProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Convolution/Convolution2DProcessor.cs @@ -13,7 +13,7 @@ namespace ImageSharp.Processors /// Defines a sampler that uses two one-dimensional matrices to perform convolution against an image. /// /// The pixel format. - public class Convolution2DProcessor : ImageFilteringProcessor + public class Convolution2DProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Convolution/Convolution2PassProcessor.cs b/src/ImageSharp/Filters/Processors/Convolution/Convolution2PassProcessor.cs index f904402935..80e3c6f92e 100644 --- a/src/ImageSharp/Filters/Processors/Convolution/Convolution2PassProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Convolution/Convolution2PassProcessor.cs @@ -13,7 +13,7 @@ namespace ImageSharp.Processors /// Defines a sampler that uses two one-dimensional matrices to perform two-pass convolution against an image. /// /// The pixel format. - public class Convolution2PassProcessor : ImageFilteringProcessor + public class Convolution2PassProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Convolution/ConvolutionProcessor.cs b/src/ImageSharp/Filters/Processors/Convolution/ConvolutionProcessor.cs index e4d3f4d429..b771cc5625 100644 --- a/src/ImageSharp/Filters/Processors/Convolution/ConvolutionProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Convolution/ConvolutionProcessor.cs @@ -13,7 +13,7 @@ namespace ImageSharp.Processors /// Defines a sampler that uses a 2 dimensional matrix to perform convolution against an image. /// /// The pixel format. - public class ConvolutionProcessor : ImageFilteringProcessor + public class ConvolutionProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/EdgeDetector2DProcessor.cs b/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/EdgeDetector2DProcessor.cs index 446771c26d..40cdd2052e 100644 --- a/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/EdgeDetector2DProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/EdgeDetector2DProcessor.cs @@ -11,7 +11,7 @@ namespace ImageSharp.Processors /// Defines a sampler that detects edges within an image using two one-dimensional matrices. /// /// The pixel format. - public abstract class EdgeDetector2DProcessor : ImageFilteringProcessor, IEdgeDetectorProcessor + public abstract class EdgeDetector2DProcessor : ImageProcessor, IEdgeDetectorProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/EdgeDetectorCompassProcessor.cs b/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/EdgeDetectorCompassProcessor.cs index b9f5e449ea..a317c183d1 100644 --- a/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/EdgeDetectorCompassProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/EdgeDetectorCompassProcessor.cs @@ -13,7 +13,7 @@ namespace ImageSharp.Processors /// Defines a sampler that detects edges within an image using a eight two dimensional matrices. /// /// The pixel format. - public abstract class EdgeDetectorCompassProcessor : ImageFilteringProcessor, IEdgeDetectorProcessor + public abstract class EdgeDetectorCompassProcessor : ImageProcessor, IEdgeDetectorProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/EdgeDetectorProcessor.cs b/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/EdgeDetectorProcessor.cs index 7542a36313..332b10e41c 100644 --- a/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/EdgeDetectorProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/EdgeDetectorProcessor.cs @@ -11,7 +11,7 @@ namespace ImageSharp.Processors /// Defines a sampler that detects edges within an image using a single two dimensional matrix. /// /// The pixel format. - public abstract class EdgeDetectorProcessor : ImageFilteringProcessor, IEdgeDetectorProcessor + public abstract class EdgeDetectorProcessor : ImageProcessor, IEdgeDetectorProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/IEdgeDetectorProcessor.cs b/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/IEdgeDetectorProcessor.cs index f98fdf56bb..f4b2442d0f 100644 --- a/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/IEdgeDetectorProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Convolution/EdgeDetection/IEdgeDetectorProcessor.cs @@ -11,7 +11,7 @@ namespace ImageSharp.Processors /// Provides properties and methods allowing the detection of edges within an image. /// /// The pixel format. - public interface IEdgeDetectorProcessor : IImageFilteringProcessor, IEdgeDetectorProcessor + public interface IEdgeDetectorProcessor : IImageProcessor, IEdgeDetectorProcessor where TColor : struct, IPackedPixel, IEquatable { } diff --git a/src/ImageSharp/Filters/Processors/Convolution/GaussianBlurProcessor.cs b/src/ImageSharp/Filters/Processors/Convolution/GaussianBlurProcessor.cs index 543fe26aff..81fa3dce42 100644 --- a/src/ImageSharp/Filters/Processors/Convolution/GaussianBlurProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Convolution/GaussianBlurProcessor.cs @@ -11,7 +11,7 @@ namespace ImageSharp.Processors /// Applies a Gaussian blur sampler to the image. /// /// The pixel format. - public class GaussianBlurProcessor : ImageFilteringProcessor + public class GaussianBlurProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Convolution/GaussianSharpenProcessor.cs b/src/ImageSharp/Filters/Processors/Convolution/GaussianSharpenProcessor.cs index e2e9b418b8..5030085a00 100644 --- a/src/ImageSharp/Filters/Processors/Convolution/GaussianSharpenProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Convolution/GaussianSharpenProcessor.cs @@ -11,7 +11,7 @@ namespace ImageSharp.Processors /// Applies a Gaussian sharpening sampler to the image. /// /// The pixel format. - public class GaussianSharpenProcessor : ImageFilteringProcessor + public class GaussianSharpenProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Effects/AlphaProcessor.cs b/src/ImageSharp/Filters/Processors/Effects/AlphaProcessor.cs index 0e9406ee52..59c9352808 100644 --- a/src/ImageSharp/Filters/Processors/Effects/AlphaProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Effects/AlphaProcessor.cs @@ -10,10 +10,10 @@ namespace ImageSharp.Processors using System.Threading.Tasks; /// - /// An to change the alpha component of an . + /// An to change the alpha component of an . /// /// The pixel format. - public class AlphaProcessor : ImageFilteringProcessor + public class AlphaProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Effects/BackgroundColorProcessor.cs b/src/ImageSharp/Filters/Processors/Effects/BackgroundColorProcessor.cs index ab6fa2424f..3e8ea5417a 100644 --- a/src/ImageSharp/Filters/Processors/Effects/BackgroundColorProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Effects/BackgroundColorProcessor.cs @@ -13,7 +13,7 @@ namespace ImageSharp.Processors /// Sets the background color of the image. /// /// The pixel format. - public class BackgroundColorProcessor : ImageFilteringProcessor + public class BackgroundColorProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Effects/BrightnessProcessor.cs b/src/ImageSharp/Filters/Processors/Effects/BrightnessProcessor.cs index 8bc021618d..70c6bd6b03 100644 --- a/src/ImageSharp/Filters/Processors/Effects/BrightnessProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Effects/BrightnessProcessor.cs @@ -10,10 +10,10 @@ namespace ImageSharp.Processors using System.Threading.Tasks; /// - /// An to change the brightness of an . + /// An to change the brightness of an . /// /// The pixel format. - public class BrightnessProcessor : ImageFilteringProcessor + public class BrightnessProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Effects/ContrastProcessor.cs b/src/ImageSharp/Filters/Processors/Effects/ContrastProcessor.cs index ba830b12a5..00c5d441a2 100644 --- a/src/ImageSharp/Filters/Processors/Effects/ContrastProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Effects/ContrastProcessor.cs @@ -10,10 +10,10 @@ namespace ImageSharp.Processors using System.Threading.Tasks; /// - /// An to change the contrast of an . + /// An to change the contrast of an . /// /// The pixel format. - public class ContrastProcessor : ImageFilteringProcessor + public class ContrastProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Effects/InvertProcessor.cs b/src/ImageSharp/Filters/Processors/Effects/InvertProcessor.cs index e34d15f059..7ceb11194a 100644 --- a/src/ImageSharp/Filters/Processors/Effects/InvertProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Effects/InvertProcessor.cs @@ -10,10 +10,10 @@ namespace ImageSharp.Processors using System.Threading.Tasks; /// - /// An to invert the colors of an . + /// An to invert the colors of an . /// /// The pixel format. - public class InvertProcessor : ImageFilteringProcessor + public class InvertProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Effects/OilPaintingProcessor.cs b/src/ImageSharp/Filters/Processors/Effects/OilPaintingProcessor.cs index b0c886acf9..7cbcafaba8 100644 --- a/src/ImageSharp/Filters/Processors/Effects/OilPaintingProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Effects/OilPaintingProcessor.cs @@ -10,11 +10,11 @@ namespace ImageSharp.Processors using System.Threading.Tasks; /// - /// An to apply an oil painting effect to an . + /// An to apply an oil painting effect to an . /// /// Adapted from by Dewald Esterhuizen. /// The pixel format. - public class OilPaintingProcessor : ImageFilteringProcessor + public class OilPaintingProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Effects/PixelateProcessor.cs b/src/ImageSharp/Filters/Processors/Effects/PixelateProcessor.cs index a24df71aa4..110cface2e 100644 --- a/src/ImageSharp/Filters/Processors/Effects/PixelateProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Effects/PixelateProcessor.cs @@ -10,10 +10,10 @@ namespace ImageSharp.Processors using System.Threading.Tasks; /// - /// An to pixelate the colors of an . + /// An to pixelate the colors of an . /// /// The pixel format. - public class PixelateProcessor : ImageFilteringProcessor + public class PixelateProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/IImageFilteringProcessor.cs b/src/ImageSharp/Filters/Processors/IImageFilteringProcessor.cs deleted file mode 100644 index a121caa3ab..0000000000 --- a/src/ImageSharp/Filters/Processors/IImageFilteringProcessor.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// Copyright (c) James Jackson-South and contributors. -// Licensed under the Apache License, Version 2.0. -// - -namespace ImageSharp.Processors -{ - using System; - - /// - /// Encapsulates methods to alter the pixels of an image. The processor operates on the original source pixels. - /// - /// The pixel format. - public interface IImageFilteringProcessor : IImageProcessor - where TColor : struct, IPackedPixel, IEquatable - { - /// - /// Applies the process to the specified portion of the specified . - /// - /// The source image. Cannot be null. - /// - /// The structure that specifies the portion of the image object to draw. - /// - /// - /// The method keeps the source image unchanged and returns the - /// the result of image processing filter as new image. - /// - /// - /// is null. - /// - /// - /// doesnt fit the dimension of the image. - /// - void Apply(ImageBase source, Rectangle sourceRectangle); - } -} diff --git a/src/ImageSharp/Filters/Processors/ImageFilteringProcessor.cs b/src/ImageSharp/Filters/Processors/ImageFilteringProcessor.cs deleted file mode 100644 index f61731651a..0000000000 --- a/src/ImageSharp/Filters/Processors/ImageFilteringProcessor.cs +++ /dev/null @@ -1,66 +0,0 @@ -// -// Copyright (c) James Jackson-South and contributors. -// Licensed under the Apache License, Version 2.0. -// - -namespace ImageSharp.Processors -{ - using System; - - /// - /// Encapsulates methods to alter the pixels of an image. The processor operates on the original source pixels. - /// - /// The pixel format. - public abstract class ImageFilteringProcessor : ImageProcessor, IImageFilteringProcessor - where TColor : struct, IPackedPixel, IEquatable - { - /// - public void Apply(ImageBase source, Rectangle sourceRectangle) - { - try - { - this.BeforeApply(source, sourceRectangle); - - this.OnApply(source, sourceRectangle); - - this.AfterApply(source, sourceRectangle); - } - catch (Exception ex) - { - throw new ImageProcessingException($"An error occured when processing the image using {this.GetType().Name}. See the inner exception for more detail.", ex); - } - } - - /// - /// This method is called before the process is applied to prepare the processor. - /// - /// The source image. Cannot be null. - /// - /// The structure that specifies the portion of the image object to draw. - /// - protected virtual void BeforeApply(ImageBase source, Rectangle sourceRectangle) - { - } - - /// - /// Applies the process to the specified portion of the specified at the specified location - /// and with the specified size. - /// - /// The source image. Cannot be null. - /// - /// The structure that specifies the portion of the image object to draw. - /// - protected abstract void OnApply(ImageBase source, Rectangle sourceRectangle); - - /// - /// This method is called after the process is applied to prepare the processor. - /// - /// The source image. Cannot be null. - /// - /// The structure that specifies the portion of the image object to draw. - /// - protected virtual void AfterApply(ImageBase source, Rectangle sourceRectangle) - { - } - } -} \ No newline at end of file diff --git a/src/ImageSharp/Filters/Processors/Overlays/GlowProcessor.cs b/src/ImageSharp/Filters/Processors/Overlays/GlowProcessor.cs index 36a0b1a572..6e7d27929e 100644 --- a/src/ImageSharp/Filters/Processors/Overlays/GlowProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Overlays/GlowProcessor.cs @@ -10,10 +10,10 @@ namespace ImageSharp.Processors using System.Threading.Tasks; /// - /// An that applies a radial glow effect an . + /// An that applies a radial glow effect an . /// /// The pixel format. - public class GlowProcessor : ImageFilteringProcessor + public class GlowProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Overlays/VignetteProcessor.cs b/src/ImageSharp/Filters/Processors/Overlays/VignetteProcessor.cs index 318b9063a2..ddb7b569fd 100644 --- a/src/ImageSharp/Filters/Processors/Overlays/VignetteProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Overlays/VignetteProcessor.cs @@ -10,10 +10,10 @@ namespace ImageSharp.Processors using System.Threading.Tasks; /// - /// An that applies a radial vignette effect to an . + /// An that applies a radial vignette effect to an . /// /// The pixel format. - public class VignetteProcessor : ImageFilteringProcessor + public class VignetteProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Transforms/CropProcessor.cs b/src/ImageSharp/Filters/Processors/Transforms/CropProcessor.cs index a768974369..7efd9b9241 100644 --- a/src/ImageSharp/Filters/Processors/Transforms/CropProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Transforms/CropProcessor.cs @@ -12,7 +12,7 @@ namespace ImageSharp.Processors /// Provides methods to allow the cropping of an image. /// /// The pixel format. - public class CropProcessor : ImageFilteringProcessor + public class CropProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Transforms/EntropyCropProcessor.cs b/src/ImageSharp/Filters/Processors/Transforms/EntropyCropProcessor.cs index a8bf373dc0..78bef63b01 100644 --- a/src/ImageSharp/Filters/Processors/Transforms/EntropyCropProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Transforms/EntropyCropProcessor.cs @@ -12,7 +12,7 @@ namespace ImageSharp.Processors /// entropy. /// /// The pixel format. - public class EntropyCropProcessor : ImageFilteringProcessor + public class EntropyCropProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Transforms/FlipProcessor.cs b/src/ImageSharp/Filters/Processors/Transforms/FlipProcessor.cs index aff49327a5..4973c10d6d 100644 --- a/src/ImageSharp/Filters/Processors/Transforms/FlipProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Transforms/FlipProcessor.cs @@ -12,7 +12,7 @@ namespace ImageSharp.Processors /// Provides methods that allow the flipping of an image around its center point. /// /// The pixel format. - public class FlipProcessor : ImageFilteringProcessor + public class FlipProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Transforms/Matrix3x2Processor.cs b/src/ImageSharp/Filters/Processors/Transforms/Matrix3x2Processor.cs index c9da4828a6..b6f3d5a66e 100644 --- a/src/ImageSharp/Filters/Processors/Transforms/Matrix3x2Processor.cs +++ b/src/ImageSharp/Filters/Processors/Transforms/Matrix3x2Processor.cs @@ -12,7 +12,7 @@ namespace ImageSharp.Processors /// Provides methods to transform an image using a . /// /// The pixel format. - public abstract class Matrix3x2Processor : ImageFilteringProcessor + public abstract class Matrix3x2Processor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Filters/Processors/Transforms/ResamplingWeightedProcessor.cs b/src/ImageSharp/Filters/Processors/Transforms/ResamplingWeightedProcessor.cs index 860485e6d0..f29560835c 100644 --- a/src/ImageSharp/Filters/Processors/Transforms/ResamplingWeightedProcessor.cs +++ b/src/ImageSharp/Filters/Processors/Transforms/ResamplingWeightedProcessor.cs @@ -12,7 +12,7 @@ namespace ImageSharp.Processors /// Adapted from /// /// The pixel format. - public abstract class ResamplingWeightedProcessor : ImageFilteringProcessor + public abstract class ResamplingWeightedProcessor : ImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// diff --git a/src/ImageSharp/Image/IImageProcessor.cs b/src/ImageSharp/Image/IImageProcessor.cs index 145e831364..1395962150 100644 --- a/src/ImageSharp/Image/IImageProcessor.cs +++ b/src/ImageSharp/Image/IImageProcessor.cs @@ -5,12 +5,15 @@ namespace ImageSharp.Processors { + using System; using System.Threading.Tasks; /// /// Encapsulates methods to alter the pixels of an image. /// - public interface IImageProcessor + /// The pixel format. + public interface IImageProcessor + where TColor : struct, IPackedPixel, IEquatable { /// /// Gets or sets the parallel options for processing tasks in parallel. @@ -22,5 +25,20 @@ namespace ImageSharp.Processors /// or expand individual pixel colors the value on processing. /// bool Compand { get; set; } + + /// + /// Applies the process to the specified portion of the specified . + /// + /// The source image. Cannot be null. + /// + /// The structure that specifies the portion of the image object to draw. + /// + /// + /// is null. + /// + /// + /// doesnt fit the dimension of the image. + /// + void Apply(ImageBase source, Rectangle sourceRectangle); } } diff --git a/src/ImageSharp/Image/ImageProcessingExtensions.cs b/src/ImageSharp/Image/ImageProcessingExtensions.cs index 0b6961b127..3d33e73c45 100644 --- a/src/ImageSharp/Image/ImageProcessingExtensions.cs +++ b/src/ImageSharp/Image/ImageProcessingExtensions.cs @@ -21,7 +21,7 @@ namespace ImageSharp /// The image this method extends. /// The processor to apply to the image. /// The . - internal static Image Process(this Image source, IImageFilteringProcessor processor) + internal static Image Process(this Image source, IImageProcessor processor) where TColor : struct, IPackedPixel, IEquatable { return Process(source, source.Bounds, processor); @@ -38,14 +38,9 @@ namespace ImageSharp /// /// The processors to apply to the image. /// The . - internal static Image Process(this Image source, Rectangle sourceRectangle, IImageFilteringProcessor processor) + internal static Image Process(this Image source, Rectangle sourceRectangle, IImageProcessor processor) where TColor : struct, IPackedPixel, IEquatable { - if (processor.ParallelOptions == null) - { - processor.ParallelOptions = source.Bootstrapper.ParallelOptions; - } - return PerformAction(source, (sourceImage) => processor.Apply(sourceImage, sourceRectangle)); } diff --git a/src/ImageSharp/ImageProcessor.cs b/src/ImageSharp/ImageProcessor.cs index 72d9f6b93d..57c9218939 100644 --- a/src/ImageSharp/ImageProcessor.cs +++ b/src/ImageSharp/ImageProcessor.cs @@ -12,7 +12,7 @@ namespace ImageSharp.Processors /// Allows the application of processors to images. /// /// The pixel format. - public abstract class ImageProcessor : IImageProcessor + public abstract class ImageProcessor : IImageProcessor where TColor : struct, IPackedPixel, IEquatable { /// @@ -20,5 +20,59 @@ namespace ImageSharp.Processors /// public virtual bool Compand { get; set; } = false; + + /// + public void Apply(ImageBase source, Rectangle sourceRectangle) + { + if (this.ParallelOptions == null) + { + this.ParallelOptions = source.Bootstrapper.ParallelOptions; + } + + try + { + this.BeforeApply(source, sourceRectangle); + + this.OnApply(source, sourceRectangle); + + this.AfterApply(source, sourceRectangle); + } + catch (Exception ex) + { + throw new ImageProcessingException($"An error occured when processing the image using {this.GetType().Name}. See the inner exception for more detail.", ex); + } + } + + /// + /// This method is called before the process is applied to prepare the processor. + /// + /// The source image. Cannot be null. + /// + /// The structure that specifies the portion of the image object to draw. + /// + protected virtual void BeforeApply(ImageBase source, Rectangle sourceRectangle) + { + } + + /// + /// Applies the process to the specified portion of the specified at the specified location + /// and with the specified size. + /// + /// The source image. Cannot be null. + /// + /// The structure that specifies the portion of the image object to draw. + /// + protected abstract void OnApply(ImageBase source, Rectangle sourceRectangle); + + /// + /// This method is called after the process is applied to prepare the processor. + /// + /// The source image. Cannot be null. + /// + /// The structure that specifies the portion of the image object to draw. + /// + protected virtual void AfterApply(ImageBase source, Rectangle sourceRectangle) + { + } } } \ No newline at end of file