【问题标题】:Get an image that's the difference between two images (Java Graphics2D)获取两个图像之间差异的图像(Java Graphics2D)
【发布时间】:2020-08-01 16:21:17
【问题描述】:

这就是我想要做的事情: 获取两张图像之间的差异的图像。

上下文: 我有 2 张图片(相同),但一张比另一张大。 我将较小的叠加在较大的中间。

我想检索两张图像之间的差异图像。

预期结果:

您建议用什么代码高效地做到这一点?

编辑: 我没有具体说明方法。 我使用 BufferedImage 在 Graphics2D 上下文中工作

【问题讨论】:

  • 您的描述与标题完全不符。当您说图像的边框时,想到的是 ImageBox 的矩形边框或其他东西。请更具体地说,您是使用 JavaFx 中的内置矢量图形还是仅使用位图图像 (png/jpg)?以及什么 java UI 框架(swing、JavaFX)??
  • 抱歉,我编辑了帖子。我没有具体说明方法。我使用 BufferedImage 在 Graphics2D 图形上下文中工作
  • 您应该可以使用AlphaComposite。有关更多信息和完整的工作示例,请参阅:ibm.com/developerworks/java/library/j-mer0918

标签: java border bufferedimage cut


【解决方案1】:

非常感谢 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;
}

Final cut

【讨论】:

    猜你喜欢
    • 2021-07-04
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 2012-02-28
    相关资源
    最近更新 更多