javafx如何测试图像相等性?

Posted

技术标签:

【中文标题】javafx如何测试图像相等性?【英文标题】:javafx how to test image equality? 【发布时间】:2014-11-20 13:15:48 【问题描述】:
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。

谢谢。

【问题讨论】:

【参考方案1】:

你需要

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;

第二个版本可能更快。

【讨论】:

非常感谢。这解决了这个问题。有趣的是,比较颜色不起作用。 它应该通过比较颜色来工作,只要您使用正确的相等测试。 对,我明白了。 ==/!= 比较值对吗? getColor() 不应该返回一个可以与相同颜色进行比较的值吗?我只是对为什么 ==/!= 不够感兴趣。 不,== 用于引用类型时(Color 是引用类型,int 是原始类型)比较引用。比较引用类型时应该使用.equals(...),除非你有充分的理由不这样做。【参考方案2】:

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

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;

【讨论】:

以上是关于javafx如何测试图像相等性?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 xcttest 测试对象相等性?

如何使用 OffsetDateTime 属性测试数据类的相等性?

如何在 CoreBluetooth 中测试两个 CBPeripheral 的相等性?

重命名后如何检查火花列的相等性

在 Realm 中测试相等性

测试浮点相等性。 (FE_FLOATING_POINT_EQUALITY)