Большое спасибо Camickr!
До сих пор это было очень просто.
Вот результат:
...
BufferedImage finalCut = extractEdge (source, dest);
...
g2d.drawImage (buff, 100, 100, null);
...
public static BufferedImage extractEdge(BufferedImage imgBottom, BufferedImage imgTop)
{
BufferedImage buffer = new BufferedImage(imgBottom.getWidth(), imgBottom.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2dBuff = buffer.createGraphics();
g2dBuff.setComposite(AlphaComposite.getInstance(AlphaComposite.XOR));
g2dBuff.drawImage(imgBottom, 0, 0, null);
g2dBuff.drawImage(imgTop, (int) getCenter(0, imgBottom.getWidth(), imgTop.getWidth(), true), (int) getCenter(0, imgBottom.getHeight(), imgTop.getHeight(), true), null);
return buffer;
}
public static float getCenter(float startZone, float zoneLenght, float elementLenght, boolean round)
{
float s = startZone + (zoneLenght - elementLenght) / 2f;
return (round) ? Math.round(s) : s;
}
Окончательная обработка