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如何测试图像相等性?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 OffsetDateTime 属性测试数据类的相等性?