Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Bildverarbeitung mit Java2D und Java Advanced Imaging

Ähnliche Präsentationen


Präsentation zum Thema: "Bildverarbeitung mit Java2D und Java Advanced Imaging"—  Präsentation transkript:

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

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

3 Bildverarbeitung mit Java2D und Java Advanced Imaging
Was ist Java2D 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 Grafiken 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) integriert

4 Bildverarbeitung mit Java2D und Java Advanced Imaging
Was ist Java2D

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

6 Was kann Java2D Bildverarbeitung mit Java2D und Java Advanced Imaging
Mit einem Objekt der Klasse Graphics2D des Java2D API‘s lassen sich: Linien jeder Dicke zeichnen Flächen füllen mit Texturen, Gradienten oder Patterns Texte und Grafiken zu drehen, skalieren, scheren und verschieben 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 Wie kann man Java2D in einer Applikation einsetzten
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 Wie kann Java2D in einer Applikation einsetzten werden
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 aft.concatenate(gc.getNormalizingTransform()); /* aft = Umrechnung von 72 Einheiten im Userspace zu 1 Inch im DeviceSpace */ g2d.setTransform(aft);

9 Wie kann Java2D in einer Applikation einsetzten werden
Bildverarbeitung mit Java2D und Java Advanced Imaging Wie kann Java2D in einer Applikation einsetzten werden Welche Bildklassen gibt es? java.awt.Image java.awt.image.VolatileImage java.awt.image.RenderedImage java.awt.image.WritableRenderedImage java.awt.image.BufferedImage Welche Operatoren gibt es für Bilder? java.awt.image.AffineTransformOp java.awt.image.ColorConvertOp java.awt.image.ConvolveOp java.awt.image.LookupOp java.awt.image.RescaleOp

10 Wie kann Java2D in einer Applikation einsetzten werden
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); BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);

11 Wie kann Java2D in einer Applikation einsetzten werden
Bildverarbeitung mit Java2D und Java Advanced Imaging Wie kann Java2D in einer Applikation einsetzten werden 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. Java2D‘s 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.

12 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 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) int[] pixels, int off, int scansize) +setProperties(Hashtable props)

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

15 Was ist Java Advanced Imaging
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 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 JAI erlaubt folgende Bildformate und Datentypen: Byte, UShort, Short, 32-bit Integer, Float/Double in n-bandigen Bildern JAI liest aus BMP-, GIF-, FPX-, JPEG-, PNG-, PNM-, TIFF-Dateien Bildern Ausserdem unterstützt JAI RMI (Remote Method Innovation) und IIP (Internet Imaging Protocol). Bilder können über InputStream oder URL geladen werden JAI bietet Möglichkeiten, Java2D API Grafikdaten in JAI Bilder einzufügen.

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

18 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 JAI‘s Immediate Mode stammen, wie in der Abbildung der nächsten Seite zu sehen.

19 Wie kann man JAI in einer Applikation einsetzten
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 Wie kann man JAI in einer Applikation einsetzten
Bildverarbeitung mit Java2D und Java Advanced Imaging Wie kann man JAI in einer Applikation einsetzten Bildquelle RenderableOp RenderedOp Operationsparameter Operationsparameter OpImage Operationsbeschreibung RenderableOp RenderedOp Operationsparameter Operationsparameter RenderableOp RenderedOp OpImage Operationsparameter Operationsparameter Operationsbeschreibung Graphics2D

21 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 Wie kann man JAI in einer Applikation einsetzten
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.

23 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); 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 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 Leicht in eine GUI zu integrieren Native Code Implementierungen sind meist einfacher in Java2D zu entwickeln Nachteile: Bietet nur sehr wenige Operationen für Bilder an Entwickler muss sich selbst um ein schnelles Applikationsmodell kümmern

25 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 Kompatibel zur Java Plattform Hohe Performance Direkte Netzanbindung vorhanden Einfach zu erweitern Nachteile: Zusatzpakete müssen beim Benutzer vorhanden sein Implementierung komplexer als bei Java2D

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


Herunterladen ppt "Bildverarbeitung mit Java2D und Java Advanced Imaging"

Ähnliche Präsentationen


Google-Anzeigen