On Sat, 19 Oct 2024 16:24:42 GMT, John Hendrikx <[email protected]> wrote:
>> Michael Strauß has updated the pull request incrementally with two
>> additional commits since the last revision:
>>
>> - remove unused code
>> - fix line endings
>
> modules/javafx.graphics/src/main/java/com/sun/javafx/iio/javax/XImageLoader.java
> line 206:
>
>> 204: : ImageStorage.ImageType.PALETTE,
>> 205: getByteBuffer(image.getRaster().getDataBuffer()),
>> 206: image.getWidth(), image.getHeight(),
>> image.getWidth() * colorModel.getPixelSize(),
>
> General comment here for all spots where you are calculating the stride; you
> can ask AWT this. You don't know what kind of padding or rounding going on,
> and given how varied image formats can be, its unlikely to be always as
> simple as "round up to nearest byte". I also think that having in some cases
> the stride being bytes and in others being bits is not a good idea. So, how
> often before the switch asking AWT for the stride?
>
> SampleModel model = raster.getSampleModel();
>
> int stride = switch(model) {
> case ComponentSampleModel m -> m.getScanlineStride();
> case MultiPixelPackedSampleModel m -> m.getScanlineStride();
> case SinglePixelPackedSampleModel m -> m.getScanlineStride();
> default -> throw new IllegalStateException("Unsupported sample
> model: " + model);
> }
>
> (Blame AWT for not putting `getScanlineStride` as an abstract method in the
> base class).
>
> You can then use this value for all locations, and IMHO should convert the
> indexed versions to use bytes, or at a minimum document in `ImageFrame` that
> `stride` no longer has its traditional meaning in all cases. As I think
> that's very confusing, and a stride in bits is useless to have, I'd be very
> much in favor of having the stride back to being bytes in all cases.
Implemented as you suggested. Scanline stride is now also always measured in
bytes.
> modules/javafx.graphics/src/main/java/com/sun/javafx/image/impl/BaseIndexedToByteConverter.java
> line 42:
>
>> 40: private final Boolean premultiplied;
>> 41:
>> 42: IndexedGetter(int[] colors, Boolean premultiplied) {
>
> I think using `Boolean` to store 3 values is confusing. Use an `enum`?
Replaced with `AlphaType`.
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1593#discussion_r1808818039
PR Review Comment: https://git.openjdk.org/jfx/pull/1593#discussion_r1808818298