protected void filter()

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;
            }
        }
    }