Как проверить группу пикселей на определённый цвет за 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; // Выход из цикла
}
}
}
}