miese performance bei nem BufferedImage + repaint :(

Status
Nicht offen für weitere Antworten.

para_

Bekanntes Mitglied
Hi, kann mir jemand sagen warum folgender code extrem langsam ist?
Wenn ich auf ein Feld klicke soll sich das terrain ändern, eben nur an der stelle wo ich hinklicke, aber wenn ich klicke dauerts ne sekunde oder so bis sich was tut... :( (die karte ist 100x100 felder groß, bzw einstellbar, aber auch bei kleineren karten dauert das aktualisieren extrem lange)


Code:
//...
	BufferedImage map;
	int[][] mapAliases;
	int scale=20;
	int width; 	// in feldern, nicht in pixeln!
	int height; 
	
	public Map( int width, int height, int terrainAlias ) {
		this.width = width;
		this.height = height;
		this.setPreferredSize(new Dimension(width*scale, height*scale));
		this.setSize(new Dimension(width*scale, height*scale));
		map = new BufferedImage(scale*width, scale*height, BufferedImage.TYPE_3BYTE_BGR);
		mapAliases = new int[width][height];
		for ( int i=0; i<width; i++) {
			for ( int j=0; j<height; j++) {
				mapAliases[i][j] = -1;
			}
		}
	}
	
        // x und y sind Mouse positionen
	public void changeTile( int x, int y, int terrainAlias ) {
		x /= scale;
		y /= scale;
		if ( x<width && y<height && mapAliases[x][y] != terrainAlias) {
			mapAliases[x][y] = terrainAlias;
                        Graphics g = map.getGraphics();
			g.drawImage(MyGraphics.graphics.get(terrainAlias).getScaledInstance(scale, scale, BufferedImage.SCALE_FAST), x*scale, y*scale, null);
			// System.out.println(" changed something ");
			repaint();
		}
		else { 
			// System.out.println(" changed nothing ");
		}
	}
	
	public void paintComponent( Graphics g ) {
		g.setColor(Color.BLACK);
		g.fillRect(0,0,this.getPreferredSize().width, this.getPreferredSize().height);
		g.drawImage(map.getScaledInstance(width*scale, height*scale, 3), 0, 0, null);
	}

thx für alle möglichen verbesserungsvorschläge :$
 

Wildcard

Top Contributor
wann rufst du changeTile auf?
Bilder zu skalieren ist immer sehr teuer.
Ausserdem hab ich schon nach diesem Snippet den Verdacht das du übelsten Foobar mit Graphics Objekten machst...
 

para_

Bekanntes Mitglied
hm? was meinst du ich mach foobar mit graphics objekten?

change tile wird aufgerufen wenn ich mit der maus klicke bzw dragge

die schlechte performance lag daran dass ich die gesamte map nochmal skaliere, was garnicht sein muss, war mein fehler

trotzdem würd mich intressieren was du meintest :$ würds gern besser machen
 

Marco13

Top Contributor
Die Zeile
Graphics g = map.getGraphics();
ist ein starkes Indiz für einen bekannten Fehler:

Vielleicht auch noch ein paar weitere Erklärungen dazu
http://java.sun.com/products/jfc/tsc/articles/painting/
("Good Painting Code Is the Key to App Performance" :wink: )


Und hier noch das (recht ausführliche) foreneigene Tutorial:
http://www.java-forum.org/de/viewtopic.php?p=278630&highlight=#278630

Die Quintessenz ist: ALLES was jemals gezeichnet wird, muss in paintComponent gezeichnet werden (bzw. in Methoden, die von paintComponent aus aufgerufen werden). Man sollte also NIE getGraphics aufrufen!!! (das kann man nicht deutlich genug sagen :wink: ).
 

para_

Bekanntes Mitglied
ok danke :) dann schau ich mir die erklärungen und tutorials an, ich dachte nur weil das BufferedImage map ja nicht angezeigt wird wenn draufgemalt wird kann ichs ja machen :D
 

Marco13

Top Contributor
Kommando zurück! Man darf DOCH getGraphics aufrufen!

Aber NUR, wenn es auf einem BuffereImage aufgerufen wird. Die Klasse "Component" hat auch eine Methode getGraphics, und die sollte man NICHT aufrufen. Auf einem BufferedImage ist getGraphics vollkommen in Ordnung. (Sorry,ich hatte nur gesehen, dass die Klasse "Map" heißt, und bin davon ausgegangen, dass es eine Component ist - dass die Klasse Map aber ein Field "map" enthält, das ein BufferedImage ist, hatte ich übersehen :oops: )
[/u][/b]
 

Wildcard

Top Contributor
Marco13 hat gesagt.:
Kommando zurück! Man darf DOCH getGraphics aufrufen!

Aber NUR, wenn es auf einem BuffereImage aufgerufen wird.
Auch in BufferedImage ist die nur zur Abwärtskompatibilität. Stattdessen createGraphics aufrufen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
H Watson-Crick-Complement Performance Allgemeine Java-Themen 18
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
B Performance Messungen Allgemeine Java-Themen 4
J Threads verbessern die Performance NICHT ? Allgemeine Java-Themen 8
X Performance für Tomcat / Apache optimieren Allgemeine Java-Themen 2
I Performance - JDBC UPC PoolDataSoure Allgemeine Java-Themen 0
E Lambda filter performance Allgemeine Java-Themen 2
D Performance-Probleme mit Joda-Time Allgemeine Java-Themen 3
A Jasper Report Performance bei PDF erzeugen Allgemeine Java-Themen 0
A Best Practice Variablen vertauschen - Performance Allgemeine Java-Themen 1
R DBUnit Performance Probleme Allgemeine Java-Themen 0
P Performance: super explizit erwähnen oder weglassen? Allgemeine Java-Themen 5
S starke performance probleme des forums Allgemeine Java-Themen 10
C Performance Tips Allgemeine Java-Themen 13
A Performance/Speicherplatz-Nutzung bei Tests Allgemeine Java-Themen 6
R Java Performance testen Allgemeine Java-Themen 18
StrikeTom Java Performance Fragen Allgemeine Java-Themen 5
V Performance steigern Allgemeine Java-Themen 7
D Reflection-Performance Allgemeine Java-Themen 7
M Einfluss von Caching auf die Performance (große Arrays) Allgemeine Java-Themen 24
R Collections Performance einer HashMap Allgemeine Java-Themen 26
i<3java [Groovy/Grails](oder auch java) Mögliche Performance Probleme bei Mailversendung Allgemeine Java-Themen 2
D Performance Objektallokation Allgemeine Java-Themen 28
J Java Performance nicht nachvollziehbar Allgemeine Java-Themen 3
I Library für High Performance Mime Type Erkennung Allgemeine Java-Themen 8
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
M Runtime.exec() - Performance / Frage zu Threads Allgemeine Java-Themen 5
M Performance Allgemeine Java-Themen 6
M Performance Allgemeine Java-Themen 5
E Performance website download Allgemeine Java-Themen 13
MQue Performance Methodenaufruf - if Abfrage Allgemeine Java-Themen 19
hdi Was frisst in meinem Programm den Speicher / verschlechtert die Performance Allgemeine Java-Themen 11
J Performance von Java GUI-Anwendungen Allgemeine Java-Themen 2
U Java Performance im Vergleich zu C++ in speziellem Anwendungsfall Allgemeine Java-Themen 6
S Performance und Function Call Depth Allgemeine Java-Themen 6
H Performance Vorteil durch Wechsel der JVM? Allgemeine Java-Themen 6
A Performance: byte[] in byte[][][] konvertieren Allgemeine Java-Themen 2
T Performance ArrayList#remove Allgemeine Java-Themen 8
ARadauer Performance Pptimierung -Lesen/Schreiben Allgemeine Java-Themen 10
Chris81T Performance Problem durch mehrfaches Starten eines JAVA Prog Allgemeine Java-Themen 8
G Hibernate, JTable und Performance Allgemeine Java-Themen 17
M Listener und Performance Allgemeine Java-Themen 9
P Performance: Ziehen ohne Zurücklegen (große Datenmenge) Allgemeine Java-Themen 10
D Performance: ArrayList vs. Array vs. "Eigene Liste&quot Allgemeine Java-Themen 8
M nichtreferenzierte Objekte auf NULL setzen -> Performance Allgemeine Java-Themen 4
S Ursache für schlechte Performance Allgemeine Java-Themen 2
L Java Performance Check Tool Allgemeine Java-Themen 3
S Performance von Comparator Allgemeine Java-Themen 3
egrath Performance Problem mit File-I/O Allgemeine Java-Themen 6
S Performance Problem Allgemeine Java-Themen 11
X Java Performance auf Sun Systemen bzw. generell Allgemeine Java-Themen 4
T Performance String-Operationen und StringBuffer (1.4und 1.5) Allgemeine Java-Themen 18
T Performance-Grundlagen Allgemeine Java-Themen 4
G Performance Problem bei der Übertragung Server zum Client Allgemeine Java-Themen 3
V Performance Leck finden Allgemeine Java-Themen 3
T Tile Game Performance Allgemeine Java-Themen 32
M Performance enorm langsam Allgemeine Java-Themen 26
F Performance von Reflection vs Statisches Coden Allgemeine Java-Themen 4
M Performance: Java zu C/C++ bei Datenbankanwendung Allgemeine Java-Themen 3
Y unnecessary cast & Performance Allgemeine Java-Themen 29
conan2 Performance von paint() Allgemeine Java-Themen 2
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2
F Bilder als "Thumbnails" laden - Performance Allgemeine Java-Themen 6
S Java3D Performance optimieren Allgemeine Java-Themen 5
F Wenn ihr Performance wollt nehmt C++ Allgemeine Java-Themen 39
N Performance-Test (Geschwindigkeit von Methoden vergleichen)? Allgemeine Java-Themen 4
S Performance Test mit JMeter Allgemeine Java-Themen 2
T Performance Allgemeine Java-Themen 8
J Anfängerliste für gute Performance? Allgemeine Java-Themen 3
Luma Performance-Problem mit RandomAcces File Allgemeine Java-Themen 4
I Performance bei "String <-> Byte"-Umwandlung Allgemeine Java-Themen 4
I Performance-Probleme bei Schleife Allgemeine Java-Themen 3
C Performance von FOR Schleifen Allgemeine Java-Themen 25
C Performance Vergleich, Java vs. Tcl/Tk Allgemeine Java-Themen 3
D BufferedImage resize Allgemeine Java-Themen 16
RalleYTN JOGL Texture in BufferedImage konvertieren Allgemeine Java-Themen 1
M Input/Output BufferedImage vertauscht width und height Allgemeine Java-Themen 6
G BufferedImage und ByteArray Allgemeine Java-Themen 2
P Threads BufferedImage, Thread Concurrency Allgemeine Java-Themen 1
M Problem mit BufferedImage und PrinterJob im Querformat Allgemeine Java-Themen 1
T BufferedImage verändert sich beim Einlsesen Allgemeine Java-Themen 1
M BufferedImage toString() überschreiben Allgemeine Java-Themen 5
Thallius PDF von einem BufferedImage erstellen Allgemeine Java-Themen 1
S BufferedImage vergleich mit Subimage Allgemeine Java-Themen 1
reibi OutOfMemoryError bei Behandlung von BufferedImage's Allgemeine Java-Themen 6
TheSorm BufferedImage spiegeln Allgemeine Java-Themen 3
A BufferedImage einzelne Pixel transparent machen V2.0 Allgemeine Java-Themen 2
S Undoable BufferedImage? Allgemeine Java-Themen 2
lumo 2D-Grafik BufferedImage und operationen darauf Allgemeine Java-Themen 2
K Image zu BufferedImage konvertieren Allgemeine Java-Themen 9
H BufferedImage Invertieren Allgemeine Java-Themen 13
D md5 berechnen für BufferedImage Allgemeine Java-Themen 5
D BufferedImage rotieren Allgemeine Java-Themen 8
TiME-SPLiNTER Binary BufferedImage automatisch croppen Allgemeine Java-Themen 4
F byte[] aus einem BufferedImage Allgemeine Java-Themen 3
0 BufferedImage - Farbton verändern Allgemeine Java-Themen 5
J BufferedImage aus PNG Files haben keinen Type Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben