Bildverarbeitung mit Java2D und Java Advanced Imaging

Slides:



Advertisements
Ähnliche Präsentationen
Strategie (Strategy / Policy) Ein objektbasiertes Verhaltensmuster Stephan Munkelt, Stefan Salzmann - 03IN.
Advertisements

Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes.
Objektorientierter Entwurf (OOD) Übersicht
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
FH-Hof Texturen Richard Göbel. FH-Hof Anwendungen von Texturen Darstellung von 2D-Bildern Gestaltung von Oberflächen Simulation komplexer Geometrien...
Java: Objektorientierte Programmierung
Java2D Richard Göbel.
Einführung in die Programmierung von 3D-Grafiken Basis ist Java3D
Java: Grundlagen der Sprache
FH-Hof Texturen Richard Göbel. FH-Hof Anwendungen von Texturen Darstellung von 2D-Bildern Gestaltung von Oberflächen Simulation komplexer Geometrien...
FH-Hof Java 2D - Kontext für Zeichenoperationen Richard Göbel.
DOM (Document Object Model)
Sommersemester 2003 Lars Bernard
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 8 Sitzung 8: Zeichnen in Java.
Sebastian Grahn Sebastian Kühn
Objektorientierte Programmierung JDK-Klassenbibliothek
AWT – Detailbetrachtung Java 3D – Seminar im Wintersemester 2002/2003 Christian Schneider.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger, Dipl.-Ing. D. Dörschlag Einführung in die Programmierung mit Java.
Java-Kurs Grafik Julian Drerup.
Programmieren mit JAVA
Programmieren mit JAVA Teil V. Grafikausgabe mit JAVA, das AWT Java wurde von Anfang an mit dem Anspruch entwickelt, ein vielseitiges, aber einfach zu.
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
JAVA RMI.
Introducing the .NET Framework
DVG3 - Bilder IMAGES (Bilder) Vortrag : Ronny Kuhnert am 9. November 1999.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
1 Animation (Doublepuffering) Vorlesung: Datenverarbeitung Grundlagen 3 Fachbereich II - Mathematik Rolf Heitzenröder.
DVG1 - Applets1 Applets. DVG1 - Applets2 Die Klasse Applet n Applets sind Grafikobjekte, die unter Steuerung eines anderen Programms (z.B. eines Browsers,
1DVG3 - anonyme Klassen Anonyme Klassen. DVG3 - anonyme Klassen 2 Syntax new BasisKlasse(Parameterliste) { Modifikationen und Erweiterungen der Basisklasse.
DVG Einführung in Java1 Einführung in JAVA.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
DVG Klassen und Objekte
03 - Paint Das Zeichenprogramm EMMA Paint2 Aufgabenstellung Entwicklung eines ausschließlich in JAVA programmierten Graphikprogrammes. Vergleichsprodukte:
12-Drucken Drucken in JAVA. 12-Drucken2 Probleme beim Drucken: Es können nur graphische Informationen gedruckt werden. Die zu druckende Information muss.
1 Dienstbeschreibung mit DAML Ein graphischer Editor für DAML - Ting Zheng Betreuer: Michael Klein, Philipp Obreiter.
FH-Hof Java2D - Grundlagen Richard Göbel. FH-Hof Java2D - Funktionen Java2D unterstützt: das Zeichnen von Grafiken die Darstellung von Texten die Darstellung.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
FHP - Fachbereich Bauingenieurwesen
AWT und JFC Abstract Windowing Toolkit
Benutzeroberflächen mit Java
Java ohne Kara. Java ohne Kara Ab jetzt: Java ohne Kara Ziel: Erfahrungen sammeln mit ersten Java Programmen.
Applets Java für’s Web.
Objektorientiertes Programmieren
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Theorie Praktische Beispiele
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
.net c# Gruppe 3 Image Viewer Realisierbarkeit in C# Hackl, Lamprecht, Leimer.
Theorie Praktische Beispiele
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
Programmierpraktikum Java SS 2005
Theorie Praktische Beispiele
Kapitel 2: Image J Software für digitale Bilder
3. Beschreibung von Abläufen durch Algorithmen 3.4 Zufall
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Multimedia in Java Thomas Witschel, Kerstin Steinert & Erik Reinhard.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Java-Kurs Übung Benutzeroberflächen und Graphik Frames (Fenster)
Java-Applets und URLs APP Philip Graf, Andreas Bößl.
Einführung in die Programmierung mit Java
Einführung in Java PING e.V. Weiterbildung Andreas Rossbacher 24. März 2005.
Einführung in die OOP in Java
Objektorientierte Programmierung (OOP)
Entwurf, Implementierung und Test eines Java – Web Services als Kommunikationsschnittstelle für Webapplikationen mit Funktionen.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Das Entwurfsmuster Model-View-Controller
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
 Präsentation transkript:

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

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

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

Bildverarbeitung mit Java2D und Java Advanced Imaging Was ist Java2D

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

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

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();

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);

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

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);

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.

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.

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)

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

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.

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.

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

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.

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.

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

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:

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.

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);

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

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

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