copy constructor for labimage, further cleanup for locallab periphery

This commit is contained in:
Ingo Weyrich 2020-06-27 16:52:53 +02:00
parent f02c4e1fd1
commit 3bab9ec688
5 changed files with 23 additions and 32 deletions

View File

@ -856,10 +856,8 @@ void Crop::update(int todo)
labnCrop->CopyFrom(laboCrop);
if (params.locallab.enabled && !params.locallab.spots.empty()) {
const std::unique_ptr<LabImage> reservCrop(new LabImage(laboCrop->W, laboCrop->H));
reservCrop->CopyFrom(laboCrop);
const std::unique_ptr<LabImage> lastorigCrop(new LabImage(laboCrop->W, laboCrop->H));
lastorigCrop->CopyFrom(laboCrop);
const std::unique_ptr<LabImage> reservCrop(new LabImage(*laboCrop, true));
const std::unique_ptr<LabImage> lastorigCrop(new LabImage(*laboCrop, true));
auto& lllocalcurve2 = parent->lllocalcurve;
auto& cllocalcurve2 = parent->cllocalcurve;
auto& lclocalcurve2 = parent->lclocalcurve;
@ -1235,19 +1233,17 @@ void Crop::update(int todo)
if (WaveParams.softrad > 0.f) {
provradius = new LabImage(labnCrop->W, labnCrop->H);
provradius->CopyFrom(labnCrop);
provradius = new LabImage(*labnCrop, true);
}
if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") {
unshar = new LabImage(labnCrop->W, labnCrop->H);
provis = params.wavelet.CLmethod;
params.wavelet.CLmethod = "all";
parent->ipf.ip_wavelet(labnCrop, labnCrop, kall, WaveParams, wavCLVCurve, wavblcurve, waOpacityCurveRG, waOpacityCurveSH, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, parent->wavclCurve, skip);
unshar->CopyFrom(labnCrop);
unshar = new LabImage(*labnCrop, true);
params.wavelet.CLmethod = provis;

View File

@ -1040,10 +1040,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
* 2017 2018 Jacques Desmis <jdesmis@gmail.com>
* 2019 Pierre Cabrera <pierre.cab@gmail.com>
*/
const std::unique_ptr<LabImage> reserv(new LabImage(oprevl->W, oprevl->H));
reserv->CopyFrom(oprevl);
const std::unique_ptr<LabImage> lastorigimp(new LabImage(oprevl->W, oprevl->H));
lastorigimp->CopyFrom(oprevl);
const std::unique_ptr<LabImage> reserv(new LabImage(*oprevl, true));
const std::unique_ptr<LabImage> lastorigimp(new LabImage(*oprevl, true));
float **shbuffer = nullptr;
int sca = 1;
double huere, chromare, lumare, huerefblu, chromarefblu, lumarefblu, sobelre;
@ -1287,20 +1285,14 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
}
if (WaveParams.softrad > 0.f) {
provradius = new LabImage(pW, pH);
provradius->CopyFrom(nprevl);
provradius = new LabImage(*nprevl, true);
}
if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") {
unshar = new LabImage(pW, pH);
provis = params->wavelet.CLmethod;
params->wavelet.CLmethod = "all";
ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, wavblcurve, waOpacityCurveRG, waOpacityCurveSH, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, scale);
unshar->CopyFrom(nprevl);
unshar = new LabImage(*nprevl, true);
params->wavelet.CLmethod = provis;

View File

@ -32,12 +32,18 @@ LabImage::LabImage (int w, int h, bool initZero, bool multiThread) : W(w), H(h)
}
}
LabImage::LabImage (const LabImage& source, bool multiThread) : W(source.W), H(source.H)
{
allocLab(W, H);
CopyFrom(&source, multiThread);
}
LabImage::~LabImage ()
{
deleteLab();
}
void LabImage::CopyFrom(LabImage *Img, bool multiThread)
void LabImage::CopyFrom(const LabImage *Img, bool multiThread)
{
#ifdef _OPENMP
#pragma omp parallel sections if(multiThread)
@ -54,7 +60,7 @@ void LabImage::CopyFrom(LabImage *Img, bool multiThread)
#endif
}
void LabImage::getPipetteData (float &v1, float &v2, float &v3, int posX, int posY, int squareSize)
void LabImage::getPipetteData (float &v1, float &v2, float &v3, int posX, int posY, int squareSize) const
{
float accumulator_L = 0.f;
float accumulator_a = 0.f;

View File

@ -36,11 +36,12 @@ public:
float** b;
LabImage (int w, int h, bool initZero = false, bool multiThread = true);
LabImage (const LabImage& source, bool multiThread);
~LabImage ();
//Copies image data in Img into this instance.
void CopyFrom(LabImage *Img, bool multiThread = true);
void getPipetteData (float &L, float &a, float &b, int posX, int posY, int squareSize);
void CopyFrom(const LabImage *Img, bool multiThread = true);
void getPipetteData (float &L, float &a, float &b, int posX, int posY, int squareSize) const;
void deleteLab();
void reallocLab();
void clear(bool multiThread = false);

View File

@ -1081,10 +1081,8 @@ private:
if (params.locallab.enabled && params.locallab.spots.size() > 0) {
MyTime t1, t2;
t1.set();
const std::unique_ptr<LabImage> reservView(new LabImage(fw, fh));
reservView->CopyFrom(labView);
const std::unique_ptr<LabImage> lastorigView(new LabImage(fw, fh));
lastorigView->CopyFrom(labView);
const std::unique_ptr<LabImage> reservView(new LabImage(*labView, true));
const std::unique_ptr<LabImage> lastorigView(new LabImage(*labView, true));
LocretigainCurve locRETgainCurve;
LocretitransCurve locRETtransCurve;
LocLHCurve loclhCurve;
@ -1370,8 +1368,7 @@ private:
}
*/
if (WaveParams.softrad > 0.f) {
provradius = new LabImage(fw, fh);
provradius->CopyFrom(labView);
provradius = new LabImage(*labView, true);
}
params.wavelet.getCurves(wavCLVCurve, wavblcurve, waOpacityCurveRG, waOpacityCurveSH, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL);
@ -1379,11 +1376,10 @@ private:
CurveFactory::curveWavContL(wavcontlutili, params.wavelet.wavclCurve, wavclCurve,/* hist16C, dummy,*/ 1);
if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") {
unshar = new LabImage(fw, fh);
provis = params.wavelet.CLmethod;
params.wavelet.CLmethod = "all";
ipf.ip_wavelet(labView, labView, 2, WaveParams, wavCLVCurve, wavblcurve, waOpacityCurveRG, waOpacityCurveSH, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, 1);
unshar->CopyFrom(labView);
unshar = new LabImage(*labView, true);
params.wavelet.CLmethod = provis;
WaveParams.expcontrast = false;