javafx如何测试图像相等?

时间:2014-09-25 16:57:37

标签: java image javafx equality

for (int i = 0; i < image1Width; i++)
{
  for (int j = 0; j < image1Height; j++)
  {
    if (image1.getPixelReader().getColor(i, j) != image2.getPixelReader().getColor(i, j)) return false;
  }
}

这就是我现在所拥有的。我传递了两个图像(javafx.scene.image.Image)。这意味着当图像相同时,它永远不会返回false。不幸的是,当我传递相同的图像时,这会返回false。

感谢。

2 个答案:

答案 0 :(得分:2)

你需要

if (!image1.getPixelReader().getColor(i, j).equals(image2.getPixelReader().getColor(i, j))) return false;

if (image1.getPixelReader().getArgb(i, j) != image2.getPixelReader().getArgb(i, j)) return false;

第二个版本可能更快。

答案 1 :(得分:0)

对于只想复制和粘贴此即用型方法的人

private boolean isImageEqual(Image firstImage, Image secondImage){
    // Prevent `NullPointerException`
    if(firstImage != null && secondImage == null) return false;
    if(firstImage == null) return secondImage == null;

    // Compare images size
    if(firstImage.getWidth() != secondImage.getWidth()) return false;
    if(firstImage.getHeight() != secondImage.getHeight()) return false;

    // Compare images color
    for(int x = 0; x < firstImage.getWidth(); x++){
        for(int y = 0; y < firstImage.getHeight(); y++){
            int firstArgb = firstImage.getPixelReader().getArgb(x, y);
            int secondArgb = secondImage.getPixelReader().getArgb(x, y);

            if(firstArgb != secondArgb) return false;
        }
    }

    return true;
}