RFR: 8364583: ColorConvertOp fails for CMYK → RGB conversion

Phil Race prr at openjdk.org
Thu Oct 23 19:04:46 UTC 2025


On Thu, 16 Oct 2025 17:37:20 GMT, Sergey Bylokhov <serb at openjdk.org> wrote:

>> color is initially returned as 4 element array but we over-write with 3 element and so next time through the loop it is used by but is too short.
>> More details in JBS.
>
> src/java.desktop/share/classes/java/awt/image/ColorConvertOp.java line 811:
> 
>> 809:                 for (int x = 0; x < w; x++) {
>> 810:                     pixel = srcRas.getDataElements(x, y, pixel);
>> 811:                     color = srcCM.getNormalizedComponents(pixel, null, 0);
> 
> Since this is executed for each pixel, it will generate garbage equal to the image size. Maybe we can cleanly split the usage of the two vars here? Note that the bug only occurs when the source image does not use an ICC profile, but this change would increase garbage for both ICC and non-ICC profiles.

You mean keep the original returned float[] color separate from the one that's later over-written.
I'd thought about that but I don't think it is worth it.
It can also be over-written at line 835. There's just too much state tracking needed to save
the GC a tiny bit of effort freeing small transient objects.
Also it already is re-initialised for each scanline. See line 807, so it isn't (quite) the same array for the entire image anyway.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/27785#discussion_r2456806807


More information about the client-libs-dev mailing list