I think yes.
Whereas JPG grabs the raster for the whole image whereas as you noted, PNG is looping row by row, so there might need to be some updates in the handling of the child raster needed.

-phil.


On 7/31/24 10:02 AM, Daniel Gredler wrote:
Hi all,

I'd like a quick sanity check on a possible memory inefficiency in PNGImageWriter.

Some of the other image writers, like JPEGImageWriter, do their best to avoid duplicating the image raster + data buffer [1]... although it doesn't look like this was always the case [2].

The PNGImageWriter, on the other hand, always makes a new raster + data buffer copy for each row [3]. It *is* per-row, so the data isn't all duplicated in one go, but even on a row-by-row basis, it ends up being quite a bit of unnecessary allocation and subsequent garbage collection.

Can somebody confirm if I'm reading things right, and whether PNGImageWriter would benefit from a similar BufferedImage + single tile check, such as already exists in JPEGImageWriter?

Thanks!

Daniel

[1] https://github.com/openjdk/jdk/blob/e4c7850c177899a5da6f5050cb0647a6e1a75d31/src/java.desktop/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java#L415
[2] https://bugs.openjdk.org/browse/JDK-6266748
[3] https://github.com/openjdk/jdk/blob/e4c7850c177899a5da6f5050cb0647a6e1a75d31/src/java.desktop/share/classes/com/sun/imageio/plugins/png/PNGImageWriter.java#L923


Reply via email to