RFR: 8306707: Support pluggable image loading via javax.imageio [v8]
Michael Strauß
mstrauss at openjdk.org
Wed Oct 23 21:35:00 UTC 2024
> 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
Michael Strauß has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 20 additional commits since the last revision:
- Merge branch 'master' into feature/ximageloader
- review changes
- scanline stride always measured in bytes
- remove unused code
- fix line endings
- fix line endings
- add support for palette-based image formats
- review changes
- review changes
- doc changes
- ... and 10 more: https://git.openjdk.org/jfx/compare/0091d9c3...bcc4f196
-------------
Changes:
- all: https://git.openjdk.org/jfx/pull/1593/files
- new: https://git.openjdk.org/jfx/pull/1593/files/40e960dd..bcc4f196
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jfx&pr=1593&range=07
- incr: https://webrevs.openjdk.org/?repo=jfx&pr=1593&range=06-07
Stats: 1872 lines in 83 files changed: 1240 ins; 308 del; 324 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
More information about the openjfx-dev
mailing list