Added show modifications to sharpening

This commit is contained in:
Desmis 2020-01-21 09:14:39 +01:00
parent 478be22dab
commit 6e3fd503cc
13 changed files with 159 additions and 41 deletions

View File

@ -2548,6 +2548,7 @@ TP_LOCALLAB_SHARAMOUNT;Amount
TP_LOCALLAB_SHARBLUR;Blur radius TP_LOCALLAB_SHARBLUR;Blur radius
TP_LOCALLAB_SHARDAMPING;Damping TP_LOCALLAB_SHARDAMPING;Damping
TP_LOCALLAB_SHARITER;Iterations TP_LOCALLAB_SHARITER;Iterations
TP_LOCALLAB_SHARFRAME;Modifications
TP_LOCALLAB_SHARP;Sharpening TP_LOCALLAB_SHARP;Sharpening
TP_LOCALLAB_SHARRADIUS;Radius TP_LOCALLAB_SHARRADIUS;Radius
TP_LOCALLAB_SHORTC;Short Curves 'L' Mask TP_LOCALLAB_SHORTC;Short Curves 'L' Mask

View File

@ -1131,7 +1131,7 @@ void Crop::update(int todo)
locwavCurveden, locwavdenutili, locwavCurveden, locwavdenutili,
LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav,
parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallvibMask, parent->localllcMask, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask, parent->locallColorMask, parent->locallColorMaskinv, parent->locallExpMask, parent->locallExpMaskinv, parent->locallSHMask, parent->locallSHMaskinv, parent->locallvibMask, parent->localllcMask, parent->locallsharMask, parent->locallcbMask, parent->locallretiMask, parent->locallsoftMask, parent->localltmMask, parent->locallblMask,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
if (parent->locallListener) { if (parent->locallListener) {
parent->locallListener->minmaxChanged(maxCD, minCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); parent->locallListener->minmaxChanged(maxCD, minCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
@ -1168,7 +1168,7 @@ void Crop::update(int todo)
loccomprewavCurve, loccomprewavutili, loccomprewavCurve, loccomprewavutili,
locwavCurveden, locwavdenutili, locwavCurveden, locwavdenutili,
LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, LHutili, HHutili, cclocalcurve2, localcutili, rgblocalcurve2, localrgbutili, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2,
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
} }

View File

@ -262,6 +262,7 @@ ImProcCoordinator::ImProcCoordinator() :
locallcbMask(0), locallcbMask(0),
locallretiMask(0), locallretiMask(0),
locallsoftMask(0), locallsoftMask(0),
locallsharMask(0),
retistrsav(nullptr) retistrsav(nullptr)
{ {
@ -1257,7 +1258,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
locwavCurveden, locwavdenutili, locwavCurveden, locwavdenutili,
LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav,
locallColorMask, locallColorMaskinv, locallExpMask, locallExpMaskinv, locallSHMask, locallSHMaskinv, locallvibMask, localllcMask, locallcbMask, locallretiMask, locallsoftMask, localltmMask, locallblMask, locallColorMask, locallColorMaskinv, locallExpMask, locallExpMaskinv, locallSHMask, locallSHMaskinv, locallvibMask, localllcMask, locallsharMask, locallcbMask, locallretiMask, locallsoftMask, localltmMask, locallblMask,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
if (locallListener) { if (locallListener) {
@ -1299,7 +1300,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange)
loccomprewavCurve, loccomprewavutili, loccomprewavCurve, loccomprewavutili,
locwavCurveden, locwavdenutili, locwavCurveden, locwavdenutili,
LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, huerblu, chromarblu, lumarblu, huer, chromar, lumar, sobeler, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
} }

View File

@ -373,6 +373,7 @@ protected:
int locallsoftMask; int locallsoftMask;
int localltmMask; int localltmMask;
int locallblMask; int locallblMask;
int locallsharMask;
public: public:
@ -442,7 +443,7 @@ public:
updaterThreadStart.unlock(); updaterThreadStart.unlock();
} }
void setLocallabMaskVisibility (int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, int locallvibMask, int localllcMask, int locallcbMask, int locallretiMask, int locallsoftMask, int localltmMask, int locallblMask) override void setLocallabMaskVisibility (int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallSHMask, int locallSHMaskinv, int locallvibMask, int localllcMask, int locallsharMask, int locallcbMask, int locallretiMask, int locallsoftMask, int localltmMask, int locallblMask) override
{ {
this->locallColorMask = locallColorMask; this->locallColorMask = locallColorMask;
this->locallColorMaskinv = locallColorMaskinv; this->locallColorMaskinv = locallColorMaskinv;
@ -452,6 +453,7 @@ public:
this->locallvibMask = locallvibMask; this->locallvibMask = locallvibMask;
this->locallSHMaskinv = locallSHMaskinv; this->locallSHMaskinv = locallSHMaskinv;
this->localllcMask = localllcMask; this->localllcMask = localllcMask;
this->locallsharMask = locallsharMask;
this->locallcbMask = locallcbMask; this->locallcbMask = locallcbMask;
this->locallretiMask = locallretiMask; this->locallretiMask = locallretiMask;
this->locallsoftMask = locallsoftMask; this->locallsoftMask = locallsoftMask;

View File

@ -308,7 +308,7 @@ public:
const LocwavCurve & locwavCurveden, bool & locwavdenutili, const LocwavCurve & locwavCurveden, bool & locwavdenutili,
bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localcutili, LUTf & rgblocalcurve, bool & localrgbutili, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc, bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localcutili, LUTf & rgblocalcurve, bool & localrgbutili, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc,
double & huerefblur, double &chromarefblur, double & lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref, int &lastsav, double & huerefblur, double &chromarefblur, double & lumarefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref, int &lastsav,
int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask,
float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax); float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax);
void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk); void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk);
@ -350,7 +350,7 @@ public:
void ColorLight_Local(float moddE, float powdE, int call, LabImage * bufcolorig, LabImage * originalmask, float **buflight, float **bufchro, float **bufchroslid, float ** bufhh, float ** buflightslid, bool &LHutili, bool &HHutili, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, LUTf & lightCurveloc, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk); void ColorLight_Local(float moddE, float powdE, int call, LabImage * bufcolorig, LabImage * originalmask, float **buflight, float **bufchro, float **bufchroslid, float ** bufhh, float ** buflightslid, bool &LHutili, bool &HHutili, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, LUTf & lightCurveloc, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk);
void InverseColorLight_Local(bool tonequ, bool tonecurv, int sp, int senstype, struct local_params& lp, LabImage * originalmask, LUTf & lightCurveloc, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & exlocalcurve, LUTf & cclocalcurve, float adjustr, bool localcutili, LUTf & lllocalcurve, bool locallutili, LabImage* original, LabImage* transformed, int cx, int cy, const float hueref, const float chromaref, const float lumaref, int sk); void InverseColorLight_Local(bool tonequ, bool tonecurv, int sp, int senstype, struct local_params& lp, LabImage * originalmask, LUTf & lightCurveloc, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & exlocalcurve, LUTf & cclocalcurve, float adjustr, bool localcutili, LUTf & lllocalcurve, bool locallutili, LabImage* original, LabImage* transformed, int cx, int cy, const float hueref, const float chromaref, const float lumaref, int sk);
void Sharp_Local(int call, float **loctemp, int senstype, const float hueref, const float chromaref, const float lumaref, const local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk); void Sharp_Local(int call, float **loctemp, int senstype, const float hueref, const float chromaref, const float lumaref, local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk);
// void Sharp_Local(int call, float **loctemp, int senstype, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk); // void Sharp_Local(int call, float **loctemp, int senstype, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk);
void InverseSharp_Local(float **loctemp, const float hueref, const float lumaref, const float chromaref, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk); void InverseSharp_Local(float **loctemp, const float hueref, const float lumaref, const float chromaref, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk);

View File

@ -323,6 +323,7 @@ struct local_params {
int showmaskSHmetinv; int showmaskSHmetinv;
int showmaskvibmet; int showmaskvibmet;
int showmasklcmet; int showmasklcmet;
int showmasksharmet;
int showmaskcbmet; int showmaskcbmet;
int showmaskretimet; int showmaskretimet;
int showmasksoftmet; int showmasksoftmet;
@ -401,6 +402,7 @@ struct local_params {
bool enaSHMaskinv; bool enaSHMaskinv;
bool enavibMask; bool enavibMask;
bool enalcMask; bool enalcMask;
bool enasharMask;
bool enacbMask; bool enacbMask;
bool enaretiMask; bool enaretiMask;
bool enaretiMasktmap; bool enaretiMasktmap;
@ -510,7 +512,7 @@ static void SobelCannyLuma(float **sobelL, float **luma, int bfw, int bfh, float
static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locallab, struct local_params& lp, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, const LocwavCurve & locwavCurveden, bool & locwavdenutili) static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locallab, struct local_params& lp, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, const LocwavCurve & locwavCurveden, bool & locwavdenutili)
{ {
int w = oW; int w = oW;
int h = oH; int h = oH;
@ -524,7 +526,6 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
float strlight = ((float)locallab.spots.at(sp).streng); float strlight = ((float)locallab.spots.at(sp).streng);
float strucc = locallab.spots.at(sp).struc; float strucc = locallab.spots.at(sp).struc;
float laplac = ((float)locallab.spots.at(sp).laplace); float laplac = ((float)locallab.spots.at(sp).laplace);
float thre = locallab.spots.at(sp).thresh; float thre = locallab.spots.at(sp).thresh;
if (thre > 8.f || thre < 0.f) {//to avoid artifacts if user does not clear cache with new settings. Can be suppressed after if (thre > 8.f || thre < 0.f) {//to avoid artifacts if user does not clear cache with new settings. Can be suppressed after
@ -599,23 +600,25 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
lp.showmaskSHmetinv = llSHMaskinv; lp.showmaskSHmetinv = llSHMaskinv;
lp.showmaskvibmet = llvibMask; lp.showmaskvibmet = llvibMask;
lp.showmasklcmet = lllcMask; lp.showmasklcmet = lllcMask;
lp.showmasksharmet = llsharMask;
lp.showmaskcbmet = llcbMask; lp.showmaskcbmet = llcbMask;
lp.showmaskretimet = llretiMask; lp.showmaskretimet = llretiMask;
lp.showmasksoftmet = llsoftMask; lp.showmasksoftmet = llsoftMask;
lp.showmasktmmet = lltmMask; lp.showmasktmmet = lltmMask;
lp.showmaskblmet = llblMask; lp.showmaskblmet = llblMask;
lp.enaColorMask = locallab.spots.at(sp).enaColorMask && llColorMask == 0 && lllcMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible lp.enaColorMask = locallab.spots.at(sp).enaColorMask && llColorMask == 0 && lllcMask == 0 && llsharMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible
lp.enaColorMaskinv = locallab.spots.at(sp).enaColorMask && llColorMaskinv == 0 && lllcMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible lp.enaColorMaskinv = locallab.spots.at(sp).enaColorMask && llColorMaskinv == 0 && lllcMask == 0 && llsharMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible
lp.enaExpMask = locallab.spots.at(sp).enaExpMask && llExpMask == 0 && llColorMask == 0 && lllcMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible lp.enaExpMask = locallab.spots.at(sp).enaExpMask && llExpMask == 0 && llColorMask == 0 && lllcMask == 0 && llsharMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible
lp.enaExpMaskinv = locallab.spots.at(sp).enaExpMask && llExpMaskinv == 0 && llColorMask == 0 && lllcMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible lp.enaExpMaskinv = locallab.spots.at(sp).enaExpMask && llExpMaskinv == 0 && llColorMask == 0 && lllcMask == 0 && llsharMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;// Exposure mask is deactivated if Color & Light mask is visible
lp.enaSHMask = locallab.spots.at(sp).enaSHMask && llSHMask == 0 && llColorMask == 0 && lllcMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; lp.enaSHMask = locallab.spots.at(sp).enaSHMask && llSHMask == 0 && llColorMask == 0 && lllcMask == 0 && llsharMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;
lp.enaSHMaskinv = locallab.spots.at(sp).enaSHMask && llSHMaskinv == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; lp.enaSHMaskinv = locallab.spots.at(sp).enaSHMask && llSHMaskinv == 0 && lllcMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;
lp.enacbMask = locallab.spots.at(sp).enacbMask && llcbMask == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; lp.enacbMask = locallab.spots.at(sp).enacbMask && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;
lp.enaretiMask = locallab.spots.at(sp).enaretiMask && lllcMask == 0 && llretiMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; lp.enaretiMask = locallab.spots.at(sp).enaretiMask && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;
lp.enatmMask = locallab.spots.at(sp).enatmMask && lltmMask == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && llblMask == 0 && llvibMask == 0; lp.enatmMask = locallab.spots.at(sp).enatmMask && lltmMask == 0 && lllcMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && llblMask == 0 && llvibMask == 0;
lp.enablMask = locallab.spots.at(sp).enablMask && llblMask == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; lp.enablMask = locallab.spots.at(sp).enablMask && llblMask == 0 && lllcMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0;
lp.enavibMask = locallab.spots.at(sp).enavibMask && llvibMask == 0 && lllcMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llSHMask == 0; lp.enavibMask = locallab.spots.at(sp).enavibMask && llvibMask == 0 && lllcMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llSHMask == 0;
lp.enalcMask = locallab.spots.at(sp).enalcMask && lllcMask == 0 && llcbMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0; lp.enalcMask = locallab.spots.at(sp).enalcMask && lllcMask == 0 && llcbMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;
lp.enasharMask = lllcMask == 0 && llcbMask == 0 && llsharMask == 0 && llColorMask == 0 && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lltmMask == 0 && llblMask == 0 && llvibMask == 0;
// printf("llColorMask=%i lllcMask=%i llExpMask=%i llSHMask=%i llcbMask=%i llretiMask=%i lltmMask=%i llblMask=%i llvibMask=%i\n", llColorMask, lllcMask, llExpMask, llSHMask, llcbMask, llretiMask, lltmMask, llblMask, llvibMask); // printf("llColorMask=%i lllcMask=%i llExpMask=%i llSHMask=%i llcbMask=%i llretiMask=%i lltmMask=%i llblMask=%i llvibMask=%i\n", llColorMask, lllcMask, llExpMask, llSHMask, llcbMask, llretiMask, lltmMask, llblMask, llvibMask);
if (locallab.spots.at(sp).softMethod == "soft") { if (locallab.spots.at(sp).softMethod == "soft") {
@ -1124,16 +1127,16 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
lp.chromacb = chromcbdl; lp.chromacb = chromcbdl;
lp.sfena = locallab.spots.at(sp).expsoft; lp.sfena = locallab.spots.at(sp).expsoft;
lp.expvib = locallab.spots.at(sp).expvibrance; lp.expvib = locallab.spots.at(sp).expvibrance;
lp.colorena = locallab.spots.at(sp).expcolor && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; // Color & Light tool is deactivated if Exposure mask is visible or SHMask lp.colorena = locallab.spots.at(sp).expcolor && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; // Color & Light tool is deactivated if Exposure mask is visible or SHMask
lp.blurena = locallab.spots.at(sp).expblur && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0; lp.blurena = locallab.spots.at(sp).expblur && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0;
lp.tonemapena = locallab.spots.at(sp).exptonemap && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llColorMask == 0 && llvibMask == 0; lp.tonemapena = locallab.spots.at(sp).exptonemap && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llColorMask == 0 && llvibMask == 0;
lp.retiena = locallab.spots.at(sp).expreti && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0; lp.retiena = locallab.spots.at(sp).expreti && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0;
lp.lcena = locallab.spots.at(sp).expcontrast && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0; lp.lcena = locallab.spots.at(sp).expcontrast && llExpMask == 0 && llSHMask == 0 && llcbMask == 0 && llsharMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0 && llSHMask == 0;
lp.cbdlena = locallab.spots.at(sp).expcbdl && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lllcMask == 0 && lllcMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0; lp.cbdlena = locallab.spots.at(sp).expcbdl && llExpMask == 0 && llSHMask == 0 && llretiMask == 0 && lllcMask == 0 && llsharMask == 0 && lllcMask == 0 && llColorMask == 0 && lltmMask == 0 && llvibMask == 0;
lp.exposena = locallab.spots.at(sp).expexpose && llColorMask == 0 && llSHMask == 0 && lllcMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; // Exposure tool is deactivated if Color & Light mask SHmask is visible lp.exposena = locallab.spots.at(sp).expexpose && llColorMask == 0 && llSHMask == 0 && lllcMask == 0 && llsharMask == 0 && llcbMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0; // Exposure tool is deactivated if Color & Light mask SHmask is visible
lp.hsena = locallab.spots.at(sp).expshadhigh && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0;// Shadow Highlight tool is deactivated if Color & Light mask or SHmask is visible lp.hsena = locallab.spots.at(sp).expshadhigh && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && lltmMask == 0 && llvibMask == 0;// Shadow Highlight tool is deactivated if Color & Light mask or SHmask is visible
lp.vibena = locallab.spots.at(sp).expvibrance && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0;// vibrance tool is deactivated if Color & Light mask or SHmask is visible lp.vibena = locallab.spots.at(sp).expvibrance && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llsharMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0;// vibrance tool is deactivated if Color & Light mask or SHmask is visible
lp.sharpena = locallab.spots.at(sp).expsharp; lp.sharpena = locallab.spots.at(sp).expsharp && llColorMask == 0 && llExpMask == 0 && llcbMask == 0 && lllcMask == 0 && llretiMask == 0 && llcbMask == 0 && lltmMask == 0 && llSHMask == 0;
lp.sensv = local_sensiv; lp.sensv = local_sensiv;
lp.past = chromaPastel; lp.past = chromaPastel;
lp.satur = chromaSatur; lp.satur = chromaSatur;
@ -4407,11 +4410,13 @@ void ImProcFunctions::InverseSharp_Local(float **loctemp, const float hueref, co
} }
void ImProcFunctions::Sharp_Local(int call, float **loctemp, int senstype, const float hueref, const float chromaref, const float lumaref, const local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk) void ImProcFunctions::Sharp_Local(int call, float **loctemp, int senstype, const float hueref, const float chromaref, const float lumaref, local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk)
{ {
BENCHFUN BENCHFUN
const float ach = lp.trans / 100.f; const float ach = lp.trans / 100.f;
const float varsens = senstype == 1 ? lp.senslc : lp.senssha; const float varsens = senstype == 1 ? lp.senslc : lp.senssha;
const bool sharshow = (lp.showmasksharmet == 1);
const bool previewshar = (lp.showmasksharmet == 2);
//balance deltaE //balance deltaE
//balance deltaE //balance deltaE
@ -4425,6 +4430,17 @@ void ImProcFunctions::Sharp_Local(int call, float **loctemp, int senstype, const
kab /= SQR(327.68f); kab /= SQR(327.68f);
kL /= SQR(327.68f); kL /= SQR(327.68f);
if (lp.colorde == 0) {
lp.colorde = -1;//to avoid black
}
float ampli = 1.f + fabs(lp.colorde);
ampli = 2.f + 0.5f * (ampli - 2.f);
float darklim = 5000.f;
float aadark = -1.f;
float bbdark = darklim;
const int GW = transformed->W; const int GW = transformed->W;
const int GH = transformed->H; const int GH = transformed->H;
@ -4491,7 +4507,9 @@ void ImProcFunctions::Sharp_Local(int call, float **loctemp, int senstype, const
float reducdE = 0.f; float reducdE = 0.f;
float reducview = 0.f;
calcreducdE(dE, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, varsens, reducdE); calcreducdE(dE, maxdE, mindE, maxdElim, mindElim, lp.iterat, limscope, varsens, reducdE);
reducview = reducdE;
reducdE *= localFactor; reducdE *= localFactor;
float difL; float difL;
@ -4503,6 +4521,25 @@ void ImProcFunctions::Sharp_Local(int call, float **loctemp, int senstype, const
} }
transformed->L[y][x] = CLIP(original->L[y][x] + difL * reducdE); transformed->L[y][x] = CLIP(original->L[y][x] + difL * reducdE);
if(sharshow) {
transformed->a[y][x] = 0.f;
transformed->b[y][x] = 20.f * difL * reducdE;
} else if(previewshar) {
float difbdisp = reducdE * 10000.f * lp.colorde;
if (transformed->L[y][x] < darklim) { //enhance dark luminance as user can see!
float dark = transformed->L[y][x];
transformed->L[y][x] = dark * aadark + bbdark;
}
if (lp.colorde <= 0) {
transformed->a[y][x] = 0.f;
transformed->b[y][x] = difbdisp;
} else {
transformed->a[y][x] = -difbdisp;
transformed->b[y][x] = 0.f;
}
}
} }
} }
} }
@ -5673,7 +5710,7 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform
if (params->locallab.enabled) { if (params->locallab.enabled) {
//always calculate hueref, chromaref, lumaref before others operations use in normal mode for all modules exceprt denoise //always calculate hueref, chromaref, lumaref before others operations use in normal mode for all modules exceprt denoise
struct local_params lp; struct local_params lp;
calcLocalParams(sp, oW, oH, params->locallab, lp, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, locwavCurveden, locwavdenutili); calcLocalParams(sp, oW, oH, params->locallab, lp, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, locwavCurveden, locwavdenutili);
int begy = lp.yc - lp.lyT; int begy = lp.yc - lp.lyT;
int begx = lp.xc - lp.lxL; int begx = lp.xc - lp.lxL;
int yEn = lp.yc + lp.ly; int yEn = lp.yc + lp.ly;
@ -9499,7 +9536,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
const LocwavCurve & locwavCurveden, bool & locwavdenutili, const LocwavCurve & locwavCurveden, bool & locwavdenutili,
bool & LHutili, bool & HHutili, LUTf & cclocalcurve, bool & localcutili, LUTf & rgblocalcurve, bool & localrgbutili, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc, bool & LHutili, bool & HHutili, LUTf & cclocalcurve, bool & localcutili, LUTf & rgblocalcurve, bool & localrgbutili, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc,
double & huerefblur, double & chromarefblur, double & lumarefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref, int &lastsav, double & huerefblur, double & chromarefblur, double & lumarefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref, int &lastsav,
int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask, int llColorMask, int llColorMaskinv, int llExpMask, int llExpMaskinv, int llSHMask, int llSHMaskinv, int llvibMask, int lllcMask, int llsharMask, int llcbMask, int llretiMask, int llsoftMask, int lltmMask, int llblMask,
float & minCD, float & maxCD, float & mini, float & maxi, float & Tmean, float & Tsigma, float & Tmin, float & Tmax) float & minCD, float & maxCD, float & mini, float & maxi, float & Tmean, float & Tsigma, float & Tmin, float & Tmax)
{ {
//general call of others functions : important return hueref, chromaref, lumaref //general call of others functions : important return hueref, chromaref, lumaref
@ -9514,7 +9551,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o
int del = 3; // to avoid crash with [loy - begy] and [lox - begx] and bfh bfw // with gtk2 [loy - begy-1] [lox - begx -1 ] and del = 1 int del = 3; // to avoid crash with [loy - begy] and [lox - begx] and bfh bfw // with gtk2 [loy - begy-1] [lox - begx -1 ] and del = 1
int delxy = 0; int delxy = 0;
struct local_params lp; struct local_params lp;
calcLocalParams(sp, oW, oH, params->locallab, lp, llColorMask, llColorMaskinv, llExpMask, llExpMaskinv, llSHMask, llSHMaskinv, llvibMask, lllcMask, llcbMask, llretiMask, llsoftMask, lltmMask, llblMask, locwavCurveden, locwavdenutili); calcLocalParams(sp, oW, oH, params->locallab, lp, llColorMask, llColorMaskinv, llExpMask, llExpMaskinv, llSHMask, llSHMaskinv, llvibMask, lllcMask, llsharMask, llcbMask, llretiMask, llsoftMask, lltmMask, llblMask, locwavCurveden, locwavdenutili);
const float radius = lp.rad / (sk * 1.4f); //0 to 70 ==> see skip const float radius = lp.rad / (sk * 1.4f); //0 to 70 ==> see skip
int strred = 1;//(lp.strucc - 1); int strred = 1;//(lp.strucc - 1);

View File

@ -920,6 +920,7 @@ enum ProcEventCode {
Evlocallabstrlog = 891, Evlocallabstrlog = 891,
Evlocallabanglog = 892, Evlocallabanglog = 892,
EvLocallabSpotcolorde = 893, EvLocallabSpotcolorde = 893,
EvlocallabshowmasksharMethod = 894,
NUMOFEVENTS NUMOFEVENTS
}; };

View File

@ -923,7 +923,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, //Evlocallabwavgradl LUMINANCECURVE, //Evlocallabwavgradl
LUMINANCECURVE, //Evlocallabstrlog LUMINANCECURVE, //Evlocallabstrlog
LUMINANCECURVE, //Evlocallabanglog LUMINANCECURVE, //Evlocallabanglog
LUMINANCECURVE //EvLocallabSpotcolorde LUMINANCECURVE, //EvLocallabSpotcolorde
LUMINANCECURVE // EvlocallabshowmasksharMethod
}; };

View File

@ -524,7 +524,7 @@ public:
virtual void updateUnLock() = 0; virtual void updateUnLock() = 0;
virtual void setLocallabMaskVisibility(int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallvibMask, int locallSHMask, int locallSHMaskinv, int localllcMask, int locallcbMask, int locallretiMask, int locallsoftMask, int localltmMask, int locallblMask) = 0; virtual void setLocallabMaskVisibility(int locallColorMask, int locallColorMaskinv, int locallExpMask, int locallExpMaskinv, int locallvibMask, int locallSHMask, int locallSHMaskinv, int localllcMask, int locallsharMask, int locallcbMask, int locallretiMask, int locallsoftMask, int localltmMask, int locallblMask) = 0;
/** Creates and returns a Crop instance that acts as a window on the image /** Creates and returns a Crop instance that acts as a window on the image
* @param editDataProvider pointer to the EditDataProvider that communicates with the EditSubscriber * @param editDataProvider pointer to the EditDataProvider that communicates with the EditSubscriber

View File

@ -1328,7 +1328,7 @@ private:
loccomprewavCurve, loccomprewavutili, loccomprewavCurve, loccomprewavutili,
locwavCurveden, locwavdenutili, locwavCurveden, locwavdenutili,
LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, LHutili, HHutili, cclocalcurve, localcutili, rgblocalcurve, localrgbutili, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc,
huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, lastsav, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax); minCD, maxCD, mini, maxi, Tmean, Tsigma, Tmin, Tmax);
lastorigView->CopyFrom(labView); lastorigView->CopyFrom(labView);

View File

@ -744,6 +744,9 @@ showmasktmMethod(Gtk::manage(new MyComboBoxText())),
// Retinex // Retinex
retinexMethod(Gtk::manage(new MyComboBoxText())), retinexMethod(Gtk::manage(new MyComboBoxText())),
showmaskretiMethod(Gtk::manage(new MyComboBoxText())), showmaskretiMethod(Gtk::manage(new MyComboBoxText())),
//sharp
showmasksharMethod(Gtk::manage(new MyComboBoxText())),
//Local contrast //Local contrast
localcontMethod(Gtk::manage(new MyComboBoxText())), localcontMethod(Gtk::manage(new MyComboBoxText())),
csThreshold(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLD"), 0, 9, 0, 0, 6, 6, 0, false))), csThreshold(Gtk::manage(new ThresholdAdjuster(M("TP_LOCALLAB_CSTHRESHOLD"), 0, 9, 0, 0, 6, 6, 0, false))),
@ -779,6 +782,7 @@ dehaFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_DEHAFRA")))),
retiFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RETIFRA")))), retiFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RETIFRA")))),
retitoolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RETITOOLFRA")))), retitoolFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RETITOOLFRA")))),
residFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RESID")))), residFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_RESID")))),
sharFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SHARFRAME")))),
clariFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CLARIFRA")))), clariFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_CLARIFRA")))),
gradwavFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRADWAVFRA")))), gradwavFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRADWAVFRA")))),
blurlevelFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_BLURLEVELFRA")))), blurlevelFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_BLURLEVELFRA")))),
@ -2802,6 +2806,21 @@ pe(nullptr)
inversshaConn = inverssha->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversshaChanged)); inversshaConn = inverssha->signal_toggled().connect(sigc::mem_fun(*this, &Locallab::inversshaChanged));
showmasksharMethod->append(M("TP_LOCALLAB_SHOWMNONE"));
showmasksharMethod->append(M("TP_LOCALLAB_SHOWMODIF"));
showmasksharMethod->append(M("TP_LOCALLAB_PREVIEWSEL"));
showmasksharMethod->set_active(0);
if (showtooltip) {
showmasksharMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP"));
}
showmasksharMethodConn = showmasksharMethod->signal_changed().connect(sigc::mem_fun(*this, &Locallab::showmasksharMethodChanged));
sharFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const sharfBox = Gtk::manage(new ToolParamBlock());
sharfBox->pack_start(*showmasksharMethod);
sharFrame->add(*sharfBox);
ToolParamBlock* const sharpBox = Gtk::manage(new ToolParamBlock()); ToolParamBlock* const sharpBox = Gtk::manage(new ToolParamBlock());
sharpBox->pack_start(*sharcontrast); sharpBox->pack_start(*sharcontrast);
sharpBox->pack_start(*sharradius); sharpBox->pack_start(*sharradius);
@ -2821,6 +2840,7 @@ pe(nullptr)
sharpBox->pack_start(*sensisha); sharpBox->pack_start(*sensisha);
sharpBox->pack_start(*inverssha); sharpBox->pack_start(*inverssha);
sharpBox->pack_start(*sharFrame);
expsharp->add(*sharpBox, false); expsharp->add(*sharpBox, false);
expsharp->setLevel(2); expsharp->setLevel(2);
@ -7164,6 +7184,7 @@ void Locallab::showmaskcolMethodChanged()
showmaskblMethod->set_active(0); showmaskblMethod->set_active(0);
showmasklcMethod->set_active(0); showmasklcMethod->set_active(0);
showmaskcbMethod->set_active(0); showmaskcbMethod->set_active(0);
showmasksharMethod->set_active(0);
enableListener(); enableListener();
@ -7190,6 +7211,7 @@ void Locallab::showmaskcolMethodChangedinv()
showmasksoftMethod->set_active(0); showmasksoftMethod->set_active(0);
showmasktmMethod->set_active(0); showmasktmMethod->set_active(0);
showmaskblMethod->set_active(0); showmaskblMethod->set_active(0);
showmasksharMethod->set_active(0);
enableListener(); enableListener();
if (listener) { if (listener) {
@ -7215,6 +7237,7 @@ void Locallab::showmaskexpMethodChangedinv()
showmasksoftMethod->set_active(0); showmasksoftMethod->set_active(0);
showmasktmMethod->set_active(0); showmasktmMethod->set_active(0);
showmaskblMethod->set_active(0); showmaskblMethod->set_active(0);
showmasksharMethod->set_active(0);
enableListener(); enableListener();
if (listener) { if (listener) {
@ -7222,6 +7245,32 @@ void Locallab::showmaskexpMethodChangedinv()
} }
} }
void Locallab::showmasksharMethodChanged()
{
// printf("showmasksharMethodChanged\n");
// When one mask state is changed, other masks are deactivated
disableListener();
showmaskcolMethodinv->set_active(0);
showmaskcolMethod->set_active(0);
showmaskexpMethod->set_active(0);
showmaskSHMethod->set_active(0);
showmaskSHMethodinv->set_active(0);
showmasklcMethod->set_active(0);
showmaskcbMethod->set_active(0);
showmaskvibMethod->set_active(0);
showmaskretiMethod->set_active(0);
showmasksoftMethod->set_active(0);
showmasktmMethod->set_active(0);
showmaskblMethod->set_active(0);
showmaskexpMethodinv->set_active(0);
enableListener();
if (listener) {
listener->panelChanged(EvlocallabshowmasksharMethod, "");
}
}
void Locallab::showmaskexpMethodChanged() void Locallab::showmaskexpMethodChanged()
{ {
// printf("showmaskexpMethodChanged\n"); // printf("showmaskexpMethodChanged\n");
@ -7240,6 +7289,7 @@ void Locallab::showmaskexpMethodChanged()
showmasksoftMethod->set_active(0); showmasksoftMethod->set_active(0);
showmasktmMethod->set_active(0); showmasktmMethod->set_active(0);
showmaskblMethod->set_active(0); showmaskblMethod->set_active(0);
showmasksharMethod->set_active(0);
enableListener(); enableListener();
if (listener) { if (listener) {
@ -7360,6 +7410,7 @@ void Locallab::showmaskSHMethodChanged()
showmasksoftMethod->set_active(0); showmasksoftMethod->set_active(0);
showmasktmMethod->set_active(0); showmasktmMethod->set_active(0);
showmaskblMethod->set_active(0); showmaskblMethod->set_active(0);
showmasksharMethod->set_active(0);
enableListener(); enableListener();
if (listener) { if (listener) {
@ -7385,6 +7436,7 @@ void Locallab::showmaskvibMethodChanged()
showmasksoftMethod->set_active(0); showmasksoftMethod->set_active(0);
showmasktmMethod->set_active(0); showmasktmMethod->set_active(0);
showmaskblMethod->set_active(0); showmaskblMethod->set_active(0);
showmasksharMethod->set_active(0);
enableListener(); enableListener();
if (listener) { if (listener) {
@ -7410,6 +7462,7 @@ void Locallab::showmaskSHMethodChangedinv()
showmasksoftMethod->set_active(0); showmasksoftMethod->set_active(0);
showmasktmMethod->set_active(0); showmasktmMethod->set_active(0);
showmaskblMethod->set_active(0); showmaskblMethod->set_active(0);
showmasksharMethod->set_active(0);
enableListener(); enableListener();
if (listener) { if (listener) {
@ -7435,6 +7488,7 @@ void Locallab::showmasklcMethodChanged()
showmasktmMethod->set_active(0); showmasktmMethod->set_active(0);
showmaskblMethod->set_active(0); showmaskblMethod->set_active(0);
showmaskcbMethod->set_active(0); showmaskcbMethod->set_active(0);
showmasksharMethod->set_active(0);
enableListener(); enableListener();
if (listener) { if (listener) {
@ -7461,6 +7515,7 @@ void Locallab::showmaskcbMethodChanged()
showmasktmMethod->set_active(0); showmasktmMethod->set_active(0);
showmasklcMethod->set_active(0); showmasklcMethod->set_active(0);
showmaskblMethod->set_active(0); showmaskblMethod->set_active(0);
showmasksharMethod->set_active(0);
enableListener(); enableListener();
if (listener) { if (listener) {
@ -7486,6 +7541,7 @@ void Locallab::showmaskblMethodChanged()
showmaskretiMethod->set_active(0); showmaskretiMethod->set_active(0);
showmasksoftMethod->set_active(0); showmasksoftMethod->set_active(0);
showmasktmMethod->set_active(0); showmasktmMethod->set_active(0);
showmasksharMethod->set_active(0);
enableListener(); enableListener();
if (listener) { if (listener) {
@ -7513,6 +7569,7 @@ void Locallab::showmasktmMethodChanged()
showmaskretiMethod->set_active(0); showmaskretiMethod->set_active(0);
showmasksoftMethod->set_active(0); showmasksoftMethod->set_active(0);
showmaskblMethod->set_active(0); showmaskblMethod->set_active(0);
showmasksharMethod->set_active(0);
enableListener(); enableListener();
if (listener) { if (listener) {
@ -7539,6 +7596,7 @@ void Locallab::showmaskretiMethodChanged()
showmasksoftMethod->set_active(0); showmasksoftMethod->set_active(0);
showmasktmMethod->set_active(0); showmasktmMethod->set_active(0);
showmaskblMethod->set_active(0); showmaskblMethod->set_active(0);
showmasksharMethod->set_active(0);
enableListener(); enableListener();
if (listener) { if (listener) {
@ -7564,6 +7622,7 @@ void Locallab::showmasksoftMethodChanged()
showmaskretiMethod->set_active(0); showmaskretiMethod->set_active(0);
showmasktmMethod->set_active(0); showmasktmMethod->set_active(0);
showmaskblMethod->set_active(0); showmaskblMethod->set_active(0);
showmasksharMethod->set_active(0);
enableListener(); enableListener();
if (listener) { if (listener) {
@ -7589,6 +7648,7 @@ void Locallab::resetMaskVisibility()
showmasksoftMethod->set_active(0); showmasksoftMethod->set_active(0);
showmasktmMethod->set_active(0); showmasktmMethod->set_active(0);
showmaskblMethod->set_active(0); showmaskblMethod->set_active(0);
showmasksharMethod->set_active(0);
enableListener(); enableListener();
} }
@ -7608,6 +7668,7 @@ Locallab::llMaskVisibility* Locallab::getMaskVisibility()
maskStruct->softMask = showmasksoftMethod->get_active_row_number(); maskStruct->softMask = showmasksoftMethod->get_active_row_number();
maskStruct->tmMask = showmasktmMethod->get_active_row_number(); maskStruct->tmMask = showmasktmMethod->get_active_row_number();
maskStruct->blMask = showmaskblMethod->get_active_row_number(); maskStruct->blMask = showmaskblMethod->get_active_row_number();
maskStruct->sharMask = showmasksharMethod->get_active_row_number();
return maskStruct; return maskStruct;
} }
@ -11415,6 +11476,7 @@ void Locallab::setBatchMode(bool batchMode)
showmaskretiMethod->hide(); showmaskretiMethod->hide();
showmasktmMethod->hide(); showmasktmMethod->hide();
showmaskblMethod->hide(); showmaskblMethod->hide();
showmasksharMethod->hide();
} }
std::vector<double> Locallab::getCurvePoints(ThresholdSelector* tAdjuster) const std::vector<double> Locallab::getCurvePoints(ThresholdSelector* tAdjuster) const
@ -11640,6 +11702,8 @@ void Locallab::enableListener()
enablecbdlConn.block(false); enablecbdlConn.block(false);
enacbMaskConn.block(false); enacbMaskConn.block(false);
showmaskcbMethodConn.block(false); showmaskcbMethodConn.block(false);
//sharp
showmasksharMethodConn.block(false);
// Denoise // Denoise
enabledenoiConn.block(false); enabledenoiConn.block(false);
//encoding log //encoding log
@ -11743,6 +11807,8 @@ void Locallab::disableListener()
enablecbdlConn.block(true); enablecbdlConn.block(true);
enacbMaskConn.block(true); enacbMaskConn.block(true);
showmaskcbMethodConn.block(true); showmaskcbMethodConn.block(true);
//sharp
showmasksharMethodConn.block(true);
// Denoise // Denoise
enabledenoiConn.block(true); enabledenoiConn.block(true);
//encoding log //encoding log

View File

@ -581,6 +581,10 @@ private:
sigc::connection retinexMethodConn; sigc::connection retinexMethodConn;
MyComboBoxText* const showmaskretiMethod; MyComboBoxText* const showmaskretiMethod;
sigc::connection showmaskretiMethodConn; sigc::connection showmaskretiMethodConn;
//Sharpening
MyComboBoxText* const showmasksharMethod;
sigc::connection showmasksharMethodConn;
//local contrast //local contrast
MyComboBoxText* const localcontMethod; MyComboBoxText* const localcontMethod;
sigc::connection localcontMethodConn; sigc::connection localcontMethodConn;
@ -621,6 +625,7 @@ private:
Gtk::Frame* const retiFrame; Gtk::Frame* const retiFrame;
Gtk::Frame* const retitoolFrame; Gtk::Frame* const retitoolFrame;
Gtk::Frame* const residFrame; Gtk::Frame* const residFrame;
Gtk::Frame* const sharFrame;
Gtk::Frame* const clariFrame; Gtk::Frame* const clariFrame;
Gtk::Frame* const gradwavFrame; Gtk::Frame* const gradwavFrame;
Gtk::Frame* const blurlevelFrame; Gtk::Frame* const blurlevelFrame;
@ -759,6 +764,9 @@ private:
// Retinex // Retinex
void retinexMethodChanged(); void retinexMethodChanged();
void showmaskretiMethodChanged(); void showmaskretiMethodChanged();
//sharp
void showmasksharMethodChanged();
//Local contrast //Local contrast
void localcontMethodChanged(); void localcontMethodChanged();
void showmasklcMethodChanged(); void showmasklcMethodChanged();
@ -817,6 +825,7 @@ public:
int softMask; int softMask;
int tmMask; int tmMask;
int blMask; int blMask;
int sharMask;
}; };
void resetMaskVisibility(); void resetMaskVisibility();

View File

@ -509,9 +509,9 @@ void ToolPanelCoordinator::panelChanged(const rtengine::ProcEvent& event, const
// Manage Locallab mask visibility // Manage Locallab mask visibility
if (event == rtengine::EvlocallabshowmaskcolMethod || event == rtengine::EvlocallabshowmaskcolMethodinv ||event == rtengine::EvlocallabshowmaskexpMethod ||event == rtengine::EvlocallabshowmaskexpMethodinv if (event == rtengine::EvlocallabshowmaskcolMethod || event == rtengine::EvlocallabshowmaskcolMethodinv ||event == rtengine::EvlocallabshowmaskexpMethod ||event == rtengine::EvlocallabshowmaskexpMethodinv
|| event == rtengine::EvlocallabshowmaskSHMethod || event == rtengine::EvlocallabshowmaskSHMethodinv || event == rtengine::EvlocallabshowmaskvibMethod || event == rtengine::EvlocallabshowmasksoftMethod || event == rtengine::EvlocallabshowmaskSHMethod || event == rtengine::EvlocallabshowmaskSHMethodinv || event == rtengine::EvlocallabshowmaskvibMethod || event == rtengine::EvlocallabshowmasksoftMethod
|| event == rtengine::EvlocallabshowmaskcbMethod || event == rtengine::EvlocallabshowmasklcMethod || event == rtengine::EvlocallabshowmaskretiMethod || event == rtengine::EvlocallabshowmasktmMethod || event == rtengine::EvlocallabshowmaskblMethod) { || event == rtengine::EvlocallabshowmaskcbMethod || event == rtengine::EvlocallabshowmasklcMethod || event == rtengine::EvlocallabshowmasksharMethod || event == rtengine::EvlocallabshowmaskretiMethod || event == rtengine::EvlocallabshowmasktmMethod || event == rtengine::EvlocallabshowmaskblMethod) {
Locallab::llMaskVisibility* maskStruc = locallab->getMaskVisibility(); Locallab::llMaskVisibility* maskStruc = locallab->getMaskVisibility();
ipc->setLocallabMaskVisibility(maskStruc->colorMask, maskStruc->colorMaskinv, maskStruc->expMask, maskStruc->expMaskinv, maskStruc->SHMask, maskStruc->SHMaskinv, maskStruc->vibMask, maskStruc->lcMask, maskStruc->cbMask, maskStruc->retiMask, maskStruc->softMask, maskStruc->tmMask, maskStruc->blMask); ipc->setLocallabMaskVisibility(maskStruc->colorMask, maskStruc->colorMaskinv, maskStruc->expMask, maskStruc->expMaskinv, maskStruc->SHMask, maskStruc->SHMaskinv, maskStruc->vibMask, maskStruc->lcMask, maskStruc->sharMask, maskStruc->cbMask, maskStruc->retiMask, maskStruc->softMask, maskStruc->tmMask, maskStruc->blMask);
} }
ipc->endUpdateParams(changeFlags); // starts the IPC processing ipc->endUpdateParams(changeFlags); // starts the IPC processing
@ -619,7 +619,7 @@ void ToolPanelCoordinator::profileChange(
// Reset Locallab mask visibility when a picture is loaded // Reset Locallab mask visibility when a picture is loaded
if (event == rtengine::EvPhotoLoaded) { if (event == rtengine::EvPhotoLoaded) {
locallab->resetMaskVisibility(); locallab->resetMaskVisibility();
ipc->setLocallabMaskVisibility(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); ipc->setLocallabMaskVisibility(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
} }
// start the IPC processing // start the IPC processing