diff --git a/pdf.js b/pdf.js index d5d82a724..b58cbbc03 100644 --- a/pdf.js +++ b/pdf.js @@ -715,7 +715,6 @@ var PredictorStream = (function predictorStream() { var columns = this.columns = params.get('Columns') || 1; this.pixBytes = (colors * bits + 7) >> 3; - // add an extra pixByte to represent the pixel left of column 0 this.rowBytes = (columns * colors * bits + 7) >> 3; DecodeStream.call(this); @@ -798,10 +797,12 @@ var PredictorStream = (function predictorStream() { var currentRow = buffer.subarray(bufferLength, bufferLength + rowBytes); var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength); if (prevRow.length == 0) - prevRow = currentRow; + prevRow = new Uint8Array(rowBytes); switch (predictor) { case 0: + for (var i = 0; i < rowBytes; ++i) + currentRow[i] = rawBytes[i]; break; case 1: for (var i = 0; i < pixBytes; ++i) @@ -824,8 +825,11 @@ var PredictorStream = (function predictorStream() { case 4: // we need to save the up left pixels values. the simplest way // is to create a new buffer - for (var i = 0; i < pixBytes; ++i) - currentRow[i] = rawBytes[i]; + for (var i = 0; i < pixBytes; ++i) { + var up = prevRow[i]; + var c = rawBytes[i]; + currentRow[i] = up + c; + } for (; i < rowBytes; ++i) { var up = prevRow[i]; var upLeft = prevRow[i - pixBytes];