我有这样的代码:
for (int hX = 0; hX <= haystack.getWidth() - needle.getWidth(); hX ++) {
for (int hY = 0; hY <= haystack.getHeight() - needle.getHeight(); hY ++) {
placement: for (int nX = 0; nX < needle.getWidth(); nX ++) {
for (int nY = 0; nY < needle.getHeight(); nY ++) {
if (haystack.getRGB(nX + hX, nY + hY) != needle.getRGB(nX, nY)) {
break placement;
}
}
return new Point(hX, hY);
}
}
}
return null;
但是无论图像是否包含其他图像,它总是返回null。我不明白为什么,因为我认为这段代码是准确的。有人可以向我指出我做错了什么,或建议另一种方法来确定较大的图像是否包含较小的图像?
答案 0 :(得分:1)
奇怪的是,这个方法总是返回null,因为只要它看到针的第一行像素匹配haystack的某个部分,该算法就会返回Point。考虑使用continue语句或使用标志并修改循环条件。
可能还有其他一些原因,它总是返回null。确保你没有把针和干草堆混在一起,干草堆的某些部分实际上包含与针完全相同的RGB值。
你也应该做一些小的测试用例。例如,如果针和干草堆是相同的,那么它应该总是返回一个(0,0)点。