Tobias Stening
2005-06-25 10:11:39 UTC
Hallo zusammen,
folgendes Codefragment skaliert mir Bilder, die vorher von Platte
gelesen wurden und danach mit dem JPEGImageEncoder geschrieben werden.
BufferedImage scaledImage = new BufferedImage(
scaledWidth,
scaledHeight,
BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = scaledImage.createGraphics();
graphics2D.setRenderingHint(
RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
graphics2D.drawImage(image, 0, 0, scaledWidth, scaledHeight, null);
FileOutputStream fos = new FileOutputStream(dest));
BufferedOutputStream out = new BufferedOutputStream(fos);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(scaledImage);
param.setQuality(0.6f, false);
encoder.encode(scaledImage);
out.close();
Ist nicht besonders schnell, funktioniert aber. Leider ist die Qualität
der skalierten Bilder nicht gerade berauschend. Im direkten Vergleich
mit einer Bildverarbeitung findet man in den skalierten Bildern an
schrägen geraden Kanten häufig Treppchen.
Beispiel: http://www.cmaxx.de/temp/test.html
Kann man die Qualität verbessern? Wenn ja, wie?
Viele Grüße,
Tobias
folgendes Codefragment skaliert mir Bilder, die vorher von Platte
gelesen wurden und danach mit dem JPEGImageEncoder geschrieben werden.
BufferedImage scaledImage = new BufferedImage(
scaledWidth,
scaledHeight,
BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = scaledImage.createGraphics();
graphics2D.setRenderingHint(
RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
graphics2D.drawImage(image, 0, 0, scaledWidth, scaledHeight, null);
FileOutputStream fos = new FileOutputStream(dest));
BufferedOutputStream out = new BufferedOutputStream(fos);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(scaledImage);
param.setQuality(0.6f, false);
encoder.encode(scaledImage);
out.close();
Ist nicht besonders schnell, funktioniert aber. Leider ist die Qualität
der skalierten Bilder nicht gerade berauschend. Im direkten Vergleich
mit einer Bildverarbeitung findet man in den skalierten Bildern an
schrägen geraden Kanten häufig Treppchen.
Beispiel: http://www.cmaxx.de/temp/test.html
Kann man die Qualität verbessern? Wenn ja, wie?
Viele Grüße,
Tobias