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:
Danke, Titus
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:
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