Я пытаюсь проверить, отображается ли конкретное изображение на экране и возвращает ответ true или false.
Вот мой код, который никогда не возвращает true.ImagetoSearch.png Я взял скриншот и вырезал краской в Windows.
все выглядит хорошо с моей точки зрения, но потратил часы, пытаясь выяснить, почему я не могу получить «правду», когда маленькийизображение на экране.Помогите пожалуйста, где ошибка?
public class esoA {
public static void main(String[] args) throws AWTException, IOException, InterruptedException {
// ******Create an object with image to search
BufferedImage imageToSearch = ImageIO.read(new File("src/imageToSearch.png"));
// ******Method to capture a picture from the center of the screen
BufferedImage capturedScreen = doCaptureScreen(); // return BufferedImage object
// ******Method to check whether captured picture contains the picture we are looking for
isOnScreen(capturedScreen, imageToSearch); // return boolean
// ****** Print result
boolean act = isOnScreen(capturedScreen, imageToSearch);
if (act) System.out.println("Yes");
else System.out.println("No");
}
private static boolean isOnScreen(BufferedImage capturedScreen, BufferedImage imageToSearch) {
BufferedImage scr = capturedScreen;
BufferedImage pic = imageToSearch;
// go through each pixel of captured screen
for (int x = 0; x<scr.getWidth()-pic.getWidth(); x++) {
check_Equality:
for (int y = 0; y<scr.getHeight()-pic.getHeight(); y++) {
for (int a = 0; a<pic.getWidth(); a++) {
for (int b = 0; b<pic.getHeight(); b++) {
if (pic.getRGB(a, b) != scr.getRGB(x+a, y+b)) {
continue check_Equality;
}
}
}
return true;
}
}
return false;
}
private static BufferedImage doCaptureScreen() throws AWTException, IOException{
Robot getScreenPicture = new Robot();
// The name of future file with picture
String format = "png";
String fileName = "src/capturedScreen." + format;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle rectangleToCapture = new Rectangle(0, 0, screenSize.width, screenSize.height);
BufferedImage capturedPicture = getScreenPicture.createScreenCapture(rectangleToCapture);
ImageIO.write(capturedPicture, format, new File(fileName)); // save to see
System.out.println("Screen captured<---");
return capturedPicture;
}