drawImage bremst GUI

Status
Nicht offen für weitere Antworten.

MrFox

Mitglied
Hallo,

ich habe momentan ein kleines Problem mit Bildern.
Ich habe eine eigene Komponente von JComponent abgeleitet und zeichne deren Inhalt schön brav in der überschriebenen paintComponent-Funktion

voilà:

Code:
protected void paintComponent(final Graphics g) {
	Graphics2D g2 = (Graphics2D) g.create();
        
	worldX = (this.getBounds().width / 2) - (spielplanImage.getWidth() / 2);
	worldY = (this.getBounds().height / 2) - (spielplanImage.getHeight() / 2);
	
	g2.setColor(this.getBackground());
	g2.fillRect(0, 0, this.getBounds().width, this.getBounds().height);
	g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
	Rectangle imageRect = 
	    new Rectangle(worldX, worldY, spielplanImage.getWidth(), spielplanImage.getHeight());
	if (imageRect.intersects(g2.getClipBounds())) {
		g2.drawImage(spielplanImage, worldX, worldY, this);
	}
	
	paintConnections(g2); //Ein paar Striche noch draufgepainted
	paintInseln(g2); //Ein paar Kringel noch drauf
	
	g2.dispose();
    }

Tatsache ist, dass die GUI sehr träge ist (neuzeichnen dauert ca. 600-800 ms).
Wenn ich allerdings dieses "drawImage" auskommentiere, dann läuft die GUI mit normaler Geschwindigkeit.
Folglich liegt's wohl am "drawImage".

Das Bild was da gezeichnet wird ist bereits geladen und hat eine Größe von läppischen 700 x 450 Px.
Warum ist das so langsam? Mache ich irgendetwas falsch oder ist das die Trägheit von Java?
Wenn es diese ist, gibt es dann eine Möglichkeit das Zeichnen irgendwie "auszulagern", sodass der Rest der GUI nicht drauf wartet?

Ich weiß nicht ob das von Belang ist: Die Komponente steckt in einem ScrollPane. Sie ist allerdings auch langsam, wenn das ScrollPane nicht aktiv ist, d.h. keine ScrollBalken angezeigt werden.

Mfg
Julian
 

Campino

Top Contributor
Im Normalfall zeichnet man in der paint, probier mal ob's daran liegt.

Ansonsten nutz mal ein BufferedImage für spielplanImage, dass ist dann in jedem Fall schon geladen. Du musst es über ImageIO.read() erstellen.

campino
 

MrFox

Mitglied
Campino hat gesagt.:
Im Normalfall zeichnet man in der paint, probier mal ob's daran liegt.
Tatsächlich? Hab's probiert, daran liegt es nicht

Campino hat gesagt.:
Ansonsten nutz mal ein BufferedImage für spielplanImage, dass ist dann in jedem Fall schon geladen. Du musst es über ImageIO.read() erstellen.
Ist schon der Fall

Was mich weiterhin irritiert...wenn ich das Bild als ImageIcon auf ein Label packe gehts wieder.
Daraufhin habe ich das (vorher nach ImageIcon umgewandelte) Bild in meiner Paintmethode auch mal mit paintIcon gepainted...wieder der Performanceschwund.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
J drawImage Fehlersuche AWT, Swing, JavaFX & SWT 5
U drawImage mit EPS AWT, Swing, JavaFX & SWT 0
A Problem mit drawImage AWT, Swing, JavaFX & SWT 1
M Graphics.drawImage von unten nach oben abbilden lassen AWT, Swing, JavaFX & SWT 6
P 2D-Grafik g2.drawImage() langsam AWT, Swing, JavaFX & SWT 110
L Graphics.drawImage() - Output-Größe entspricht nicht Parametern AWT, Swing, JavaFX & SWT 10
L Border verschwindet durch Graphics.drawImage() AWT, Swing, JavaFX & SWT 4
P Swing Skalieren mit DrawImage macht Linien kaputt AWT, Swing, JavaFX & SWT 6
G .ico drawImage AWT, Swing, JavaFX & SWT 5
B drawImage funktioniert nicht AWT, Swing, JavaFX & SWT 4
B drawImage auf JPanel bleibt ohne Auswirkungen AWT, Swing, JavaFX & SWT 9
K Graphics.drawImage() sehr schnell AWT, Swing, JavaFX & SWT 5
M Graphics.drawImage verlangsamt sich plötzlich AWT, Swing, JavaFX & SWT 15
0 AWT Graphics2D.drawImage() funktioniert nicht mehr korrekt mit Core i7 AWT, Swing, JavaFX & SWT 4
G Graphics.drawImage() AWT, Swing, JavaFX & SWT 6
? Problem mit drawImage: bei Frame ok, bei JPanel nicht AWT, Swing, JavaFX & SWT 4
F Problem mit drawImage() AWT, Swing, JavaFX & SWT 6
I drawImage AWT, Swing, JavaFX & SWT 4
B drawImage() hängt! AWT, Swing, JavaFX & SWT 18
O performance g2d.drawImage() AWT, Swing, JavaFX & SWT 17
L Bildbewegung mit g.drawImage AWT, Swing, JavaFX & SWT 3
K g.DrawImage unter paintComponent klappt nur beim 1. Aufruf AWT, Swing, JavaFX & SWT 3
S kurze Frage zu drawImage AWT, Swing, JavaFX & SWT 12
F Endlosschleife bei drawImage() AWT, Swing, JavaFX & SWT 4
L Gezeichnetes Image mit DrawImage überzeichnen AWT, Swing, JavaFX & SWT 3
M drawImage mit seltsamen verhalten AWT, Swing, JavaFX & SWT 2
M Swing bremst GUIs von allen Programmen aus AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben