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:
warnung kommt in zeile 21 "BuffaredReader ist undefiniert für ImageReader
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