Java:使用循环比较两个Bufferedimages

时间:2016-05-07 07:26:56

标签: java image compare

当我想检查两个Bufferedimages是否相同时,我可以使用这两个循环逐个像素地比较它们:

boolean bufferedImagesEqual(BufferedImage img1, BufferedImage img2) {
if (img1.getWidth() == img2.getWidth() && img1.getHeight() == img2.getHeight()) {
    for (int x = 0; x < img1.getWidth(); x++) {
        for (int y = 0; y < img1.getHeight(); y++) {
            if (img1.getRGB(x, y) != img2.getRGB(x, y))
                return false;
        }
    }
} else {
    return false;
}
return true;
}

我从Here

获取此信息

但如果img2旋转90 or 270度,我也希望这个有用。我尝试使用类似的组合来切换xy     img2.getWidth()-x 在第二个.getRGB(),但似乎没有一个工作。

我知道这可能不是世界上最难的问题,但我似乎无法弄明白。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为3次执行“2循环”是不可避免的: 一个用于0度旋转,第二个用于90度和第三个270度:

对于90度:(断言img1.getWidth()== img2.getHeight()&amp;&amp; img1.getHeight()== img2.getWidth())

for (int x = 0; x < img1.getWidth(); x++) {
    for (int y = 0; y < img1.getHeight(); y++) {
        if (img1.getRGB(x, y) != img2.getRGB(img1.getHeight() - 1 - y, x))
            return false;
    }
}

对于270度:(断言img1.getWidth()== img2.getHeight()&amp;&amp; img1.getHeight()== img2.getWidth())

for (int x = 0; x < img1.getWidth(); x++) {
    for (int y = 0; y < img1.getHeight(); y++) {
        if (img1.getRGB(x, y) != img2.getRGB(y, img1.getWidth() - 1 - x))
            return false;
    }
}