Как проверить группу пикселей на определённый цвет за 2-3 секунды?

Мне надо для программы проверить весь монитор на на явность определённых цветов, это должно занимать 2-3 секунды, но у меня оно занимает минуты 3 (я экран разбил на группы по 9 пикселей, помогло тем что проверяется теперь не 10 минут, а 3 минут)

public void check () {
    for (int i = 0;y<MAX_Y; i++) {
        Color c1 = r.getPixelColor(x, y);

        getRed = c1.getRed();
        getGreen = c1.getGreen();
        getBlue = c1.getBlue();

        x = x + split;

        if (getRed == red && getGreen == green && getBlue == blue) {
            target();
        }

        if (x > MAX_X) {
            x = 0;
            y = y + split;
        }
    }
    y = 0;
    x = 0;
}

ну или же можно узнать координаты пикселя по цвету?


Ответы (1 шт):

Автор решения: Dodly Game

Я смог решить проблему

public void screen () throws AWTException, IOException {
    BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
    ImageIO.write(image, "png", new File ("Screen", "screen.png"));
}

public void target() throws AWTException, InterruptedException, IOException {
    String path = "Screen/screen.png"; // Путь до файла
    File pic = new File(path);
    BufferedImage image = ImageIO.read(pic);

    int h = image.getHeight();
    int w = image.getWidth();
    Robot rb = new Robot();

    outLoop : for (int i = 0; i < h; i++) // Внешний цикл для прохода по высоте
    {
        for (int j = 0; j < w; j++) // Внутренний цикл для прохода по ширине
        {
            int pixel = image.getRGB(j, i); // Получение цвета пикселя
            int red = (pixel & 0x00ff0000) >> 16; // Преобразование в красный 255
            int green = (pixel & 0x0000ff00) >> 8; // Преобразование в зеленый 255
            int blue = pixel & 0x000000ff; // Преобразование в синий 255

            // Здесь указываете цвет который нужно найти в RGB
            if (red == red1 && green == green1 && blue == blue1){
                rb.mouseMove(j+5,i+5); // Сдвиг мыши на координаты указанного цвета
                Thread.sleep(5); // Задержка в 1 сек

                // Клик ЛКМ
                rb.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                rb.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
                break outLoop; // Выход из цикла
            }
        }
    }
}
→ Ссылка