Merge pull request #160 from Schmidor/master

Fix for Issue #159
This commit is contained in:
Harald Kuhr 2015-08-14 09:32:31 +02:00
commit 40b11710ea

View File

@ -154,13 +154,6 @@ final class CCITTFaxDecoderStream extends FilterInputStream {
changesCurrentRow = changesReferenceRow;
changesReferenceRow = tmp;
if (changesReferenceRowCount == 0) {
changesReferenceRowCount = 3;
changesReferenceRow[0] = columns;
changesReferenceRow[1] = columns;
changesReferenceRow[2] = columns;
}
boolean white = true;
int index = 0;
changesCurrentRowCount = 0;
@ -179,7 +172,6 @@ final class CCITTFaxDecoderStream extends FilterInputStream {
switch (n.value) {
case VALUE_HMODE:
int runLength;
runLength = decodeRun(white ? whiteRunTree : blackRunTree);
index += runLength;
changesCurrentRow[changesCurrentRowCount++] = index;
@ -190,12 +182,22 @@ final class CCITTFaxDecoderStream extends FilterInputStream {
break;
case VALUE_PASSMODE:
index = changesReferenceRow[getNextChangingElement(index, white) + 1];
int pChangingElement = getNextChangingElement(index, white) + 1;
if(pChangingElement >= changesReferenceRowCount || pChangingElement == -1){
index = columns;
}else{
index = changesReferenceRow[pChangingElement];
}
break;
default:
// Vertical mode (-3 to 3)
index = changesReferenceRow[getNextChangingElement(index, white)] + n.value;
int vChangingElement = getNextChangingElement(index, white);
if(vChangingElement >= changesReferenceRowCount || vChangingElement == -1){
index = columns + n.value;
}else{
index = changesReferenceRow[vChangingElement]+ n.value;
}
changesCurrentRow[changesCurrentRowCount] = index;
changesCurrentRowCount++;
white = !white;
@ -212,12 +214,12 @@ final class CCITTFaxDecoderStream extends FilterInputStream {
int start = white ? 0 : 1;
for (int i = start; i < changesReferenceRowCount; i += 2) {
if (a0 < changesReferenceRow[i]) {
if (a0 < changesReferenceRow[i] || (a0 == 0 && changesReferenceRow[i] == 0)) {
return i;
}
}
return 0;
return -1;
}
private void decodeRowType2() throws IOException {
@ -271,6 +273,7 @@ final class CCITTFaxDecoderStream extends FilterInputStream {
int index = 0;
boolean white = true;
for (int i = 0; i <= changesCurrentRowCount; i++) {
int nextChange = columns;