picture
Class Picture

java.lang.Object
  |
  +--picture.Picture
All Implemented Interfaces:
PictureConstants, PictureModel, PictureProperty
Direct Known Subclasses:
FilterPicture

public class Picture
extends java.lang.Object
implements PictureModel, PictureConstants, PictureProperty

Ein Picture ist ein Layer mit mehreren Ebenen. Jede Ebene ist ein Layer. Ebenen koennen z.B. Real- und Imaginaerteil eines komplexwertigen Bildes oder Rot-, Gruen- und Blau-Anteil eines Farbbildes sein. Zur Generierung eines Image-Objektes dient eine Instanz der Klasse Presentation.


Field Summary
protected  java.lang.String fileName
           
protected  int height
           
protected  Layer[] layers
           
protected  ProgressHandler ph
           
protected  PictureType pictureType
           
protected  Presentation presentation
           
protected  Picture preview
           
protected  int width
           
 
Fields inherited from interface picture.PictureConstants
PRESENT_ABSOLUTE_VALUE, PRESENT_IMAGINARY_PART, PRESENT_POLAR_ANGLE, PRESENT_REAL_PART, SAVE_ABSOLUTE_VALUE, SAVE_COMPLEX, SAVE_IMAGINARY_PART, SAVE_POLAR_ANGLE, SAVE_REAL_PART
 
Constructor Summary
Picture()
          Erzeugt ein neues Picture mit einem Layer
Picture(Layer[] layers)
          Erzeugt ein neues Picture mit den angegebenen Layern.
Picture(Layer[] layers, java.lang.String fileName)
          Wie MulitLayerPicture(Layer[] layers), nur daß zusätzlich der Dateiname festgelegt wird.
Picture(Picture source, Layer[] layers)
          Erzeugt ein neues Picture.
Picture(Picture source, Layer[] layers, java.lang.String fileName)
          Wie Picture(Picture, Layer[]), nur daß zusätzlich der Dateiname festgelegt wird.
 
Method Summary
 void addChangeListener(javax.swing.event.ChangeListener cl)
          Registriert einen ChangeListener.
 Picture convert(Picture p, PictureType pt)
          Konvertiert ein Bild in ein anderes PictureType.
protected  void fireChangeEvent()
          Erzeugt ein ChangeEvent und fürt dieses auf allen registrierten ChangeListenern aus.
 void fireProgressEvent()
          Schiesst ein ProgressEvent ab.
protected  void getDataFrom(Picture p)
          Übernimmt alle Daten aus dem angegebenen Bild p.
 Picture getEmbeddedInstance()
          gibt das kleinste quadratische Bild zurueck mit Kantenlaenge 2^n, in das dieses Bild hineinpasst.
 java.lang.String getFileName()
          Gibt den Dateinamen zurück, falls dieser bekannt ist.
 int getHeight()
          Gibt die Höhe dieses Bildes zurück.
 java.awt.Image getImage()
          Erzeugt ein java.awt.Image-Objekt, das die aktuelle Ansicht dieses Bildes zeigt.
 java.lang.String getInfo(int x, int y)
          Erzeugt eine Zeichenkette mit Informationen zum Bild an der Position (x, y).
 Layer getLayer(int i)
          Gibt den Layer mit der angegebenen Nummer zurück.
 int getNumberOfLayers()
          Gibt die Anzahl der Layer dieses Bildes zurück.
 PictureType getPictureType()
          liefert den PictureType zurück, dem dieses Bild angehört.
 Presentation getPresentation()
          Gibt die aktuelle Praesentation zurueck.
 Picture getPreview()
          Erzeugt ein Vorschaubild aus diesem Objekt.
 ProgressHandler getProgressHandler()
          Fragt den gesetzten ProgressHandler ab.
 Picture getScaledInstance(int width, int height)
          Erzeugt eine in der Groesse skalierte Version dieses Bildes.
 Picture getShiftedInstance(int width, int height)
          Erzeugt ein Bild, das durch zyklische Verschiebung dieses Bildes in Hoehe und Breite entsteht.
 double[] getValue(int x, int y)
          Gibt den Wert dieses Bildes an der Position (x, y) an.
 Picture getWeightedInstance(double[] d)
          Erzeugt eine Version dieses Pictures, in dem Layer i mit dem d[i] gewichtet ist.
 int getWidth()
          Gibt die Breite dieses Bildes zurück.
 int[] histogram(int i)
          Erzeugt ein Histogramm.
 boolean isColored()
          Gibt an, ob dieses Bild semantisch gesehen ein Farbbild ist, d.h. ob z.B. die verschiedenen Layer für verschiedene Farben stehen.
 boolean isComplex()
          Gibt an, ob dieses Bild semantisch gesehen ein komplexwertiges Bidl ist, d.h. ob es zwei Ebenen hat und die eine Ebene als Real- und die andere Ebene als Imaginärteil aufgefaßt werden kann.
 void removeChangeListener(javax.swing.event.ChangeListener cl)
          Löscht einen registrierten ChangeListener.
 void save(java.io.OutputStream out, PictureProperty pp)
          Speichert diese Datei.
 void saveToFile()
          Speichert diese Datei.
 void saveToFile(PictureProperty pp)
          Speichert diese Datei.
protected  void saveToFile(java.lang.String fileName)
          Speichert diese Datei.
 void saveToFile(java.lang.String fileName, PictureProperty pp)
          Speichert diese Datei.
 void setDefaultPresentation()
          Setzt die Presentation dieses Bildes auf die StandardPraesentation
 void setFileName(java.lang.String fileName)
          Setzt den Dateinamen dieses Bildes.
 void setPictureType(PictureType pt)
          Setz den PictureType dieses Bildes.
 void setPresentation(Presentation p)
          Legt die Praesentation dieses Bildes fest.
 void setProgressHandler(ProgressHandler ph)
          Setzt einen ProgressHandler Einige Methoden dieser Klasse unterstuetzen den folgenden ProgressHandler-Mechanismus: Von Zeit zu Zeit werfen sie ein ProgressEvent aus, das von einem ProgressHandler abgehoert werden kann, der seinerseits dann z.B. die enthaltenen Daten an eine Fortschrittsanzeige (z.B.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

layers

protected Layer[] layers

width

protected int width

height

protected int height

presentation

protected Presentation presentation

pictureType

protected PictureType pictureType

fileName

protected transient java.lang.String fileName

ph

protected transient ProgressHandler ph

preview

protected transient Picture preview
Constructor Detail

Picture

public Picture()
Erzeugt ein neues Picture mit einem Layer

Picture

public Picture(Layer[] layers)
Erzeugt ein neues Picture mit den angegebenen Layern.
Parameters:
layers: - Ebenen des zu erzeugenden Bildes

Picture

public Picture(Layer[] layers,
               java.lang.String fileName)
Wie MulitLayerPicture(Layer[] layers), nur daß zusätzlich der Dateiname festgelegt wird.
Parameters:
layers: - Ebenen des zu erzeugenden Bildes

Picture

public Picture(Picture source,
               Layer[] layers)
Erzeugt ein neues Picture. Es werden die uebergebenen layer gesetzt und alle anderen Daten vom uebergebenen Picture uebernommen. (Ausnahmen: preview = null, fileName = "") Dieser Konstruktor soll die Funktion des frueheren createNewInstance aus der Layer-Klasse uebernehmen.
Parameters:
source: - Quell-Picture
layers: - Ebenen des Bildes

Picture

public Picture(Picture source,
               Layer[] layers,
               java.lang.String fileName)
Wie Picture(Picture, Layer[]), nur daß zusätzlich der Dateiname festgelegt wird.
Parameters:
source: - Quell-Picture
layers: - Ebenen des Bildes
fileName: - Dateiname des Bildes
Method Detail

convert

public Picture convert(Picture p,
                       PictureType pt)
                throws PictureException
Konvertiert ein Bild in ein anderes PictureType.
Parameters:
p - Bild, das ins andere Format umgewandelt werden soll
pt - PictureType des gewünschten Formats

addChangeListener

public void addChangeListener(javax.swing.event.ChangeListener cl)
Registriert einen ChangeListener. ChangeEvents werden ausgefuehrt, sobald sich die Ansicht des Bildes veraendert, z.B. durch Auswahl einer anderen Ebene oder durch Veraederung der Farbbasis etc. Unterklassen haben die Möglichkeit, mit Hilfe der Methode fireChangeEvent() ChangeEvents auszulösen.
Parameters:
cl: - neu hinzuzufuegender ChangeListener
See Also:
fireChangeEvent(), removeChangeListener(javax.swing.event.ChangeListener)

removeChangeListener

public void removeChangeListener(javax.swing.event.ChangeListener cl)
Löscht einen registrierten ChangeListener.
Parameters:
cl: - der zu loeschende ChangeListener
See Also:
addChangeListener(javax.swing.event.ChangeListener)

fireChangeEvent

protected void fireChangeEvent()
Erzeugt ein ChangeEvent und fürt dieses auf allen registrierten ChangeListenern aus. Per Konvention werden ChangeEvents ausgelöst, wenn sich an der Ansicht des Bildes etwas &aouml;ndert, etwa durch Auswahl einer anderen Darstellungsebene. Zur Ausführung des ChangeEvents erzeugt die Methode keinen eigenen Thread, so daß bei fleißigen ChangeListenern damit zu rechnen ist, daß der Thread, der den Aufruf dieser Methode verursacht, ausgebremst wird. Zur Verwaltung der ChangeListener stehen die Methoden addChangeListener(ChangeListener) und removeChangeListener(ChangeListener) zur Verfügung.
See Also:
addChangeListener(javax.swing.event.ChangeListener), removeChangeListener(javax.swing.event.ChangeListener)

setProgressHandler

public void setProgressHandler(ProgressHandler ph)
Setzt einen ProgressHandler

Einige Methoden dieser Klasse unterstuetzen den folgenden ProgressHandler-Mechanismus: Von Zeit zu Zeit werfen sie ein ProgressEvent aus, das von einem ProgressHandler abgehoert werden kann, der seinerseits dann z.B. die enthaltenen Daten an eine Fortschrittsanzeige (z.B. JProgressBar) weiterleiten kann.

Parameters:
ph - der neu zu setzende ProgressHandler
See Also:
ProgressHandler, getProgressHandler()

getProgressHandler

public ProgressHandler getProgressHandler()
Fragt den gesetzten ProgressHandler ab. Falls kein ProgressHandler mittels setProgressHandler angegeben wurde, wird null zurueckgegeben.
Returns:
der aktuelle ProgressHandler
See Also:
setProgressHandler(picture.ProgressHandler)

fireProgressEvent

public void fireProgressEvent()
Schiesst ein ProgressEvent ab. Falls eine Methode diesen Mechanismus unterstuezten will, so muss sie folgendes tun: Im Kommentar ist die genaue Anzahl der voraussichtlich abgefeuerten Events anzugeben, in Abhaengigkeit von von aussen sichtbaren Groessen. Innerhalb der Methode kann dann entsprechend dieser Anzahl moeglichst in etwa gleichen Abstaenden ein progressEvent abgefeuert werden, das z.B. einer Fortschrittsanzeige die Erhoehung um eins mitteilt,

getImage

public java.awt.Image getImage()
Erzeugt ein java.awt.Image-Objekt, das die aktuelle Ansicht dieses Bildes zeigt. Wenn sich das Ergebnis dieser Methode aendert, wird ein ChangeEvent auf den registrierten ChangeListenern ausgeführt. Die Methode dient zur Implementierung von PictureModel.
Specified by:
getImage in interface PictureModel
Returns:
aktuelle Ansicht dieses Bildes.
See Also:
fireChangeEvent(), PictureModel

getWidth

public int getWidth()
Gibt die Breite dieses Bildes zurück. Die Methode dient zur Implementierung von PictureModel. Der zurückgegebene Wert dieser Methode ändert sich während der Lebensdauer des Objekts nicht.
Specified by:
getWidth in interface PictureModel
Returns:
Breite dieses Bildes
See Also:
getHeight(), PictureModel

getHeight

public int getHeight()
Gibt die Höhe dieses Bildes zurück. Die Methode dient zur Implementierung von PictureModel. Der zurückgegebene Wert dieser Methode ändert sich während der Lebensdauer des Objekts nicht.
Specified by:
getHeight in interface PictureModel
Returns:
Höhe dieses Bildes
See Also:
getWidth(), PictureModel

getPictureType

public PictureType getPictureType()
liefert den PictureType zurück, dem dieses Bild angehört. Falls das Bild nicht von einer Unterklasse erzeugt wurde und bei der Konstruktion kein QuellBild angegeben wurde, also kein Typ bekannt ist, so liefert diese Methode null zurück.
Specified by:
getPictureType in interface PictureModel
Returns:
Der Typ dieses Bildes.

setPictureType

public void setPictureType(PictureType pt)
Setz den PictureType dieses Bildes.
Parameters:
pt - neuer PictureType

getInfo

public java.lang.String getInfo(int x,
                                int y)
Erzeugt eine Zeichenkette mit Informationen zum Bild an der Position (x, y). Falls diese Position kein gültiger Bildpunkt ist, wird die leere Zeichenkette zurückgegeben.
Specified by:
getInfo in interface PictureModel
Parameters:
x: - Abszisse
y: - Ordinate
Returns:
Informationen zum Bild an der Position (x, y).

getFileName

public java.lang.String getFileName()
Gibt den Dateinamen zurück, falls dieser bekannt ist.
Returns:
Dateiname dieses Bildes.

setFileName

public void setFileName(java.lang.String fileName)
Setzt den Dateinamen dieses Bildes.
Parameters:
fileName - neuer Dateiname dieses Bildes.

saveToFile

protected void saveToFile(java.lang.String fileName)
                   throws java.io.IOException,
                          PictureException
Speichert diese Datei. Als PictureProperty wird dieses Objekt verwendet. Die Methode ruft intern save(OutputStream,PictureProperty) des verwendeten PictureTypes auf.
Parameters:
fileName - Name der Datei
Throws:
IOException, - falls beim Schreiben ein Fehler auftritt
PictureException, - falls z.B. irgendwelche Daten fehlen.
See Also:
save(OutputStream,PictureProperty)

saveToFile

public void saveToFile()
                throws java.io.IOException,
                       PictureException
Speichert diese Datei. Als PictureProperty wird dieses Objekt verwendet. Als Dateiname wird getFileName() verwendet.
See Also:
getFileName(), save(OutputStream,PictureProperty)

saveToFile

public void saveToFile(PictureProperty pp)
                throws java.io.IOException,
                       PictureException
Speichert diese Datei. Als Dateiname wird getFileName() verwendet. Die Methode ruft intern save(OutputStream,PictureProperty) auf.
Parameters:
pp - PictureProperty-Objekt mit den Daten zum Dateiformat.
See Also:
getFileName(), save(OutputStream,PictureProperty)

saveToFile

public void saveToFile(java.lang.String fileName,
                       PictureProperty pp)
                throws java.io.IOException,
                       PictureException
Speichert diese Datei. Diese Methode ruft intern save(OutputStream,PictureProperty) auf.
Parameters:
fileName - Dateiname
pp - PictureProperty-Objekt mit den Daten zum Dateiformat
See Also:
save(OutputStream,PictureProperty)

save

public void save(java.io.OutputStream out,
                 PictureProperty pp)
          throws java.io.IOException,
                 PictureException
Speichert diese Datei.
Parameters:
out - OutputStream, in den gespeichert werden soll.
pp - PictureProperty-Objekt mit den Daten zum Dateiformat

getDataFrom

protected void getDataFrom(Picture p)
Übernimmt alle Daten aus dem angegebenen Bild p.
Parameters:
p - Quellbild.

setPresentation

public void setPresentation(Presentation p)
Legt die Praesentation dieses Bildes fest. Mit Hilfe des durch diese Methode spezifizierten Presentation-Objekts wird festgelegt, wie die Methode getImage() aus den verschiedenen Ebenen dieses Bildes eine Ansicht erzeugt.
Parameters:
p - das neuen Presentationsobjekt.
See Also:
getImage(), getPresentation(), Presentation

setDefaultPresentation

public void setDefaultPresentation()
Setzt die Presentation dieses Bildes auf die StandardPraesentation

getPresentation

public Presentation getPresentation()
Gibt die aktuelle Praesentation zurueck.
Returns:
aktuelle Praesentatioin
See Also:
setPresentation(picture.Presentation)

getNumberOfLayers

public int getNumberOfLayers()
Gibt die Anzahl der Layer dieses Bildes zurück.
Returns:
Anzahl der Layer dieses Bildes.

getLayer

public Layer getLayer(int i)
Gibt den Layer mit der angegebenen Nummer zurück. Im Fall i < 0 oder i >= getNumberOfLayers() wird null zurückgegeben.
Parameters:
i: - Index des gewünschten Layers.
Returns:
i-ter Layer.

getShiftedInstance

public Picture getShiftedInstance(int width,
                                  int height)
Erzeugt ein Bild, das durch zyklische Verschiebung dieses Bildes in Hoehe und Breite entsteht.
Parameters:
width - Verschiebung in x-Richtung
height - Verschiebung in y-Richtung

getEmbeddedInstance

public Picture getEmbeddedInstance()
gibt das kleinste quadratische Bild zurueck mit Kantenlaenge 2^n, in das dieses Bild hineinpasst. Dieses Bild wird in dem neu konstruierten Bild zentriert dargestellt. Die Raender werden mit 0 aufgefuellt.
Returns:
naechstgroesseres quadratisches Zweierpotenzbild

getScaledInstance

public Picture getScaledInstance(int width,
                                 int height)
Erzeugt eine in der Groesse skalierte Version dieses Bildes.
Parameters:
width - Breite des neuen Bildes
height - Hoehe des neuen Bildes
Returns:
eine Projektion dieses Bildes auf die Groesse width mal height.

getWeightedInstance

public Picture getWeightedInstance(double[] d)
Erzeugt eine Version dieses Pictures, in dem Layer i mit dem d[i] gewichtet ist. Insbesondere muß die Länge des übergebenen Feldes also gleich der Anzahl der Ebenen dieses Bildes sein.
Parameters:
d - Vektor mit Gewichten
Returns:
mit d gewichtete Version dieses Pictures

getPreview

public Picture getPreview()
Erzeugt ein Vorschaubild aus diesem Objekt. Fuer Dialogfenster kann diese Methode zur Erzeugung einer Kopie dieses Pictures in der Standardgroesse 64 mal 64 verwendet werden.
Returns:
Ein neues Layer, das dieses Bild in der Normgroesse 64 mal 64 enthaelt.

getValue

public double[] getValue(int x,
                         int y)
Gibt den Wert dieses Bildes an der Position (x, y) an. Falls die angegebene Bildposition nicht gueltig ist, wird null zurueckgegeben.
Parameters:
x - Abszisse
y - Ordinate
Returns:
Wert am Punkt (x, y).

isColored

public boolean isColored()
Gibt an, ob dieses Bild semantisch gesehen ein Farbbild ist, d.h. ob z.B. die verschiedenen Layer für verschiedene Farben stehen. Die Standardimplementierung dieser Methode liefert grundsätzlich false zurück. Unterklassen mögen sie geeignet überschreiben.
Returns:
ist dieses Bild ein Farbbild?

isComplex

public boolean isComplex()
Gibt an, ob dieses Bild semantisch gesehen ein komplexwertiges Bidl ist, d.h. ob es zwei Ebenen hat und die eine Ebene als Real- und die andere Ebene als Imaginärteil aufgefaßt werden kann. Die Standardimplementierung dieser Methode liefert grundsätzlich false zurück. Unterklassen mögen sie geeignet überschreiben.
Returns:
ist dieses Bild komplexwertig?

histogram

public int[] histogram(int i)
Erzeugt ein Histogramm. Das Feld ergibt sich aus der Summe der Felder getLayer(k).histogram(i) (k=1,...,getNumberOfLayers())