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()