Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd."—  Präsentation transkript:

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

2 Bildverarbeitung mit Java2D und Java Advanced Imaging Was ist Java2D Was ist Java2D Was kann Java2D Was kann Java2D Wie kann Java2D in einer Applikation einsetzt werden Wie kann Java2D in einer Applikation einsetzt werden Was ist Java Advanced Imaging Was ist Java Advanced Imaging Was kann Java Advanced Imaging Was kann Java Advanced Imaging Wie kann JAI in einer Applikation einsetzten werden Wie kann JAI in einer Applikation einsetzten werden Wo lohnt sich der Einsatz welches Frameworks Wo lohnt sich der Einsatz welches Frameworks Was leisten beide Frameworks Was leisten beide Frameworks Bildverarbeitung mit Java2D und Java Advanced Imaging Inhalt des Vortrags

3 Bildverarbeitung mit Java2D und Java Advanced Imaging Java2D Framework für geräte- und auflösungsun-abhängige Grafik und Bilddarstellung Java2D API zusätzlich zum Anlegen, Verwalten und Manipulieren von Bildern und Grafikenzusätzlich zum Anlegen, Verwalten und Manipulieren von Bildern 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 java.awt und werden vom Abstract Windowing Toolkit (AWT) integrierterweitert die Grafik- und Bildklassen von java.awt und werden vom Abstract Windowing Toolkit (AWT) integriert Was ist Java2D

4 Bildverarbeitung mit Java2D und Java Advanced Imaging Was ist Java2D

5 Bildverarbeitung mit Java2D und Java Advanced Imaging Was kann Java2D Die Java2D API bietet: Ein einheitliches Rendermodel für anzeigende und druckende Geräte Ein einheitliches Rendermodel für anzeigende und druckende Geräte Eine große Anzahl von geometrischen Primitiven, wie Kurven, Rechtecke und Eine große Anzahl von geometrischen Primitiven, wie Kurven, Rechtecke und Ellipsen, und einen Mechanismus um eine Primitive virtuell zu rendern Ellipsen, und einen Mechanismus um eine Primitive virtuell zu rendern Mechanismen für die Erkennung von Überlappungen von geometrischen Mechanismen für die Erkennung von Überlappungen von geometrischen Primitiven, Texten und Bildern Primitiven, Texten und Bildern Hoch entwickelte, vielseitige Farbunterstützung für erleichtertes Farbmanagement Hoch entwickelte, vielseitige Farbunterstützung für erleichtertes Farbmanagement Unterstützung für das Drucken von komplexen Dokumenten Unterstützung für das Drucken von komplexen Dokumenten

6 Bildverarbeitung mit Java2D und Java Advanced Imaging Was kann Java2D Mit einem Objekt der Klasse Graphics2D des Java2D APIs lassen sich: Linien jeder Dicke zeichnen Linien jeder Dicke zeichnen Flächen füllen mit Texturen, Gradienten oder Patterns Flächen füllen mit Texturen, Gradienten oder Patterns Texte und Grafiken zu drehen, skalieren, scheren und verschieben Texte und Grafiken zu drehen, skalieren, scheren und verschieben Aufeinandergezeichnete Texte und Grafiken mischen Aufeinandergezeichnete Texte und Grafiken mischen 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 zu sehen zu glätten und zu schärfen. Original geglättet geschärft

7 Bildverarbeitung mit Java2D und Java Advanced Imaging Wie kann man Java2D in einer Applikation einsetzten Wie bekomme ich ein Objekt von java.awt.Graphics2D ? public class MyComponent extends Component {... public void paint(Graphics g){ super.paint(g); Graphics2D g2d = (Graphics) g;...}} Graphics2D g2d = (Graphics2D) myImage.getGraphics();

8 Bildverarbeitung mit Java2D und Java Advanced Imaging Wie kann Java2D in einer Applikation einsetzten werden Wie nutze ich die geräte- und auflösungsunabhängig Grafik- und Bilddarstellung? GraphicsEnvironment ge = //Grafische Umgebungsvariablen GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] gds = ge.getScreenDevices(); //gds = Alle anzeigenden Geräte GraphicsConfiguration[] gcs = gds[x].getConfigurations(); GraphicsConfiguration gc = gcs[y]; //gc = Grafische Konfiguration Y eines Gerätes X AffineTransform aft = new AffineTransform( gc.getDefaultTransform()); //Geräteigene Transformation gc.getDefaultTransform()); //Geräteigene Transformationaft.concatenate(gc.getNormalizingTransform()); /* aft = Umrechnung von 72 Einheiten im Userspace zu 1 Inch im DeviceSpace */ im DeviceSpace */g2d.setTransform(aft);

9 Bildverarbeitung mit Java2D und Java Advanced Imaging Welche Bildklassen gibt es? java.awt.Imagejava.awt.image.VolatileImagejava.awt.image.RenderedImagejava.awt.image.WritableRenderedImagejava.awt.image.BufferedImage Welche Operatoren gibt es für Bilder? java.awt.image.AffineTransformOpjava.awt.image.ColorConvertOpjava.awt.image.ConvolveOpjava.awt.image.LookupOpjava.awt.image.RescaleOp Wie kann Java2D in einer Applikation einsetzten werden

10 Bildverarbeitung mit Java2D und Java Advanced Imaging Wie kann Java2D in einer Applikation einsetzten werden Wie erhält man ein Objekt der Bildklassen? Image img = java.awt.Toolkit.createImage(path); Image img = new javax.swing.ImageIcon().getImage(path); Applet applet = new Applet(); Image image = applet.getImage(applet.getDocumentBase(),path); applet.getImage(applet.getDocumentBase(),path); BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB); BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);

11 Bildverarbeitung mit Java2D und Java Advanced Imaging Die Klassen, die in dem Java2D API diese Operatoren beschreiben erben alle von der abstrakten Klasse: java.awt.image.BufferedImageOp Die Klasse java.awt.Graphics2D stellt eine Schnittstelle zur Verfügung, um einen solchen BufferedImageOp auf ein BufferedImage anzuwenden. Java2Ds Konzeptes des virtuellen Renderns wird beispielsweise durch die Methode filter() der Klasse BufferedImageOp repräsentiert. Im nebenstehenden Bild sind die Ergebnisse von einigen Operatoren, die im Graphikkontext auf ein Bild angewendet wurden, zu sehen. Wie kann Java2D in einer Applikation einsetzten werden

12 Bildverarbeitung mit Java2D und Java Advanced Imaging Wie kann Java2D in einer Applikation einsetzten werden Das Model, nachdem sich eine Applikation richtet, wenn sie ihre Operation auf einem Bildobjekte mittels BufferedImageOp.filter(…) ausführt nennt sich: Immediate Mode Kennzeichnendes Prinzip des Immediate Modes ist, dass jede Zeichenoperation im dem Moment ihres Aufrufes ausgeführt wird. Die Java2D API bietet dem Entwickler eine weiter Möglichkeit seine Applikation zu gestallten. Dieses richtet sich nach einem Produzenten – Konsumenten Prinzip, dass sogenannte: Push Model Applikationen dieses Models arbeiten mit einem ImageProducer, der einen ImageConsumer über den Ladefortschritt benachrichtigt und ihm das Ergebnis einer Operation als Ansammlung von Pixel übergibt.

13 Bildverarbeitung mit Java2D und Java Advanced Imaging Wie kann Java2D in einer Applikation einsetzten werden ImageProducer +addConsumer( ImageConsumer ic) +isConsumer( ImageConsumer ic) +removeConsumer( ImageConsumer ic) +startProduction( ImageConsumer ic) +requestTopDownLeftRightResend( ImageConsumer ic) ImageConsumer +imageComplete(int status) +setColorModel(ColorModel model) +setDimensions(int width, int height) +setHints(int hintflags) +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, int[] pixels, int off, int scansize) int[] pixels, int off, int scansize) +setProperties(Hashtable props)

14 Bildverarbeitung mit Java2D und Java Advanced Imaging ImageProducer FilteredImageSource ImageConsumer FilteredImageSource FilteredImageSource Applikation Durch Objekte der Klasse FilteredImageSource, die von ImageProducer erbt lassen sich Pipelines aus ImageProducern bilden: Wie kann Java2D in einer Applikation einsetzten werden

15 Bildverarbeitung mit Java2D und Java Advanced Imaging Was ist Java Advanced Imaging Java Advanced Imaging erweitert die Java Plattform um die Möglichkeit, hoch entwickelte, performancekritische Bildverarbeitung in Applets und Applikationen anzubieten. Die Java Advanced Imaging API ist ein schnelles, plattformunabhängiges, leicht erweiterbares Bildverarbeitungsframework, das auf den von Java2D geschaffenen Schnittstellen aufsetzt und dadurch zur Java Plattform kompatibel bleibt. Die Java Advanced Imaging API stellt eine Reihe von Objektorientierten Schnittstellen zur Verfügung, die sich nach einem einfach zu programmierbaren Model richten, das es dem Entwickler gestattet, leicht Bilder zu manipulieren.

16 Bildverarbeitung mit Java2D und Java Advanced Imaging Was kann Java Advanced Imaging Welche Funktionalität bietet das Java Advanced Imaging API? Mehr als 100 Operanden sind in JAI, die meisten nativ, implementiert Mehr 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 Bildern Byte, UShort, Short, 32-bit Integer, Float/Double in n-bandigen Bildern JAI liest aus BMP-, GIF-, FPX-, JPEG-, PNG-, PNM-, TIFF-Dateien Bildern JAI liest aus BMP-, GIF-, FPX-, JPEG-, PNG-, PNM-, TIFF-Dateien Bildern Ausserdem unterstützt JAI RMI (Remote Method Innovation) und IIP (Internet Ausserdem unterstützt JAI RMI (Remote Method Innovation) und IIP (Internet Imaging Protocol). Bilder können über InputStream oder URL geladen werden Imaging Protocol). Bilder können über InputStream oder URL 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.

17 Bildverarbeitung mit Java2D und Java Advanced Imaging Was kann Java Advanced Imaging Eine Übersicht der Kategorien von Operatoren: Punkt Operatoren Punkt Operatoren Flächen Operatoren Flächen Operatoren Geometrische Operatoren Geometrische Operatoren Farbquantisierungs Operatoren Farbquantisierungs Operatoren Datei Operatoren Datei Operatoren Frequenz Operatoren Frequenz Operatoren Statistische Operatoren Statistische Operatoren Kanten Detektions Operatoren Kanten Detektions Operatoren Sonstige Operatoren Sonstige Operatoren

18 Bildverarbeitung mit Java2D und Java Advanced Imaging Was kann Java Advanced Imaging Da Java Advanced Imaging auf Java2D aufsetzt, übernimmt es dessen Immediate Mode sowie auch dessen Push Model und stellt unterstützende Schnittstellen zur Verfügung. Seine Performance erhält JAI hauptsächlich, wenn man Klassen aus dem JAI API benutzt, die sich nach dem JAI eigenen Model richten: Pull Model Kennzeichnend für die Bildverarbeitung dieses Modells ist, dass Berechnungen nur dann durchgeführt werden, wenn sie vom Client angefordert werden, also gerade auch benötigt werden. 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 Rendered, was sich bereits im User-Space befindet. Beim Zeichnen benutzen die Klassen von Rendereable die von Rendered um das Ergebnis zu produzieren. Diese benutzen wiederum Klassen, die aus JAIs Immediate Mode stammen, wie in der Abbildung der nächsten Seite zu sehen.

19 Bildverarbeitung mit Java2D und Java Advanced Imaging Wie kann man JAI in einer Applikation einsetzten Die Abbildung zeigt das Prinzip, nachdem das Zeichnen einer Renderable Bildquelle, mit den dabei beteiligten Klassen, geschieht.

20 Bildverarbeitung mit Java2D und Java Advanced Imaging OpImage Operationsbeschreibung Wie kann man JAI in einer Applikation einsetzten RenderableOp Operationsparameter RenderableOp Operationsparameter RenderableOp Operationsparameter Bildquelle Graphics2D RenderedOp Operationsparameter RenderedOp Operationsparameter RenderedOp Operationsparameter OpImage Operationsbeschreibung

21 Bildverarbeitung mit Java2D und Java Advanced Imaging Wie kann man JAI in einer Applikation einsetzten Durch das Anfügen von Rendered oder Renderable Operatoren zum erzeugen von neuen Operatoren lassen sich Renderbäume bzw. –graphen aufbauen. Werden beispielsweise zwei einfarbige Bilder erzeugt (Bilder aus Konstanten), die dann über einen Additions-Operator verknüpft in einer anzeigenden Komponente sichtbar sind, ergibt sich der folgende Graph daraus:

22 Bildverarbeitung mit Java2D und 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 Tile – Raster anzulegen und über Produktionsereignisse informiert zu werden. JAI übernimmt die Aufgabe nur diejenigen Tiles zu berechnen, die gerade benötigt werden. Wie kann man JAI in einer Applikation einsetzten

23 Bildverarbeitung mit Java2D und Java Advanced Imaging Wie kann man JAI in einer Applikation einsetzten Wie lade ich ein Bild? RenderedImage ri = JAI.create("fileload",pfad); Wie erhalte ich einen Renderable Operator? RenderableOp raOp = JAI.createRenderable(renderable,ri); JAI.createRenderable(renderable,ri); Wie erzeuge ich eine Operation? ParameterBlock pb = new ParameterBlock(); pb.addSource(ri); // oder raOp; Für Renderable pb.add(0.0f); // X-Koordinate des Drehpunktes pb.add(0.0f); // Y-Koordinate des Drehpunktes pb.add( (float) Math.toRadians( 90 ) ); // Drehwinkel RenderedOp ro = JAI.create(rotate,pb); RenderableOp raOp2 = JAI.createRenderable(rotate,pb);

24 Bildverarbeitung mit Java2D und Java Advanced Imaging Wo lohnt sich der Einsatz welches Frameworks Java2D unterstützt hauptsächlich graphische Operationen und low-level Bildverarbeitung. Für die meisten Applikationen ist Java2D schnell genug. Vorteile: Braucht keine Zusatzpakete beim Endnutzer Braucht keine Zusatzpakete beim Endnutzer Leicht in eine GUI zu integrieren Leicht in eine GUI zu integrieren Native Code Implementierungen sind meist einfacher Native Code Implementierungen sind meist einfacher in Java2D zu entwickeln in Java2D zu entwickelnNachteile: Bietet nur sehr wenige Operationen für Bilder an Bietet nur sehr wenige Operationen für Bilder an Entwickler muss sich selbst um ein schnelles Applikationsmodell kümmern Entwickler muss sich selbst um ein schnelles Applikationsmodell kümmern

25 Bildverarbeitung mit Java2D und Java Advanced Imaging Wo lohnt sich der Einsatz welches Frameworks Java Advanced Imaging bietet gute Bildverarbeitungsmöglichkeiten, die für komplexere Operationen genauso gut geeignet sind wie für einfachere. Zur reinen Grafikerstellung ist es nicht zu empfehlen. Vorteile: Einfaches durchführen komplexer Operationen auf Bildern Einfaches durchführen komplexer Operationen auf Bildern Kompatibel zur Java Plattform Kompatibel zur Java Plattform Hohe Performance Hohe Performance Direkte Netzanbindung vorhanden Direkte Netzanbindung vorhanden Einfach zu erweitern Einfach zu erweiternNachteile: Zusatzpakete müssen beim Benutzer vorhanden sein Zusatzpakete müssen beim Benutzer vorhanden sein Implementierung komplexer als bei Java2D Implementierung komplexer als bei Java2D

26 Bildverarbeitung mit Java2D und Java Advanced Imaging Was leisten beide Frameworks Vorführung der Demoprogramme zu Java2D und Java Advanced Imaging Abschließende Fragen


Herunterladen ppt "Seminararbeit zum Thema Bildverarbeitung mit Java2D und Java Advanced Imaging von Winkler Bernd."

Ähnliche Präsentationen


Google-Anzeigen