Impressum | Kontakt
 Startseite | Kurse | Projekte Haskell | Linux | Suche | Blog

Bilddaten einlesen

Da es sich bei den PNM-Bildern um gewöhnliche Textdateien handelt, können diese zeilenweise mit einer geeigneten Methode in einen (langen) String eingelesen werden. Dabei werden die Kommentarzeilen überlesen (ausgelassen).

Sinnvollerweise teilt man anschließend den String in einen Teilstring, der die Metadaten enthält und einen Pixelstring. Der Metastring besteht bei einem Schwarzweißbild aus genau zwei Zeilen, bei den anderen beiden Formaten aus drei Zeilen.

// Metastring eines Schwarzweißbildes:     // Metastring eines Grau-/Farbbildes
P1                                         P2  (oder P3)
123 45                                     123 45
                                           250

Beim Einlesen der Bilddatei muss dieser Unterschied berücksichtigt werden.

PNMFileReader

Mit einer universellen Klasse PNMFileReader soll das Einlesen aller erlaubten Bilddaten erledigt werden. Diese Klasse hat folgende öffentliche Schnittstellen:

// Konstruktor: Der Inhalt der Bilddatei wird eingelesen
// Die einzelnen Werte können anschließend abgefragt werden.
public PNMFileReader(String filename)

// Get-Methoden
public String getDateiname()
public String getMagicNumber()
public int getBreite()
public int getHoehe()
public int getMaxFarben()
public BufferedImage getImage()

Intern werden folgende private Methoden verwendet:

// Einlesen der Bilddatei in einen langen String
// ohne Berücksichtigung von Kommentarzeilen
public String getDatei(String dateiname)

// Aus dem eingelesen Bildstring s werden die ersten
// Zeilen, die die Metadaten enthalten, extrahiert.
private String getMetaData(String s)

// Aus dem eingelesenen Bildstring werden alle
// Pixeldaten extrahiert.
private String getImageData(String s)

// Aus dem Metadatenstring m werden
// MagicNumber, Breite, Höhe und ggf. Farbanzahl ermittelt
private void metaDatenAuswerten(String m)

// Aus dem Pixelstring img werden alle Pixel in ein
// BufferedImage gespeichert
private void imageDataAuswerten(String img)