Wie kann man aus einem BufferedImage ein ImageIcon machen?

Ein BufferedImage ist eine Unterklasse der Klasse Image, die gerne zur Bildmanipulation Verwendung findet. Sie besitzt ein ColorModel und ein Raster, auf die bequem zugegriffen werden kann. Ein BufferedImage ist jedoch aber z.B. nicht serialisierbar, somit ist in mannigfaltigen Zusammenhängen ein Umwandeln in ein ImageIcon-Objekt wünschenswert.

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();
    }
}