我制作了一个函数,通过制作一个新图像来直观地比较 2 个 BufferedImage 的差异,其中第一个图像的每个像素都循环通过,当一个像素等于第二个像素时,在新图像中绘制一个像素。
起初这似乎有效,但是在对该功能进行了一些测试后,我注意到了一些让我现在认为它可能不正确的东西。当我为 img1 输入带有水平渐变条的图像时,对于 img2 输入相同但垂直偏移的图像时,它完全为第一张图像的渐变绘制了蒙版。但是我认为它不应该这样做,因为这些像素不应该匹配。
因此,例如,如果我输入 2 个 BufferedImage,如下所示:
@@@@@@@@ @@@@@@@@
@@@@@@@@ --------
---@---@ ---@---@
@@@----@ @@-----@
它可能会像这样输出一个掩码/BufferedImage:
@@@@@@@@
@@@@@@@@
-------@
@@@----@
但是我希望它会输出这样的东西:
@@@@@@@@
--------
---@---@
@@-----@
当我看它时,我看不出我哪里出错了,但似乎某处有问题。有谁知道我的功能做错了什么?
public BufferedImage MatchBIMask(BufferedImage img1, BufferedImage img2, Color background, Color match){
int w = img1.getWidth();
int h = img1.getHeight();
BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = img.createGraphics();
g.setColor(background);
g.fillRect(0, 0, w, h);
g.setColor(match);
for (int row=0; row < h; row++){
for (int col=0; col < w; col++){
int rgb1 = img1.getRGB(col, row);
int rgb2 = img2.getRGB(col, row);
if (rgb1 == rgb2) {
// Match code here
g.drawRect(col, row, 0, 0); // Draw pixel
}
}
}
return img;
}
编辑:
我获得我比较的 2 个 BufferedImages 的方式是使用以下代码:
BufferedImage img = robot.createScreenCapture(new Rectangle(x, y, w, h)); // Rectangle Area
我不知道该代码是否考虑了 alpha。