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

View File

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

View File

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

View File

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