This PR is an improved version of #1093. JavaFX can load BMP, GIF, PNG, and JPEG images with its built-in image loaders. It has been a long-standing request to support more image formats, most notably (but not limited to) SVG. However, adding more built-in image loaders is a significant effort not only in creating the functionality, but also in maintaining the additional dependencies.
This will probably not happen any time soon, so we are left with three alternatives: 1. Accept the fact that JavaFX will never be able to load additional image formats. 2. Create a public image loader API, and hope that developers in the JavaFX ecosystem will create image loader plugins. 3. Leverage the existing Java Image I/O API. >From these options, I think we should simply support existing Java APIs; both >because it is the shortest and most realistic path forward, but also because I >don't think it is sensible to bifurcate pluggable image loading in the Java >ecosystem. Of course, Java Image I/O is a part of the `java.desktop` module, which as of now, all JavaFX applications require. However, it has been noted in the previous PR that we shouldn't lock JavaFX into the `java.desktop` dependency even further. I've improved this PR to not permanently require the `java.desktop` dependency: if the module is present, then JavaFX will use Image I/O for image formats that it can't load with the built-in loaders; if the module is not present, only the built-in loaders are available. I have prepared a small sample application that showcases how the feature can be used to load SVG images in a JavaFX application: https://github.com/mstr2/jfx-imageio-sample ------------- Commit messages: - doc changes - add test for variable-density images - add tests for Image.convertImageFrame - adjust copyright headers - make XImageLoaderFactory optional - Added documentation - Added listener support - Added test - Added tests - Moved image format conversion to Prism - ... and 1 more: https://git.openjdk.org/jfx/compare/f6813029...e6680e6c Changes: https://git.openjdk.org/jfx/pull/1593/files Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1593&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8306707 Stats: 1931 lines in 29 files changed: 1709 ins; 74 del; 148 mod Patch: https://git.openjdk.org/jfx/pull/1593.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/1593/head:pull/1593 PR: https://git.openjdk.org/jfx/pull/1593