diff --git a/src/ImageSharp/Formats/Tiff/Compression/HorizontalPredictor.cs b/src/ImageSharp/Formats/Tiff/Compression/HorizontalPredictor.cs index 1b1254e3f5..ae2f17dbb5 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/HorizontalPredictor.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/HorizontalPredictor.cs @@ -117,17 +117,18 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression for (int y = 0; y < height; y++) { Span rowBytes = pixelBytes.Slice(y * rowBytesCount, rowBytesCount); - Span rowRgb = MemoryMarshal.Cast(rowBytes); + Span rowRgb = MemoryMarshal.Cast(rowBytes).Slice(0, width); + ref Rgb24 rowRgbBase = ref MemoryMarshal.GetReference(rowRgb); + byte r = rowRgbBase.R; + byte g = rowRgbBase.G; + byte b = rowRgbBase.B; - byte r = rowRgb[0].R; - byte g = rowRgb[0].G; - byte b = rowRgb[0].B; - for (int x = 1; x < width; x++) + for (int x = 1; x < rowRgb.Length; x++) { ref Rgb24 pixel = ref rowRgb[x]; - r += rowRgb[x].R; - g += rowRgb[x].G; - b += rowRgb[x].B; + r += pixel.R; + g += pixel.G; + b += pixel.B; var rgb = new Rgb24(r, g, b); pixel.FromRgb24(rgb); }