Получите изображение, которое представляет собой разницу между двумя изображениями (Java Graphics2D) - PullRequest
0 голосов
/ 01 августа 2020

Вот что я пытаюсь сделать: получить изображение, которое представляет собой разницу между двумя изображениями.

Контекст: у меня есть 2 изображения (одинаковых), но одно больше другого. Я накладываю меньшее на центр большего.

Я хотел бы получить изображение, которое представляет собой разницу между двумя изображениями.

Ожидаемый результат:

https://i.stack.imgur.com/f4mav.png

Какой код вы бы предложили сделать это эффективным способом?

Изменить: я не указал способ. Я работаю в контексте Graphics2D с BufferedImage

1 Ответ

0 голосов
/ 01 августа 2020

Большое спасибо 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;
}

Окончательная обработка

...