/// <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);
            }
        }
Example #2
0
        /// <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);
            }
        }