BufferedImage, Bilder laden

KingOfExceptions

Bekanntes Mitglied
hey @ all,

ich wollte mal ein bild laden lassen und bin deswegen dem beispiel von oracle gefolgt:

Reading/Loading an Image (The Java™ Tutorials > 2D Graphics > Working with Images)

Java:
class LoadImageApp extends Component
{
	
	private static final long serialVersionUID = 1L;
	
	BufferedImage img;
	
	public static void main(String [] args)
	{
		JFrame f=new JFrame("Load Image Sample");
		
		f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});
		f.add(new LoadImageApp());
		f.pack();
		f.setVisible(true);
		f.repaint();
	}
	
	public void paint(Graphics g)
	{
		g.drawImage(img,0,0,null);
		repaint();
	}
	
	public LoadImageApp()
	{
		try
		{
			img=ImageIO.read(new File("strawberry.jpg"));
		}
		catch(IOException e){System.out.println("HIER IST EIN FEHLER.");}
	}
	
	public Dimension getPreferredSize()
	{
		if(img==null)
		{
			return new Dimension(100,100);
		}
		else
		{
			return new Dimension(img.getWidth(null),img.getHeight(null));
		}
	}
	
	
}

das bild wird jedoch nicht geladen: der fehler müsste hier liegen:
Java:
public LoadImageApp()
	{
		try
		{
			img=ImageIO.read(new File("strawberry.jpg"));
		}
		catch(IOException e){System.out.println("HIER IST EIN FEHLER.");}
	}

denn wenn ich das programm ausführe sagt er mir :
Code:
HIER IST EIN FEHLER.

Jedoch weiß ich nicht wie man diesen fehler beheben kann. Das bild ist im gleichen ordner wie das programm gespeichert und heißt strawberry und ist eine JPG datei. KANN MIR DA JEMAND HELFEN?
 
V

vanny

Gast
Hi,

zu erst einmal würde von einem JPanel erben und dann bitte die paintComponent() überschreiben.
Das repaint() in der paint[Component]() würde ich auch weglassen, weil diese Methode immer aufgerufen wird, wenn in deiner Komponentenhierarchie ein repaint() aufgerufen wird.
Im Moment zeichnest du ständig neu, auch wenns garnicht nötig ist :p.

Bettest du das Bild in die Jar ein?
... dann müsstest du mit
Java:
getClass().getResource("bild.jpg")//Edit: bzw. getClass().getResourceAsStream:P
darauf zugreifen.

Gruß Vanny
 
Zuletzt bearbeitet von einem Moderator:
V

vanny

Gast
Versuch doch mal statt

Java:
img=ImageIO.read(new File("strawberry.jpg"));
das hier
Java:
img = ImageIO.read((getClass().getResourceAsStream("strawberry.jpg")));
 

KingOfExceptions

Bekanntes Mitglied
ich würde jetzt gern das ganze in mein bestehendes programm machen (ich poste nur den teil der wichtig ist) :

Java:
public void bildanzeigen()
	{
		try 
		{
			img=ImageIO.read((getClass().getResourceAsStream(geingabe)));
			System.out.println("HIER WAR ICH");
		} 
		
		catch (IOException e)
		{
			JDialog fehler=new JDialog((JFrame)frm, "FEHLER", true);
			frm.add(fehler);
			JLabel fhr=new JLabel("Es ist ein Fehler beim Laden des Bilds aufgetreten. Bitte starten Sie das Programm erneut");
			fehler.add(fhr);
		}
	}

Java:
public void paintComponent(Graphics g)
	{
		g.drawImage(img, 0, 0, null);
		repaint();
	}

Java:
                        if(heft.elementAt(y).equals(scgschlagwörter)) //WIRD AUSGEFÜHRT!!!!!
			{
				i=1;
				
				JFrame frame=new JFrame("Die Zeitschrift");
				frame.getPreferredSize();
				frame.setVisible(true);
				
				bildanzeigen();
				
			}

---------------------------------------------ERKLÄRUNG-----------------------------------------
------------------------------------------------ | ----------------------------------------------
------------------------------------------------ | ----------------------------------------------
------------------------------------------------ | ----------------------------------------------
---------------------------------------------\---|--/--------------------------------------------
----------------------------------------------\----/---------------------------------------------
-----------------------------------------------\--/----------------------------------------------
------------------------------------------------\/-----------------------------------------------
 
Zuletzt bearbeitet:

KingOfExceptions

Bekanntes Mitglied
ERKLÄRUNG:
ich habe ein JFrame in dem das bestehende Programm läuft. dann (wenn der if zweig ausgeführt wird -> ja) möchte ich dass sich ein neuer JFrame öffnet und DORT (also im ZWEITEN JFrame) das bild gemalt wird. ich habe schon probiert die paintComponent() umzubennenen in pain() aber dann wird mein ERSTER JFrame nicht richtig angezeigt. hoffe mann kann mein kauderwelsch verstehen ansonsten einfach nachfragen ;)
 
V

vanny

Gast
Ich übersetz mir dein welsch mal ganz frei und hoffe ich lieg damit richtig ;)

Wenn du dein Bild in einem extra Frame anzeigen willst, es aber Inhaltlich ja mit deinem eigentlichen Programm zusammenhängt, würde ich hier mit einem JDialog arbeiten.
Der funktioniert im Grunde wie ein JFrame(plus ein paar nette Extras).
Für die Zeichenfläche erstellst du dir eine seperate Klasse, die von JPanel erbt und übergibst im Konstruktor die Bildinformation.
In dieser JPanel-Klasse überschreibst du dann die paintComponent() !!UND BITTE OHNE DAS REPAINT()!!

Wenn du dann das Bild im extra Fenster anzeigen willst, erzeugst du dir einen JDialog und fügst dessen ContentPane eine neue Instanz deiner JPanel-Klasse hinzu.

Ich hoffe ich hab getroffen, sonst frag einfach nochmal nach
so loooong Vanny

//Edit hab jetzt erst gesehen, dass du den JDialog schon benutzt (wobei an der Stelle eine JOptionPane wohl angebrachter ist) ^^ ... aber hey, eine Überlegung wärs dennoch wert, sonst nimmste halt nen JFrame ^^
 
Zuletzt bearbeitet von einem Moderator:

KingOfExceptions

Bekanntes Mitglied
so erstmal aus dem stehgreif alles klar außer dem EDIT. was meinst du mit JOptionPanel? ich hab das mal bei google eingegeben aber oracle kann sich wohl nicht so ganz entscheiden ;) ich hab hier das programm von oracle : siehe upload. welches dieser optionen sollte ich denn dafür benutzen? sorry für meine schwer-von-begriffheit ... :(


EDIT: und den JDialog benutze ich eig nur um bei einem fehler dem user zu sagen dass was falsch läuft..... wenn dann müsste ich ja einen neuen machen....

EDIT 2: vllt hab ich es doch verstanden: meinst du dass ich einfach einen ganz normalen neuen JDialog machen soll und dort drin dann ein JPanel mit dem bild?
 

Anhänge

  • DialogDemo-1.jnlp
    2,3 KB · Aufrufe: 9
Zuletzt bearbeitet:
V

vanny

Gast
Die Fehlermeldung stellst du mit der JOptionPane dar, und dein Bild in einem neuen JDialog, der dein Panel mit dem Bild hält.

Und nochmal zur Verdeutlichung ... das Ding heisst JOptionPane und nicht JOptionPanel ;)

so loooong Vanny

//EDIT: welche Version der JOptionPane du benutzt ist dir überlassen.
 
Zuletzt bearbeitet von einem Moderator:

KingOfExceptions

Bekanntes Mitglied
hey ich bins nochmal :)

ich hoffe ich habe deine beschreibung richtig verstanden:

Java:
public void bildanzeigen()
	{
		new LoadImageApp();
	}

das hier oben ist der zugriff auf den jdialog

Java:
public static class LoadImageApp extends JPanel
{
    
    private static final long serialVersionUID = 1L;
    
    BufferedImage img;
    
    public static void main(String[]args)
    {
    	
    }
    
    
    
    public LoadImageApp()
    {
    	System.out.println("TESTT");
    	
    	JDialog zeitschrift=new JDialog((JFrame) frm,"Die Zeitschrift");
        zeitschrift.setVisible(true);
        zeitschrift.add(new LoadImageApp());
        zeitschrift.repaint();
        System.out.println("TEST");
        
        try
        {
            img=ImageIO.read((getClass().getResourceAsStream("strawberry.jpg")));
        }
        
        catch(IOException e){}
        
    }
    
    public void paint(Graphics g)
    {
        g.drawImage(img,0,0,null);
        System.out.println("HELLO");
    }
    
}

und das hier oben ist (hoffentlich ) die klasse die du mir beschrieben hast ;)

(keine ahnung wie ich das geschafft habe) aber es scheint mir so als ob
Code:
LoadImageApp()
endlos ausgeführt wird... sowas hatte ich noch nie :oops:

kannst du mir da helfen? ich möchte dass in
Code:
bildanzeigen()
das reinkommt das die klasse
Code:
LoadImageApp extends JPanel
aufruft.....
 

njans

Top Contributor
Java:
public LoadImageApp()
    {
        System.out.println("TESTT");
        
        JDialog zeitschrift=new JDialog((JFrame) frm,"Die Zeitschrift"); //Wo kommt das frm her?
        zeitschrift.setVisible(true);  // Das macht man erst am Ende
        zeitschrift.add(new LoadImageApp());  // Wieso erstellst du hier noch LoadImageApp ?
        // Das ist praktisch ein rekrusiver Aufruf eines Konstruktors O_o
        // Wenn du "this" nehmen würdest, dann wäre das "sinnvoller"
        zeitschrift.repaint(); // Unötig
        System.out.println("TEST");
        
        try
        {
            img=ImageIO.read((getClass().getResourceAsStream("strawberry.jpg")));
        }
        
        catch(IOException e){}
    }

Java:
public LoadImageApp()
    {
        System.out.println("LoadImageApp:START");

        JDialog zeitschrift=new JDialog((JFrame) frm,"Die Zeitschrift"); 
        zeitschrift.add(new LoadImageApp()); 
        zeitschrift.setVisible(true);  

        System.out.println("LoadImageApp:END");
        
        try
        {
            img=ImageIO.read((getClass().getResourceAsStream("strawberry.jpg")));
        }
        
        catch(IOException e)
        {
             // Hier solltest du dafür sorgen, dass img nicht null ist.
        }
 
Zuletzt bearbeitet:

KingOfExceptions

Bekanntes Mitglied
ich hab jetzt mal deinen zweiten code mit copy-paste in mein bestehendes programm gemacht.
ergebnis: 1.299 mal LoadImageApp:START. -> danach OverFlow......

und in der IOException: img kann doch gar nicht null sein oder? immerhin definiere ich ja die resource... oder?
 
V

vanny

Gast
Um weitere Verwirrung zu vermeiden hier mal ein Beispiel

1. Die main-Methode ausgelagert in der Klasse "StartIt"

Java:
import javax.swing.SwingUtilities;

public class StartIt {

	public static void main(String[] args) {
		
		SwingUtilities.invokeLater(new Runnable() {
			
			public void run() {
				new HauptFenster();
			}
		});
		
	}
}

2. Das Hauptfenster der Gui, erbt von JFrame und heißt "HauptFenster":

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;

public class HauptFenster extends JFrame{
	
	public HauptFenster(){
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		JButton btn = new JButton("neuer Dialog...");
		btn.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent arg0) {
			
				JDialog dlg = new JDialog();
				dlg.add(new BildPanel("bild.jpg"));//hier halt deinen Bildtitel angeben
				dlg.pack();
				dlg.setLocationRelativeTo(null);
				dlg.setVisible(true);
			}
		});
		
		this.getContentPane().add(btn);
		this.pack();
		this.setLocationRelativeTo(null);
		this.setVisible(true);
	}

}

und nun noch dein Bildpanel namens "BildPanel":

Java:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class BildPanel extends JPanel{

	private BufferedImage img;
	
	public BildPanel(String dateiName){
		
		try {
			img = ImageIO.read(getClass().getResourceAsStream(dateiName));
		} catch (IOException e) {
			JOptionPane.showMessageDialog(null, dateiName + " wurde nicht gefunden!");
			e.printStackTrace();
		}
		
		this.setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));
		
	}
	
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		g.drawImage(img,0,0,null);
	}
	
}

...so macht das Sinn und bleibt übersichtlich und (obwohl ich eigntl. dagegen bin:oops:) es kann einfach kopiert werden! (wobei ich auf null-Referenzen und Fehleranalyse hier keinen Wert gelegt habe)

Gruß Vanny
 
Zuletzt bearbeitet von einem Moderator:

KingOfExceptions

Bekanntes Mitglied
ich hab jetzt ein wenig rumprobiert und es geschafft!!!! DANKE VANNY!! :toll::applaus: ECHT SUPER GEMACHT!!! VIELEN DANK DASS DU DIR DIE ZEIT GENOMMEN HAST MEINE GANZEN ANFÄNGERSACHEN ZU BEANTWORTEN!!!! ich werde jetzt erstmal die sachen geringfügig abändern sodass sie in mein programm passen!!!! MONSTER DANKE!!!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Mr.Strobel BufferedImage Exportieren Eclipse Java Basics - Anfänger-Themen 14
A BufferedImage zeigt nur schwarz Java Basics - Anfänger-Themen 3
A BufferedImage Pixel Java Basics - Anfänger-Themen 7
pkm Best Practice BufferedImage in JPane darstellen - aber wie? Java Basics - Anfänger-Themen 22
T BufferedImage in Jar Java Basics - Anfänger-Themen 8
C Problem beim laden eines BufferedImage Java Basics - Anfänger-Themen 2
S BufferedImage heller/dunkler machen mit RescaleOp Java Basics - Anfänger-Themen 2
D Jpg in BufferedImage Reader oder Array ablegen? Java Basics - Anfänger-Themen 5
F BufferedImage Speicher Nutzung Java Basics - Anfänger-Themen 2
S BufferedImage Java Basics - Anfänger-Themen 2
Ernesto95 BufferedImage Teilbereich wieder transparent setzen Java Basics - Anfänger-Themen 16
M BufferedImage performant einlesen Java Basics - Anfänger-Themen 5
A BufferedImage in Android einbinden - Bild spiegeln -wie? Java Basics - Anfänger-Themen 4
O BufferedImage drehen, falsch positioniert Java Basics - Anfänger-Themen 5
H BufferedImage DPI verändern Java Basics - Anfänger-Themen 5
S jpeg bzw bufferedimage als PDF Speichern Java Basics - Anfänger-Themen 13
W von Graphics in BufferedImage Java Basics - Anfänger-Themen 10
H BufferedImage Java Basics - Anfänger-Themen 5
F BufferedImage aus short[][][] Java Basics - Anfänger-Themen 3
Luk10 NPE bei BufferedImage[] Java Basics - Anfänger-Themen 4
S BufferedImage mit farbwerten füllen Java Basics - Anfänger-Themen 11
I Probleme beim Laden eins BufferedImage Java Basics - Anfänger-Themen 8
P BufferedImage als raw speichern Java Basics - Anfänger-Themen 3
C BufferedImage + Popup/Overlay Java Basics - Anfänger-Themen 2
E BufferedImage drucken Java Basics - Anfänger-Themen 3
R BufferedImage in JLabel Java Basics - Anfänger-Themen 2
G Serialisiertes BufferedImage wieder einlesen Java Basics - Anfänger-Themen 13
G Jpanel -> BufferedImage konvertieren Java Basics - Anfänger-Themen 7
G BufferedImage in Applet laden Java Basics - Anfänger-Themen 8
Q BufferedImage aus Bild in jar Java Basics - Anfänger-Themen 2
? BufferedImage löschen Java Basics - Anfänger-Themen 4
F Farben eines ganzen BufferedImage invertieren Java Basics - Anfänger-Themen 2
K Graphics2D und BufferedImage Java Basics - Anfänger-Themen 3
D wie kann ich ein BufferedImage komprimieren? Java Basics - Anfänger-Themen 7
reibi TIFF nach BufferedImage wandeln Java Basics - Anfänger-Themen 72
reibi Farbiges BufferedImage umwandeln zu 2farbig SchwarzWeiss Java Basics - Anfänger-Themen 7
E nullpointer bei BufferedImage Java Basics - Anfänger-Themen 2
M BufferedImage erzeugt OutOfMemoryError Java Basics - Anfänger-Themen 10
B Vorteil von Graphic2D und BufferedImage? Java Basics - Anfänger-Themen 6
U BufferedImage anzeigen, imageIcon oder paintComponent(); Java Basics - Anfänger-Themen 6
X Image nach BufferedImage wandeln ? Java Basics - Anfänger-Themen 9
T BufferedImage kopieren Java Basics - Anfänger-Themen 6
G Image -> BufferedImage Java Basics - Anfänger-Themen 4
M Image/BufferedImage Java Basics - Anfänger-Themen 4
T Multiple BufferedImage Java Basics - Anfänger-Themen 3
Butzibu Image Loader lädt nicht alle Bilder: Java Basics - Anfänger-Themen 4
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
S Aktuell beste Methode um zwei Bilder zu vergleichen..? Java Basics - Anfänger-Themen 1
W Java in Exe Datei umgewandelt, Ressourcen fehlen (Bilder und Audiodateien) Java Basics - Anfänger-Themen 1
B Nach dem kompilieren werden Bilder nicht mehr gefunden Java Basics - Anfänger-Themen 10
C Erste Schritte Bilder nach Export anzeigen Java Basics - Anfänger-Themen 0
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
S Bilder in .jar Datei laden Java Basics - Anfänger-Themen 10
S Bilder zoomen Java Basics - Anfänger-Themen 0
S Kann keine Bilder laden? Java Basics - Anfänger-Themen 9
CptK Interface Bilder über Bildschirm bewegen, bis der Abstand zum vorherigen zu groß wird Java Basics - Anfänger-Themen 13
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
I Projekt als .jar Datei speichern - Bilder werden nicht mehr angezeigt Java Basics - Anfänger-Themen 4
x-tshainge Java Bilder einfügen Java Basics - Anfänger-Themen 1
B Auslesen von PDF / Bilder Java Basics - Anfänger-Themen 5
DaCrazyJavaExpert Bilder werden nicht angezeigt! Java Basics - Anfänger-Themen 6
L Verschiedene Bilder per Knopfdruck anzeigen lassen Java Basics - Anfänger-Themen 17
M Bilder in .Jar exportieren Java Basics - Anfänger-Themen 2
T Bilder in ausführbarer Jar Java Basics - Anfänger-Themen 11
F 2 wechselnde Bilder Java Basics - Anfänger-Themen 4
D Verzögerung des Erscheinens der Bilder Java Basics - Anfänger-Themen 5
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
F Bilder aus jar einlesen Java Basics - Anfänger-Themen 10
J Bilder in Labels aktualisieren Java Basics - Anfänger-Themen 2
T jpeg Bilder zoomen.. Java Basics - Anfänger-Themen 2
C Bilder von Festplatte in Programm hochladen Java Basics - Anfänger-Themen 6
S Wo speicher ich bilder und sounds ab? Java Basics - Anfänger-Themen 4
C Threads Threaded Bilder bearbeiten Java Basics - Anfänger-Themen 8
K Bilder mit Eclipse exportieren Java Basics - Anfänger-Themen 1
J Slideshow zeigt bilder nicht an Java Basics - Anfänger-Themen 3
R Bilder aus Array als anklickbare Objekte Java Basics - Anfänger-Themen 3
K Export nach Jar mit Bilder Java Basics - Anfänger-Themen 2
L Wie bette ich Bilder in eine .jar ein? Java Basics - Anfänger-Themen 4
C Pfad für Bilder angeben Java Basics - Anfänger-Themen 11
B Bilder laden und drauf zugreifen[Eclipse] Java Basics - Anfänger-Themen 9
E ImageJ mehrere Bilder hintereinander bearteiten Java Basics - Anfänger-Themen 2
E HILFE Projekt für die Schule--> Bilder einfügen Java Basics - Anfänger-Themen 9
D 2 Fragen: Position ändern vs. LayoutManager / Bilder einfügen im Vordergrund Java Basics - Anfänger-Themen 3
H Bilder ohne Verlust speichern Java Basics - Anfänger-Themen 2
J Ladebalken anzeigen während Bilder geladen werden Java Basics - Anfänger-Themen 2
R Bilder positionieren Java Basics - Anfänger-Themen 5
D Erstellte Jar datei zeigt keine Bilder an Java Basics - Anfänger-Themen 5
4 4kb bilder Java Basics - Anfänger-Themen 5
Q Pfadangabe für zu speichernde Bilder Java Basics - Anfänger-Themen 2
B Bilder speichern (jpg, gif, jpg) Java Basics - Anfänger-Themen 4
S Bilder einladen Java Basics - Anfänger-Themen 26
B Aus einem Eclipse Projekt eine .jar - keine Bilder drin Java Basics - Anfänger-Themen 7
H Bilder im GUI einfügen Java Basics - Anfänger-Themen 12
G Bilder in Jar anzeigen lassen Java Basics - Anfänger-Themen 23
T Bilder in der jar-datei Java Basics - Anfänger-Themen 10
H Zahlen Bilder zuordnen möglich? Java Basics - Anfänger-Themen 4
J Bilder von Objekten Java Basics - Anfänger-Themen 3
A Bilder in Eclipse speichern Java Basics - Anfänger-Themen 7
J Mit JS, Text und Bilder von Webseite verändern... Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben