Wie kann man aus einem BufferedImage
ein ImageIcon
machen?
Im Beispiel wird zunächst ein File-Objekt der zu ladenden
Bilddatei gebildet. Mit Hilfe der Methode ImageIO.read()
wird dann diese Datei in ein BufferedImage-Objekt ausgelesen.
Eine Exception bei Lesefehlern muss - hier mittels eines
try-catch-Blockes - abgefangen werden. Die Klasse ImageIO
stellt statische Methoden zum Lesen und Schreiben mittels ImageReader
und ImageWriter
bereit.
Dem Konstruktor des
gewünschten ImageIcon
kann direkt das
BufferedImage-Objekt übergeben werden.
Im Beispiel
werden vom BufferedImage
noch die Breite und
Höhe ermittelt, um die Größe des
JFrame-Hauptfensters anzupassen.
import java.awt.BorderLayout;
import java.awt.Color;
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;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
public class BufferedImage2ImageIconClass extends JFrame {
private static final long serialVersionUID = 1L;
JPanel panel;
JLabel label;
ImageIcon icon;
BufferedImage image;
public BufferedImage2ImageIconClass() {
File file = new File("test.jpg");
try {
this.image = ImageIO.read(file);
} catch (IOException ex) {
ex.printStackTrace();
}
int imageBreite = image.getWidth();
int imageHoehe = image.getHeight();
icon = new ImageIcon(image);
label = new JLabel(icon);
label.setBorder(new LineBorder(Color.WHITE));
panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBackground(Color.DARK_GRAY);
panel.add(label, BorderLayout.CENTER);
getContentPane().add(panel);
setSize(imageBreite + 100, imageHoehe + 100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String args[]) {
new BufferedImage2ImageIconClass();
}
}