diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index c6043010b..c62c0e23f 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -9897,7 +9897,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o #ifdef _OPENMP - // #pragma omp parallel for schedule(dynamic,16) + #pragma omp parallel for schedule(dynamic,16) #endif for (int y = 0; y < transformed->H ; y++) //{ @@ -9995,7 +9995,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lp.showmaskexpmet != 3 || lp.enaExpMask) { #ifdef _OPENMP -// #pragma omp parallel for schedule(dynamic,16) + #pragma omp parallel for schedule(dynamic,16) #endif for (int y = 0; y < transformed->H ; y++) //{ @@ -10015,9 +10015,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { if (zone > 0) { - bufexporig->L[loy - begy][lox - begx] = bufexporig->L[loy - begy][lox - begx] + (lp.blendmaexp * bufmaskorigexp->L[loy - begy][lox - begx]); - bufexporig->a[loy - begy][lox - begx] = bufexporig->a[loy - begy][lox - begx] * (1.f + lp.blendmaexp * bufmaskorigexp->a[loy - begy][lox - begx]); - bufexporig->b[loy - begy][lox - begx] = bufexporig->b[loy - begy][lox - begx] * (1.f + lp.blendmaexp * bufmaskorigexp->b[loy - begy][lox - begx]); + bufexporig->L[loy - begy][lox - begx] += (lp.blendmaexp * bufmaskorigexp->L[loy - begy][lox - begx]); + bufexporig->a[loy - begy][lox - begx] *= (1.f + lp.blendmaexp * bufmaskorigexp->a[loy - begy][lox - begx]); + bufexporig->b[loy - begy][lox - begx] *= (1.f + lp.blendmaexp * bufmaskorigexp->b[loy - begy][lox - begx]); bufexporig->L[loy - begy][lox - begx] = CLIP(bufexporig->L[loy - begy][lox - begx]); bufexporig->a[loy - begy][lox - begx] = CLIPC(bufexporig->a[loy - begy][lox - begx]); @@ -10026,7 +10026,31 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o originalmaskexp->L[y][x] = CLIP(bufexporig->L[loy - begy][lox - begx] - bufmaskorigexp->L[loy - begy][lox - begx]); originalmaskexp->a[y][x] = CLIPC(bufexporig->a[loy - begy][lox - begx] * (1.f - bufmaskorigexp->a[loy - begy][lox - begx])); originalmaskexp->b[y][x] = CLIPC(bufexporig->b[loy - begy][lox - begx] * (1.f - bufmaskorigexp->b[loy - begy][lox - begx])); + + switch (zone) { + + case 1: { + original->L[y][x] += (lp.blendmaexp * localFactor * bufmaskorigexp->L[loy - begy][lox - begx]); + original->a[y][x] *= (1.f + lp.blendmaexp * localFactor * bufmaskorigexp->a[loy - begy][lox - begx]); + original->b[y][x] *= (1.f + lp.blendmaexp * localFactor * bufmaskorigexp->b[loy - begy][lox - begx]); + original->L[y][x] = CLIP(original->L[y][x]); + original->a[y][x] = CLIPC(original->a[y][x]); + original->b[y][x] = CLIPC(original->b[y][x]); + break; + } + + case 2: { + + original->L[y][x] = bufexporig->L[loy - begy][lox - begx]; + original->a[y][x] = bufexporig->a[loy - begy][lox - begx]; + original->b[y][x] = bufexporig->b[loy - begy][lox - begx]; + + } + + } } + + } } @@ -10061,7 +10085,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } delete bufmaskorigexp; - delete bufexporig; + delete bufexporig; return; } @@ -10399,7 +10423,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } #ifdef _OPENMP - // #pragma omp parallel for schedule(dynamic,16) + #pragma omp parallel for schedule(dynamic,16) #endif for (int y = 0; y < transformed->H ; y++) //{ @@ -10491,7 +10515,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lp.showmaskcolmet != 3 || lp.enaColorMask) { #ifdef _OPENMP -// #pragma omp parallel for schedule(dynamic,16) + #pragma omp parallel for schedule(dynamic,16) #endif for (int y = 0; y < transformed->H ; y++) //{ @@ -10512,9 +10536,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { if (zone > 0) { - bufcolorig->L[loy - begy][lox - begx] = bufcolorig->L[loy - begy][lox - begx] + (lp.blendmacol * bufmaskorigcol->L[loy - begy][lox - begx]); - bufcolorig->a[loy - begy][lox - begx] = bufcolorig->a[loy - begy][lox - begx] * (1.f + lp.blendmacol * bufmaskorigcol->a[loy - begy][lox - begx]); - bufcolorig->b[loy - begy][lox - begx] = bufcolorig->b[loy - begy][lox - begx] * (1.f + lp.blendmacol * bufmaskorigcol->b[loy - begy][lox - begx]); + bufcolorig->L[loy - begy][lox - begx] += (lp.blendmacol * bufmaskorigcol->L[loy - begy][lox - begx]); + bufcolorig->a[loy - begy][lox - begx] *= (1.f + lp.blendmacol * bufmaskorigcol->a[loy - begy][lox - begx]); + bufcolorig->b[loy - begy][lox - begx] *= (1.f + lp.blendmacol * bufmaskorigcol->b[loy - begy][lox - begx]); bufcolorig->L[loy - begy][lox - begx] = CLIP(bufcolorig->L[loy - begy][lox - begx]); bufcolorig->a[loy - begy][lox - begx] = CLIPC(bufcolorig->a[loy - begy][lox - begx]); @@ -10524,8 +10548,29 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o originalmaskcol->a[y][x] = CLIPC(bufcolorig->a[loy - begy][lox - begx] * (1.f - bufmaskorigcol->a[loy - begy][lox - begx])); originalmaskcol->b[y][x] = CLIPC(bufcolorig->b[loy - begy][lox - begx] * (1.f - bufmaskorigcol->b[loy - begy][lox - begx])); - } + switch (zone) { + case 1: { + original->L[y][x] += (lp.blendmacol * localFactor * bufmaskorigcol->L[loy - begy][lox - begx]); + original->a[y][x] *= (1.f + lp.blendmacol * localFactor * bufmaskorigcol->a[loy - begy][lox - begx]); + original->b[y][x] *= (1.f + lp.blendmacol * localFactor * bufmaskorigcol->b[loy - begy][lox - begx]); + original->L[y][x] = CLIP(original->L[y][x]); + original->a[y][x] = CLIPC(original->a[y][x]); + original->b[y][x] = CLIPC(original->b[y][x]); + break; + } + + case 2: { + + original->L[y][x] = bufcolorig->L[loy - begy][lox - begx]; + original->a[y][x] = bufcolorig->a[loy - begy][lox - begx]; + original->b[y][x] = bufcolorig->b[loy - begy][lox - begx]; + + } + + } + + } } } @@ -10560,7 +10605,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } delete bufmaskorigcol; - delete bufcolorig; + delete bufcolorig; return; } diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index b30ac9f9c..330f66a7c 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -77,7 +77,7 @@ Locallab::Locallab(): chroma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMA"), -100, 150, 1, 0))), sensi(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 19))), structcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), - blendmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 150, 1, 0))), + blendmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), // Exposure expcomp(Gtk::manage(new Adjuster(M("TP_EXPOSURE_EXPCOMP"), -200, 400, 5, 0))), hlcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTS"), 0, 500, 1, 60))), @@ -88,7 +88,7 @@ Locallab::Locallab(): sensiex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))), structexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), blurexpde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))), - blendmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 150, 1, 0))), + blendmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 100, 1, 0))), // Vibrance saturated(Gtk::manage(new Adjuster(M("TP_VIBRANCE_SATURATED"), -100., 100., 1., 0.))), pastels(Gtk::manage(new Adjuster(M("TP_VIBRANCE_PASTELS"), -100., 100., 1., 0.))),