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

PNM - eine abstrakte Klasse für alle Bilder

Alle drei Grafikformate haben viele Gemeinsamkeiten. Hierfür bietet sich als Ausgangspunkt eine abstrakte Klasse PNM an, die diese Gemeinsamkeiten verwaltet.

Globale Konstanten:

 // Konstanten
 protected final int schwarz = 0;    // 0<<16 | 0<<8 | 0;;
 protected final int weiss = (255<<16 | 255<<8 | 255);

Gemeinsame Attribute:

 //Bildeigenschaften
 protected String dateiname;
 protected int breite;               // breite ist auch in image enthalten
 protected int hoehe;                // hoehe ist auch in image enthalten
 protected int maxFarbe;
 protected String magicNumber;

 // Repräsentation
 protected BufferedImage image;

Konstruktor:

 // Der Konstruktor lädt die Bilddaten aus einer Datei ein
 // Wenn es dieses Bild nicht gibt, ist ein neues, weißes Bild (100x100) erzeugt.
 public PNM(String dateiname)

Abstrakte Methoden:

 /**
  * erzeugt ein "leeres" Bild mit den Abmessungen b x h
  * @param b  Breite in Pixel
  * @param h  Höhe in Pixel
  */
 abstract public void leeresBildErzeugen(int b, int h);

 /**
  * Liefert die Pixelfarbe an Position (x,y)
  * @param x  Vor.: 0<= x < breite
  * @param y  Vor.: 0<= y < hoehe
  * @return 0=weiß, 1=schwarz
  */
 abstract public int getPixelColor(int x, int y);

 /**
  * Setzt die Farbe eines Pixels an Position (x,y)
  * @param x  Vor.: 0<= x < breite
  * @param y  Vor.: 0<= y < hoehe
  * @param farbe  0=weiß, 1=schwarz
  */
 abstract public void setPixelColor(int x, int y, int farbe) ;

 /**
  * Eff.: Alle Pixel des Bildes sind invertiert
  */
 abstract public void invertieren();

 /**
  * Alle Pixel werden um einen Faktor heller gesetzt
  * (nur für PGM und PPM-Bilder sinnvoll
  */
 abstract public void aufhellen(int prozent);

 /**
  * Alle Pixel werden so umgerechnet, dass der volle Wertebereich
  * ausgeschöpft wird.
  * (nur für PGM- und PPM-Bilder sinnvoll)
  */
 abstract public void normalisieren();

Gemeinsame Methoden für alle Bilder:

 // Alle get- und Setmethoden
 // hier nicht aufgeführt

 /**
  * Liefert den durchschnittlichen Farbwert eines Bildes
  * PBM 0..1
  * PGM 0..maxFarbe
  * PPM unklar
  * @return durchschnittlicher Wert der Pixel des gesamten Bildes
  */
 public double getDurchschnittsFarbe()