R
roman.
Gast
Hallo!
Ich möchte gern ein eingelesenes Bild auf eine bestimmte Größe skalieren und anschließend noch ein Stück des Bildes beschneiden.
Folgendes erklärendes Beispiel. Ich habe ein Bild mit einer Größe von 308 auf 413 Pixel. Das Zielbild darf die Maße von 134 auf 172 Pixel nicht überschreiten. Des Weiteren sollen natürlich die Proportionen stimmen.
Somit skaliere ich das Bild mit
auf folgende Maße: 134 auf 179 Pixel. Nun müsste ich noch 7 Pixel abschneiden. Die einzige Methode, die ich gefunden habe ist
. Diese Methode macht genau das Richtige, jedoch ist sie Teil von BufferedImage... Nun beginnt das große Casten, aber das funktioniert alles nicht wirklich.
Hier mein vollständiger Code, der zwar compiliert, aber nicht ordentlich ausgeführt wird:
Irgendwo beim Casten geht wohl irgendwas schief. oder ich bin auf dem völlig falschen Dampfer.
Bitte um Hilfe.
Ich möchte gern ein eingelesenes Bild auf eine bestimmte Größe skalieren und anschließend noch ein Stück des Bildes beschneiden.
Folgendes erklärendes Beispiel. Ich habe ein Bild mit einer Größe von 308 auf 413 Pixel. Das Zielbild darf die Maße von 134 auf 172 Pixel nicht überschreiten. Des Weiteren sollen natürlich die Proportionen stimmen.
Somit skaliere ich das Bild mit
Code:
getScaledInstance()
Code:
getSubimage()
Hier mein vollständiger Code, der zwar compiliert, aber nicht ordentlich ausgeführt wird:
Code:
package bildVerkleinern;
import java.awt.BorderLayout;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class bildVerkleinern {
static public void main (String[] args){
File file = new File("C:\\workspace\\Java\\bin\\bildVerkleinern\\image.jpg");
BufferedImage img;
try {
img = ImageIO.read(file);
double width = img.getWidth(null);
double height = img.getHeight(null);
System.out.println("Original Breite: " + width);
System.out.println("Original Höhe: " + height);
double newWidthMax = 134.0;
double newHeightMax = 172.0;
double newHeightSoll = (height * newWidthMax) / width;
System.out.println("Neue Breite: " + newWidthMax);
System.out.println("Neue Höhe: " + newHeightSoll);
Image newImg = img.getScaledInstance((int)(newWidthMax), (int)(newHeightSoll), Image.SCALE_SMOOTH );
img = (BufferedImage) newImg;
img = img.getSubimage(0, (int)(newHeightSoll - newHeightMax), (int)(newWidthMax), (int)(newHeightMax));
JFrame frame = new JFrame();
JLabel label = new JLabel(new ImageIcon(img));
frame.getContentPane().add(label, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Irgendwo beim Casten geht wohl irgendwas schief. oder ich bin auf dem völlig falschen Dampfer.
Bitte um Hilfe.