diff --git a/src/ImageSharp/Formats/Jxl/Processing/JxlLoopFilter.cs b/src/ImageSharp/Formats/Jxl/Processing/JxlLoopFilter.cs index 1a98138a3..312138db4 100644 --- a/src/ImageSharp/Formats/Jxl/Processing/JxlLoopFilter.cs +++ b/src/ImageSharp/Formats/Jxl/Processing/JxlLoopFilter.cs @@ -12,6 +12,9 @@ namespace SixLabors.ImageSharp.Formats.Jxl.Processing; /// internal sealed class JxlLoopFilter : IJxlFields { + private const int SigmaBorder = 1; + private const int SigmaPadding = 2; + /// /// 4 * (sqrt(0.5)-1), so that Weight(sigma) = 0.5 /// @@ -206,7 +209,7 @@ internal sealed class JxlLoopFilter : IJxlFields { float sigma = sigmaQuant * this.EpfSharpLookup[sharpnessRow[bx + ix + iy + sharpnessStride]]; sigma = MathF.Min(-1e-4f, sigma); - sigmaRow[bx + ix + SigmaPadding + (iy + SigmaPadding) * sigmaStride] = 1.0f / sigma; + sigmaRow[bx + ix + SigmaPadding + ((iy + SigmaPadding) * sigmaStride)] = 1.0f / sigma; } } @@ -214,7 +217,7 @@ internal sealed class JxlLoopFilter : IJxlFields { for (int iy = 0; iy < acs.CoveredBlocksY; iy++) { - LeftMirror(sigmaRow.Slice(SigmaPadding + (iy + SigmaPadding) * SigmaStride), sigmaBorder); + LeftMirror(sigmaRow[(SigmaPadding + ((iy + SigmaPadding) * sigmaStride))..], SigmaBorder); } } @@ -222,7 +225,7 @@ internal sealed class JxlLoopFilter : IJxlFields { for (int iy = 0; iy < acs.CoveredBlocksY; iy++) { - RightMirror(sigmaRow.Slice(SigmaPadding + bx + llfX + (iy + SigmaPadding) * sigmaStride), SigmaBorder); + RightMirror(sigmaRow[(SigmaPadding + bx + llfX + ((iy + SigmaPadding) * sigmaStride))..], SigmaBorder); } } @@ -238,7 +241,7 @@ internal sealed class JxlLoopFilter : IJxlFields for (int iy = 0; iy < SigmaBorder; iy++) { sigmaRow.Slice(offsetBefore + ((SigmaPadding - 1 - iy) * sigmaStride), num) - .CopyTo(sigmaRow.Slice(offsetBefore + ((SigmaPadding + iy) * sigmaStride))); + .CopyTo(sigmaRow[(offsetBefore + ((SigmaPadding + iy) * sigmaStride))..]); } } @@ -246,8 +249,8 @@ internal sealed class JxlLoopFilter : IJxlFields { for (int iy = 0; iy < SigmaBorder; iy++) { - sigmaRow.Slice(offsetBefore + (sigmaStride * (acs.CoveredBlocksX + SigmaPadding + iy))) - .CopyTo(sigmaRow.Slice(offsetBefore + (sigmaStride * (acs.CoveredBlocksY + SigmaPadding - 1 - iy)))); + sigmaRow[(offsetBefore + (sigmaStride * (acs.CoveredBlocksX + SigmaPadding + iy)))..] + .CopyTo(sigmaRow[(offsetBefore + (sigmaStride * (acs.CoveredBlocksY + SigmaPadding - 1 - iy)))..]); } } }