From f065104b7231471b99cd8d34bab73fdbf9164acd Mon Sep 17 00:00:00 2001 From: Mirco Miranda Date: Sat, 6 Jan 2024 08:20:14 +0100 Subject: [PATCH] Less space used when saving a grayscale image --- src/imageformats/exr.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/imageformats/exr.cpp b/src/imageformats/exr.cpp index 3c0bf1a..3787087 100644 --- a/src/imageformats/exr.cpp +++ b/src/imageformats/exr.cpp @@ -621,7 +621,14 @@ bool EXRHandler::write(const QImage &image) // write the EXR K_OStream ostr(device(), QByteArray()); - Imf::RgbaOutputFile file(ostr, header, image.hasAlphaChannel() ? Imf::RgbaChannels::WRITE_RGBA : Imf::RgbaChannels::WRITE_RGB); + auto channelsType = image.hasAlphaChannel() ? Imf::RgbaChannels::WRITE_RGBA : Imf::RgbaChannels::WRITE_RGB; + if (image.format() == QImage::Format_Mono || + image.format() == QImage::Format_MonoLSB || + image.format() == QImage::Format_Grayscale16 || + image.format() == QImage::Format_Grayscale8) { + channelsType = Imf::RgbaChannels::WRITE_Y; + } + Imf::RgbaOutputFile file(ostr, header, channelsType); Imf::Array2D pixels; pixels.resizeErase(EXR_LINES_PER_BLOCK, width);