有没有快速的方法在屏幕上找到图像?
我确实喜欢这样:(之前我用Robot.createScreenCapture(...)抓住了屏幕)
public static Point search(BufferedImage big, BufferedImage small) {
Robot robot = null;
try {
robot = new Robot();
} catch (AWTException e) {
e.printStackTrace();
}
long time=System.currentTimeMillis();
for (int x = 0; x < big.getWidth() - small.getWidth(); x++) {
for (int y = 0; y < big.getHeight() - small.getHeight(); y++) {
if (compare(x, y, big, small)) {
return new Point(x, y);
}
}
}
System.out.println(System.currentTimeMillis()-time);
return null;
}
private static boolean compare(int xs, int ys, BufferedImage img1, BufferedImage img2) {
for (int x = 0; x < img2.getWidth(); x++) {
for (int y = 0; y < img2.getHeight(); y++) {
if (img1.getRGB(x + xs, y + ys) != img2.getRGB(x, y)) {
return false;
}
}
}
return true;
}
但它有时只需要200毫秒,但有时需要10000毫秒! :(
编辑:如果有人知道Autohotkey,它是另一种编程语言,并且有一个名为“ImageSearch”的函数可以在几毫秒内找到这些图像...(基于C ++,我认为)
答案 0 :(得分:3)
两件事:
你使用的算法并不是很快:它是一个O(mn)算法,所以你应该研究better ones,比如KMP算法。
在搜索图像之前,可能首先压缩它们然后搜索,然后使用另一个检查来确保压缩不会影响算法。一个简单的“取出所有其他行”应该会加快程序的速度。