From 311e508154e7fa5a114ca46c8daed4d43d96b938 Mon Sep 17 00:00:00 2001 From: Eirik Aavitsland Date: Fri, 21 Oct 2022 13:56:30 +0200 Subject: [PATCH] jpeg handler: store Grayscale16 format images as grayscale, not rgb No point in storing multiple channels when we have single channel data. And as jpeg anyway has only 8 bpc, information loss is unavoidable, so just convert to Grayscale8 and store as that. Fixes: QTBUG-107810 Change-Id: Ib62038acf07d4b875b8416825fb0095510c14b5b Reviewed-by: Allan Sandfeld Jensen --- src/plugins/imageformats/jpeg/qjpeghandler.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/plugins/imageformats/jpeg/qjpeghandler.cpp b/src/plugins/imageformats/jpeg/qjpeghandler.cpp index 6472702fddb..4e59ccb534c 100644 --- a/src/plugins/imageformats/jpeg/qjpeghandler.cpp +++ b/src/plugins/imageformats/jpeg/qjpeghandler.cpp @@ -532,6 +532,7 @@ static bool do_write_jpeg_image(struct jpeg_compress_struct &cinfo, cinfo.in_color_space = gray ? JCS_GRAYSCALE : JCS_RGB; break; case QImage::Format_Grayscale8: + case QImage::Format_Grayscale16: gray = true; cinfo.input_components = 1; cinfo.in_color_space = JCS_GRAYSCALE; @@ -630,6 +631,12 @@ static bool do_write_jpeg_image(struct jpeg_compress_struct &cinfo, case QImage::Format_Grayscale8: memcpy(row, image.constScanLine(cinfo.next_scanline), w); break; + case QImage::Format_Grayscale16: + { + QImage rowImg = image.copy(0, cinfo.next_scanline, w, 1).convertToFormat(QImage::Format_Grayscale8); + memcpy(row, rowImg.constScanLine(0), w); + } + break; case QImage::Format_RGB888: memcpy(row, image.constScanLine(cinfo.next_scanline), w * 3); break;