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