Перегрузка метода createScreenCapture
Недавно решил написать скрипт который работает с изображением. Сначала у меня создаётся скриншот в области x и из массива координат yCoordinates, потом robot получает один из цвета пикселей на скриншоте и потом преобразовывается цвет, ну и в конце условие if (colorHash < minBackground || colorHash > maxBackground) {. Когда я профилировал этот класс я наткнулся с проблемой, что у меня идёт перегрузка метода screenshot = robotForColorCheck.createScreenCapture(new Rectangle(x, yCoord, 1, screenHeight - yCoord));. Я вроде указал чтобы после первого выполнения screenshot шло обнуление, но ничего так и не помогло.
import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.util.Properties;
public class Catching {
private Thread thread;
private long startTime;
private boolean start;
private boolean recordFlag;
private BufferedImage screenshot;
private Robot clickRobot;
private Robot robotForColorCheck;
private int x = 1108;
private int[] yCoordinates = {473, 582, 689};
private final int minBackground = 1389000;
private final int maxBackground = 6000000;
private int rgb;
private int colorHash;
private Color color;
public Catching(){
}
public void setClickRobot(Robot clickRobot) {
this.clickRobot = clickRobot;
}
public void setRobotForColorCheck(Robot robotForColorCheck) {
this.robotForColorCheck = robotForColorCheck;
}
public void setRecordFlag(boolean flag) {
this.recordFlag = flag;
}
private int calculateColorHash(Color color) {
return (color.getRed() << 16) | (color.getGreen() << 8) | color.getBlue();
}
public void startCatch() {
start = true;
thread = new Thread(() -> {
startTime = System.currentTimeMillis();
while (start && !Thread.currentThread().isInterrupted()) {
for (int yCoord : yCoordinates) {
int screenHeight = (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
screenshot = robotForColorCheck.createScreenCapture(new Rectangle(x, yCoord, 1, screenHeight - yCoord));
rgb = screenshot.getRGB(0, 0); // Получаем цвет из одного пикселя
color = new Color(rgb);
colorHash = calculateColorHash(color);
if (colorHash < minBackground || colorHash > maxBackground) {
//ниже просто работа с мышью
if (recordFlag) {
recordVideo();
}
}
// Обнуление объектов
screenshot.flush();
screenshot = null;
color = null;
rgb = 0; // Обнуление переменной rgb
colorHash = 0; // Обнуление переменной colorHash
}
if ((System.currentTimeMillis() - startTime) >= 10000) {
//ниже просто работа с мышью
startTime = System.currentTimeMillis();
}
}
});
thread.start();
}
public void recordVideo(){
//работа с мышью
}
}