public static void CompressLZW(Stream stream, int predictor, byte[] b, int height, int samplesPerPixel, int stride) { LZWCompressor lzwCompressor = new LZWCompressor(stream, 8, true); bool usePredictor = predictor == TIFFConstants.PREDICTOR_HORIZONTAL_DIFFERENCING; if (!usePredictor) { lzwCompressor.Compress(b, 0, b.Length); } else { int off = 0; byte[] rowBuf = usePredictor ? new byte[stride] : null; for (int i = 0; i < height; i++) { System.Array.Copy(b, off, rowBuf, 0, stride); for (int j = stride - 1; j >= samplesPerPixel; j--) { rowBuf[j] -= rowBuf[j - samplesPerPixel]; } lzwCompressor.Compress(rowBuf, 0, stride); off += stride; } } lzwCompressor.Flush(); }