BufferedImage größe verändern

bl4ck29

Mitglied
ich hab schon das Forum durchsucht und auch einiges gefunden, aber bin damit nicht weiter gekommen. Ich möchte per Methode nen Image einlesen, dann width und heigth verändern und es als BufferedIamge zurückliefern...

ich lese es sofort per ImageIO als BufferedImage ein und weiss nun nicht wie ich die grösse verändern kann.
 

lina-

Grünschnabel
Kann sein, dass meine Lösung ein Umweg (und für deine Zwecke nicht zweckvoll..) ist - aber ich habe ein ähnliches Problem mal mit "getData() " gelöst.
Ich habe das Raster, des BufferedImages mit dieser Methode eingelesen, ein neues BufferedImage (mit der gewünschten Größe) erzeugt und das Raster dort hineinkopiert.
Natürlich wird mit dieser Methode die Grafik nicht skaliert, sonder nur das BufferedImage vergrößert. Anwendbar ist diese Vorgehensweise zum Beispiel wenn die Grafik nicht ins BufferedImage passt.
Hoffe das hat dir ein wenig weitergeholfen.
lg lina-
 

bl4ck29

Mitglied
was heisst den nicht skaliert ?

das ist nen image was als hintergrund dienen soll (z.b.) und bei veränderter auflösung angepasst werden muss. diese anpassung wollte ich sofort nach dem einlesen durchführen. ich hab allerdings kaum nen plan von bufferedimage und sowas da ich vorher nur mal nen bild in ein panel gelesen hab und das wars.

mfg
 

lina-

Grünschnabel
nicht skaliert heisst, dass nicht die Grafik an sich, sondern nur der Container in dem sie sich befindet vergrößert oder verkleinert wird.
Wie ich schon vermutet habe ist diese Lösung für dein Problem nicht geeignet.
Aber warum versuchst du es nicht ganz einfach mit getScaledInstance(int width, int height, int hints) ?
Darfste nur das casten von Image nach BufferedImage nicht vergessen.
lg lina-
 

bl4ck29

Mitglied
Code:
 Image img = null;
		try {
			img = ImageIO.read(new File(filename));
		} catch(IOException io){io.printStackTrace();}
		return (BufferedImage) img.getScaledInstance(resolutionWidth, resolutionHeight, Image.SCALE_SMOOTH);

meinst du so ? ich mein hier im Forum gelesen zu haben das es Probleme gibt wenn man Image zu BufferedImage castet, aber ich werds später mal so probieren.

danke schonmal
 

lina-

Grünschnabel
Jep - so mein ich das.
Das mit den Castingproblemen hab ich auch schonmal irgendwo gelesen - hatte aber persönlich noch keinerlei Probleme damit.
 

Thomas Darimont

Erfahrenes Mitglied
Hallo!

Code:
  /**
  * 
  */
 package de.tutorials;
 
 import java.awt.Image;
 import java.awt.image.BufferedImage;
 import java.io.File;
 
 import javax.imageio.ImageIO;
 
 /**
  * @author Tom
  * 
  */
 public class ImageResizingExample {
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) throws Exception {
 		BufferedImage img = ImageIO.read(new File("c:/Sonnenuntergang.jpg"));
 
 		Image scaledImage = img.getScaledInstance(100, 100,
 				BufferedImage.SCALE_SMOOTH);
 		BufferedImage scaledBufferedImage = new BufferedImage(100, 100,
 				BufferedImage.TYPE_INT_RGB);
 		scaledBufferedImage.getGraphics().drawImage(scaledImage, 0, 0, null);
 
 		ImageIO.write(scaledBufferedImage, "jpg", new File(
 				"c:/Sonnenuntergang_small.jpg"));
 	}
 
 }

Gruß Tom