2017-04-06 1 views

Antwort

4

Sie können einen BufferedImage des Panels zu verschiedenen Zeitpunkten erstellen und dann das Bild in einer Datei speichern.

Die grundlegende Logik hierfür wäre:

BufferedImage image = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_RGB); 
Graphics2D g2d = image.createGraphics(); 
panel.print(g2d); 
g2d.dispose(); 
ImageIO.write(...); 

Schauen Sie sich die Screen Image Klasse für bequeme Methoden, die die obige Funktionalität implementieren.

Natürlich wird dies nicht sehr effizient sein, da Sie für jedes Bild ein völlig neues Bild benötigen.

+0

Sie sollten besser 'print' oder' printAll' anstelle von 'paint' verwenden, da es keine doppelte Pufferung beinhaltet ... und keine Ausnahmen auslöst, wenn die Komponente nicht auf dem Bildschirm dargestellt wird;) – MadProgrammer

+0

@MadProgrammer, keine Verwendung des Doppelpuffers sinnvoll. (Code geändert). Ich hatte noch nie ein Problem mit einer Exception (Plattformunterschiede?), Wenn die Komponente nicht realisiert wird, obwohl es Malprobleme gibt. Grundsätzlich fand ich die Größe der Komponenten (0, 0), also gibt es nichts zu malen. Die ScreenImage-Klasse behandelt die Größen für Sie, indem sie Layout-Code aufruft. – camickr

+0

Ich hatte es durch 'NullPointerException', aber es hat wahrscheinlich damit zu tun, dass es überhaupt keinem Elternteil hinzugefügt wurde, so hatte es Probleme mit dem Einrichten des Doppelpuffers ... oder etwas, ich gerade "print" und "printAll" sind in diesen Fällen zuverlässiger: P – MadProgrammer

Verwandte Themen