zooming-Framework und doubleBuffering

Status
Nicht offen für weitere Antworten.

mseele

Mitglied
hi,

ich entwickel grad ein programm das viele verscheidene rechtecke auf dem bildschirm darstellt. die rechtecke können per dragAndDrop verschoben werden und das programm unterstützt zooming.
jetzt hab ich das problem das die preformance sehr schlecht ist, da die rechtecke viel text... als inhalt haben. deswegen wollte ich die rechtecke mit doubleBuffering umsetzten, damit ich mehr geschwindigkeit raushole.
das funktioniert auch ganz tool, allerdings wird der inhalt der rechtecke im gezoomten modus recht pixelig dargestellt. leider bin ich noch nicht auf eine lösung gekommen. ich hab aber ein beispiel programm und wär dankbar wenn sich das jemand mal anschauen würde.
hier kann man leider keine dateien an ein posting dranhängen, ich würd das programm aber per mail weiterleiten, wenn jemand interesse daran hätte, mir zu helfen! :lol:

thx mseele
 
Vielleicht nützt Antialiasing was, bin mir aber nicht sicher, ob ich dich richtig verstehe.
Bei dem, was ich aktuell programmiere (mit Zoomfunktion) (hallo, Beni), hats was genützt:

Code:
graphics2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 
nein! das hat nix mit antialaising zu tun! durch das zoomen wird der buffer, also das bild einfach groß gezeichnet! ich weiß wo das problem liegt, bekomm es nur nicht behoben! soll ich dir mal mein beispielprogramm schicken?
 
Also, ich verstehe jetzt das Problem.
Und: Ich habe keine Ahnung.

Aber :!: : Wenn du die Buttons doppelbufferst, wird die Performance eher schlechter, dadurch wird nur das Flackern verhindert, außerdem sind deine JComponents sowieso doppelgebuffert. Desegen ist das ganze ewas unnötig. Trotzdem interessiert es mich.

Nochmal zur Erklärung an alle:
Er hat in den Buttons folgende Methode (ich darf das doch posten, oder?) zum Zeichnen, mit Unterscheidung zwischen doppelgebuffert und nicht-doppelgebuffert.
Code:
protected void paintComponent(Graphics g) {
		if (buffered) {
			//buffered painting
			Graphics2D g2d = (Graphics2D) g;
			//g2d.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING, java.awt.RenderingHints.VALUE_ANTIALIAS_ON);
			if (bufferedImage == null) {
				bufferedImage = (BufferedImage) createImage(this.getWidth(), this.getHeight());
				Graphics2D bufferedGraphics = (Graphics2D) bufferedImage.getGraphics();
				bufferedGraphics.setColor(this.getBackground());
				bufferedGraphics.fillRect(0, 0, this.getWidth(), this.getHeight());
				bufferedGraphics.setColor(Color.GREEN);
				bufferedGraphics.drawString("jTEST", 10, 30);
				bufferedGraphics.drawRect(0, 0, this.getWidth() - 1, this.getHeight() - 1);
			}
			g2d.drawImage(bufferedImage, 0, 0, this.getWidth(), this.getHeight(), this);
		} else {
			//unbuffered painting
			Color defaultColor = g.getColor();
			g.setColor(this.getBackground());
			g.fillRect(0, 0, this.getWidth(), this.getHeight());
			g.setColor(Color.GREEN);
			g.drawString("jTEST", 10, 30);
			g.drawRect(0, 0, this.getWidth() - 1, this.getHeight() - 1);
			g.setColor(defaultColor);
		}
	}

In einem Testframe hat er dann zwei solche Buttons, und der Frame hat ein zoombares Component, hier das JPanel, das die Buttons beinhaltet, und bevor das gezeichnet wird, wird das Graphics2D-Object skaliert.

Das doppelgebufferte Image ist verpixelt, das andere nicht.

Vielleicht weiß wer, woran das liegen könnte?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben