summaryrefslogtreecommitdiffstats
path: root/src/plugins/imageformats/jpeg
diff options
context:
space:
mode:
authorEirik Aavitsland <eirik.aavitsland@qt.io>2022-10-21 13:56:30 +0200
committerEirik Aavitsland <eirik.aavitsland@qt.io>2022-10-22 13:32:52 +0200
commit311e508154e7fa5a114ca46c8daed4d43d96b938 (patch)
treeea156b93306daafc50125cba5eee69d7038ad1b5 /src/plugins/imageformats/jpeg
parent7d99fa8e5bf036f97d8ef41780f6e401b32f47ef (diff)
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 <allan.jensen@qt.io>
Diffstat (limited to 'src/plugins/imageformats/jpeg')
-rw-r--r--src/plugins/imageformats/jpeg/qjpeghandler.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/plugins/imageformats/jpeg/qjpeghandler.cpp b/src/plugins/imageformats/jpeg/qjpeghandler.cpp
index 6472702fdd..4e59ccb534 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;