Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ?

Status
Nicht offen für weitere Antworten.
L

lupylucke

Gast
Hallo!

Ich hab da eine "grundlegende" Frage zu Bilder in Java. Das Programm, das ich entwickle, soll eine reihe ziemlich grosser Bilder anzeigen (nein, ich schreibe kein Programm zum Anzeigen/verwalten von Fotos, davon gibt's schon genug...)
Nach dem, was ich bisher gelesen habe scheint es zwei Methoden zu geben, ein Bild oder ein Foto in die GUI zu bringen:
1) mit ImageIcon + z.b. ein JLabel.
2) mit BufferedImage, ein JPanel oder Canvas und deren paint() methode

So weit ich verstanden habe, hat 2) den Vorteil, dass man das Bild editieren kann, zum Beispiel etwas drauf zeichnen. Das brauche ich aber nicht.
Meine Frage: welche ist in meinem Fall "besser"? Vor allem: gibt es Unterschiede bezüglich Speicherbedarf und Performance?

Danke im Voraus
 

Wildcard

Top Contributor
lupylucke hat gesagt.:
Meine Frage: welche ist in meinem Fall "besser"? Vor allem: gibt es Unterschiede bezüglich Speicherbedarf und Performance?
Nicht wirklich, egal wie du's machst wird ein großes Bild eine Menge Speicher fressen.
Dir muss klar sein das das Bild dekomprimiert werden muss, also um ein vielfaches Größer als ein jpg/png wird.
ob du nun ein ImageIcon oder ein BufferedImage nimmst ändert daran nichts.
 

abollm

Top Contributor
Noch einmal ergänzend zu dem was Wildcard geschrieben hat:

Für den Speicherbedarf ist das Bildformat ausschlaggebend. Für die Geschwindigkeit des Ladens von sehr großen Bildern ist ggf. eine Wandelroutine von kompimiert zu dekomprimiert sinnvoll (BMP wirst du wohl kaum speichern). Das Problem dabei ist nur die Frage nach dem Verlustfaktor hinsichtlich Anzeigen des Bildes.

Für das Thema des Zugriffs aber noch ein Hinweis direkt von Sun:

"The ImageInputStream is an interface of the javax.imageio.stream package that is seekable, and so it's potentially faster than a regular InputStream. Instead of getting an InputStream from a FileInputStream, and passing that InputStream into the read method, it's more efficient to pass the File object to be read, or to create a FileImageInputStream from the File. More specifically, instead of
Code:
InputStream is = new InputStream("anImage.jpg");
ImageIO.read(is);
use either:
Code:
File file = new File("anImage.jpg");
ImageIO.read(file);
or
Code:
File file = new File("anImage.jpg");
FileImageInputStream fiis = new FileImageInputStream(file);
ImageIO.read(fiis);
The read method (in all cases) returns a BufferedImage object. You can then draw this image with the drawImage method of Graphics, or you can filter it with something ... from the java.awt.image package."

Hth
 
L

lupylucke

Gast
Zuerst mal danke für eure Antworten!

Wenn man die falsche Frage stellt muss man sich nicht wundern, wenn man nicht passende Antworten bekommt :wink: Ich war wohl nich mehr ganz klar im Kopf als ich mein Post schrieb, war auch schon ziemlich spät...

Also, eigentlich wollte ich allgemein wissen was die Unterschiede zwischen ImageIcon und BufferedImage sind. Gibt es überhaupt welche? Wann sollte man das eine, wann das andere Vorgehen anwenden, um ein Bild anzuzeigen?

Vergesst bitte den Teil über Performance und Speicherbedarf, dass das von anderen Dingen abhängt war mir eigentlich klar.

Danke!

PS Danke Ullenboom für deine Links, werd's mal anschauen. Allerdings sind meine Bilder auch nich wieder soooooo gross...
 

Ullenboom

Bekanntes Mitglied
Schau mal in den Programmcode von ImageIcon. Da ist gut zu sehen, dass der MediaTracker dahinter steckt, der das Image lädt.

Code:
    transient Image image;

    /**
     * Creates an ImageIcon from the specified URL. The image will
     * be preloaded by using MediaTracker to monitor the loaded state
     * of the image.
     * @param location the URL for the image
     * @param description a brief textual description of the image
     * @see #ImageIcon(String)
     */
    public ImageIcon(URL location, String description) {
	image = Toolkit.getDefaultToolkit().getImage(location);
        if (image == null) {
            return;
        } 
	this.location = location; 
        this.description = description;
	loadImage(image);
    }

Der wiederum erzeugt das Image-Objekt, was beim Zeichen verwendet wird.

Code:
    public synchronized void paintIcon(Component c, Graphics g, int x, int y) {
        if(imageObserver == null) {
           g.drawImage(image, x, y, c);
        } else {
	   g.drawImage(image, x, y, imageObserver);
        }
    }

Ob das Image auch ein BufferedImage ist (ist ja eine Unterklasse von Image) kann sein, muss aber nicht auf jeder Plattform zwingend gelten.[/code]
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
W Kleine Sub-Tabelle in SpreadsheetView-Zelle anzeigen AWT, Swing, JavaFX & SWT 9
J Java GUI Dropdown-Menü anzeigen AWT, Swing, JavaFX & SWT 5
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
J BufferedImages nacheinander als Video anzeigen AWT, Swing, JavaFX & SWT 14
BananenBrötchen Swing Arraylist in jList anzeigen AWT, Swing, JavaFX & SWT 6
Lukas2904 Swing ID von WLAN Kamera anzeigen lassen. AWT, Swing, JavaFX & SWT 2
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
G AWT AWT Kreise permanent anzeigen AWT, Swing, JavaFX & SWT 3
MiMa File Dateien im ListView als Name anzeigen? AWT, Swing, JavaFX & SWT 6
C Swing In der Titelleiste den Namen und den vollständigen Pfad bzw URL des aktuellen Dokuments anzeigen AWT, Swing, JavaFX & SWT 25
C Swing Aufruf der Funktion (die ein Dialog anzeigt) über Symbol anzeigen lassen AWT, Swing, JavaFX & SWT 4
O Timer in JOptionPane anzeigen AWT, Swing, JavaFX & SWT 2
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
C JavaFX Veränderungen in Scenebuilder in Eclipse als Quellcode anzeigen lassen AWT, Swing, JavaFX & SWT 11
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
J Warum kann ich die Spaltennummer in der Konsole anzeigen, diese aber nicht speichern ? AWT, Swing, JavaFX & SWT 6
VPChief Icons in 2 Jlabels Director nebeneinander anzeigen AWT, Swing, JavaFX & SWT 26
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
S Text-Info in der Taskbar anzeigen AWT, Swing, JavaFX & SWT 15
R JavaFX Label oder Imageview anzeigen mit Buttonklick AWT, Swing, JavaFX & SWT 4
B ArrayList, Strings anzeigen AWT, Swing, JavaFX & SWT 1
P Abwächselnd ein Punkt und ein x anzeigen AWT, Swing, JavaFX & SWT 2
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
T Swing Buffered Image anzeigen AWT, Swing, JavaFX & SWT 45
E Aktuelle Uhrzeit auf jeder Stage anzeigen lassen (JavaFX) AWT, Swing, JavaFX & SWT 2
F JavaFX Aktuelle Zeit in einem TextField anzeigen AWT, Swing, JavaFX & SWT 7
CptK Swing DropdownMenu über Panel-Grenzen hinaus anzeigen AWT, Swing, JavaFX & SWT 1
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
F Countdown in Label anzeigen AWT, Swing, JavaFX & SWT 14
M Loading Screen anzeigen bei Black Screen AWT, Swing, JavaFX & SWT 1
J CheckComboBox : Ausgewählte Items NICHT im Header anzeigen AWT, Swing, JavaFX & SWT 4
ralfb1105 Swing Dynamischer Graph zum anzeigen Perfomance Daten AWT, Swing, JavaFX & SWT 35
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
K Event Handling Über JMenuBar die diversen Panels anzeigen AWT, Swing, JavaFX & SWT 10
G JComboBox: Arrow-Button permanent anzeigen AWT, Swing, JavaFX & SWT 4
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
J CheckComboBox selected Items nicht anzeigen AWT, Swing, JavaFX & SWT 6
L Suchergebnisse variabel mit Button anzeigen lassen AWT, Swing, JavaFX & SWT 3
M JavaFX Ein Labeltext eine zeitlang anzeigen dann weiter machen AWT, Swing, JavaFX & SWT 3
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
J Slider Wert anzeigen AWT, Swing, JavaFX & SWT 15
D MySQL-Tabellen in GUI anzeigen AWT, Swing, JavaFX & SWT 8
Meeresgott AWT JFileChooser bestimmte Ordner anzeigen AWT, Swing, JavaFX & SWT 16
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
M PDF einlesen und innerhalb Pane anzeigen AWT, Swing, JavaFX & SWT 5
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
M JavaFX StackedBarChart y-Axis soll nur Integerwerte anzeigen AWT, Swing, JavaFX & SWT 1
MiMa PDF in Java FX anzeigen AWT, Swing, JavaFX & SWT 21
T JLabel Textinhalt von Oben anzeigen AWT, Swing, JavaFX & SWT 1
Sugan Java FX Verzeichnisüberwachung -> Bilder auf GUI anzeigen AWT, Swing, JavaFX & SWT 4
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
M Gui-Form alle Labels anzeigen AWT, Swing, JavaFX & SWT 4
J Swing Zeichenfläche im JPanel des Haupfenster anzeigen lassen AWT, Swing, JavaFX & SWT 4
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
beatles Swing JTextField - Game Status aus Array anzeigen AWT, Swing, JavaFX & SWT 3
M Java FX Immer aktuelle Mausposition anzeigen AWT, Swing, JavaFX & SWT 6
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
L wie Layout-Grid in JXPanel anzeigen? AWT, Swing, JavaFX & SWT 5
JavaMachtMichFertig JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird AWT, Swing, JavaFX & SWT 5
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
F JavaFX JavaFX HTMLEditor-Eingabe in Textarea als HTML anzeigen AWT, Swing, JavaFX & SWT 2
V JFreeChart: Tooltip auf Knopfdruck anzeigen AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
D Swing Idealgewicht anzeigen per Radiobuttonaktivierung AWT, Swing, JavaFX & SWT 8
J JavaFX Tooltip Verzögerung beim ersten Anzeigen AWT, Swing, JavaFX & SWT 4
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
B Swing JXMapKit Mausemove in Label anzeigen AWT, Swing, JavaFX & SWT 0
J JavaFX TextArea dynamisch Icon im Background anzeigen AWT, Swing, JavaFX & SWT 2
D Swing Erstes Item einer JCombobox in JTable anzeigen AWT, Swing, JavaFX & SWT 2
V Wie kann ich die Schrift in Java vollkommen anzeigen AWT, Swing, JavaFX & SWT 1
F Menüs in allen Fenstern anzeigen AWT, Swing, JavaFX & SWT 12
J 2D-Grafik Windows Blue-Screen nach anzeigen eines Bildes in Java AWT, Swing, JavaFX & SWT 10
S (Swing)Vollbild anzeigen unter Linux/Mac AWT, Swing, JavaFX & SWT 6
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
M Image aus MS Access anzeigen lassen AWT, Swing, JavaFX & SWT 9
B Swing Dateien im Swing-GUI anzeigen AWT, Swing, JavaFX & SWT 3
llabusch Titelleiste Dokumentenname und Pfad/URL anzeigen AWT, Swing, JavaFX & SWT 2
S Bestimmten Bereich eines Bildes im JFrame mit Scrollpane anzeigen AWT, Swing, JavaFX & SWT 0
G Text im textfeld in einem Editor anzeigen AWT, Swing, JavaFX & SWT 18
I Zwei Fenster nebeneinander anzeigen AWT, Swing, JavaFX & SWT 2
A LayoutManager Statusleiste auch nach Verkleinerung des Fensters anzeigen AWT, Swing, JavaFX & SWT 1
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
M Nodes in JTree nicht anzeigen AWT, Swing, JavaFX & SWT 0
D 2D-Grafik Bilder anzeigen AWT, Swing, JavaFX & SWT 4
N Swing Alle Objekte anzeigen auch bei JPanel-Überlappung AWT, Swing, JavaFX & SWT 6
K Swing Aktuelle Uhrzeit anzeigen AWT, Swing, JavaFX & SWT 3
U Bild innerhalb hatml code anzeigen AWT, Swing, JavaFX & SWT 5
N JPanel größe wissen/festlegen vor dem Anzeigen AWT, Swing, JavaFX & SWT 3
N Input/Output Stream werte in Label anzeigen. AWT, Swing, JavaFX & SWT 6
T Tetris - nächste Form anzeigen AWT, Swing, JavaFX & SWT 6
B Tabelleneinträge in JList anzeigen AWT, Swing, JavaFX & SWT 5
A Array von JLabel mit Grafiken anzeigen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben