Use in place tranformations when using only luminance transformations. Fixes #4037
This commit is contained in:
@@ -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 ();
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user