diff --git a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationProcessor.cs b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationProcessor.cs index 767feb0600..ab73845f57 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationProcessor.cs @@ -80,7 +80,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization for (int dx = x; dx < xEnd; dx++) { float luminanceEqualized = this.InterpolateBetweenFourTiles(source[dx, dy], cdfData, tileX, tileY, cdfX, cdfY, tileWidth, tileHeight, pixelsInTile); - pixels[(dy * source.Width) + dx].PackFromVector4(new Vector4(luminanceEqualized)); + pixels[(dy * source.Width) + dx].FromVector4(new Vector4(luminanceEqualized)); tileX++; } @@ -137,7 +137,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization for (int dx = xStart; dx < xEnd; dx++) { float luminanceEqualized = cdfData.RemapGreyValue(this.GetLuminance(source[dx, dy], this.LuminanceLevels), pixelsInTile); - pixels[(dy * source.Width) + dx].PackFromVector4(new Vector4(luminanceEqualized)); + pixels[(dy * source.Width) + dx].FromVector4(new Vector4(luminanceEqualized)); } } } @@ -170,7 +170,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization for (int dx = xStart; dx < xEnd; dx++) { float luminanceEqualized = this.InterpolateBetweenTwoTiles(source[dx, dy], cdfData[cdfX, cdfY], cdfData[cdfX, cdfY + 1], tileY, tileHeight, pixelsInTile); - pixels[(dy * source.Width) + dx].PackFromVector4(new Vector4(luminanceEqualized)); + pixels[(dy * source.Width) + dx].FromVector4(new Vector4(luminanceEqualized)); tileX++; } @@ -209,7 +209,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization for (int dx = x; dx < xLimit; dx++) { float luminanceEqualized = this.InterpolateBetweenTwoTiles(source[dx, dy], cdfData[cdfX, cdfY], cdfData[cdfX + 1, cdfY], tileX, tileWidth, pixelsInTile); - pixels[(dy * source.Width) + dx].PackFromVector4(new Vector4(luminanceEqualized)); + pixels[(dy * source.Width) + dx].FromVector4(new Vector4(luminanceEqualized)); tileX++; } diff --git a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationSWProcessor.cs b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationSWProcessor.cs index b9fe2d0aec..dbdeb8c91b 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationSWProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/AdaptiveHistEqualizationSWProcessor.cs @@ -3,8 +3,10 @@ using System; using System.Numerics; +using System.Threading.Tasks; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Memory; +using SixLabors.ImageSharp.ParallelUtils; using SixLabors.ImageSharp.PixelFormats; using SixLabors.Memory; using SixLabors.Primitives; @@ -46,15 +48,16 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization int numberOfPixels = source.Width * source.Height; Span pixels = source.GetPixelSpan(); + var parallelOptions = new ParallelOptions() { MaxDegreeOfParallelism = configuration.MaxDegreeOfParallelism }; int tileWidth = source.Width / this.Tiles; int pixeInTile = tileWidth * tileWidth; int halfTileWith = tileWidth / 2; using (Buffer2D targetPixels = configuration.MemoryAllocator.Allocate2D(source.Width, source.Height)) { - ParallelFor.WithConfiguration( + Parallel.For( 0, source.Width, - configuration, + parallelOptions, x => { using (System.Buffers.IMemoryOwner histogramBuffer = memoryAllocator.Allocate(this.LuminanceLevels, AllocationOptions.Clean)) @@ -93,7 +96,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization // Map the current pixel to the new equalized value int luminance = this.GetLuminance(source[x, y], this.LuminanceLevels); float luminanceEqualized = cdf[luminance] / numberOfPixelsMinusCdfMin; - targetPixels[x, y].PackFromVector4(new Vector4(luminanceEqualized)); + targetPixels[x, y].FromVector4(new Vector4(luminanceEqualized)); // Remove top most row from the histogram, mirroring rows which exceeds the borders. Span rowSpan = this.GetPixelRow(source, x - halfTileWith, y - halfTileWith, tileWidth); @@ -115,13 +118,13 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization } /// - /// Get the a pixel row at a given position with a length of the grid size. Mirrors pixels which exceeds the edges. + /// Get the a pixel row at a given position with a length of the tile width. Mirrors pixels which exceeds the edges. /// /// The source image. /// The x position. /// The y position. /// The width in pixels of a tile. - /// A pixel row of the length of the grid size. + /// A pixel row of the length of the tile width. private Span GetPixelRow(ImageFrame source, int x, int y, int tileWidth) { if (y < 0) diff --git a/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor.cs b/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor.cs index 1d6042d8da..a4de02cc7e 100644 --- a/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor.cs +++ b/src/ImageSharp/Processing/Processors/Normalization/GlobalHistogramEqualizationProcessor.cs @@ -67,7 +67,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Normalization int luminance = this.GetLuminance(sourcePixel, this.LuminanceLevels); float luminanceEqualized = cdf[luminance] / numberOfPixelsMinusCdfMin; - pixels[i].PackFromVector4(new Vector4(luminanceEqualized)); + pixels[i].FromVector4(new Vector4(luminanceEqualized)); } } }