seminararbeit zum thema bildverarbeitung mit java2d und java advanced imaging von winkler bernd

26
Seminararbeit zum Thema Bildverarbeitung mit Bildverarbeitung mit Java2D und Java Advanced Java2D und Java Advanced Imaging Imaging von Winkler Bernd von Winkler Bernd

Upload: eggert-rarey

Post on 05-Apr-2015

115 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Seminararbeitzum Thema

Bildverarbeitung mit Java2D und Bildverarbeitung mit Java2D und Java Advanced ImagingJava Advanced Imaging

von Winkler Berndvon Winkler Bernd

Page 2: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Was ist Java2DWas ist Java2D

Was kann Java2DWas kann Java2D

Wie kann Java2D in einer Applikation einsetzt werdenWie kann Java2D in einer Applikation einsetzt werden

Was ist Java Advanced ImagingWas ist Java Advanced Imaging

Was kann Java Advanced ImagingWas kann Java Advanced Imaging

Wie kann JAI in einer Applikation einsetzten werdenWie kann JAI in einer Applikation einsetzten werden

Wo lohnt sich der Einsatz welches FrameworksWo lohnt sich der Einsatz welches Frameworks

Was leisten beide FrameworksWas leisten beide Frameworks

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Inhalt des VortragsInhalt des Vortrags

Page 3: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Java2DJava2D

Framework für geräte- und auflösungsun-abhängige Grafik und Framework für geräte- und auflösungsun-abhängige Grafik und BilddarstellungBilddarstellung

Java2D API Java2D API

•zusätzlich zum Anlegen, Verwalten und Manipulieren von zusätzlich zum Anlegen, Verwalten und Manipulieren von Bildern und GrafikenBildern und Grafiken

•Ist im JDK API seit der Version 1.2 enthalten. Ist im JDK API seit der Version 1.2 enthalten.

•erweitert die Grafik- und Bildklassen von erweitert die Grafik- und Bildklassen von java.awtjava.awt und und werden vom Abstract Windowing Toolkit (AWT) integriertwerden vom Abstract Windowing Toolkit (AWT) integriert

Was ist Java2DWas ist Java2D

Page 4: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Was ist Java2DWas ist Java2D

Page 5: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Was kann Java2DWas kann Java2D

Die Java2D API bietet:Die Java2D API bietet:

Ein einheitliches Rendermodel für anzeigende und druckende GeräteEin einheitliches Rendermodel für anzeigende und druckende Geräte

Eine große Anzahl von geometrischen Primitiven, wie Kurven, Rechtecke undEine große Anzahl von geometrischen Primitiven, wie Kurven, Rechtecke und Ellipsen, und einen Mechanismus um eine Primitive virtuell zu rendernEllipsen, und einen Mechanismus um eine Primitive virtuell zu rendern

Mechanismen für die Erkennung von Überlappungen von geometrischenMechanismen für die Erkennung von Überlappungen von geometrischen Primitiven, Texten und BildernPrimitiven, Texten und Bildern

Hoch entwickelte, vielseitige Farbunterstützung für erleichtertes FarbmanagementHoch entwickelte, vielseitige Farbunterstützung für erleichtertes Farbmanagement

Unterstützung für das Drucken von komplexen DokumentenUnterstützung für das Drucken von komplexen Dokumenten

Page 6: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Was kann Java2DWas kann Java2D

Mit einem Objekt der Klasse Graphics2D des Java2D API‘s lassen sich:Mit einem Objekt der Klasse Graphics2D des Java2D API‘s lassen sich:

Linien jeder Dicke zeichnenLinien jeder Dicke zeichnen

Flächen füllen mit Texturen, Gradienten oder PatternsFlächen füllen mit Texturen, Gradienten oder Patterns

Texte und Grafiken zu drehen, skalieren, scheren und verschiebenTexte und Grafiken zu drehen, skalieren, scheren und verschieben

Aufeinandergezeichnete Texte und Grafiken mischenAufeinandergezeichnete Texte und Grafiken mischen

Die Java2D API erlaubt es auch einfach ein Bild im Speicher zu halten und auf Die Java2D API erlaubt es auch einfach ein Bild im Speicher zu halten und auf die Pixeldaten auch manipulierend zuzugreifen, um dieses wie im Beispiel zudie Pixeldaten auch manipulierend zuzugreifen, um dieses wie im Beispiel zusehen zu glätten und zu schärfen.sehen zu glätten und zu schärfen.

Original geglättet geschärftOriginal geglättet geschärft

Page 7: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Wie kann man Java2D in einer Applikation einsetztenWie kann man Java2D in einer Applikation einsetzten

Wie bekomme ich ein Objekt von Wie bekomme ich ein Objekt von java.awt.Graphics2Djava.awt.Graphics2D??

public classpublic class MyComponent MyComponent extendsextends Component Component {{......publicpublic voidvoid paint(Graphics g){ paint(Graphics g){

supersuper.paint(g);.paint(g);Graphics2D g2d = (Graphics) g;Graphics2D g2d = (Graphics) g;......

}}}}

Graphics2D g2d = (Graphics2D) myImage.getGraphics();Graphics2D g2d = (Graphics2D) myImage.getGraphics();

Page 8: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Wie kann Java2D in einer Applikation einsetzten werdenWie kann Java2D in einer Applikation einsetzten werdenWie nutze ich die geräte- und auflösungsunabhängig Grafik- und Bilddarstellung?Wie nutze ich die geräte- und auflösungsunabhängig Grafik- und Bilddarstellung?

GraphicsEnvironment ge = GraphicsEnvironment ge = //Grafische Umgebungsvariablen//Grafische Umgebungsvariablen

GraphicsEnvironment.getLocalGraphicsEnvironment();GraphicsEnvironment.getLocalGraphicsEnvironment();

GraphicsDevice[] gds = ge.getScreenDevices();GraphicsDevice[] gds = ge.getScreenDevices();//gds = Alle anzeigenden Geräte//gds = Alle anzeigenden Geräte

GraphicsConfiguration[] gcs = gds[x].getConfigurations();GraphicsConfiguration[] gcs = gds[x].getConfigurations();GraphicsConfiguration gc = gcs[y];GraphicsConfiguration gc = gcs[y];//gc = Grafische Konfiguration Y eines Gerätes X//gc = Grafische Konfiguration Y eines Gerätes X

AffineTransform aft = AffineTransform aft = newnew AffineTransform( AffineTransform( gc.getDefaultTransform()); gc.getDefaultTransform()); //Geräteigene Transformation//Geräteigene Transformation

aft.concatenate(gc.getNormalizingTransform());aft.concatenate(gc.getNormalizingTransform());/* aft = Umrechnung von 72 Einheiten im Userspace zu 1 Inch/* aft = Umrechnung von 72 Einheiten im Userspace zu 1 Inch im DeviceSpace */im DeviceSpace */

g2d.setTransform(aft);g2d.setTransform(aft);

Page 9: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Welche Bildklassen gibt es?Welche Bildklassen gibt es?

java.awt.Imagejava.awt.Image

java.awt.image.VolatileImagejava.awt.image.VolatileImage

java.awt.image.RenderedImagejava.awt.image.RenderedImage

java.awt.image.WritableRenderedImagejava.awt.image.WritableRenderedImage

java.awt.image.BufferedImagejava.awt.image.BufferedImage

Welche Operatoren gibt es für Bilder?Welche Operatoren gibt es für Bilder?

java.awt.image.AffineTransformOpjava.awt.image.AffineTransformOp

java.awt.image.ColorConvertOp java.awt.image.ColorConvertOp

java.awt.image.ConvolveOp java.awt.image.ConvolveOp

java.awt.image.LookupOpjava.awt.image.LookupOp

java.awt.image.RescaleOpjava.awt.image.RescaleOp

Wie kann Java2D in einer Applikation einsetzten werdenWie kann Java2D in einer Applikation einsetzten werden

Page 10: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Wie kann Java2D in einer Applikation einsetzten werdenWie kann Java2D in einer Applikation einsetzten werden

Wie erhält man ein Objekt der Bildklassen?Wie erhält man ein Objekt der Bildklassen?

Image img = java.awt.Toolkit.createImage(path);Image img = java.awt.Toolkit.createImage(path);

Image img = Image img = newnew javax.swing.ImageIcon().getImage(path); javax.swing.ImageIcon().getImage(path);

Applet applet = Applet applet = newnew Applet(); Applet();

Image image =Image image =

applet.getImage(applet.getDocumentBase(),path);applet.getImage(applet.getDocumentBase(),path);

BufferedImage bi = BufferedImage bi = newnew BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);

Page 11: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Die Klassen, die in dem Java2D API Die Klassen, die in dem Java2D API diese Operatoren beschreiben erben alle diese Operatoren beschreiben erben alle von der abstrakten Klasse: von der abstrakten Klasse: java.awt.image.BufferedImageOpjava.awt.image.BufferedImageOp

Die Klasse Die Klasse java.awt.Graphics2Djava.awt.Graphics2D stellt eine Schnittstelle zur Verfügung, stellt eine Schnittstelle zur Verfügung, um einen solchen um einen solchen BufferedImageOpBufferedImageOp auf ein auf ein BufferedImageBufferedImage anzuwenden. anzuwenden.

Java2D‘s Konzeptes des virtuellen Java2D‘s Konzeptes des virtuellen Renderns wird beispielsweise durch die Renderns wird beispielsweise durch die Methode Methode filter()filter() der Klasse der Klasse BufferedImageOpBufferedImageOp repräsentiert. repräsentiert.

Im nebenstehenden Bild sind die Im nebenstehenden Bild sind die Ergebnisse von einigen Operatoren, die Ergebnisse von einigen Operatoren, die im Graphikkontext auf ein Bild im Graphikkontext auf ein Bild angewendet wurden, zu sehen.angewendet wurden, zu sehen.

Wie kann Java2D in einer Applikation einsetzten werdenWie kann Java2D in einer Applikation einsetzten werden

Page 12: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Wie kann Java2D in einer Applikation einsetzten werdenWie kann Java2D in einer Applikation einsetzten werden

Das Model, nachdem sich eine Applikation richtet, wenn sie ihre Operation auf Das Model, nachdem sich eine Applikation richtet, wenn sie ihre Operation auf einem Bildobjekte mittels einem Bildobjekte mittels BufferedImageOp.filter(…)BufferedImageOp.filter(…) ausführt nennt sich: ausführt nennt sich:

Immediate ModeImmediate Mode

Kennzeichnendes Prinzip des „Immediate Modes“ ist, dass jede Kennzeichnendes Prinzip des „Immediate Modes“ ist, dass jede Zeichenoperation im dem Moment ihres Aufrufes ausgeführt wird.Zeichenoperation im dem Moment ihres Aufrufes ausgeführt wird.

Die Java2D API bietet dem Entwickler eine weiter Möglichkeit seine Applikation Die Java2D API bietet dem Entwickler eine weiter Möglichkeit seine Applikation zu gestallten. Dieses richtet sich nach einem Produzenten – Konsumenten zu gestallten. Dieses richtet sich nach einem Produzenten – Konsumenten Prinzip, dass sogenannte:Prinzip, dass sogenannte:

Push ModelPush Model

Applikationen dieses Models arbeiten mit einem Applikationen dieses Models arbeiten mit einem ImageProducerImageProducer, der einen , der einen ImageConsumerImageConsumer über den Ladefortschritt benachrichtigt und ihm das Ergebnis über den Ladefortschritt benachrichtigt und ihm das Ergebnis einer Operation als Ansammlung von Pixel übergibt.einer Operation als Ansammlung von Pixel übergibt.

Page 13: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Wie kann Java2D in einer Applikation einsetzten werdenWie kann Java2D in einer Applikation einsetzten werden

ImageProducerImageProducer+addConsumer( ImageConsumer ic)+addConsumer( ImageConsumer ic)+isConsumer( ImageConsumer ic)+isConsumer( ImageConsumer ic)+removeConsumer( ImageConsumer ic)+removeConsumer( ImageConsumer ic)+startProduction( ImageConsumer ic)+startProduction( ImageConsumer ic)+requestTopDownLeftRightResend( ImageConsumer ic)+requestTopDownLeftRightResend( ImageConsumer ic)

ImageConsumerImageConsumer+imageComplete(int status)+imageComplete(int status)+setColorModel(ColorModel model)+setColorModel(ColorModel model)+setDimensions(int width, int height)+setDimensions(int width, int height)+setHints(int hintflags)+setHints(int hintflags)

+setPixels(int x, int y, int w, int h, ColorModel model, +setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off, int scansize)byte[] pixels, int off, int scansize)

+setPixels(int x, int y, int w, int h, ColorModel model, +setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off, int scansize)int[] pixels, int off, int scansize)

+setProperties(Hashtable props)+setProperties(Hashtable props)

Page 14: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

ImageProducerImageProducer

FilteredImageSourceFilteredImageSource

ImageConsumerImageConsumer

FilteredImageSourceFilteredImageSource

FilteredImageSourceFilteredImageSource

ApplikationApplikation

Durch Objekte der Klasse Durch Objekte der Klasse FilteredImageSourceFilteredImageSource, die von , die von ImageProducerImageProducer erbt lassen sich Pipelines aus erbt lassen sich Pipelines aus ImageProducernImageProducern bilden: bilden:

Wie kann Java2D in einer Applikation einsetzten werdenWie kann Java2D in einer Applikation einsetzten werden

Page 15: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Was ist Java Advanced ImagingWas ist Java Advanced Imaging

Java Advanced Imaging erweitert die Java Plattform um die Möglichkeit, hoch Java Advanced Imaging erweitert die Java Plattform um die Möglichkeit, hoch entwickelte, performancekritische Bildverarbeitung in Applets und Applikationen entwickelte, performancekritische Bildverarbeitung in Applets und Applikationen anzubieten.anzubieten.

Die Java Advanced Imaging API ist ein schnelles, plattformunabhängiges, leicht Die Java Advanced Imaging API ist ein schnelles, plattformunabhängiges, leicht erweiterbares Bildverarbeitungsframework, das auf den von Java2D erweiterbares Bildverarbeitungsframework, das auf den von Java2D geschaffenen Schnittstellen aufsetzt und dadurch zur Java Plattform kompatibel geschaffenen Schnittstellen aufsetzt und dadurch zur Java Plattform kompatibel bleibt.bleibt.

Die Java Advanced Imaging API stellt eine Reihe von Objektorientierten Die Java Advanced Imaging API stellt eine Reihe von Objektorientierten Schnittstellen zur Verfügung, die sich nach einem einfach zu programmierbaren Schnittstellen zur Verfügung, die sich nach einem einfach zu programmierbaren Model richten, das es dem Entwickler gestattet, leicht Bilder zu manipulieren.Model richten, das es dem Entwickler gestattet, leicht Bilder zu manipulieren.

Page 16: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Was kann Java Advanced ImagingWas kann Java Advanced Imaging

Welche Funktionalität bietet das Java Advanced Imaging API?Welche Funktionalität bietet das Java Advanced Imaging API?

• Mehr als 100 Operanden sind in JAI, die meisten nativ, implementiertMehr als 100 Operanden sind in JAI, die meisten nativ, implementiert

• JAI erlaubt folgende Bildformate und Datentypen: JAI erlaubt folgende Bildformate und Datentypen: Byte, UShort, Short, 32-bit Integer, Float/Double in n-bandigen BildernByte, UShort, Short, 32-bit Integer, Float/Double in n-bandigen Bildern

• JAI liest aus BMP-, GIF-, FPX-, JPEG-, PNG-, PNM-, TIFF-Dateien BildernJAI liest aus BMP-, GIF-, FPX-, JPEG-, PNG-, PNM-, TIFF-Dateien Bildern

• Ausserdem unterstützt JAI RMI (Ausserdem unterstützt JAI RMI (Remote Method Innovation) und IIP (InternetRemote Method Innovation) und IIP (Internet Imaging Protocol). Bilder können über Imaging Protocol). Bilder können über InputStreamInputStream oder oder URLURL geladen werden geladen werden

• JAI bietet Möglichkeiten, Java2D API Grafikdaten in JAI Bilder einzufügen.JAI bietet Möglichkeiten, Java2D API Grafikdaten in JAI Bilder einzufügen.

Page 17: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Was kann Java Advanced ImagingWas kann Java Advanced Imaging

Eine Übersicht der Kategorien von Operatoren:Eine Übersicht der Kategorien von Operatoren:

Punkt OperatorenPunkt Operatoren

Flächen OperatorenFlächen Operatoren

Geometrische OperatorenGeometrische Operatoren

Farbquantisierungs OperatorenFarbquantisierungs Operatoren

Datei OperatorenDatei Operatoren

Frequenz OperatorenFrequenz Operatoren

Statistische OperatorenStatistische Operatoren

Kanten Detektions OperatorenKanten Detektions Operatoren

Sonstige OperatorenSonstige Operatoren

Page 18: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Was kann Java Advanced ImagingWas kann Java Advanced Imaging

Da Java Advanced Imaging auf Java2D aufsetzt, übernimmt es dessen Da Java Advanced Imaging auf Java2D aufsetzt, übernimmt es dessen

Immediate ModeImmediate Mode sowie auch dessen sowie auch dessen Push ModelPush Model und stellt und stellt unterstützende Schnittstellen zur Verfügung.unterstützende Schnittstellen zur Verfügung.

Seine Performance erhält JAI hauptsächlich, wenn man Klassen aus dem JAI Seine Performance erhält JAI hauptsächlich, wenn man Klassen aus dem JAI API benutzt, die sich nach dem JAI eigenen Model richten:API benutzt, die sich nach dem JAI eigenen Model richten:

Pull ModelPull Model

Kennzeichnend für die Bildverarbeitung dieses Modells ist, dass Berechnungen Kennzeichnend für die Bildverarbeitung dieses Modells ist, dass Berechnungen nur dann durchgeführt werden, wenn sie vom Client angefordert werden, also nur dann durchgeführt werden, wenn sie vom Client angefordert werden, also gerade auch benötigt werden.gerade auch benötigt werden.

Das Pull Model teilt sich in JAI in zwei Kategorien: Rendereable und Rendered. Das Pull Model teilt sich in JAI in zwei Kategorien: Rendereable und Rendered. Als Renderable ist zu verstehen, was noch in Bildkoordinaten verwaltet wird, als Als Renderable ist zu verstehen, was noch in Bildkoordinaten verwaltet wird, als Rendered, was sich bereits im User-Space befindet. Beim Zeichnen benutzen Rendered, was sich bereits im User-Space befindet. Beim Zeichnen benutzen die Klassen von Rendereable die von Rendered um das Ergebnis zu die Klassen von Rendereable die von Rendered um das Ergebnis zu produzieren. Diese benutzen wiederum Klassen, die aus JAI‘s Immediate Mode produzieren. Diese benutzen wiederum Klassen, die aus JAI‘s Immediate Mode stammen, wie in der Abbildung der nächsten Seite zu sehen.stammen, wie in der Abbildung der nächsten Seite zu sehen.

Page 19: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Wie kann man JAI in einer Applikation einsetztenWie kann man JAI in einer Applikation einsetzten

Die Abbildung zeigt das Prinzip, nachdem das Zeichnen einer Renderable Die Abbildung zeigt das Prinzip, nachdem das Zeichnen einer Renderable Bildquelle, mit den dabei beteiligten Klassen, geschieht.Bildquelle, mit den dabei beteiligten Klassen, geschieht.

Page 20: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

OpImageOpImage

OperationsbeschreibungOperationsbeschreibung

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Wie kann man JAI in einer Applikation einsetztenWie kann man JAI in einer Applikation einsetzten

RenderableOpRenderableOp

OperationsparameterOperationsparameter

RenderableOpRenderableOp

OperationsparameterOperationsparameter

RenderableOpRenderableOp

OperationsparameterOperationsparameter

BildquelleBildquelle

Graphics2DGraphics2D

RenderedOpRenderedOp

OperationsparameterOperationsparameter

RenderedOpRenderedOp

OperationsparameterOperationsparameter

RenderedOpRenderedOp

OperationsparameterOperationsparameter

OpImageOpImage

OperationsbeschreibungOperationsbeschreibung

Page 21: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Wie kann man JAI in einer Applikation einsetztenWie kann man JAI in einer Applikation einsetzten

Durch das Anfügen von Rendered oder Renderable Operatoren zum Durch das Anfügen von Rendered oder Renderable Operatoren zum erzeugen von neuen Operatoren lassen sich Renderbäume bzw. –graphen erzeugen von neuen Operatoren lassen sich Renderbäume bzw. –graphen aufbauen. Werden beispielsweise zwei einfarbige Bilder erzeugt (Bilder aus aufbauen. Werden beispielsweise zwei einfarbige Bilder erzeugt (Bilder aus Konstanten), die dann über einen Additions-Operator verknüpft in einer Konstanten), die dann über einen Additions-Operator verknüpft in einer anzeigenden Komponente sichtbar sind, ergibt sich der folgende Graph anzeigenden Komponente sichtbar sind, ergibt sich der folgende Graph daraus:daraus:

Page 22: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Ein weiterer Grund für die höhere Performance von Java Advanced Imaging Ein weiterer Grund für die höhere Performance von Java Advanced Imaging ist die Möglichkeit, die durch RenderedImage definiert wurde, in einem Bild ein ist die Möglichkeit, die durch RenderedImage definiert wurde, in einem Bild ein Tile – Raster anzulegen und über Produktionsereignisse informiert zu werden. Tile – Raster anzulegen und über Produktionsereignisse informiert zu werden. JAI übernimmt die Aufgabe nur diejenigen Tiles zu berechnen, die gerade JAI übernimmt die Aufgabe nur diejenigen Tiles zu berechnen, die gerade benötigt werden.benötigt werden.

Wie kann man JAI in einer Applikation einsetztenWie kann man JAI in einer Applikation einsetzten

Page 23: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Wie kann man JAI in einer Applikation einsetztenWie kann man JAI in einer Applikation einsetzten

Wie lade ich ein Bild?Wie lade ich ein Bild?

RenderedImage ri = JAI.create("fileload",pfad);RenderedImage ri = JAI.create("fileload",pfad);

Wie erhalte ich einen Renderable Operator?Wie erhalte ich einen Renderable Operator?

RenderableOp raOp = RenderableOp raOp = JAI.createRenderable(“renderable”,ri);JAI.createRenderable(“renderable”,ri);

Wie erzeuge ich eine Operation?Wie erzeuge ich eine Operation?

ParameterBlock pb = ParameterBlock pb = newnew ParameterBlock(); ParameterBlock();pb.addSource(ri); pb.addSource(ri); // oder raOp; Für Renderable// oder raOp; Für Renderablepb.add(pb.add(0.0f0.0f); ); // X-Koordinate des Drehpunktes// X-Koordinate des Drehpunktespb.add(pb.add(0.0f0.0f); ); // Y-Koordinate des Drehpunktes// Y-Koordinate des Drehpunktespb.add( (pb.add( (floatfloat) Math.toRadians( ) Math.toRadians( 9090 ) ); ) ); // Drehwinkel// Drehwinkel

RenderedOp ro = JAI.create(„rotate“,pb);RenderedOp ro = JAI.create(„rotate“,pb);

RenderableOp raOp2 = JAI.createRenderable(„rotate“,pb);RenderableOp raOp2 = JAI.createRenderable(„rotate“,pb);

Page 24: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Wo lohnt sich der Einsatz welches FrameworksWo lohnt sich der Einsatz welches Frameworks

Java2D unterstützt hauptsächlich graphische Operationen und low-level Java2D unterstützt hauptsächlich graphische Operationen und low-level Bildverarbeitung. Für die meisten Applikationen ist Java2D schnell genug.Bildverarbeitung. Für die meisten Applikationen ist Java2D schnell genug.

Vorteile: Vorteile:

Braucht keine Zusatzpakete beim EndnutzerBraucht keine Zusatzpakete beim Endnutzer

Leicht in eine GUI zu integrierenLeicht in eine GUI zu integrieren

Native Code Implementierungen sind meist einfacher Native Code Implementierungen sind meist einfacher in Java2D zu entwickelnin Java2D zu entwickeln

Nachteile:Nachteile:

Bietet nur sehr wenige Operationen für Bilder anBietet nur sehr wenige Operationen für Bilder an

Entwickler muss sich selbst um ein schnelles Applikationsmodell kümmernEntwickler muss sich selbst um ein schnelles Applikationsmodell kümmern

Page 25: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Wo lohnt sich der Einsatz welches FrameworksWo lohnt sich der Einsatz welches Frameworks

Java Advanced Imaging bietet gute Bildverarbeitungsmöglichkeiten, die für Java Advanced Imaging bietet gute Bildverarbeitungsmöglichkeiten, die für komplexere Operationen genauso gut geeignet sind wie für einfachere. Zur komplexere Operationen genauso gut geeignet sind wie für einfachere. Zur reinen Grafikerstellung ist es nicht zu empfehlen.reinen Grafikerstellung ist es nicht zu empfehlen.

Vorteile:Vorteile:

Einfaches durchführen komplexer Operationen auf BildernEinfaches durchführen komplexer Operationen auf Bildern

Kompatibel zur Java PlattformKompatibel zur Java Plattform

Hohe PerformanceHohe Performance

Direkte Netzanbindung vorhandenDirekte Netzanbindung vorhanden

Einfach zu erweiternEinfach zu erweitern

Nachteile:Nachteile:

Zusatzpakete müssen beim Benutzer vorhanden seinZusatzpakete müssen beim Benutzer vorhanden sein

Implementierung komplexer als bei Java2DImplementierung komplexer als bei Java2D

Page 26: Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd

Bildverarbeitung mit Java2D und Java Advanced ImagingBildverarbeitung mit Java2D und Java Advanced Imaging

Was leisten beide FrameworksWas leisten beide Frameworks

Vorführung der Demoprogramme zu Java2D und Java Vorführung der Demoprogramme zu Java2D und Java Advanced ImagingAdvanced Imaging

Abschließende FragenAbschließende Fragen