in src/main/java/org/apache/pdfbox/jbig2/image/BitmapScanline.java [64:113]
protected void filter(final int[] preShift, final int[] postShift, final Weighttab[] tabs,
final Scanline dst)
{
final BitmapScanline dstBitmapScanline = (BitmapScanline) dst;
final int dstLength = dst.length;
// start sum at 1 << shift - 1 for rounding
final int start = 1 << postShift[0] - 1;
final int srcBuffer[] = lineBuffer;
final int dstBuffer[] = dstBitmapScanline.lineBuffer;
// the next two blocks are duplicated except for the missing shift operation if preShift == 0.
final int preShift0 = preShift[0];
final int postShift0 = postShift[0];
if (preShift0 != 0)
{
for (int dstIndex = 0, tab = 0; tab < dstLength; tab++)
{
final Weighttab weightTab = tabs[tab];
final int weights = weightTab.weights.length;
int sum = start;
for (int weightIndex = 0, srcIndex = weightTab.i0; weightIndex < weights
&& srcIndex < srcBuffer.length; weightIndex++)
{
sum += weightTab.weights[weightIndex] * (srcBuffer[srcIndex++] >> preShift0);
}
final int t = sum >> postShift0;
dstBuffer[dstIndex++] = t < 0 ? 0 : t > 255 ? 255 : t;
}
}
else
{
for (int dstIndex = 0, tab = 0; tab < dstLength; tab++)
{
final Weighttab weightTab = tabs[tab];
final int weights = weightTab.weights.length;
int sum = start;
for (int weightIndex = 0, srcIndex = weightTab.i0; weightIndex < weights
&& srcIndex < srcBuffer.length; weightIndex++)
{
sum += weightTab.weights[weightIndex] * srcBuffer[srcIndex++];
}
dstBuffer[dstIndex++] = sum >> postShift0;
}
}
}