可视化2 BufferedImages的差异

时间:2012-08-23 14:09:30

标签: java for-loop comparison bufferedimage graphics2d

我已经制作了一个功能,通过制作一个新图像来比较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。

0 个答案:

没有答案