Найти изображение на текущем экране - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь проверить, отображается ли конкретное изображение на экране и возвращает ответ 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...