Browse Source

Optimize Contrast

pull/221/head
James Jackson-South 9 years ago
parent
commit
40bb95aa62
  1. 45
      src/ImageSharp/Processing/Processors/Effects/ContrastProcessor.cs

45
src/ImageSharp/Processing/Processors/Effects/ContrastProcessor.cs

@ -45,8 +45,8 @@ namespace ImageSharp.Processing.Processors
int endY = sourceRectangle.Bottom; int endY = sourceRectangle.Bottom;
int startX = sourceRectangle.X; int startX = sourceRectangle.X;
int endX = sourceRectangle.Right; int endX = sourceRectangle.Right;
Vector4 contrastVector = new Vector4(contrast, contrast, contrast, 1); var contrastVector = new Vector4(contrast, contrast, contrast, 1);
Vector4 shiftVector = new Vector4(.5F, .5F, .5F, 1); var shiftVector = new Vector4(.5F, .5F, .5F, 1);
// Align start/end positions. // Align start/end positions.
int minX = Math.Max(0, startX); int minX = Math.Max(0, startX);
@ -65,29 +65,28 @@ namespace ImageSharp.Processing.Processors
startY = 0; startY = 0;
} }
using (PixelAccessor<TPixel> sourcePixels = source.Lock()) Parallel.For(
{ minY,
Parallel.For( maxY,
minY, this.ParallelOptions,
maxY, y =>
this.ParallelOptions, {
y => int offsetY = y - startY;
Span<TPixel> row = source.GetRowSpan(y - startY);
for (int x = minX; x < maxX; x++)
{ {
int offsetY = y - startY; int offsetX = x - startX;
for (int x = minX; x < maxX; x++) ref TPixel pixel = ref row[x - startX];
{
int offsetX = x - startX;
Vector4 vector = sourcePixels[offsetX, offsetY].ToVector4().Expand(); Vector4 vector = pixel.ToVector4().Expand();
vector -= shiftVector; vector -= shiftVector;
vector *= contrastVector; vector *= contrastVector;
vector += shiftVector; vector += shiftVector;
TPixel packed = default(TPixel);
packed.PackFromVector4(vector.Compress()); pixel.PackFromVector4(vector.Compress());
sourcePixels[offsetX, offsetY] = packed; }
} });
});
}
} }
} }
} }
Loading…
Cancel
Save