J'essaie de faire une application d'enregistrement d'écran. J'ai un code qui prend une capture d'écran en utilisant java.awt.Robot.createScreenCapture
, puis stocke la sortie dans un arraylist. L'arrayliste doit stocker des images . Je dois être en mesure d'accéder à l'un des BufferedImages
très rapidement. J'ai essayé de convertir le BufferedImages
en byte[]
puis de les stocker, mais les convertir en images tamponnées prend trop de temps (environ 1 seconde). Est-ce que je pourrais faire ceci sans devoir ajouter des arguments de ligne de commande?Stockez des milliers de BufferedImages dans ArrayList sans utiliser toute la mémoire - Java
Erreur: 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();
}
}
});
Avez-vous fait les calculs? Quelle est la taille d'un écran? Combien de mémoire est réellement disponible pour le tableau? – Mike
Si les images ont la résolution de 1920x1080 et utilisent 4 octets pour chaque pixel, vous devrez fournir 7500x1920x1080 * 4/(1024x1024x1024) = 59,75 Go afin de garder cela dans votre RAM. Alors pourquoi devez-vous garder 7500 images en mémoire? – displayname
J'ai besoin de 7500 images de sorte que si quelque chose arrive sur l'ordinateur, vous pouvez appuyer sur un bouton qui enregistre les 5 dernières minutes de ce qui est arrivé (7500 images) L'écran est 1920 * 1080, et le programme a 1GB de mémoire – Xlsx