diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index e48ec3c7f..4f748a0c1 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -203,7 +203,7 @@ public: ImProcFunctions (const ProcParams* iparams, bool imultiThread = true) : monitorTransform (nullptr), lab2outputTransform (nullptr), output2monitorTransform (nullptr), params (iparams), scale (1), multiThread (imultiThread), lumimul{} {} ~ImProcFunctions (); - + bool needsLuminanceOnly() { return !(needsCA() || needsDistortion() || needsRotation() || needsPerspective() || needsLCP() || needsLensfun()) && (needsVignetting() || needsPCVignetting() || needsGradient());} void setScale (double iscale); bool needsTransform (); diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index fd0a67411..f128c145e 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -812,11 +812,17 @@ private: // perform transform (excepted resizing) if (ipf.needsTransform()) { - Imagefloat* trImg = new Imagefloat (fw, fh); - ipf.transform (baseImg, trImg, 0, 0, 0, 0, fw, fh, fw, fh, + Imagefloat* trImg = nullptr; + if (ipf.needsLuminanceOnly()) { + trImg = baseImg; + } else { + trImg = new Imagefloat (fw, fh); + } ipf.transform (baseImg, trImg, 0, 0, 0, 0, fw, fh, fw, fh, imgsrc->getMetaData(), imgsrc->getRotateDegree(), true); - delete baseImg; - baseImg = trImg; + if(trImg != baseImg) { + delete baseImg; + baseImg = trImg; + } } }