Skalieren mit AffineTransform und SCALE_SMOOTH?

Status
Nicht offen für weitere Antworten.

Marsman

Bekanntes Mitglied
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:

image_old.jpg


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

image_new.jpg


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
 

Marsman

Bekanntes Mitglied
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

Top Contributor
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...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Vektor skalieren Spiele- und Multimedia-Programmierung 15
J Bild ohne Quallitätsverlust skalieren Spiele- und Multimedia-Programmierung 11
E Java3D Objekt skalieren per JSlider/JButton Spiele- und Multimedia-Programmierung 10
C 2D Sprites an die JPanel Größe (Auflösung) anpassen/skalieren Spiele- und Multimedia-Programmierung 3
F Programm für Bildbearbeitung gesucht: Skalieren und Speichern Spiele- und Multimedia-Programmierung 6
A Bilder (auf JPanels) auf komplette Zellengröße (GridBagLayout) skalieren Spiele- und Multimedia-Programmierung 2
A Richtungsabhängiges Skalieren mit Interpolator Spiele- und Multimedia-Programmierung 2
U Jpeg performant skalieren Spiele- und Multimedia-Programmierung 14
G Objekt nicht ins negative oder null skalieren Spiele- und Multimedia-Programmierung 2
E relevanter bereich einer isometrischen karte zeichnen (AffineTransform) Spiele- und Multimedia-Programmierung 0
A AffineTransform: Nach Drehen verschieben Spiele- und Multimedia-Programmierung 2
T Probleme mit AffineTransform Spiele- und Multimedia-Programmierung 13
M Bildrauschen bei AffineTransform? Spiele- und Multimedia-Programmierung 2
G AffineTransform macht programm immer langsamer Spiele- und Multimedia-Programmierung 3
H Verständnisproblem GeneralPath/AffineTransform Spiele- und Multimedia-Programmierung 2
K AffineTransform Spiele- und Multimedia-Programmierung 2
coolian opengl von scale in breite und höhe konvertieren Spiele- und Multimedia-Programmierung 23

Ähnliche Java Themen


Oben