/// <inheritdoc/> protected override void Decompress(BufferedReadStream stream, int byteCount, int stripHeight, Span <byte> buffer) { long pos = stream.Position; using (var deframeStream = new ZlibInflateStream( stream, () => { int left = (int)(byteCount - (stream.Position - pos)); return(left > 0 ? left : 0); })) { deframeStream.AllocateNewBytes(byteCount, true); DeflateStream dataStream = deframeStream.CompressedStream; int totalRead = 0; while (totalRead < buffer.Length) { int bytesRead = dataStream.Read(buffer, totalRead, buffer.Length - totalRead); if (bytesRead <= 0) { break; } totalRead += bytesRead; } } if (this.Predictor == TiffPredictor.Horizontal) { HorizontalPredictor.Undo(buffer, this.Width, this.colorType, this.isBigEndian); } }
/// <inheritdoc/> public override void CompressStrip(Span <byte> rows, int height) { if (this.Predictor == TiffPredictor.Horizontal) { HorizontalPredictor.ApplyHorizontalPrediction(rows, this.BytesPerRow, this.BitsPerPixel); } this.lzwEncoder.Encode(rows, this.Output); }
/// <inheritdoc/> protected override void Decompress(BufferedReadStream stream, int byteCount, int stripHeight, Span <byte> buffer) { var decoder = new TiffLzwDecoder(stream); decoder.DecodePixels(buffer); if (this.Predictor == TiffPredictor.Horizontal) { HorizontalPredictor.Undo(buffer, this.Width, this.colorType, this.isBigEndian); } }