From a664baa9f9c70f345382a3839796e5cdac89d0ab Mon Sep 17 00:00:00 2001 From: Mirco Miranda Date: Wed, 6 Nov 2024 21:15:04 +0000 Subject: [PATCH] JXL: fixed bug when saving grayscale images without color profile Saving grayscale images at less than 100% quality made the file unreadable. Fix also a regression while loading GrayA images introduced with MR !250 --- autotests/read/jxl/testcard_graya.jxl | Bin 0 -> 7252 bytes autotests/read/jxl/testcard_graya.png | Bin 0 -> 8596 bytes src/imageformats/jxl.cpp | 18 ++++++++---------- 3 files changed, 8 insertions(+), 10 deletions(-) create mode 100644 autotests/read/jxl/testcard_graya.jxl create mode 100644 autotests/read/jxl/testcard_graya.png diff --git a/autotests/read/jxl/testcard_graya.jxl b/autotests/read/jxl/testcard_graya.jxl new file mode 100644 index 0000000000000000000000000000000000000000..345e2178d7e8e5a9736fb9fb335ce5c1fc2f0fde GIT binary patch literal 7252 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 literal 0 HcmV?d00001 diff --git a/autotests/read/jxl/testcard_graya.png b/autotests/read/jxl/testcard_graya.png new file mode 100644 index 0000000000000000000000000000000000000000..b028d2311fb61c65393f8ce8499b15eae89ed1eb GIT binary patch literal 8596 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 a&;J3Whmp?w3~zk^0000 0) { loadalpha = true; - } else { - loadalpha = false; } m_input_pixel_format.endianness = JXL_NATIVE_ENDIAN; m_input_pixel_format.align = 0; - m_input_pixel_format.num_channels = m_basicinfo.num_color_channels == 1 ? 1 : 4; + m_input_pixel_format.num_channels = is_gray ? 1 : 4; if (m_basicinfo.bits_per_sample > 8) { // high bit depth #ifdef JXL_HDR_PRESERVATION_DISABLED @@ -270,7 +268,7 @@ bool QJpegXLHandler::countALLFrames() m_input_pixel_format.data_type = is_fp ? JXL_TYPE_FLOAT16 : JXL_TYPE_UINT16; m_buffer_size = (size_t)m_basicinfo.xsize * (size_t)m_basicinfo.ysize * m_input_pixel_format.num_channels * 2; - if (m_basicinfo.num_color_channels == 1) { + if (is_gray) { m_input_pixel_format.data_type = JXL_TYPE_UINT16; m_input_image_format = m_target_image_format = QImage::Format_Grayscale16; m_buffer_size = (size_t)m_basicinfo.xsize * (size_t)m_basicinfo.ysize * m_input_pixel_format.num_channels * 2; @@ -294,7 +292,7 @@ bool QJpegXLHandler::countALLFrames() m_input_pixel_format.data_type = JXL_TYPE_UINT8; m_buffer_size = (size_t)m_basicinfo.xsize * (size_t)m_basicinfo.ysize * m_input_pixel_format.num_channels; - if (m_basicinfo.num_color_channels == 1) { + if (is_gray) { m_input_image_format = m_target_image_format = QImage::Format_Grayscale8; } else { m_input_image_format = QImage::Format_RGBA8888; @@ -630,7 +628,7 @@ bool QJpegXLHandler::write(const QImage &image) // no profile or Qt-unsupported ICC profile iccprofile = tmpcs.iccProfile(); // note: lossless encoding requires uses_original_profile = JXL_TRUE - if (iccprofile.size() > 0 || m_quality == 100) { + if (iccprofile.size() > 0 || m_quality == 100 || is_gray) { output_info.uses_original_profile = JXL_TRUE; } } @@ -808,7 +806,7 @@ bool QJpegXLHandler::write(const QImage &image) } } else { JxlColorEncoding color_profile; - JxlColorEncodingSetToSRGB(&color_profile, JXL_FALSE); + JxlColorEncodingSetToSRGB(&color_profile, is_gray ? JXL_TRUE : JXL_FALSE); status = JxlEncoderSetColorEncoding(encoder, &color_profile); if (status != JXL_ENC_SUCCESS) {