diff --git a/src/ImageSharp/Processing/Processors/Transforms/ResamplingWeightedProcessor.Weights.cs b/src/ImageSharp/Processing/Processors/Transforms/ResamplingWeightedProcessor.Weights.cs
index 9c37b69e6..b7e2304fa 100644
--- a/src/ImageSharp/Processing/Processors/Transforms/ResamplingWeightedProcessor.Weights.cs
+++ b/src/ImageSharp/Processing/Processors/Transforms/ResamplingWeightedProcessor.Weights.cs
@@ -34,12 +34,12 @@ namespace ImageSharp.Processing.Processors
///
/// The index in the destination buffer
///
- private readonly int destIndex;
+ private readonly int flatStartIndex;
///
- /// The weights buffer .
+ /// The buffer containing the weights values.
///
- private readonly Buffer2D buffer;
+ private readonly Buffer buffer;
///
/// Initializes a new instance of the struct.
@@ -51,22 +51,19 @@ namespace ImageSharp.Processing.Processors
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal WeightsWindow(int index, int left, Buffer2D buffer, int length)
{
- this.destIndex = index;
+ this.flatStartIndex = (index * buffer.Width) + left;
this.Left = left;
this.buffer = buffer;
this.Length = length;
}
///
- /// Gets an unsafe float* pointer to the beginning of .
+ /// Gets a reference to the first item of the window.
///
- public ref float Ptr
+ /// The reference to the first item of the window
+ public ref float GetStartReference()
{
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- get
- {
- return ref this.GetWindowSpan().DangerousGetPinnableReference();
- }
+ return ref this.buffer[this.flatStartIndex];
}
///
@@ -74,7 +71,7 @@ namespace ImageSharp.Processing.Processors
///
/// The
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public Span GetWindowSpan() => this.buffer.GetRowSpan(this.destIndex).Slice(this.Left, this.Length);
+ public Span GetWindowSpan() => this.buffer.Slice(this.flatStartIndex, this.Length);
///
/// Computes the sum of vectors in 'rowSpan' weighted by weight values, pointed by this instance.
@@ -85,7 +82,7 @@ namespace ImageSharp.Processing.Processors
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Vector4 ComputeWeightedRowSum(Span rowSpan, int sourceX)
{
- ref float horizontalValues = ref this.Ptr;
+ ref float horizontalValues = ref this.GetStartReference();
int left = this.Left;
ref Vector4 vecPtr = ref Unsafe.Add(ref rowSpan.DangerousGetPinnableReference(), left + sourceX);
@@ -112,7 +109,7 @@ namespace ImageSharp.Processing.Processors
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Vector4 ComputeExpandedWeightedRowSum(Span rowSpan, int sourceX)
{
- ref float horizontalValues = ref this.Ptr;
+ ref float horizontalValues = ref this.GetStartReference();
int left = this.Left;
ref Vector4 vecPtr = ref Unsafe.Add(ref rowSpan.DangerousGetPinnableReference(), left + sourceX);
@@ -140,7 +137,7 @@ namespace ImageSharp.Processing.Processors
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Vector4 ComputeWeightedColumnSum(Buffer2D firstPassPixels, int x, int sourceY)
{
- ref float verticalValues = ref this.Ptr;
+ ref float verticalValues = ref this.GetStartReference();
int left = this.Left;
// Destination color components
diff --git a/src/ImageSharp/Processing/Processors/Transforms/ResamplingWeightedProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/ResamplingWeightedProcessor.cs
index 757b0889a..7245b961f 100644
--- a/src/ImageSharp/Processing/Processors/Transforms/ResamplingWeightedProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Transforms/ResamplingWeightedProcessor.cs
@@ -112,7 +112,7 @@ namespace ImageSharp.Processing.Processors
WeightsWindow ws = result.GetWeightsWindow(i, left, right);
result.Weights[i] = ws;
- ref float weights = ref ws.Ptr;
+ ref float weightsBaseRef = ref ws.GetStartReference();
for (int j = left; j <= right; j++)
{
@@ -120,7 +120,7 @@ namespace ImageSharp.Processing.Processors
sum += weight;
// weights[j - left] = weight:
- Unsafe.Add(ref weights, j - left) = weight;
+ Unsafe.Add(ref weightsBaseRef, j - left) = weight;
}
// Normalise, best to do it here rather than in the pixel loop later on.
@@ -129,7 +129,7 @@ namespace ImageSharp.Processing.Processors
for (int w = 0; w < ws.Length; w++)
{
// weights[w] = weights[w] / sum:
- ref float wRef = ref Unsafe.Add(ref weights, w);
+ ref float wRef = ref Unsafe.Add(ref weightsBaseRef, w);
wRef = wRef / sum;
}
}