PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BufferedImage resizen oder Image in BufferedImage umwandeln


clm[k1]
2004-11-22, 14:31:48
Also, folgendes Problem:

Ich hab ein bild, welches ich einlese, resizen möchte und das neue bild in wieder in eine datei schreiben möchte.

mit ImageIO kann ich zwar bilder schreiben, aber der nimmt nur RenderedImages (da BufferedImage RenderedImage implementiert, sollte es damit gehen)

Ich hab bislang keine klasse gefunden, mit der ich Image schreiben kann.
Und ich hab auch noch keinen weg gefunden wie ich Image in BufferedImage umwandeln könnte (casten geht nicht)
Und BufferedImage bietet keine methode zum resizen.
Die gibts nur bei Image mit getScaledInstance, welche wieder ein Image object zurück gibt.

Kann mir da jemand weiter helfen?

clm[k1]

HellHorse
2004-11-22, 15:08:26
Naja, du kannst ja ein BufferedImage, "einfach so" erstellen

public class ImageResize {

public static void main(String[] args) {
try {
BufferedImage source = ImageIO.read(new File("/home/username/20-605.jpg"));
BufferedImage target = new BufferedImage(source.getWidth() / 2, source.getHeight() / 2, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = (Graphics2D) target.getGraphics();
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g2d.drawImage(source, 0, 0, target.getWidth(), target.getHeight(), null);
ImageIO.write(target, "JPEG", new File( "/home/username/pics/20-605small.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
}

Hilft das?
Bikubisch musst du nicht machen, sieht aber besser aus.

clm[k1]
2004-11-22, 16:44:14
Naja, du kannst ja ein BufferedImage, "einfach so" erstellen

public class ImageResize {

public static void main(String[] args) {
try {
BufferedImage source = ImageIO.read(new File("/home/username/20-605.jpg"));
BufferedImage target = new BufferedImage(source.getWidth() / 2, source.getHeight() / 2, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = (Graphics2D) target.getGraphics();
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g2d.drawImage(source, 0, 0, target.getWidth(), target.getHeight(), null);
ImageIO.write(target, "JPEG", new File( "/home/username/pics/20-605small.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
}

Hilft das?
Bikubusch musst du nicht machen, sieht aber besser aus.


Ja, das hilft!!!11einseins

Auf die idee das bild "einfach so" zu erzeugen, bin ich bisher noch nicht gekommen - danke!
Ach ja: statt getGraphics() sollte man besser createGraphics() nehmen, weil das direkt ein Graphics2D zurück gibt, statt einem Graphics... is mir nur so aufgefallen. ;)

danke für die hilfe
clm[k1]