Ich versuche, eine Bildschirmaufnahme-App zu erstellen. Ich habe Code, der einen Screenshot mit java.awt.Robot.createScreenCapture
erstellt und speichert dann die Ausgabe in einer Arraylist. Die Arraylist muss Bilder speichern. Ich muss sehr schnell auf alle BufferedImages
zugreifen können. Ich habe versucht, die BufferedImages
in byte[]
zu konvertieren und sie dann zu speichern, aber sie zu gepufferten Bildern zurück zu konvertieren dauert zu lange (ungefähr 1 Sekunde). Gibt es eine Möglichkeit, dies zu tun, ohne Befehlszeilenargumente hinzufügen zu müssen?Speichern Sie Tausende von BufferedImages in ArrayList, ohne den gesamten Speicher zu belegen - Java
Fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
Code:
static ArrayList <BufferedImage> bilist = new ArrayList <BufferedImage>();
public static Timer recordingTimer = new Timer (40, new ActionListener() {
public void actionPerformed (ActionEvent e) {
try {
BufferedImage bimage = robot.createScreenCapture(wholescreen);
bilist.add(bimage);
if (bilist.size() > 7500) bilist.remove(7500);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
Haben Sie die Mathematik gemacht? Was ist die Größe eines Bildschirms? Wie viel Speicher ist tatsächlich für das Array verfügbar? – Mike
Wenn die Bilder eine Auflösung von 1920x1080 haben und 4 Bytes für jedes Pixel benötigen, müssen Sie 7500x1920x1080 * 4/(1024x1024x1024) = 59,75 GB bereitstellen, um das in Ihrem Arbeitsspeicher zu halten. Also warum musst du 7500 Bilder im Speicher behalten? – displayname
Ich brauche 7500 Bilder, so dass, wenn etwas auf dem Computer passiert, können Sie eine Taste drücken, speichert die letzten 5 Minuten, was passiert ist (7500 Frames) Der Bildschirm ist 1920 * 1080, und das Programm verfügt über 1 GB Speicher – Xlsx