Java Bild-Skalierungsproblem

Gast #1934892
Lesenswert?

Guten Abend,

Java mag mich nicht! Ich hab versucht ein Bild zu skalieren von 
417x313px auf 150x113px zu skalieren. Ich hab es so gemacht:
1
BufferedImage newImg = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB);
2

3
Graphics2D g = newImg.createGraphics();
4
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
5
g.setRenderingHint(RenderingHints.KEY_DITHERING , RenderingHints.VALUE_DITHER_ENABLE);
6
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
7
g.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
8
g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
9
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
10

11
g.drawImage(img, 0, 0, newWidth, newHeight, 0, 0, oldW, oldH, null);

Das Problem ist, das Bild wird scheinbar beim Verkleinern nicht 
interpoliert. Das eine Bild zeigt, was mit Java rauskommt, das Andere 
von Gimp mit bikubischer Interpolation. Sogar mit bilinearer 
Interpolation siehts unter Gimp noch besser aus.

Weiß jemand, was ich da falsch mache?

Ich denke, ich verwende momentan die OpenJDK6 Java Runtime.

Viele Grüße,
Manfred
Angehängte Dateien:
Persönliche Seite #1934988
Lesenswert?

Die Rendering Hints beziehen sich nur darauf wie Java Grafikobjekte 
zeichnet/Rendert... (z.B. Linien, Kreise etc., zumal es nur Hinweise 
sind das zu nutzen, ob das unterliegende Graphicsdevice das versteht ist 
nochmal eine andere Geschichte).
Entweder man macht es über eine "ScaledInstance" oder man setzt den 
Scalefactor bevor man das Bild 1:1 zeichnet weiß aber gerade auch nicht 
ob dann das Ergebnis besser wird. Für Bilder ist die Methode über 
ScaledInstance jedenfalls recht gut von der Qualität und Speed her.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren