12.7 | Bildbearbeitung |
Bilder können in Java mit Hilfe der Klassen des Pakets java.awt.image bearbeitet werden. Hierbei spielt der Begriff des ImageProducers eine große Rolle.
Ein ImageProducer ist ein Interface, das von der Klasse Image implementiert wird. ImageProducer rekonstruiert die Bilddaten anhand einer bestimmten Quelle. Dies kann z. B. ein Bild im gif- oder jpg-Format, ein Offscreen-Image oder ein Array mit Pixeln sein. Er ist also für den Aufbereitungsvorgang verantwortlich.
Die Bilddaten werden von einem ImageConsumer angefordert. ImageConsumer sind z. B. ImageFilter und PixelGrabber. Deren Verwendung wird unten erklärt. Unter die Kategorie ImageConsumer fallen ebenso alle Komponenten, in die Bilder gezeichnet werden. Wie viele Daten schon an den ImageConsumer geliefert wurden, kann man über den ImageObserver mit der Methode checkImage() erfahren. ImageObserver überwacht die Lieferung der Pixel.In Java ist ein Bild nicht gleich einem Bild. Die Art des Bildes ist abhängig vom ImageProducer, und dieser wiederum legt die Art fest, wie auf die Bilddaten zugegriffen werden kann (z. B. ist Zeichnen nur in Offscreen-Images möglich).
Die verschiedenen ImageProducer sind im Einzelnen:Mit den oben beschriebenen ImageProducern kommt man aber beim Programmieren normalerweise nicht in Kontakt.
- OffscreenImageSource
Ist für die Bereitstellung der Daten eines Offscreen-Images zuständig. Nur in Bilder, deren Daten von OffscreenImageSource geliefert werden, kann direkt über das Graphics-Objekt gemalt werden.- URLImageSource
Produziert die Bilddaten eines Bildes, das durch eine URL angegeben wurde. Die unterstützten Formate sind gif und jpg.- FileImageSource
Produziert die Bilddaten eines Bildes, das durch einen Pfadnamen mit der Methode getImage() von Toolkit kreiert wurde. Dies kann nur in Applikationen sowie in Applets mit erweiterten Zugriffsrechten angewendet werden (siehe Kapitel 15). Die verwendeten Bildformate sind identisch zu denen von URLImageSource.
Es existieren aber noch zwei weitere ImageProducer, die von grundlegender Bedeutung sind, um interessante Effekte zu erzielen:Dies sind die einzigen ImageProducer, von denen Exemplare erzeugt werden können. Deren Verwendung wird in den folgenden Abschnitten erklärt.
- MemoryImageSource
Produziert die Bilddaten aus einem Array von Pixeln. Mit Hilfe von PixelGrabber kann jedes Image in ein solches Array konvertiert werden.- FilteredImageSource
Produziert Bilddaten für ImageFilter und Image. Hiermit können z. B. die Farben eines Bildes verändert werden.