Bilddatei laden

Need_Help1993

Bekanntes Mitglied
huhu. ich habe die Aufgabe eine Bilddatei zu laden.
dazu habe ich 2 .class dateien (SimpleImage und ImageViewer) und natürlich das bild namens lenna.pgn

hatte eine Klasse ImageReader vorgegeben, in der noch ToDo´s drin waren.
diese TODO´s habe ich nun bearbeitet. dabei gibts jedoch ein kleines problemchen. ich bekomme eine warnung von eclipse, und beim ausführen der klasse bekomme ich nur einen weißen kasten. wäre nett, wenn sich das mal jemand anschauen könnte:

Java:
 import java.io.*;

/**
   Klasse zum Laden einer PGM-Bilddatei.
   Im Konstruktor der Klasse wird der Dateiname übergeben und die ersten vier Zeilen der Datei werden eingelesen.
   Der Aufruf von readImage() liest dann den Rest der Datei zeilenweise ein und gibt ein SimpleImage zurück.
*/
class ImageReader
{
    /// Reader zum Lesen aus der Datei.
    BufferedReader reader;
    /// Breite und Höhe des zu ladenden Bildes.
    int width, height;
    
    /**
       Initialisiert das Attribut reader mit einem Stream, der aus der Datei mit dem übergebenen Namen liest.
       Die ersten vier Zeilen der Datei werden eingelesen und die Attribute width und height ebenfalls initialisiert.
    */
    ImageReader(String fileName) throws IOException
    {
	reader = newBufferedReader(new FileReader(fileName));// TODO: BufferedReader reader initialisieren.
	readHeader();
    }

    /**
       Liest die ersten vier Zeilen aus der Datei.
       Die Zahlen aus der zweiten und dritten Zeile werden in den Attributen width und height gespeichert.
       Die erste und vierte Zeile werden übersprungen.
     */
    private void readHeader() throws IOException
    {
	reader.readLine();// TODO: Erste Zeile der Datei überspringen
	String widthStr = reader.readLine();   // TODO: Zweite Zeile aus Datei lesen.
	String heightStr = reader.readLine();   // TODO: Dritte Zeile aus Datei lesen.
	reader.readLine();// TODO: Vierte Zeile der Datei überspringen.
	width = Integer.parseInt(widthStr);
	height = Integer.parseInt(heightStr);
    }

    /**
       Liest eine Pixelzeile aus der Datei aus.
       Eine Zeile der Datei besteht aus durch Leerzeichen getrennten Zahlenwerten.
       Die gelesene Zeile line vom Typ String wird mittels String[] line.split(" ") an ihren Leerzeichen in einen Array aus Stringstücken zerschnitten.
       Diese werden dann einzeln nach short konvertiert.
       Der resultierende short-Array wird dann zurückgegeben.
     */
    private short[] readLine() throws IOException
    {
	short[] result = new short[width];
	String[]line = reader.readLine().split("");// TODO: Eine Zeile aus Datei lesen und Werte in result schreiben.
	
	for(int i=0; i < width; i++){
		result[i]=Short.parseShort(line[i]);
	}
	return result;
    }

    /**
       Liest die komplette Bilddatei und gibt das Bild als SimpleImage zurück.
       Die Datei wird zeilenweise eingelesen (sie enthält genau height Zeilen).
       Jede Zeile wird dann pixelweise in das Ergebnisbild übertragen.
       Jede Zeile enthält genau width Pixel.
     */
    SimpleImage readImage() throws IOException
    {
    // TODO: Erzeugen eines neuen SimpleImage.
	//       Datei zeilenweise einlesen und Pixelwerte in Bild übertragen.
	//       SimpleImage zurückgeben.
    	SimpleImage s = new SimpleImage(width, height);
    		for(int i = 0; i < height; i++){
    			short[]r=readLine();
    			
    		for(int j = 0; j < r.length; j++){
    			s.setPixelAt(j, i, r[j]);
    		}
    		}
    		return s;
    }
    
    /**
       Lädt ein Bild von der Festplatte und zeigt es auf dem Bildschirm an.
     */
    public static void main(String[] args)
    {
	try
	{
	    ImageViewer viewer = new ImageViewer();
	    ImageReader ir = new ImageReader("lenna.pgm");
	    SimpleImage image = ir.readImage();
	    viewer.showImage(image);
	}
	catch(IOException e)
	{
	    System.out.println("Fehler beim Öffnen der Datei.");
	}
    }
}

warnung kommt in zeile 21 "BuffaredReader ist undefiniert für ImageReader
 

bandy

Bekanntes Mitglied
huhu. ich habe die Aufgabe eine Bilddatei zu laden.
dazu habe ich 2 .class dateien (SimpleImage und ImageViewer) und natürlich das bild namens lenna.pgn

hatte eine Klasse ImageReader vorgegeben, in der noch ToDo´s drin waren.
diese TODO´s habe ich nun bearbeitet. dabei gibts jedoch ein kleines problemchen. ich bekomme eine warnung von eclipse, und beim ausführen der klasse bekomme ich nur einen weißen kasten. wäre nett, wenn sich das mal jemand anschauen könnte:

Java:
 import java.io.*;

/**
   Klasse zum Laden einer PGM-Bilddatei.
   Im Konstruktor der Klasse wird der Dateiname übergeben und die ersten vier Zeilen der Datei werden eingelesen.
   Der Aufruf von readImage() liest dann den Rest der Datei zeilenweise ein und gibt ein SimpleImage zurück.
*/
class ImageReader
{
    /// Reader zum Lesen aus der Datei.
    BufferedReader reader;
    /// Breite und Höhe des zu ladenden Bildes.
    int width, height;
    
    /**
       Initialisiert das Attribut reader mit einem Stream, der aus der Datei mit dem übergebenen Namen liest.
       Die ersten vier Zeilen der Datei werden eingelesen und die Attribute width und height ebenfalls initialisiert.
    */
    ImageReader(String fileName) throws IOException
    {
	reader = newBufferedReader(new FileReader(fileName));// TODO: BufferedReader reader initialisieren.
	readHeader();
    }

    /**
       Liest die ersten vier Zeilen aus der Datei.
       Die Zahlen aus der zweiten und dritten Zeile werden in den Attributen width und height gespeichert.
       Die erste und vierte Zeile werden übersprungen.
     */
    private void readHeader() throws IOException
    {
	reader.readLine();// TODO: Erste Zeile der Datei überspringen
	String widthStr = reader.readLine();   // TODO: Zweite Zeile aus Datei lesen.
	String heightStr = reader.readLine();   // TODO: Dritte Zeile aus Datei lesen.
	reader.readLine();// TODO: Vierte Zeile der Datei überspringen.
	width = Integer.parseInt(widthStr);
	height = Integer.parseInt(heightStr);
    }

    /**
       Liest eine Pixelzeile aus der Datei aus.
       Eine Zeile der Datei besteht aus durch Leerzeichen getrennten Zahlenwerten.
       Die gelesene Zeile line vom Typ String wird mittels String[] line.split(" ") an ihren Leerzeichen in einen Array aus Stringstücken zerschnitten.
       Diese werden dann einzeln nach short konvertiert.
       Der resultierende short-Array wird dann zurückgegeben.
     */
    private short[] readLine() throws IOException
    {
	short[] result = new short[width];
	String[]line = reader.readLine().split("");// TODO: Eine Zeile aus Datei lesen und Werte in result schreiben.
	
	for(int i=0; i < width; i++){
		result[i]=Short.parseShort(line[i]);
	}
	return result;
    }

    /**
       Liest die komplette Bilddatei und gibt das Bild als SimpleImage zurück.
       Die Datei wird zeilenweise eingelesen (sie enthält genau height Zeilen).
       Jede Zeile wird dann pixelweise in das Ergebnisbild übertragen.
       Jede Zeile enthält genau width Pixel.
     */
    SimpleImage readImage() throws IOException
    {
    // TODO: Erzeugen eines neuen SimpleImage.
	//       Datei zeilenweise einlesen und Pixelwerte in Bild übertragen.
	//       SimpleImage zurückgeben.
    	SimpleImage s = new SimpleImage(width, height);
    		for(int i = 0; i < height; i++){
    			short[]r=readLine();
    			
    		for(int j = 0; j < r.length; j++){
    			s.setPixelAt(j, i, r[j]);
    		}
    		}
    		return s;
    }
    
    /**
       Lädt ein Bild von der Festplatte und zeigt es auf dem Bildschirm an.
     */
    public static void main(String[] args)
    {
	try
	{
	    ImageViewer viewer = new ImageViewer();
	    ImageReader ir = new ImageReader("lenna.pgm");
	    SimpleImage image = ir.readImage();
	    viewer.showImage(image);
	}
	catch(IOException e)
	{
	    System.out.println("Fehler beim Öffnen der Datei.");
	}
    }
}

warnung kommt in zeile 21 "BuffaredReader ist undefiniert für ImageReader


Das ist aber nicht ganzer Quelltext !?
 

Need_Help1993

Bekanntes Mitglied
ähm doch?
da sind noch die beiden .class dateien, sonst gibts nichts, und die ImageReader class war ja auch schon vorgegeben. ich musste nur bei den TODO stellen den Source code ergänzen, und das habe ich ja gemacht. funktioniert doch auch super... nur fehlt eben das bild, weil in zeile 21 ne warnung kommt
 

bandy

Bekanntes Mitglied
ähm doch?
da sind noch die beiden .class dateien, sonst gibts nichts, und die ImageReader class war ja auch schon vorgegeben. ich musste nur bei den TODO stellen den Source code ergänzen, und das habe ich ja gemacht. funktioniert doch auch super... nur fehlt eben das bild, weil in zeile 21 ne warnung kommt

Wo liegt deine Bilddatei? Hast du den Pfad zum Bild angegeben? Soll dein Bild nur geladen werden, oder auch angezeigt werden? Wenn es angezeigt werden soll, dann wo? In der Console wird es wohl nicht gehen, brauchst sicher eine GUI, JFrame etc., oder? Ich habe es zumindest so frueher gemacht.
 

Badmeister

Mitglied
Hat das irgendeinen speziellen Grund, warum du einen BufferedReader benutzt und diese ganzen Methoden?

Über Image Icon wär es zumindest einfacher.
 

Need_Help1993

Bekanntes Mitglied
also die Bilddatei liegt in dem verzeichnis, in dem auch die ImageReader datei liegt.
(C:\Users\***\Documents\Entwicklung_Programmierung\Java\Eclipse\Bildloader_Lenna\bin)
(das Bild wird aber auch im Projektordner in Eclipse angezeigt <---- habe es dort importiert)

das Bild soll angezeigt werden (GUI ist schon so vorhanden, dass es funktioniert)
wenn ich die Klasse ImageReader ausführe öffnet sich ein fenster, das auch die richtige breite und höhe hat, aber es ist ganz weiß, und da sollte eigentlich das bild drin sein.

das mit dem Buffered reader habe ich selbst so gemacht, weil ich dachte, dass es funktioniert (was anscheinend nicht der fall ist)

kann mir da jemand weiterhelfen? <---- bzw. was müsste in die TODO in Zeile 21 rein?

der restliche code soll nicht verändert werden, nur die TODO´s
 

Need_Help1993

Bekanntes Mitglied
gott bin ich blöd..... ich habe die warnung nur bekommen, weil zwischen new und buffered reader kein leerzeichen war.....

naja aber das Bild wird mir trotzdem noch nicht angezeigt.... woran liegts?
 

Need_Help1993

Bekanntes Mitglied
folgende exceptions werden mir geworfen:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Short.parseShort(Unknown Source)
at java.lang.Short.parseShort(Unknown Source)
at ImageReader.readLine(ImageReader.java:53)
at ImageReader.readImage(ImageReader.java:71)
at ImageReader.main(ImageReader.java:89)
 

Badmeister

Mitglied
Ich würds mal so probieren (hab das jetzt aber nicht getestet):

String dir = "dir";
try {
InputStream in = this.getClass().getResourceAsStream(dir);
BufferedReader br = new BufferedReader( new InputStreamReader(in));
catch(IOException ex){}

Gruß
Badmeister
 

Need_Help1993

Bekanntes Mitglied
vielen Dank.
wir sind schonmal auf dem richtigen weg. habe gerade nochmal in meinen Blättern egschaut, da steht auch, dass wir streams statt java-api benutzen sollen.

aber da ist noch eine Fehlermeldung von eclipse, was die Klammern angeht, die ich nicht wegbekomme:
Java:
 ImageReader(String fileName) throws IOException
    {
    	String dir = "dir";    // TODO: BufferedReader reader initialisieren.
    	try {
    	InputStream in = this.getClass().getResourceAsStream(dir);
    	BufferedReader reader = new BufferedReader( new InputStreamReader(in));
    	catch(IOException ex){
    		System.out.println("Fehler");}
in Zeile 6 sagt er bräuchte ich ne }
aber ich hab schon hin und her probiert, bekomms nicht hin...
 

bandy

Bekanntes Mitglied
Also wenn ich deinen Code bei mir in Eclipse versuche, da gibts lauter Fehler und Programm laesst sich nicht ausfuehren.

Du erzeugst in main() ein Istanz viewer der Klasse ImageViewer, in deinem Quelltext ist diese Klasse aber nicht vorhanden, das selbe ist mit SimpleImage und Klasse ImageReader wuerde ich public machen und bei Erzeugung der Instanz ImageReader ir = new ImageReader("lenna.pgm"); die Klammern leer lassen, was hat lenna.pgm dort zu suchen?

Frage mich echt warum bei dir da etwas angezeigt wird, vielleicht doch nicht?
Du hast echt doch nichts fuer eine GUI in deinem Programm
 

Need_Help1993

Bekanntes Mitglied
SimpleImage und ImageReader sind als .class dateien vorhanden ;)

lenna.png heißt das bild, das ich laden möchte....
habe ich aber oben schon mehrfach geschrieben...


ich bekomme jetzt noch folgende meldungen:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Unreachable catch block for IOException. This exception is never thrown from the try statement body

at ImageReader.<init>(ImageReader.java:26)
at ImageReader.main(ImageReader.java:98)

Java:
 ImageReader(String fileName) throws IOException
    {
    	String dir = "dir";    // TODO: BufferedReader reader initialisieren.
    	try {
    	InputStream in = this.getClass().getResourceAsStream(dir);
    	BufferedReader reader = new BufferedReader( new InputStreamReader(in));
    	}
    	catch(IOException ex){
    		System.out.println("Fehler");}

der catch block ist bei mir unerreichbar.. aber anderst kann ichs mit den klammern und ; nicht lösen....
 

bandy

Bekanntes Mitglied
Und was ist das fuer ein Format .pgm ? Ich weiss nicht ob es so etwas gibts. Ich kenne jpg und jpge ... pgm kommt mir seltsam vor:rtfm:
 

Need_Help1993

Bekanntes Mitglied
...... bitte lies dir doch erstmal den threat hier durch, bevor du sowas schreibst.....

zum 100. mal. ich muss nur dort ergänzen wo TODO steht, der rest ist alles schon gegeben!! <---- und somit gehe ich auch nicht davon aus, dass es falsch ist... und pgn gibts. ist ein schwarz weiß format
 

Need_Help1993

Bekanntes Mitglied
danke EikeB

bleiben noch folgende meldungen übrig:

Exception in thread "main" java.lang.NullPointerException
at java.io.Reader.<init>(Unknown Source)
at java.io.InputStreamReader.<init>(Unknown Source)
at ImageReader.<init>(ImageReader.java:23)
at ImageReader.main(ImageReader.java:96)
 

bandy

Bekanntes Mitglied
SimpleImage und ImageReader sind als .class dateien vorhanden ;)

lenna.png heißt das bild, das ich laden möchte....
habe ich aber oben schon mehrfach geschrieben...

lenna.png heisst das Bild, aber was hat sie dort in den Klammern zu suchen? Ist doch kein Wunschkonzert, du kannst sie doch nicht einfach irgendwo in die Klammern setzen, weil du es aufrufen willst
 

Need_Help1993

Bekanntes Mitglied
der code sieht momentan folgendermaßen aus
Java:
import java.io.*;

/**
   Klasse zum Laden einer PGM-Bilddatei.
   Im Konstruktor der Klasse wird der Dateiname übergeben und die ersten vier Zeilen der Datei werden eingelesen.
   Der Aufruf von readImage() liest dann den Rest der Datei zeilenweise ein und gibt ein SimpleImage zurück.
*/
class ImageReader
{
    /// Reader zum Lesen aus der Datei.
    BufferedReader reader;
    /// Breite und Höhe des zu ladenden Bildes.
    int width, height;
    
    /**
       Initialisiert das Attribut reader mit einem Stream, der aus der Datei mit dem übergebenen Namen liest.
       Die ersten vier Zeilen der Datei werden eingelesen und die Attribute width und height ebenfalls initialisiert.
    */
    ImageReader(String fileName) throws IOException
    {
    	String dir = "dir";    // TODO: BufferedReader reader initialisieren.
    	InputStream in = this.getClass().getResourceAsStream(dir);
    	BufferedReader reader = new BufferedReader( new InputStreamReader(in));
    	    	
    	
	readHeader();
    }

    /**
       Liest die ersten vier Zeilen aus der Datei.
       Die Zahlen aus der zweiten und dritten Zeile werden in den Attributen width und height gespeichert.
       Die erste und vierte Zeile werden übersprungen.
     */
    private void readHeader() throws IOException
    {
	reader.readLine();// TODO: Erste Zeile der Datei überspringen
	String widthStr = reader.readLine();   // TODO: Zweite Zeile aus Datei lesen.
	String heightStr = reader.readLine();   // TODO: Dritte Zeile aus Datei lesen.
	reader.readLine();// TODO: Vierte Zeile der Datei überspringen.
	width = Integer.parseInt(widthStr);
	height = Integer.parseInt(heightStr);
    }

    /**
       Liest eine Pixelzeile aus der Datei aus.
       Eine Zeile der Datei besteht aus durch Leerzeichen getrennten Zahlenwerten.
       Die gelesene Zeile line vom Typ String wird mittels String[] line.split(" ") an ihren Leerzeichen in einen Array aus Stringstücken zerschnitten.
       Diese werden dann einzeln nach short konvertiert.
       Der resultierende short-Array wird dann zurückgegeben.
     */
    private short[] readLine() throws IOException
    {
	short[] result = new short[width];
	String[]line = reader.readLine().split("");// TODO: Eine Zeile aus Datei lesen und Werte in result schreiben.
	
	for(int i=0; i < width; i++){
		result[i]=Short.parseShort(line[i]);
	}
	return result;
    }

    /**
       Liest die komplette Bilddatei und gibt das Bild als SimpleImage zurück.
       Die Datei wird zeilenweise eingelesen (sie enthält genau height Zeilen).
       Jede Zeile wird dann pixelweise in das Ergebnisbild übertragen.
       Jede Zeile enthält genau width Pixel.
     */
    SimpleImage readImage() throws IOException
    {
    // TODO: Erzeugen eines neuen SimpleImage.
	//       Datei zeilenweise einlesen und Pixelwerte in Bild übertragen.
	//       SimpleImage zurückgeben.
    	SimpleImage s = new SimpleImage(width, height);
    		for(int i = 0; i < height; i++){
    			short[]r=readLine();
    			
    		for(int j = 0; j < r.length; j++){
    			s.setPixelAt(j, i, r[j]);
    		}
    		}
    		return s;
    }
    
    /**
       Lädt ein Bild von der Festplatte und zeigt es auf dem Bildschirm an.
     */
    public static void main(String[] args)
    {
	try
	{
	    ImageViewer viewer = new ImageViewer();
	    ImageReader ir = new ImageReader("lenna.pgm");
	    SimpleImage image = ir.readImage();
	    viewer.showImage(image);
	}
	catch(IOException e)
	{
	    System.out.println("Fehler beim Öffnen der Datei.");
	}
    }
}
 

bandy

Bekanntes Mitglied
Kannst mir erklaeren was das hier soll in Klammern?

Java:
  ImageReader ir = new ImageReader("lenna.pgm");

Bei dir ist es sicherlich rot markiert in Eclipse, oder ?
 

bandy

Bekanntes Mitglied
Wenn du einfach Quellcode fuer einen Bildbetrachter suchst und keine Ahnung hast, dann frage es doch einfach, wozu die ganzen Geschichten, es zeigt etwas an, aber kein Bild, kann es nicht, jeder kann doch deinen Quellcode selber in Eclipse ausprobieren, wozu luegen? Du brauchst eine Klasse die von JFrame erbt, damit GUI angezeigt wird und die Klasse musst du public deklarieren, damit siein main() aufrufen kannst und einen Konstruktor brauchst auch noch
 
G

Gast2

Gast
@bandy:
Warum? Der Konstruktor ist doch hier definiert:
Java:
ImageReader(String fileName)
 

bandy

Bekanntes Mitglied
@bandy:
Warum? Der Konstruktor ist doch hier definiert:
Java:
ImageReader(String fileName)

Ja, der ist hier definiert, aber richtigen Sinn macht der Konstruktor bei Klassen die von JFrame erben, weil man dort die ganzen Rahmengroessen etc. definiert, sonst macht ja nach meinen erkentnissen ein Konstruktor wenig Sinn, was er dort schriem, kann man ja in jeder anderen Methode schreiben und nicht unbeding in der Methode vom Typ der Klasse(also dem Konstruktor), aber ich poste ihm meinen Quelltext fuer einen Bildbetrachter
 

Kevin94

Top Contributor
Ich verstehe zwar bandy's Kritik nicht dein logischer Fehler liegt aber trotzdem im Konstruktor.

Java:
ImageReader(String fileName) throws IOException
    {
        String dir = "dir";    // diese Zuweisung stimmt nicht: z.B. "./bin/" oder ein absoluter Pfad
        InputStream in = this.getClass().getResourceAsStream(dir+fileName);//das hat auch nicht gestimmt
        BufferedReader reader = new BufferedReader( new InputStreamReader(in));
    readHeader();
    }
 

Need_Help1993

Bekanntes Mitglied
bei mir ist überhaupt nichts rot markiert....
und wenn du mich noch einmal fragst, was der gegebene code soll bekomm ich hier echt zustände....

für dich nochmal zum mitschreiben....

der code nach dem du die ganze zeit fragst ist vorgegeben und FEST! also stimmt er acuh, und daran wird nichts geändert
 

Need_Help1993

Bekanntes Mitglied
Ich verstehe zwar bandy's Kritik nicht dein logischer Fehler liegt aber trotzdem im Konstruktor.

Java:
ImageReader(String fileName) throws IOException
    {
        String dir = "dir";    // diese Zuweisung stimmt nicht: z.B. "./bin/" oder ein absoluter Pfad
        InputStream in = this.getClass().getResourceAsStream(dir+fileName);//das hat auch nicht gestimmt
        BufferedReader reader = new BufferedReader( new InputStreamReader(in));
    readHeader();
    }

vielen dank, du bist meine rettung :)

das bild liegt hier: C:\Users\MaxMustermann\Documents\Entwicklung_Programmierung\Java\Eclipse\Lenna

wie müsste dan der code lauten?
 

Baum17

Mitglied
LennaF.gif
 

Kiri

Bekanntes Mitglied
Probiere es mal so wie Kevin es schrieb und ändere folgende Zeile:

String dir = "C:\Users\MaxMustermann\Documents\Entwicklung_Programmierung\Java\Eclipse\Lenna\";
 

Need_Help1993

Bekanntes Mitglied
funktioniert nicht...
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )

at ImageReader.<init>(ImageReader.java:21)
at ImageReader.main(ImageReader.java:91)


der ganze s***** kann doch nicht so schwer sein ey..... das ding nervt mich schon den ganzen tag ...
 

Kiri

Bekanntes Mitglied
dann so

String dir = "C:\\Users\\MaxMustermann\\Documents\\Entwicklung_Programmierung\\Java\\Eclipse\\Lenna\\";
 

Kevin94

Top Contributor
Ok bei mir läufts jetzte, mit folgenden Änderungen zu deinem Code:

Java:
        InputStream in = this.getClass().getResourceAsStream(fileName);//hab das Verzeichniss weggelassen, liegt ja im selben
        BufferedReader reader = new BufferedReader( new InputStreamReader(in));

und die wesentliche Änderung ist in der readLine Methode:

Java:
private short[] readLine() throws IOException
    {
    short[] result = new short[width];
    String[]line = reader.readLine().split(" ");// Hier muss ein Leerzeichen rein
    
    for(int i=0; i < width; i++){
        result[i]=Short.parseShort(line[i]);
    }
    return result;
    }
 

Need_Help1993

Bekanntes Mitglied
vielen vioelen Dank schonmal. aber bei mir läufts irgendwie trotzdem noch nicht...

code sieht folgendermaßen aus:
Java:
import java.io.*;

/**
   Klasse zum Laden einer PGM-Bilddatei.
   Im Konstruktor der Klasse wird der Dateiname übergeben und die ersten vier Zeilen der Datei werden eingelesen.
   Der Aufruf von readImage() liest dann den Rest der Datei zeilenweise ein und gibt ein SimpleImage zurück.
*/
class ImageReader
{
    /// Reader zum Lesen aus der Datei.
    BufferedReader reader;
    /// Breite und Höhe des zu ladenden Bildes.
    int width, height;
    
    /**
       Initialisiert das Attribut reader mit einem Stream, der aus der Datei mit dem übergebenen Namen liest.
       Die ersten vier Zeilen der Datei werden eingelesen und die Attribute width und height ebenfalls initialisiert.
    */
    ImageReader(String fileName) throws IOException
    {
    	// TODO: BufferedReader reader initialisieren.
    	 InputStream in = this.getClass().getResourceAsStream(fileName);
         BufferedReader reader = new BufferedReader( new InputStreamReader(in));   
    	    	    	
    readHeader();
    }

    /**
       Liest die ersten vier Zeilen aus der Datei.
       Die Zahlen aus der zweiten und dritten Zeile werden in den Attributen width und height gespeichert.
       Die erste und vierte Zeile werden übersprungen.
     */
    private void readHeader() throws IOException
    {
	reader.readLine();// TODO: Erste Zeile der Datei überspringen
	String widthStr = reader.readLine();   // TODO: Zweite Zeile aus Datei lesen.
	String heightStr = reader.readLine();   // TODO: Dritte Zeile aus Datei lesen.
	reader.readLine();// TODO: Vierte Zeile der Datei überspringen.
	width = Integer.parseInt(widthStr);
	height = Integer.parseInt(heightStr);
    }

    /**
       Liest eine Pixelzeile aus der Datei aus.
       Eine Zeile der Datei besteht aus durch Leerzeichen getrennten Zahlenwerten.
       Die gelesene Zeile line vom Typ String wird mittels String[] line.split(" ") an ihren Leerzeichen in einen Array aus Stringstücken zerschnitten.
       Diese werden dann einzeln nach short konvertiert.
       Der resultierende short-Array wird dann zurückgegeben.
     */
 // TODO: Eine Zeile aus Datei lesen und Werte in result schreiben.
    
    private short[] readLine() throws IOException
    {
    short[] result = new short[width];
    String[]line = reader.readLine().split(" ");
    
    for(int i=0; i < width; i++){
        result[i]=Short.parseShort(line[i]);
    }
    return result;
    }

    /**
       Liest die komplette Bilddatei und gibt das Bild als SimpleImage zurück.
       Die Datei wird zeilenweise eingelesen (sie enthält genau height Zeilen).
       Jede Zeile wird dann pixelweise in das Ergebnisbild übertragen.
       Jede Zeile enthält genau width Pixel.
     */
    SimpleImage readImage() throws IOException
    {
    // TODO: Erzeugen eines neuen SimpleImage.
	//       Datei zeilenweise einlesen und Pixelwerte in Bild übertragen.
	//       SimpleImage zurückgeben.
    	SimpleImage s = new SimpleImage(width, height);
    		for(int i = 0; i < height; i++){
    			short[]r=readLine();
    			
    		for(int j = 0; j < r.length; j++){
    			s.setPixelAt(j, i, r[j]);
    		}
    		}
    		return s;
    }
    
    /**
       Lädt ein Bild von der Festplatte und zeigt es auf dem Bildschirm an.
     */
    public static void main(String[] args)
    {
	try
	{
	    ImageViewer viewer = new ImageViewer();
	    ImageReader ir = new ImageReader("lenna.pgm");
	    SimpleImage image = ir.readImage();
	    viewer.showImage(image);
	}
	catch(IOException e)
	{
	    System.out.println("Fehler beim Öffnen der Datei.");
	}
    }
}

Exception in thread "main" java.lang.NullPointerException
at ImageReader.readHeader(ImageReader.java:35)
at ImageReader.<init>(ImageReader.java:25)
at ImageReader.main(ImageReader.java:93)
 

Kevin94

Top Contributor
Mist, den Fehler hab ich komplett übersehen:
Java:
ImageReader(String fileName) throws IOException
    {
        // TODO: BufferedReader reader initialisieren.
         InputStream in = this.getClass().getResourceAsStream(fileName);
         /*BufferedReader*/ reader = new BufferedReader( new InputStreamReader(in));   //sonst würdest du einfach eine lokale Variable definieren und nicht die Instanzvariable initialiesieren
    readHeader();
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J NullPointerException bei Laden von Bilddatei Java Basics - Anfänger-Themen 16
D InputStream parsen und als Bilddatei abspeichern Java Basics - Anfänger-Themen 1
G Bild in Buffer statt temporäre Bilddatei Java Basics - Anfänger-Themen 6
T Bilddatei aus Internet abspeichern Java Basics - Anfänger-Themen 3
I Dateien aus dem Resource Folder laden Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I SWT Plattformunabhängig laden - verschiedene SWT .jar laden Java Basics - Anfänger-Themen 0
C XML Datei speichern und laden Java Basics - Anfänger-Themen 18
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
I Datei als Stream aus Ressource laden? Java Basics - Anfänger-Themen 2
M Tabellen- Daten laden Java Basics - Anfänger-Themen 2
K File (png) in Image laden Java Basics - Anfänger-Themen 3
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
S Bilder in .jar Datei laden Java Basics - Anfänger-Themen 10
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
S Kann keine Bilder laden? Java Basics - Anfänger-Themen 9
C Problem: PC ohne Internet und keine Möglichkeit Programme zu laden Java Basics - Anfänger-Themen 5
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 0
L Fehler beim laden eines Icons Java Basics - Anfänger-Themen 3
L Resourcen laden klappt nicht Java Basics - Anfänger-Themen 2
L Speichern und Laden Java Basics - Anfänger-Themen 7
F File von Windowsfreigabe laden Java Basics - Anfänger-Themen 1
H Interface Objekte speichern und laden (serialisieren/deserialisieren) Java Basics - Anfänger-Themen 1
H Image laden Java Basics - Anfänger-Themen 4
B Image laden im GridBagLayout Java Basics - Anfänger-Themen 3
D Laden und leeren von Comboboxen Java Basics - Anfänger-Themen 8
D NPE beim laden von Daten aus MySQL Java Basics - Anfänger-Themen 9
B Klassen Klasse dynamisch laden. Java Basics - Anfänger-Themen 8
F Daten auf Webserver laden - wiederholen bei Fehler Java Basics - Anfänger-Themen 0
S Serialisierung: Laden von Objekten - Risiken? Java Basics - Anfänger-Themen 4
R Eine Arrayliste in XML abspeichern und laden können Java Basics - Anfänger-Themen 7
J App auf einen Webserver laden Java Basics - Anfänger-Themen 14
S Gespeichertes aus ArrayList laden mithilfe der For-Schleife Java Basics - Anfänger-Themen 12
C Problem beim laden eines BufferedImage Java Basics - Anfänger-Themen 2
C Klassen aus einem Package ermitteln und per Laufzeit laden Java Basics - Anfänger-Themen 17
S LWJGL - Matrix vom Matrixstack laden Java Basics - Anfänger-Themen 3
Seikuassi Objekte in Datei reihenweise speichern/laden Java Basics - Anfänger-Themen 3
W (XML/XSL) Daten aus Eclipse in eine Klasse Laden. Java Basics - Anfänger-Themen 1
F Operatoren Enum aus Textdabei laden Java Basics - Anfänger-Themen 3
B Listener beim Laden (deserialize) wieder hinzufügen bzw. mitspeichern? Java Basics - Anfänger-Themen 3
T Android App: Laden dauert lange Java Basics - Anfänger-Themen 1
I Bild aus Bereich laden Java Basics - Anfänger-Themen 3
S Aus einer Klasse eine andere laden Java Basics - Anfänger-Themen 6
C Daten speichern und laden Java Basics - Anfänger-Themen 6
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
B Bilder laden und drauf zugreifen[Eclipse] Java Basics - Anfänger-Themen 9
M Datei zu DropBox laden Java Basics - Anfänger-Themen 2
M Website im Hintergrund laden Java Basics - Anfänger-Themen 5
M Icon laden und anzeigen Java Basics - Anfänger-Themen 2
L Termin in Array speichern/laden Java Basics - Anfänger-Themen 21
K Transparents Bild laden -> Fehlermeldung Java Basics - Anfänger-Themen 6
T Bild laden Java Basics - Anfänger-Themen 7
S Image in Panel laden Java Basics - Anfänger-Themen 12
L Input/Output Sortieren Speichern Laden von ArrayListe Java Basics - Anfänger-Themen 14
H JButton - Icon(.png) aus resources laden Java Basics - Anfänger-Themen 23
J Laden von Dateien Java Basics - Anfänger-Themen 19
K ImageIcon laden Java Basics - Anfänger-Themen 6
M Problem mit null pinterexception beim laden von Bildern Java Basics - Anfänger-Themen 20
C Automatisches Ausfuehren einer Funktion beim Laden eines Jar files Java Basics - Anfänger-Themen 3
L Applet: Laden unterbricht den Browserfokus (scrollen) Java Basics - Anfänger-Themen 2
algebraiker Nur Klassen aus einem bestimmten Jar laden Java Basics - Anfänger-Themen 16
B Std-Serialisierung - Speichern/Laden geht nur auf einem Rechner Java Basics - Anfänger-Themen 17
B Applet - Laden eines Java-Fensters bricht ab Java Basics - Anfänger-Themen 6
K BufferedImage, Bilder laden Java Basics - Anfänger-Themen 15
M Webseite komplett laden Java Basics - Anfänger-Themen 4
J Erste Schritte Im Tante-Emma-Laden mehrere Artikel kaufen mit if-Abfrage Java Basics - Anfänger-Themen 24
L Image laden und auf jPanel ausgeben Java Basics - Anfänger-Themen 7
S BMP Bild laden Java Basics - Anfänger-Themen 7
S Input/Output Text und Bilder laden Java Basics - Anfänger-Themen 5
M Beim Start Methode laden die Textfelder füllt Java Basics - Anfänger-Themen 5
D GUI: Panel in Panel laden Java Basics - Anfänger-Themen 10
V Jar-Datei von Byte-Array oder Stream laden? Java Basics - Anfänger-Themen 9
S Klasse bei Laufzeit laden? Java Basics - Anfänger-Themen 2
JAVAnnik problem beim lvl laden Java Basics - Anfänger-Themen 15
J Dateien laden Java Basics - Anfänger-Themen 7
B JFrame neu laden Java Basics - Anfänger-Themen 7
S Problem beim Speichern und Laden von Daten Java Basics - Anfänger-Themen 13
D Bilder Laden, mit Eclipse ok, .jar nicht Java Basics - Anfänger-Themen 5
F Bilder aus .jar datei laden Java Basics - Anfänger-Themen 1
A Daten speichern und wieder in ein Array laden Java Basics - Anfänger-Themen 4
N Applets: Objekte vom Server laden Java Basics - Anfänger-Themen 4
L EOF handle bem Laden leerer Datei Java Basics - Anfänger-Themen 3
N Serialization, Laden klappt nicht wenn die Klasse geändert wurde Java Basics - Anfänger-Themen 3
M Bilder laden und zeichnen Java Basics - Anfänger-Themen 3
B Bildinformation in ein Array laden Java Basics - Anfänger-Themen 14
Luk10 Dateipfad beim Laden einer Datei + Neue kleine Frage! Java Basics - Anfänger-Themen 11
N Nachträgliches Laden einer Klasse. Java Basics - Anfänger-Themen 6
R In jLable Bild aus URL laden Java Basics - Anfänger-Themen 9
K OOP Ressource/Datei mit ClassLoader laden Java Basics - Anfänger-Themen 18
R Image laden die Zweite Java Basics - Anfänger-Themen 4
R Image laden Java Basics - Anfänger-Themen 10
E Keine neuen Beiträge Mit JavaMachine Datei vom Host in den Ram des Host laden. Java Basics - Anfänger-Themen 4
Burny91 Resourcen mit relativen Pfadangaben laden Java Basics - Anfänger-Themen 2
I CSV Datei auf HTML Seite hochladen und in DB laden Java Basics - Anfänger-Themen 9
O Grafik in Frame laden Java Basics - Anfänger-Themen 9
P Speichern und Laden Java Basics - Anfänger-Themen 11
K Bilder "langsam" laden Java Basics - Anfänger-Themen 4
S Serialized LinkedList aus Datei Laden Java Basics - Anfänger-Themen 15

Ähnliche Java Themen


Oben