Browse Source

Optimize Contrast

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

17
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,8 +65,6 @@ namespace ImageSharp.Processing.Processors
startY = 0; startY = 0;
} }
using (PixelAccessor<TPixel> sourcePixels = source.Lock())
{
Parallel.For( Parallel.For(
minY, minY,
maxY, maxY,
@ -74,20 +72,21 @@ namespace ImageSharp.Processing.Processors
y => y =>
{ {
int offsetY = y - startY; int offsetY = y - startY;
Span<TPixel> row = source.GetRowSpan(y - startY);
for (int x = minX; x < maxX; x++) for (int x = minX; x < maxX; x++)
{ {
int offsetX = x - startX; int offsetX = x - startX;
ref TPixel pixel = ref row[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