# PNG-Datei einlesen und anschließend auf dem Bildschirm ausgeben



## Unregistriert (23. Okt 2009)

Hallo zusammen, ich möchte eine PNG Datei einlesen um nachher weiter mit ihr arbeiten zu können. Zunächst möchte ich sie jedoch auf dem Bilschirm ausgeben. Mein bisheriger Ansatz ist wie folgt:


```
public class Verschiedenes
{
    BufferedImage image;

    public Verschiedenes(){
    
        File file = new File("galactic-center-fleck.png");
        
        try {
            this.image = ImageIO.read(file);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        
        int imageBreite = image.getWidth();
        int imageHoehe = image.getHeight();

        System.out.println("Breite: "+imageBreite);
        System.out.println("HÃ¶he: "+imageHoehe);

    }
}
```

Wie kann ich die Datei jetzt auf den Bilschirm bringen, so das sie mir vom Programm aufgerufen und angezeigt wird? Vielen Dank, Yado!


----------



## KrokoDiehl (23. Okt 2009)

Na das einfachste (in Swing) ist ein _JLabel _oder worum geht es dir genau?


----------



## MiDniGG (23. Okt 2009)

Wenn Du das Bild dann bearbeiten willst. Nimmst am Besten n 
	
	
	
	





```
Canvas
```
 o.ä. und die Methode 
	
	
	
	





```
drawImage(..);
```
 und malst das Bild somit darauf.

hf


----------



## Yado (23. Okt 2009)

Also ich habe ein Beispiel geseheh, wo das Bild auf ein ImageIcon gesetzt wurde. 

```
add(new ImageIcon(image));
pack();
setVisible(true);
```

Allerdings klappt dieser "Trick" nicht bei mir am rechner. Das Bild möchte ich im Anschluss Pixelweise auslesen, so das ich die einzelnen RPG werte auslesen und beieinflussen kann. Wenn ich meinen Konstruktor in main() aufrufe erhalte ich folgende Fehlermeldungen:

javax.imageio.IIOException: Can't read input file!
	at javax.imageio.ImageIO.read(Unknown Source)
	at Verschiedenes.<init>(Verschiedenes.java:17)
	at Hauptklasse.main(Hauptklasse.java:9)
Exception in thread "main" java.lang.NullPointerException
	at Verschiedenes.<init>(Verschiedenes.java:24)
	at Hauptklasse.main(Hauptklasse.java:9)


In meiner Hauptklasse steht nur: 
	
	
	
	





```
public static void main(String[] args) {
new Verschiedenes();
}
```


[JAVA=17]this.image = ImageIO.read(file);[/code]
[JAVA=24]int imageBreite = image.getWidth();[/code]

Hat vielleicht noch jemand einen Tipp?


----------



## KrokoDiehl (23. Okt 2009)

Die Ausnahme besagt, dass er die Datei _galactic-center-fleck.png_ nicht findet. Probiers mal mit einem absolutem Pfad oder mach eine Ausgabe

```
System.out.println( System.getProperty("user.dir") );
```
in dein Programm damit du erfährst was das Arbeitsverzeichnis ist und entsprechend relativ den Pfad angeben kannst.


----------



## Yado (23. Okt 2009)

Das hilft! Die Datei lag im falschen Verzeichnis!

//Edit Vielen Dank allen Beiteiligten!


----------



## Yado (23. Okt 2009)

Noch eine Sache zum Schluss: Ich möchte das Programm im Sinne der OO variabler gestalten. Ich habe nun eine Klasse Bild angelegt, diese soll unabhängig der PNG-Datei Bilder einlesen. Aus diesem Grund habe ich auch die Methode einlesen eingeführt. Diese hat als Parameter den Typ file.

Hauptklasse

```
import javax.imageio.ImageIO;

public class Hauptklasse {

	public static void main(String[] args) {
		
		File bild1 = new File("galactic-center-fleck.png");
		
		Bild neuesBild = new Bild();
		neuesBild.einlesen(bild1);

	}

}
```

Bildklasse

```
import java.io.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class Bild
{
    BufferedImage bild1;
    
    public void einlesen(File bild1){
    	
        try {
            this.bild1 = ImageIO.read(bild1);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        
        int imageBreite = bild1.getWidth();
        int imageHoehe = bild1.getHeight();

        System.out.println("Breite: "+imageBreite);
        System.out.println("Höhe: "+imageHoehe);
        System.out.println( System.getProperty("user.dir") );
    }
}
```

Fehlermedlungen sind:

	Die Methode getWidth() ist für den Typ File nicht definiert (undefined)
	Die Methode getHeight() ist für den Typ File nicht definiert (undefined)

	at Bild.einlesen(Bild.java:17)
	at Hauptklasse.main(Hauptklasse.java:12)

Wie kann ich denn getWidth und getHeight bekannt machen für den Typ file?!


----------



## Yado (23. Okt 2009)

Das Problem ist gelöst!


----------

