diff --git a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorMatrixProcessor.cs b/src/ImageSharp/Processing/Processors/ColorMatrix/ColorMatrixProcessor.cs
index b38093d63..cfe50150f 100644
--- a/src/ImageSharp/Processing/Processors/ColorMatrix/ColorMatrixProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/ColorMatrix/ColorMatrixProcessor.cs
@@ -7,6 +7,7 @@ namespace ImageSharp.Processing.Processors
{
using System;
using System.Numerics;
+ using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using ImageSharp.PixelFormats;
@@ -79,6 +80,7 @@ namespace ImageSharp.Processing.Processors
///
/// The .
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
private TPixel ApplyMatrix(TPixel color, Matrix4x4 matrix, bool compand)
{
Vector4 vector = color.ToVector4();
diff --git a/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor.cs b/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor.cs
index ac96c40ae..e6a42cc0c 100644
--- a/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Convolution/Convolution2DProcessor.cs
@@ -5,7 +5,6 @@
namespace ImageSharp.Processing.Processors
{
- using System;
using System.Numerics;
using System.Threading.Tasks;
@@ -57,10 +56,11 @@ namespace ImageSharp.Processing.Processors
int maxX = endX - 1;
using (PixelAccessor targetPixels = new PixelAccessor(source.Width, source.Height))
+ using (PixelAccessor sourcePixels = source.Lock())
{
- using (PixelAccessor sourcePixels = source.Lock())
- {
- Parallel.For(
+ sourcePixels.CopyTo(targetPixels);
+
+ Parallel.For(
startY,
endY,
this.ParallelOptions,
@@ -119,7 +119,6 @@ namespace ImageSharp.Processing.Processors
targetPixels[x, y] = packed;
}
});
- }
source.SwapPixelsBuffers(targetPixels);
}