Für das Plus an Grafik

Java 9 – eine Einführung: JEP 262 – Unterstützung von TIFF-Grafiken

Michael Inden

© Shutterstock.com / Profit_Image

Das kürzlich erschienene Java 9 besteht aus mehr als nur Modulen und dem Projekt Jigsaw. Über 90 sogenannte JEPs (JDK Enhancement Proposals) sind Teil von Version 9 des Java Development Kits. Im neunten Teil seiner Serie zu Java 9 stellt Michael Inden, Oracle-zertifizierter Java-Entwickler, die mit JDK 9 eingeführte Unterstützung von TIFF-Grafiken vor, die im JEP 262 zusammengefasst ist.

Die vorliegende Artikelserie zu Java 9 setzt sich aus Texten von Michael Indens Buch „Java 9 – Die Neuerungen“ zusammen, das beim dpunkt.verlag erschienen ist.

PS: Verpassen Sie nicht unsere Infografik zu Project Jigsaw!

Nachdem wir im ersten Teil dieser Blog-Serie diverse kleinere Änderungen in der Syntax der Sprache Java kennengelernt haben, schauten wir uns im zweiten Teil einige relevante Erweiterungen im JDK an, konkreter: im Process-API und den Collection-Factory-Methoden. Im dritten Teil ging es anschließend um die Ergänzungen im Stream-API, im vierten Teil besprachen wir die Erweiterungen in Optional<T>. Im fünften Teil der Artikelserie standen die Erweiterungen der Java-Klasse LocalDate im Fokus, in Teil sechs war die Verarbeitung von Stackframes und der Klasse StackWalker Thema. Im siebten Teil seiner Reihe stellte Michael Inden den Taskbar-Support von Java 9 vor, in Teil acht waren die Erweiterungen des Unicode-Supports an der Reihe. Der neunte Teil der Serie ist der Unterstützung für TIFF-Grafiken gewidmet.

JEP 262: Support von TIFF-Grafiken

Das Java Image I/O und insbesondere die Utility-Klasse javax.imageio.ImageIO beherrschte bis einschließlich JDK 8 leider das Grafikformat TIFF nicht, sondern nur JPEG, PNG, BMP, WBMP und GIF. In JDK 9 ergänzt TIFF diese Liste. Zum Lesen und Schreiben von Grafiken unterschiedlicher Formate bietet die Klasse ImageIO die Methoden read() und write(). Die Verarbeitung folgt dem gezeigten Muster:

final InputStream imageInputStream =
                  TiffExample.class.getResourceAsStream("lena_color.tiff");
final BufferedImage image = ImageIO.read(imageInputStream);

Die obigen Zeilen führen mit JDK 8 zu einer NullPointerException, weil TIFF dort nicht unterstützt wird. Dagegen ist die Verarbeitung mit JDK 9 problemlos möglich. Das ist insofern relevant, als etwa Mac OS TIFF als Standardformat benutzt.

Beispiel: Schauen wir uns folgende JavaFX-Beispielapplikation an, die ein TIFFBild einlesen und anzeigen soll. Leider kann die Klasse javafx.scene.image.Image aus JavaFX selbst im aktuellen Java 9.0.1 noch nicht TIFF verarbeiten (siehe hier). Deshalb wird ein kleiner Trick und Umweg mit dem java.awt.image.BufferedImage und der Utility-Klasse javafx.embed.swing.SwingFXUtils wie folgt beschritten:

private Image readTiffImage() throws IOException
{
    final InputStream tiffImage =
                      TiffExample.class.getResourceAsStream("lena_color.tiff");
    
    // JavaFX unterstützt ein Laden wie folgt nicht!
    // final Image image = new Image(tiffImage);

    final BufferedImage bufferedImage = ImageIO.read(tiffImage);
    final Image image = SwingFXUtils.toFXImage(bufferedImage, null);
    return image;
}

Mit dieser Hilfsmethode, die bei einer Behebung des JDK-Bugs nur leicht angepasst werden muss, kann man sich ein Hauptprogramm folgendermaßen schreiben, um ein TIFF-Bild einzulesen und darzustellen:

@Override
public void start(final Stage primaryStage) throws IOException
{
    final Image image = readTiffImage();
    final ImageView imageView = new ImageView(image);

    final ScrollPane sp = new ScrollPane(imageView);
    final Scene scene = new Scene(sp, 525, 525);

    primaryStage.setTitle("My JavaFX TiffExample");
    primaryStage.setScene(scene);
    primaryStage.show();
}

Als Beispiel dient ein Bild, das früher zur Perfektionierung von Kantenerkennungsalgorithmen benutzt wurde. Hier schauen wir in der folgenden Abbildung einfach auf das Gesicht einer Frau, das wir durch den Start des obigen Programms angezeigt bekommen.

Darstellung des Programms TiffExample

Java 9 – Die NeuerungenMichael Indens Buch bietet einen fundierten Einstieg in Java 9 sowie einen Überblick über die umfangreichen Neuerungen in der aktuellen Version. Damit eignet sich das Buch für all jene, die ihr Java-Wissen aktualisieren wollen. Dabei helfen eine Vielzahl an Übungen, um die einzelnen Themengebiete zu vertiefen und besser zu verstehen.

Neben Änderungen an der Sprache bilden auch die Erweiterungen in diversen APIs einen Schwerpunkt. Fehlen darf hier natürlich auch nicht ein Kapitel über die fundamentalste Änderung in Java 9: Project Jigsaw. Auch fortgeschrittenere Themen wie Services und die Migration bestehender Applikationen werden besprochen. Da Java 9 auch einige Auswirkungen auf Build Tools und IDEs mit sich bringt, gibt ein Kapitel einen Überblick über den derzeitigen Stand zum Tooling rund um die neue Java-Version.

Weitere Informationenen zum Buch gibt es hier!

Verwandte Themen:

Geschrieben von
Michael Inden
Michael Inden
Dipl.-Inform. Michael Inden ist Oracle-zertifizierter Java-Entwickler für JDK 6. Nach seinem Studium in Oldenburg war er lange Zeit als Softwareentwickler und -architekt bei verschiedenen internationalen Firmen tätig und arbeitet derzeit als Teamleiter Softwareentwicklung in Zürich. Michael Inden hat rund 20 Jahre Erfahrung beim Entwurf komplexer Softwaresysteme gesammelt, an diversen Fortbildungen und an mehreren Java-One-Konferenzen in San Francisco teilgenommen. Sein Wissen gibt er gerne als Trainer in Schulungen und auf Konferenzen weiter. Sein besonderes Interesse gilt dem Design qualitativ hochwertiger Applikationen mit ergonomischen, grafischen Oberflächen sowie dem Coaching von Kollegen.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: