# BufferedImage skalieren



## MrFox (21. Feb 2007)

Hallo,

ich wüsste gern wie man ein BufferedImage skaliert und auch ein BufferedImage, nicht ein Image, zurückbekommt.
Denn ein Image ist offensichtlich beim Zeichnen auf die (Swing) Oberfläche sehr imperformant. Bei mir jedenfalls wurde durch das Zeichnen einiger (skalierter) Images die gesamte Oberfläche ausgebremst. Daraufhin hab ich nur die "drawImages" auskommentiert, die Skalierungsvorgänge waren weiterhin aktiv...siehe da, die Oberfläche lief wieder normal. Es muss also ganz klar am drawImage gelegen haben. Zeichne ich die BufferedImages unskaliert läuft auch alles ganz normal. Dementsprechend müssten skalierte BufferedImages eigentlich auch recht gut funktionieren... ich weiß nur nicht wie man das macht.

Mfg J. Schick


----------



## Wildcard (21. Feb 2007)

Hast du etwa bei jedem drawImage dein Bild skaliert? Das würde das Verhalten erklären.


----------



## MadHatter (21. Feb 2007)

Skalieren ist nunmal sehr zeitaufwändig. Versuch so viel wie möglich skaliervorgänge zu sparen (z.B. zwischenspeichern, ein Bild einmal skalieren statt jedesmal neu skalieren).
Auf BufferedImage sollte schneller gehen. Probier folgendes:

```
gegeben: buff: zu skalierende BufferedImage

BufferedImage ergebnis = new BufferedImage(skaliertebreite, skaliertehöhe, , BufferedImage.TYPE_INT_ARGB); // bzw. TYPE_INT_RGB falls du kein Alphakanal brauchst
ergebnis.getGraphics().drawImage(buff, 0,0, skaliertebreite, skaliertehöhe, null); // oder ein anderer drawImage Befehl
```
ergebnis ist dann ein BufferedImage nach der Skalierung. Du kannst noch an Geschwindigkeit sparen wenn du auf Qualität verzichten kannst. Das geht vielleicht mit RenderingHint, bin mir aber nicht sicher.
Außerdem, benutzt du java 1.5 oder 1.6? Wenn ich mich nicht irre, ist java 1.6 (aka Mustang) schneller im skalieren.
Hoffe ich konnte dir helfen


----------



## MrFox (22. Feb 2007)

Danke, so funktionierts recht gut.


----------



## thE_29 (22. Feb 2007)

BufferedImage bietet aber auch die Methode getScaledInstance da BufferedImage ja von Image erbt 

So nebenbei!


----------



## MrFox (22. Feb 2007)

Richtig, und diese Funktion gibt ein Image zurück, dass nicht zu einem BufferedImage gecasted werden kann.
Das war eigentlich auch meine Frage, aber das Problem wurde ja anders gelöst.


----------



## thE_29 (23. Feb 2007)

Oho 
Ganz überlesen!

Thread abhaken net vergessen wenn beantwortet ^^


----------

