Use in place tranformations when using only luminance transformations. Fixes #4037

This commit is contained in:
heckflosse
2017-09-18 01:50:17 +02:00
parent 658087e270
commit a4ecae03b5
2 changed files with 11 additions and 5 deletions

View File

@@ -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 ();

View File

@@ -812,13 +812,19 @@ 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);
if(trImg != baseImg) {
delete baseImg;
baseImg = trImg;
}
}
}
Image16 *stage_finish()
{