Swing Komponente als Bild speichern

Kamairo

Mitglied
Moin,

ich versuch im Moment einen Screenshot einer Swing Komponente als Bild zu speichern, momentan hab ich folgendes:

Java:
	private void ActionSave(){
		int w = pgg.MainViewerPanel.getWidth();
		int h = pgg.MainViewerPanel.getHeight();
		String filename;

		BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB);
		Graphics2D graphics = image.createGraphics();
		pgg.MainViewerPanel.paintAll(graphics);						
		graphics.dispose();
		
		FileDialog saveDi = new FileDialog(pgg,"Bild speichern...",FileDialog.SAVE);
		saveDi.setVisible(true);
		filename = saveDi.getDirectory();
		filename += saveDi.getFile(); 		
			            
		try {
		   	 ImageIO.write(image, "jpeg", new File(filename));
		} catch (IOException ex) {
		   	 System.out.println("error");
		 }
		}

Das funktioniert für normale Swing Komponenten auch einwandfrei, allerdings muss ich nen Screenshot aus einer Swing Komponente speichern, die von nem Plugin kommt. Das Plugin heißt View3D und basiert auf dem Visualization Tool Kit (VTK).
Hier ist die Dokumentation
Es geht dabei um die Klasse "ViewerPanel", die von Swing Komponenten erbt.
Gibts ne andere möglichkeit von Swing Komponenten Screenshots zu machen, als die oben, die evtl funktionieren könnte?

Btw "pgg" ist die Instanz meiner GUI Klasse.
 

Marco13

Top Contributor
Das Hauptproblem dürfte sein, dass der VTKCanvas keine Swing-Component ist, sondern ein nativer Canvas, in den mit OpenGL reingerendert wird.
Man könnte schauen, ob es im VTK Möglichkeiten gibt, den Inhalt eines solchen Canvas abzugreifen, irgendwas, was in Richtung glReadPixels geht (oder besser: Eine direkt vom VTK angebotene Funktion), aber eine API-Doku zum Java-VTK bzw. VTKCanvas hab' ich jetzt auf die Schnelle nicht gefunden (und den Code auch nicht)
 

Kamairo

Mitglied
Ja alles klar exakt das hab ich mir auch schon so gedacht, ja es gibt ne methode bei vtk komponenten die heißt .getCanvas() mhh okay ich such da mal
 

Kr0e

Gesperrter Benutzer
Ansonsten die absolute holzhammer Methode (Sofern du nicht 30 mal pro Sekunde ein Bild erstellen willst): Screenshot vom Desktop machen und als Clip die absoluten Screenkoordinaten deiner Komponente angeben. Mit der klasse Robot kann man Screenshots machen...
 

Kamairo

Mitglied
Die Holzhammer Methode gefällt mir ganz gut, Problem is nur:

Die absoluten Screenkoordinaten variieren ja je nach dem ob der benutzer das fenster verschiebt oder nicht, kann man sowas aus nem JFrame auslesen? Iwie sowas wie getLocation?

edit: ahh gefunden getLocationOnScreen()

edit: ja perfekt die Holzhammer Methode funktioniert einwandfrei :) hab allerdings nochmal schnell ne andere frage: Wie kriege ich das hin, dass im FileDialog nur die extension .jpg erlaubt wird und falls der benutzer sie nicht eingiebt angehängt wird?
 
Zuletzt bearbeitet:

Kr0e

Gesperrter Benutzer
Manchmal sind die einfachsten und scheinbar "unprofessionellen" Lösungen die Besten :D

Wegen dem FileDialog: Du kannst mit setFileFilter mal rumexperimentieren und natürlich die Doku von JFileChooser lesen, da dürften solche Fälle beschrieben werden...
 

Michael...

Top Contributor
Ich vermute mal, dass wenn Du wenn der Inhalt der Komponente per OpenGL reingerendert wird, wird auch die "Hammermethode" nicht weiterhelfen.
Aber das lässt sich ja schnell feststellen, in dem man versucht mit der Screenshot Funktion des Betriebssystems einen Screenshot zu machen.
 

Kr0e

Gesperrter Benutzer
Warum sollte das nicht gehen ? Es wird vom Bildschirminhalt ein Foto gemacht und das ist ja der Bildschirminhalt ;)
 

Marco13

Top Contributor
Es gibt Fälle, wo SO direkt in den Grafikspeicher gerendert wird, dass man keinen Screenshot machen kann (bei einigen Videoplayern - das geht so weit, dass ein Video manchmal sogar z.B. auf dem Bildschirm eines Laptops angezeigt wird, aber nicht auf dem angeschlossenen Beamer :autsch: Spaß bei Präsentationen ;) ). Aber bei normalem OpenGL sollte das nicht der Fall sein.
 

Kr0e

Gesperrter Benutzer
Ich kenn solche Fälle auch, aber meist hat das doch mit dem Treiber und nicht mit dem ausführenden Prorgamm zu tun, oder ? ATI-Treiber sind da ein gutes Beispiel... Dort kann man einstellen, ob bei mehreren Bildschirmen auch Videoinhalt angezeigt werden soll oder nicht. Ich verstehe allerdings nicht, warum man Videoinhalt nicht anzeigen lassen sollte... Bei NVidiatreibern gibt es solche sinnfreien Einstellungen garnicht erst^^
 

Marco13

Top Contributor
Ich kenn' mich mit Hardwaredetails da nicht aus, aber ich glaube, dass das auch mit Performance zu tun haben kann: Unter bestimmten Bedingungen können da wohl irgendwelche Datentransfers über irgendwelche langsamen Busse oder so vermieden werden, aber... ist nur .. nichtmal Halb- sondern höchstens Viertelwissen :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
M Swing JMenu verdeckt durch Komponente (aber kein AWT und Swing mix!?) AWT, Swing, JavaFX & SWT 3
A Swing Komponente für Swing und JSF durch MVC AWT, Swing, JavaFX & SWT 5
B (Swing) Welche Komponente für unterteilten Text? AWT, Swing, JavaFX & SWT 4
slawaweis Suche TagCloud Komponente für Swing AWT, Swing, JavaFX & SWT 10
D swt komponente in swing-frame AWT, Swing, JavaFX & SWT 4
S Swing Komponente mit jogl AWT, Swing, JavaFX & SWT 18
G Coverflow -artige Komponente für Swing? AWT, Swing, JavaFX & SWT 2
F eigene Swing-Komponente. Drehregler AWT, Swing, JavaFX & SWT 4
G Palette Komponente für Swing? AWT, Swing, JavaFX & SWT 8
Kidao Das Hintergrundbild überdeckt die Swing-Komponente AWT, Swing, JavaFX & SWT 5
T Eigen Swing Komponente AWT, Swing, JavaFX & SWT 9
K Swing-Komponente casten und übergeben AWT, Swing, JavaFX & SWT 4
T JLayeredPane Problem - AWT und SWING Komponente AWT, Swing, JavaFX & SWT 6
clemson Komponente in Swing als aktiv setzen AWT, Swing, JavaFX & SWT 5
A Swing: Wann ist eine Komponente gezeichnet? AWT, Swing, JavaFX & SWT 2
W Zeichnen auf eine Swing-Komponente AWT, Swing, JavaFX & SWT 5
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
A Eclipse 2023 und Swing AWT, Swing, JavaFX & SWT 4
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
ExceptionOfExpectation Anpassung von JKomponentengrößen (Swing) AWT, Swing, JavaFX & SWT 3
thor_norsk AWT SWING Aufgabe AWT, Swing, JavaFX & SWT 7
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
H Simple Animation mit Swing AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
M Swing GridLayout AWT, Swing, JavaFX & SWT 2
O return-Statement mit Swing AWT, Swing, JavaFX & SWT 6
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
Monokuma Swing zu JavaFX AWT, Swing, JavaFX & SWT 5
J Swing Slider AWT, Swing, JavaFX & SWT 11
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
G Swing JPasswordField AWT, Swing, JavaFX & SWT 12
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
C Swing AWT GUI Anfänger Aufgabe AWT, Swing, JavaFX & SWT 7
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
L Kommunikation zwischen Klassen / Konstruktoren bei Swing AWT, Swing, JavaFX & SWT 9
M Feldvalidierung swing AWT, Swing, JavaFX & SWT 4
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
O Zukunft von Swing und JavaFX ? AWT, Swing, JavaFX & SWT 3
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
T Swing Swing an Bildschirm anpassen AWT, Swing, JavaFX & SWT 3
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
M Swing GUI mittels erben sowie variabler Dateninhalt AWT, Swing, JavaFX & SWT 1
W Swing Multitouch mit Swing AWT, Swing, JavaFX & SWT 6
S Swing-Applikation die ein Numpad nachbildet samt Keybindings..? AWT, Swing, JavaFX & SWT 5
S Swing Java Swing AWT, Swing, JavaFX & SWT 6
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
J Swing oder JavaFX AWT, Swing, JavaFX & SWT 21
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
D SQL Statements mit Java Swing benutzen AWT, Swing, JavaFX & SWT 4
Damtonix BufferStrategy flackert (Swing) AWT, Swing, JavaFX & SWT 9
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
B JavaFX oder swing AWT, Swing, JavaFX & SWT 3
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
D Swing in Kombination mit JGraphX und JGraphT AWT, Swing, JavaFX & SWT 0
F main-Funktion bei Swing AWT, Swing, JavaFX & SWT 4
S Java Swing Print() method AWT, Swing, JavaFX & SWT 4
S Java Swing auf Windows Phone AWT, Swing, JavaFX & SWT 6
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
S Manuelles Menu in Swing AWT, Swing, JavaFX & SWT 3
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
Java_RY Bin Ratlos bzgl Malen in Swing AWT, Swing, JavaFX & SWT 5
offi Swing Shuttle List AWT, Swing, JavaFX & SWT 9
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
K Mit JavaFX angefangen. Lohnt sich Swing? AWT, Swing, JavaFX & SWT 28
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
K eigener button in swing AWT, Swing, JavaFX & SWT 3
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
windl Bufferstrategy in Swing nachstellen AWT, Swing, JavaFX & SWT 0
M Kamera in Java Swing einbinden AWT, Swing, JavaFX & SWT 4
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
RalleYTN Swing JavaFX VideoPlayer in Swing einbetten. Ich komm nicht an die Dimension des Videos! AWT, Swing, JavaFX & SWT 0
T swing läuft nur beding flüssig AWT, Swing, JavaFX & SWT 1
A Sonderzeichen bei Swing AWT, Swing, JavaFX & SWT 3
L DoubleBuffering unter Swing AWT, Swing, JavaFX & SWT 0

Ähnliche Java Themen

Neue Themen


Oben