diff --git a/src/ImageSharp/Processing/Processors/Convolution/BorderWrappingMode.cs b/src/ImageSharp/Processing/Processors/Convolution/BorderWrappingMode.cs
index 0dd5e59439..1fd1020cc8 100644
--- a/src/ImageSharp/Processing/Processors/Convolution/BorderWrappingMode.cs
+++ b/src/ImageSharp/Processing/Processors/Convolution/BorderWrappingMode.cs
@@ -15,7 +15,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Convolution
Wrap = 1,
/// Mirror the last few border values: fedcb|abcdefgh|gfedcb
- /// Please note this mode doe not repeat the very border pixel, as this gives better image quality.
+ /// Please note this mode does not repeat the very border pixel, as this gives better image quality.
Mirror = 2
}
}
diff --git a/src/ImageSharp/Processing/Processors/Convolution/KernelSamplingMap.cs b/src/ImageSharp/Processing/Processors/Convolution/KernelSamplingMap.cs
index 5c0a25befa..fde8bae3cb 100644
--- a/src/ImageSharp/Processing/Processors/Convolution/KernelSamplingMap.cs
+++ b/src/ImageSharp/Processing/Processors/Convolution/KernelSamplingMap.cs
@@ -104,6 +104,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Convolution
private void CorrectBorder(Span span, int kernelSize, int min, int max, BorderWrappingMode borderMode)
{
var affectedSize = (kernelSize >> 1) * kernelSize;
+ ref int spanBase = ref MemoryMarshal.GetReference(span);
if (affectedSize > 0)
{
switch (borderMode)
@@ -113,32 +114,35 @@ namespace SixLabors.ImageSharp.Processing.Processors.Convolution
Numerics.Clamp(span.Slice(span.Length - affectedSize), min, max);
break;
case BorderWrappingMode.Mirror:
+ var min2 = min + min;
for (int i = 0; i < affectedSize; i++)
{
var value = span[i];
if (value < min)
{
- span[i] = min - value + min;
+ span[i] = min2 - value;
}
}
+ var max2 = max + max;
for (int i = span.Length - affectedSize; i < span.Length; i++)
{
var value = span[i];
if (value > max)
{
- span[i] = max - value + max;
+ span[i] = max2 - value;
}
}
break;
case BorderWrappingMode.Wrap:
+ var diff = max - min + 1;
for (int i = 0; i < affectedSize; i++)
{
var value = span[i];
if (value < min)
{
- span[i] = max - min + value + 1;
+ span[i] = diff + value;
}
}
@@ -147,7 +151,7 @@ namespace SixLabors.ImageSharp.Processing.Processors.Convolution
var value = span[i];
if (value > max)
{
- span[i] = min + value - max - 1;
+ span[i] = value - diff;
}
}