seminararbeit

Download Seminararbeit

If you can't read please download the document

Upload: cuyler

Post on 18-Mar-2016

40 views

Category:

Documents


0 download

DESCRIPTION

Seminararbeit. zum Thema. Bildverarbeitung mit Java2D und Java Advanced Imaging. von Winkler Bernd. Bildverarbeitung mit Java2D und Java Advanced Imaging. Inhalt des Vortrags. Was ist Java2D Was kann Java2D Wie kann Java2D in einer Applikation einsetzt werden - PowerPoint PPT Presentation

TRANSCRIPT

  • Seminararbeitzum ThemaBildverarbeitung mit Java2D und Java Advanced Imagingvon Winkler Bernd

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    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 FrameworksBildverarbeitung mit Java2D und Java Advanced ImagingInhalt des Vortrags

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Bildverarbeitung mit Java2D und Java Advanced ImagingJava2DFramework fr gerte- und auflsungsun-abhngige Grafik und Bilddarstellung

    Java2D API zustzlich zum Anlegen, Verwalten und Manipulieren von Bildern und GrafikenIst im JDK API seit der Version 1.2 enthalten. erweitert die Grafik- und Bildklassen von java.awt und werden vom Abstract Windowing Toolkit (AWT) integriertWas ist Java2D

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Bildverarbeitung mit Java2D und Java Advanced ImagingWas ist Java2D

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Was kann Java2DDie Java2D API bietet: Ein einheitliches Rendermodel fr anzeigende und druckende Gerte

    Eine groe Anzahl von geometrischen Primitiven, wie Kurven, Rechtecke und Ellipsen, und einen Mechanismus um eine Primitive virtuell zu rendern

    Mechanismen fr die Erkennung von berlappungen von geometrischen Primitiven, Texten und Bildern

    Hoch entwickelte, vielseitige Farbuntersttzung fr erleichtertes Farbmanagement

    Untersttzung fr das Drucken von komplexen Dokumenten

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Bildverarbeitung mit Java2D und Java Advanced ImagingWas kann Java2DMit einem Objekt der Klasse Graphics2D des Java2D APIs lassen sich: Linien jeder Dicke zeichnen Flchen fllen mit Texturen, Gradienten oder Patterns Texte und Grafiken zu drehen, skalieren, scheren und verschieben Aufeinandergezeichnete Texte und Grafiken mischenDie Java2D API erlaubt es auch einfach ein Bild im Speicher zu halten und auf die Pixeldaten auch manipulierend zuzugreifen, um dieses wie im Beispiel zusehen zu gltten und zu schrfen.Original geglttet geschrft

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Bildverarbeitung mit Java2D und Java Advanced ImagingWie kann man Java2D in einer Applikation einsetztenWie bekomme ich ein Objekt von java.awt.Graphics2D?

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Bildverarbeitung mit Java2D und Java Advanced ImagingWie kann Java2D in einer Applikation einsetzten werdenWie nutze ich die gerte- und auflsungsunabhngig Grafik- und Bilddarstellung?

    GraphicsEnvironment ge = //Grafische UmgebungsvariablenGraphicsEnvironment.getLocalGraphicsEnvironment();

    GraphicsDevice[] gds = ge.getScreenDevices();//gds = Alle anzeigenden Gerte

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

    AffineTransform aft = new AffineTransform( gc.getDefaultTransform()); //Gerteigene Transformation

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

    g2d.setTransform(aft);

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Bildverarbeitung mit Java2D und Java Advanced ImagingWelche Bildklassen gibt es?Welche Operatoren gibt es fr Bilder?java.awt.image.AffineTransformOpjava.awt.image.ColorConvertOp java.awt.image.ConvolveOp java.awt.image.LookupOpjava.awt.image.RescaleOpWie kann Java2D in einer Applikation einsetzten werden

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Bildverarbeitung mit Java2D und Java Advanced ImagingWie kann Java2D in einer Applikation einsetzten werdenWie erhlt 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);

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Bildverarbeitung mit Java2D und Java Advanced ImagingDie Klassen, die in dem Java2D API diese Operatoren beschreiben erben alle von der abstrakten Klasse: java.awt.image.BufferedImageOpDie Klasse java.awt.Graphics2D stellt eine Schnittstelle zur Verfgung, um einen solchen BufferedImageOp auf ein BufferedImage anzuwenden. Java2Ds Konzeptes des virtuellen Renderns wird beispielsweise durch die Methode filter() der Klasse BufferedImageOp reprsentiert.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

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Wie kann Java2D in einer Applikation einsetzten werdenDas Model, nachdem sich eine Applikation richtet, wenn sie ihre Operation auf einem Bildobjekte mittels BufferedImageOp.filter() ausfhrt nennt sich:Immediate ModeKennzeichnendes Prinzip des Immediate Modes ist, dass jede Zeichenoperation im dem Moment ihres Aufrufes ausgefhrt wird.

    Die Java2D API bietet dem Entwickler eine weiter Mglichkeit seine Applikation zu gestallten. Dieses richtet sich nach einem Produzenten Konsumenten Prinzip, dass sogenannte:Push ModelApplikationen dieses Models arbeiten mit einem ImageProducer, der einen ImageConsumer ber den Ladefortschritt benachrichtigt und ihm das Ergebnis einer Operation als Ansammlung von Pixel bergibt.

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Wie kann Java2D in einer Applikation einsetzten werden

    Bildverarbeitung mit Java2D und Java Advanced Imaging

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

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Bildverarbeitung mit Java2D und Java Advanced ImagingWas ist Java Advanced ImagingJava Advanced Imaging erweitert die Java Plattform um die Mglichkeit, hoch entwickelte, performancekritische Bildverarbeitung in Applets und Applikationen anzubieten.

    Die Java Advanced Imaging API ist ein schnelles, plattformunabhngiges, 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 Verfgung, die sich nach einem einfach zu programmierbaren Model richten, das es dem Entwickler gestattet, leicht Bilder zu manipulieren.

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Was kann Java Advanced ImagingWelche Funktionalitt 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 untersttzt JAI RMI (Remote Method Innovation) und IIP (Internet Imaging Protocol). Bilder knnen ber InputStream oder URL geladen werden JAI bietet Mglichkeiten, Java2D API Grafikdaten in JAI Bilder einzufgen.

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Bildverarbeitung mit Java2D und Java Advanced ImagingWas kann Java Advanced ImagingEine bersicht der Kategorien von Operatoren: Punkt Operatoren Flchen Operatoren Geometrische Operatoren Farbquantisierungs Operatoren Datei Operatoren Frequenz Operatoren Statistische Operatoren Kanten Detektions Operatoren Sonstige Operatoren

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Was kann Java Advanced ImagingDa Java Advanced Imaging auf Java2D aufsetzt, bernimmt es dessen Immediate Mode sowie auch dessen Push Model und stellt untersttzende Schnittstellen zur Verfgung.

    Seine Performance erhlt JAI hauptschlich, wenn man Klassen aus dem JAI API benutzt, die sich nach dem JAI eigenen Model richten:Pull ModelKennzeichnend fr die Bildverarbeitung dieses Modells ist, dass Berechnungen nur dann durchgefhrt werden, wenn sie vom Client angefordert werden, also gerade auch bentigt 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 nchsten Seite zu sehen.

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Bildverarbeitung mit Java2D und Java Advanced ImagingWie kann man JAI in einer Applikation einsetztenDie Abbildung zeigt das Prinzip, nachdem das Zeichnen einer Renderable Bildquelle, mit den dabei beteiligten Klassen, geschieht.

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    OpImageOperationsbeschreibungBildverarbeitung mit Java2D und Java Advanced ImagingWie kann man JAI in einer Applikation einsetztenRenderableOpOperationsparameterRenderableOpOperationsparameterRenderableOpOperationsparameterBildquelleGraphics2DRenderedOpOperationsparameterRenderedOpOperationsparameterRenderedOpOperationsparameterOpImageOperationsbeschreibung

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Wie kann man JAI in einer Applikation einsetztenDurch das Anfgen von Rendered oder Renderable Operatoren zum erzeugen von neuen Operatoren lassen sich Renderbume bzw. graphen aufbauen. Werden beispielsweise zwei einfarbige Bilder erzeugt (Bilder aus Konstanten), die dann ber einen Additions-Operator verknpft in einer anzeigenden Komponente sichtbar sind, ergibt sich der folgende Graph daraus:

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Ein weiterer Grund fr die hhere Performance von Java Advanced Imaging ist die Mglichkeit, 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 bentigt werden.Wie kann man JAI in einer Applikation einsetzten

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Wie kann man JAI in einer Applikation einsetztenWie 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; Fr Renderablepb.add(0.0f); // X-Koordinate des Drehpunktespb.add(0.0f); // Y-Koordinate des Drehpunktespb.add( (float) Math.toRadians( 90 ) ); // Drehwinkel

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

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

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Wo lohnt sich der Einsatz welches FrameworksJava2D untersttzt hauptschlich graphische Operationen und low-level Bildverarbeitung. Fr 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 entwickelnNachteile: Bietet nur sehr wenige Operationen fr Bilder an Entwickler muss sich selbst um ein schnelles Applikationsmodell kmmern

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Wo lohnt sich der Einsatz welches FrameworksJava Advanced Imaging bietet gute Bildverarbeitungsmglichkeiten, die fr komplexere Operationen genauso gut geeignet sind wie fr einfachere. Zur reinen Grafikerstellung ist es nicht zu empfehlen.Vorteile: Einfaches durchfhren komplexer Operationen auf Bildern Kompatibel zur Java Plattform Hohe Performance Direkte Netzanbindung vorhanden Einfach zu erweiternNachteile: Zusatzpakete mssen beim Benutzer vorhanden sein Implementierung komplexer als bei Java2D

    Bildverarbeitung mit Java2D und Java Advanced Imaging

    Was leisten beide FrameworksVorfhrung der Demoprogramme zu Java2D und Java Advanced Imaging

    Abschlieende Fragen