From 1975c11dd60367e81d7465ac23d10594bef7e2de Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 20 Aug 2017 20:07:11 +1000 Subject: [PATCH] Remove ParallelOptions from IImageProcessor --- .../Processors/DrawImageProcessor.cs | 2 +- .../Processors/FillProcessor.cs | 2 +- src/ImageSharp/Image/IImageProcessor.cs | 7 ------- .../Binarization/BinaryThresholdProcessor.cs | 2 +- .../Processors/CloningImageProcessor.cs | 12 ++---------- .../ColorMatrix/ColorMatrixProcessor.cs | 2 +- .../Convolution/Convolution2DProcessor.cs | 2 +- .../Convolution/Convolution2PassProcessor.cs | 15 +++++++++++---- .../Convolution/ConvolutionProcessor.cs | 2 +- .../EdgeDetection/EdgeDetectorCompassProcessor.cs | 2 +- .../Processors/Effects/AlphaProcessor.cs | 2 +- .../Effects/BackgroundColorProcessor.cs | 2 +- .../Processors/Effects/BrightnessProcessor.cs | 2 +- .../Processors/Effects/ContrastProcessor.cs | 2 +- .../Processors/Effects/InvertProcessor.cs | 2 +- .../Processors/Effects/OilPaintingProcessor.cs | 2 +- .../Processors/Effects/PixelateProcessor.cs | 2 +- .../Processing/Processors/ImageProcessor.cs | 15 +-------------- .../Processors/Overlays/GlowProcessor.cs | 2 +- .../Processors/Overlays/VignetteProcessor.cs | 2 +- .../Processors/Transforms/CropProcessor.cs | 2 +- .../Processors/Transforms/FlipProcessor.cs | 4 ++-- .../Processors/Transforms/ResizeProcessor.cs | 6 +++--- .../Processors/Transforms/RotateProcessor.cs | 8 ++++---- .../Processors/Transforms/SkewProcessor.cs | 2 +- 25 files changed, 41 insertions(+), 62 deletions(-) diff --git a/src/ImageSharp.Drawing/Processors/DrawImageProcessor.cs b/src/ImageSharp.Drawing/Processors/DrawImageProcessor.cs index 221cd9e39e..e1ce6b0133 100644 --- a/src/ImageSharp.Drawing/Processors/DrawImageProcessor.cs +++ b/src/ImageSharp.Drawing/Processors/DrawImageProcessor.cs @@ -94,7 +94,7 @@ namespace SixLabors.ImageSharp.Drawing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span background = sourcePixels.GetRowSpan(y).Slice(minX, width); diff --git a/src/ImageSharp.Drawing/Processors/FillProcessor.cs b/src/ImageSharp.Drawing/Processors/FillProcessor.cs index 66463b590d..8d5725f47b 100644 --- a/src/ImageSharp.Drawing/Processors/FillProcessor.cs +++ b/src/ImageSharp.Drawing/Processors/FillProcessor.cs @@ -77,7 +77,7 @@ namespace SixLabors.ImageSharp.Drawing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { int offsetY = y - startY; diff --git a/src/ImageSharp/Image/IImageProcessor.cs b/src/ImageSharp/Image/IImageProcessor.cs index 5eec31b478..c06868eafb 100644 --- a/src/ImageSharp/Image/IImageProcessor.cs +++ b/src/ImageSharp/Image/IImageProcessor.cs @@ -1,8 +1,6 @@ // Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. -using System; -using System.Threading.Tasks; using SixLabors.ImageSharp.PixelFormats; using SixLabors.Primitives; @@ -15,11 +13,6 @@ namespace SixLabors.ImageSharp.Processing public interface IImageProcessor where TPixel : struct, IPixel { - /// - /// Gets or sets the parallel options for processing tasks in parallel. - /// - ParallelOptions ParallelOptions { get; set; } - /// /// Gets or sets a value indicating whether to compress /// or expand individual pixel colors the value on processing. diff --git a/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor.cs b/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor.cs index 7070c993ef..5fffb89360 100644 --- a/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Binarization/BinaryThresholdProcessor.cs @@ -84,7 +84,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span row = source.GetRowSpan(y - startY); diff --git a/src/ImageSharp/Processing/Processors/CloningImageProcessor.cs b/src/ImageSharp/Processing/Processors/CloningImageProcessor.cs index b4324a9ae3..258b98bb23 100644 --- a/src/ImageSharp/Processing/Processors/CloningImageProcessor.cs +++ b/src/ImageSharp/Processing/Processors/CloningImageProcessor.cs @@ -2,7 +2,7 @@ // Licensed under the Apache License, Version 2.0. using System; -using System.Threading.Tasks; + using SixLabors.ImageSharp.PixelFormats; using SixLabors.Primitives; @@ -12,23 +12,15 @@ namespace SixLabors.ImageSharp.Processing /// Allows the application of processors to images. /// /// The pixel format. - internal abstract class CloningImageProcessor : IImageProcessor, ICloningImageProcessor + internal abstract class CloningImageProcessor : ICloningImageProcessor where TPixel : struct, IPixel { - /// - public virtual ParallelOptions ParallelOptions { get; set; } - /// public virtual bool Compand { get; set; } = false; /// public Image CloneAndApply(Image source, Rectangle sourceRectangle) { - if (this.ParallelOptions == null) - { - this.ParallelOptions = source.Configuration.ParallelOptions; - } - try { Image clone = this.CreateDestination(source, sourceRectangle); diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorMatrixProcessor.cs b/src/ImageSharp/Processing/Processors/ColorMatrix/ColorMatrixProcessor.cs index 45ee1de59e..619127ea70 100644 --- a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorMatrixProcessor.cs +++ b/src/ImageSharp/Processing/Processors/ColorMatrix/ColorMatrixProcessor.cs @@ -55,7 +55,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span row = source.GetRowSpan(y - startY); diff --git a/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor.cs index 1fe31be448..b13117a585 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor.cs @@ -62,7 +62,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( startY, endY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span sourceRow = source.GetRowSpan(y); diff --git a/src/ImageSharp/Processing/Processors/Convolution/Convolution2PassProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/Convolution2PassProcessor.cs index 16b8075fcf..08ea5a6412 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/Convolution2PassProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/Convolution2PassProcessor.cs @@ -43,12 +43,13 @@ namespace SixLabors.ImageSharp.Processing.Processors { int width = source.Width; int height = source.Height; + ParallelOptions parallelOptions = source.Configuration.ParallelOptions; using (var firstPassPixels = new PixelAccessor(width, height)) using (PixelAccessor sourcePixels = source.Lock()) { - this.ApplyConvolution(firstPassPixels, sourcePixels, source.Bounds(), this.KernelX); - this.ApplyConvolution(sourcePixels, firstPassPixels, sourceRectangle, this.KernelY); + this.ApplyConvolution(firstPassPixels, sourcePixels, source.Bounds(), this.KernelX, parallelOptions); + this.ApplyConvolution(sourcePixels, firstPassPixels, sourceRectangle, this.KernelY, parallelOptions); } } @@ -62,7 +63,13 @@ namespace SixLabors.ImageSharp.Processing.Processors /// The structure that specifies the portion of the image object to draw. /// /// The kernel operator. - private void ApplyConvolution(PixelAccessor targetPixels, PixelAccessor sourcePixels, Rectangle sourceRectangle, Fast2DArray kernel) + /// The parellel options + private void ApplyConvolution( + PixelAccessor targetPixels, + PixelAccessor sourcePixels, + Rectangle sourceRectangle, + Fast2DArray kernel, + ParallelOptions parallelOptions) { int kernelHeight = kernel.Height; int kernelWidth = kernel.Width; @@ -79,7 +86,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( startY, endY, - this.ParallelOptions, + parallelOptions, y => { Span targetRow = targetPixels.GetRowSpan(y); diff --git a/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessor.cs index 9e256975e3..9ffc04f055 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/ConvolutionProcessor.cs @@ -51,7 +51,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( startY, endY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span sourceRow = source.GetRowSpan(y); diff --git a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetection/EdgeDetectorCompassProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetection/EdgeDetectorCompassProcessor.cs index 38bffe0c3c..aa3c605355 100644 --- a/src/ImageSharp/Processing/Processors/Convolution/EdgeDetection/EdgeDetectorCompassProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Convolution/EdgeDetection/EdgeDetectorCompassProcessor.cs @@ -123,7 +123,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { int offsetY = y - shiftY; diff --git a/src/ImageSharp/Processing/Processors/Effects/AlphaProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/AlphaProcessor.cs index ce0998a3c1..97c0b6745d 100644 --- a/src/ImageSharp/Processing/Processors/Effects/AlphaProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/AlphaProcessor.cs @@ -64,7 +64,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span row = source.GetRowSpan(y - startY); diff --git a/src/ImageSharp/Processing/Processors/Effects/BackgroundColorProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/BackgroundColorProcessor.cs index 21cc22bc9c..d97d4534dc 100644 --- a/src/ImageSharp/Processing/Processors/Effects/BackgroundColorProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/BackgroundColorProcessor.cs @@ -79,7 +79,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span destination = source.GetRowSpan(y - startY).Slice(minX - startX, width); diff --git a/src/ImageSharp/Processing/Processors/Effects/BrightnessProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/BrightnessProcessor.cs index 096f6b7abd..0aad1ef532 100644 --- a/src/ImageSharp/Processing/Processors/Effects/BrightnessProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/BrightnessProcessor.cs @@ -64,7 +64,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span row = source.GetRowSpan(y - startY); diff --git a/src/ImageSharp/Processing/Processors/Effects/ContrastProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/ContrastProcessor.cs index ba4c8b4dcb..97159c8730 100644 --- a/src/ImageSharp/Processing/Processors/Effects/ContrastProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/ContrastProcessor.cs @@ -66,7 +66,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span row = source.GetRowSpan(y - startY); diff --git a/src/ImageSharp/Processing/Processors/Effects/InvertProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/InvertProcessor.cs index 683433e28e..12692f2bd8 100644 --- a/src/ImageSharp/Processing/Processors/Effects/InvertProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/InvertProcessor.cs @@ -45,7 +45,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span row = source.GetRowSpan(y - startY); diff --git a/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor.cs index 35b2bd2536..21c13634be 100644 --- a/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/OilPaintingProcessor.cs @@ -71,7 +71,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( startY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span sourceRow = source.GetRowSpan(y); diff --git a/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor.cs b/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor.cs index 7050e5eeb7..b981fe8044 100644 --- a/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Effects/PixelateProcessor.cs @@ -71,7 +71,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.ForEach( range, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { int offsetY = y - startY; diff --git a/src/ImageSharp/Processing/Processors/ImageProcessor.cs b/src/ImageSharp/Processing/Processors/ImageProcessor.cs index 84ad7f8993..9b8b4010e8 100644 --- a/src/ImageSharp/Processing/Processors/ImageProcessor.cs +++ b/src/ImageSharp/Processing/Processors/ImageProcessor.cs @@ -2,7 +2,7 @@ // Licensed under the Apache License, Version 2.0. using System; -using System.Threading.Tasks; + using SixLabors.ImageSharp.PixelFormats; using SixLabors.Primitives; @@ -15,20 +15,12 @@ namespace SixLabors.ImageSharp.Processing internal abstract class ImageProcessor : IImageProcessor where TPixel : struct, IPixel { - /// - public virtual ParallelOptions ParallelOptions { get; set; } - /// public virtual bool Compand { get; set; } = false; /// public void Apply(Image source, Rectangle sourceRectangle) { - if (this.ParallelOptions == null) - { - this.ParallelOptions = source.Configuration.ParallelOptions; - } - try { this.BeforeImageApply(source, sourceRectangle); @@ -66,11 +58,6 @@ namespace SixLabors.ImageSharp.Processing /// the target public void Apply(ImageBase source, Rectangle sourceRectangle) { - if (this.ParallelOptions == null) - { - this.ParallelOptions = source.Configuration.ParallelOptions; - } - try { this.BeforeApply(source, sourceRectangle); diff --git a/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor.cs b/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor.cs index 99300eb964..725ad9eca3 100644 --- a/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Overlays/GlowProcessor.cs @@ -91,7 +91,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { using (var amounts = new Buffer(width)) diff --git a/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor.cs b/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor.cs index 58e579509a..4d9df46d81 100644 --- a/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Overlays/VignetteProcessor.cs @@ -112,7 +112,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { using (var amounts = new Buffer(width)) diff --git a/src/ImageSharp/Processing/Processors/Transforms/CropProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/CropProcessor.cs index d68c289db1..b4c4ca594b 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/CropProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/CropProcessor.cs @@ -48,7 +48,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span sourceRow = source.GetRowSpan(minX, y); diff --git a/src/ImageSharp/Processing/Processors/Transforms/FlipProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/FlipProcessor.cs index f0173a6666..ba64392928 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/FlipProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/FlipProcessor.cs @@ -61,7 +61,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( 0, halfHeight, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { int newY = height - y - 1; @@ -94,7 +94,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( 0, height, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span sourceRow = source.GetRowSpan(y); diff --git a/src/ImageSharp/Processing/Processors/Transforms/ResizeProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/ResizeProcessor.cs index 592e8d2e34..bfd86567b5 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/ResizeProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/ResizeProcessor.cs @@ -95,7 +95,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { // Y coordinates of source points @@ -124,7 +124,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( 0, sourceRectangle.Bottom, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { // TODO: Without Parallel.For() this buffer object could be reused: @@ -157,7 +157,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( minY, maxY, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { // Ensure offsets are normalised for cropping and padding. diff --git a/src/ImageSharp/Processing/Processors/Transforms/RotateProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/RotateProcessor.cs index b8341d4027..6e76834b91 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/RotateProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/RotateProcessor.cs @@ -50,7 +50,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( 0, height, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span targetRow = targetPixels.GetRowSpan(y); @@ -135,7 +135,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( 0, height, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { for (int x = 0; x < width; x++) @@ -166,7 +166,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( 0, height, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span sourceRow = source.GetRowSpan(y); @@ -196,7 +196,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( 0, height, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span sourceRow = source.GetRowSpan(y); diff --git a/src/ImageSharp/Processing/Processors/Transforms/SkewProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/SkewProcessor.cs index bd84e483f5..85bf1b6938 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/SkewProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/SkewProcessor.cs @@ -50,7 +50,7 @@ namespace SixLabors.ImageSharp.Processing.Processors Parallel.For( 0, height, - this.ParallelOptions, + source.Configuration.ParallelOptions, y => { Span targetRow = targetPixels.GetRowSpan(y);