public static void blit()

in src/main/java/org/apache/pdfbox/jbig2/image/Bitmaps.java [533:592]


    public static void blit(Bitmap src, Bitmap dst, int x, int y,
            CombinationOperator combinationOperator)
    {

        int startLine = 0;
        int srcStartIdx = 0;
        int srcEndIdx = (src.getRowStride() - 1);

        // Ignore those parts of the source bitmap which would be placed outside the target bitmap.
        if (x < 0)
        {
            srcStartIdx = -x;
            x = 0;
        }
        else if (x + src.getWidth() > dst.getWidth())
        {
            srcEndIdx -= (src.getWidth() + x - dst.getWidth());
        }

        if (y < 0)
        {
            startLine = -y;
            y = 0;
            srcStartIdx += src.getRowStride();
            srcEndIdx += src.getRowStride();
        }
        else if (y + src.getHeight() > dst.getHeight())
        {
            startLine = src.getHeight() + y - dst.getHeight();
        }

        final int shiftVal1 = x & 0x07;
        final int shiftVal2 = 8 - shiftVal1;

        final int padding = src.getWidth() & 0x07;
        final int toShift = shiftVal2 - padding;

        final boolean useShift = (shiftVal2 & 0x07) != 0;
        final boolean specialCase = src.getWidth() <= ((srcEndIdx - srcStartIdx) << 3) + shiftVal2;

        final int dstStartIdx = dst.getByteIndex(x, y);

        final int lastLine = Math.min(src.getHeight(), startLine + dst.getHeight());

        if (!useShift)
        {
            blitUnshifted(src, dst, startLine, lastLine, dstStartIdx, srcStartIdx, srcEndIdx,
                    combinationOperator);
        }
        else if (specialCase)
        {
            blitSpecialShifted(src, dst, startLine, lastLine, dstStartIdx, srcStartIdx, srcEndIdx,
                    toShift, shiftVal1, shiftVal2, combinationOperator);
        }
        else
        {
            blitShifted(src, dst, startLine, lastLine, dstStartIdx, srcStartIdx, srcEndIdx, toShift,
                    shiftVal1, shiftVal2, combinationOperator, padding);
        }
    }