in src/main/java/org/apache/xmlgraphics/image/codec/tiff/TIFFImageEncoder.java [1314:1360]
private static int packBits(byte[] input, int inOffset, int inCount,
byte[] output, int outOffset) {
int inMax = inOffset + inCount - 1;
int inMaxMinus1 = inMax - 1;
while (inOffset <= inMax) {
int run = 1;
byte replicate = input[inOffset];
while (run < 127 && inOffset < inMax
&& input[inOffset] == input[inOffset + 1]) {
run++;
inOffset++;
}
if (run > 1) {
inOffset++;
output[outOffset++] = (byte)(-(run - 1));
output[outOffset++] = replicate;
}
run = 0;
int saveOffset = outOffset;
while (run < 128
&& ((inOffset < inMax
&& input[inOffset] != input[inOffset + 1])
|| (inOffset < inMaxMinus1
&& input[inOffset] != input[inOffset + 2]))) {
run++;
output[++outOffset] = input[inOffset++];
}
if (run > 0) {
output[saveOffset] = (byte)(run - 1);
outOffset++;
}
if (inOffset == inMax) {
if (run > 0 && run < 128) {
output[saveOffset]++;
output[outOffset++] = input[inOffset++];
} else {
output[outOffset++] = (byte)0;
output[outOffset++] = input[inOffset++];
}
}
}
return outOffset;
}