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) ImProcFunctions (const ProcParams* iparams, bool imultiThread = true)
: monitorTransform (nullptr), lab2outputTransform (nullptr), output2monitorTransform (nullptr), params (iparams), scale (1), multiThread (imultiThread), lumimul{} {} : monitorTransform (nullptr), lab2outputTransform (nullptr), output2monitorTransform (nullptr), params (iparams), scale (1), multiThread (imultiThread), lumimul{} {}
~ImProcFunctions (); ~ImProcFunctions ();
bool needsLuminanceOnly() { return !(needsCA() || needsDistortion() || needsRotation() || needsPerspective() || needsLCP() || needsLensfun()) && (needsVignetting() || needsPCVignetting() || needsGradient());}
void setScale (double iscale); void setScale (double iscale);
bool needsTransform (); bool needsTransform ();

View File

@@ -812,11 +812,17 @@ private:
// perform transform (excepted resizing) // perform transform (excepted resizing)
if (ipf.needsTransform()) { if (ipf.needsTransform()) {
Imagefloat* trImg = new Imagefloat (fw, fh); Imagefloat* trImg = nullptr;
ipf.transform (baseImg, trImg, 0, 0, 0, 0, fw, fh, fw, fh, 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); imgsrc->getMetaData(), imgsrc->getRotateDegree(), true);
delete baseImg; if(trImg != baseImg) {
baseImg = trImg; delete baseImg;
baseImg = trImg;
}
} }
} }