# Skalieren mit AffineTransform und SCALE_SMOOTH?



## Marsman (14. Feb 2009)

Hallo Ihr!

Bisher hatte ich die alte Methode java.awt.Image.getScaledInstance(int width, int height, int hints) mit SCALE_SMOOTH verwendet. Leider ist diese Methode aber für meine aktuelle Anforderung zu langsam. Deshalb bin ich auf java.awt.geom.AffineTransform.getScaleInstance(double sx, double sy) umgestiegen. Das Skalieren geht damit schneller. Allerdings erreiche ich leider nicht die Qualität, wie bei dem SCALE_SMOOTH. Auch die Verwendung diverser RenderingHints hat keine Besserung gebracht. Kann mir jemand eine Möglichkeit empfehlen, mit der ich doch noch die Qualität der alten getScaledInstance()-Methode erhalte?

Alte Mehtode mit SCALE_SMOOTH:







AffineTransform z.B. mit RenderingHints.VALUE_ANTIALIAS_ON, was eher grobpixelig aussieht:






Hier noch der Code:



```
private static BufferedImage getScaledImage(BufferedImage image, int width, int height) {
    BufferedImage result = new BufferedImage(width, height, image.getType());
    Graphics2D g2d = result.createGraphics();
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    double xScale = (double) width / image.getWidth();
    double yScale = (double) height / image.getHeight();
    AffineTransform xform = AffineTransform.getScaleInstance(xScale, yScale);

    g2d.drawImage(image, xform, null);
    g2d.dispose();
    return result;
  }
```


Danke, Titus


----------



## Marco13 (14. Feb 2009)

Hier könnten einige Fragen beantwortet werden: http://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html


----------



## Marsman (15. Feb 2009)

Ja, dort wurden "einige Fragen beantwortet".   

Wenn ich es richtig verstanden habe, kann man das SCALE_SMOOTH durch die Technik der mehreren Durchläufe bewerkstelligen.

Danke, Titus


----------



## Marco13 (15. Feb 2009)

Nun, die dort gepostete Methode kannst du ja einfach mal mit verschiedenen Parametern auf dein Bild loslassen, und dann selbst schauen, welche Qualität dir "ausreichend" erscheint. Im allgemeinen gilt eben leider, dass bessere Qualität schlicht und einfach nur gegen mehr Rechenaufwand zu haben ist...


----------

