Improvments to LA Sigmoid - LA Log encoding Cam16 and ICC profile creator (#6410)

* Improvment to sigmoid Cam16 and Jz
* Change default parameters contrast sigmoid
* Log encoding Q added to Sigmoid Q - Cam16
* Change DR evaluation for sigmoid
* Change default log encoding cam16 and change tool position options
* DCI-P3 added to Iccprofilecreator
This commit is contained in:
Desmis 2022-03-26 12:04:21 +01:00 committed by GitHub
parent 784625b5cc
commit c45a6105f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 299 additions and 44 deletions

View File

@ -1331,7 +1331,7 @@ HISTORY_MSG_1078;Local - Red and skin protection
HISTORY_MSG_1079;Local - CIECAM Sigmoid strength J
HISTORY_MSG_1080;Local - CIECAM Sigmoid threshold
HISTORY_MSG_1081;Local - CIECAM Sigmoid blend
HISTORY_MSG_1082;Local - CIECAM Sigmoid Q J
HISTORY_MSG_1082;Local - CIECAM Sigmoid Q BlackEv WhiteEv
HISTORY_MSG_1083;Local - CIECAM Hue
HISTORY_MSG_1084;Local - Uses Black Ev - White Ev
HISTORY_MSG_1085;Local - Jz lightness
@ -1409,6 +1409,8 @@ HISTORY_MSG_1145;Local - Jz Log encoding
HISTORY_MSG_1146;Local - Jz Log encoding target gray
HISTORY_MSG_1147;Local - Jz BlackEv WhiteEv
HISTORY_MSG_1148;Local - Jz Sigmoid
HISTORY_MSG_1149;Local - Q Sigmoid
HISTORY_MSG_1150;Local - Log encoding Q instead Sigmoid Q
HISTORY_MSG_BLSHAPE;Blur by level
HISTORY_MSG_BLURCWAV;Blur chroma
HISTORY_MSG_BLURWAV;Blur luminance
@ -1575,6 +1577,7 @@ ICCPROFCREATOR_ILL_41;D41
ICCPROFCREATOR_ILL_50;D50
ICCPROFCREATOR_ILL_55;D55
ICCPROFCREATOR_ILL_60;D60
ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Theater
ICCPROFCREATOR_ILL_65;D65
ICCPROFCREATOR_ILL_80;D80
ICCPROFCREATOR_ILL_DEF;Default
@ -1589,6 +1592,7 @@ ICCPROFCREATOR_PRIM_BETA;BetaRGB
ICCPROFCREATOR_PRIM_BLUX;Blue X
ICCPROFCREATOR_PRIM_BLUY;Blue Y
ICCPROFCREATOR_PRIM_BRUCE;BruceRGB
ICCPROFCREATOR_PRIM_DCIP3;DCI-P3
ICCPROFCREATOR_PRIM_GREX;Green X
ICCPROFCREATOR_PRIM_GREY;Green Y
ICCPROFCREATOR_PRIM_PROPH;Prophoto
@ -3010,6 +3014,7 @@ TP_LOCALLAB_JZHFRA;Curves Hz
TP_LOCALLAB_JZHJZFRA;Curve Jz(Hz)
TP_LOCALLAB_JZHUECIE;Hue Rotation
TP_LOCALLAB_JZLOGWB_TOOLTIP;If Auto is enabled, it will calculate and adjust the Ev levels and the 'Mean luminance Yb%' for the spot area. The resulting values will be used by all Jz operations including "Log Encoding Jz".\nAlso calculates the absolute luminance at the time of shooting.
TP_LOCALLAB_JZLOGWBS_TOOLTIP;Black Ev and White Ev adjustments can be different depending on whether Log encoding or Sigmoid is used.\nFor Sigmoid, a change (increase in most cases) of White Ev may be necessary to obtain a better rendering of highlights, contrast and saturation.
TP_LOCALLAB_JZSAT;Saturation
TP_LOCALLAB_JZSHFRA;Shadows/Highlights Jz
TP_LOCALLAB_JZSOFTCIE;Soft radius (GuidedFilter)
@ -3065,6 +3070,8 @@ TP_LOCALLAB_LOGBASE_TOOLTIP;Default = 2.\nValues less than 2 reduce the action o
TP_LOCALLAB_LOGBLACKWHEV_TOOLTIP;Estimated values of dynamic range i.e. Black Ev and White Ev
TP_LOCALLAB_LOGCATAD_TOOLTIP;Chromatic adaptation allows us to interpret a color according to its spatio-temporal environment.\nUseful when the white balance deviates significantly from the D50 reference.\nAdapts colors to the illuminant of the output device.
TP_LOCALLAB_LOGCOLORFL;Colorfulness (M)
TP_LOCALLAB_LOGCIE;Log encoding instead of Sigmoid
TP_LOCALLAB_LOGCIE_TOOLTIP;Allows you tu use Black Ev, White Ev, Scene Mean luminance(Yb%) and Viewing Mean luminance(Yb%) for tone-mapping using Log encoding Q.
TP_LOCALLAB_LOGCOLORF_TOOLTIP;Perceived amount of hue in relation to gray.\nIndicator that a stimulus appears more or less colored.
TP_LOCALLAB_LOGCONQL;Contrast (Q)
TP_LOCALLAB_LOGCONTL;Contrast (J)
@ -3373,13 +3380,13 @@ TP_LOCALLAB_SHRESFRA;Shadows/Highlights & TRC
TP_LOCALLAB_SHTRC_TOOLTIP;Based on 'working profile' (only those provided), modifies the tones of the image by acting on a TRC (Tone Response Curve).\nGamma acts mainly on light tones.\nSlope acts mainly on dark tones.\nIt is recommended that the TRC of both devices (monitor and output profile) be sRGB (default).
TP_LOCALLAB_SH_TOOLNAME;Shadows/Highlights & Tone Equalizer
TP_LOCALLAB_SIGMAWAV;Attenuation response
TP_LOCALLAB_SIGFRA;Sigmoid J & Q
TP_LOCALLAB_SIGFRA;Sigmoid Q & Log encoding Q
TP_LOCALLAB_SIGJZFRA;Sigmoid Jz
TP_LOCALLAB_SIGMOIDLAMBDA;Contrast
TP_LOCALLAB_SIGMOIDTH;Threshold (Gray point)
TP_LOCALLAB_SIGMOIDBL;Blend
TP_LOCALLAB_SIGMOIDQJ;Use Q instead of J
TP_LOCALLAB_SIGMOID_TOOLTIP;Allows you to simulate a Tone-mapping appearance using both the'Ciecam' and 'Sigmoid' function.\nThree sliders: a) Strength acts on the shape of the sigmoid curve and consequently on the strength; b) Threshold distributes the action according to the luminance; c)Blend acts on the final aspect of the image, contrast and luminance.
TP_LOCALLAB_SIGMOIDQJ;Uses Black Ev & White Ev
TP_LOCALLAB_SIGMOID_TOOLTIP;Allows you to simulate a Tone-mapping appearance using both the'Ciecam' (or 'Jz') and 'Sigmoid' function.\nThree sliders: a) Contrast acts on the shape of the sigmoid curve and consequently on the strength; b) Threshold (Gray point) distributes the action according to the luminance; c)Blend acts on the final aspect of the image, contrast and luminance.
TP_LOCALLAB_SIM;Simple
TP_LOCALLAB_SLOMASKCOL;Slope
TP_LOCALLAB_SLOMASK_TOOLTIP;Adjusting Gamma and Slope can provide a soft and artifact-free transformation of the mask by progressively modifying L to avoid any discontinuities.

View File

@ -2582,6 +2582,8 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L
bool jabcie = false;//always disabled
bool islogjz = params->locallab.spots.at(sp).forcebw;
bool issigjz = params->locallab.spots.at(sp).sigjz;
bool issigq = params->locallab.spots.at(sp).sigq;
bool islogq = params->locallab.spots.at(sp).logcie;
//sigmoid J Q variables
const float sigmoidlambda = params->locallab.spots.at(sp).sigmoidldacie;
@ -2630,8 +2632,8 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L
const float ath = sigmoidth - 1.f;
const float bth = 1;
float sila = pow_F(sigmoidlambda, 0.25f);
const float sigm = 1.4f + 25.f *(1.f - sila);//with sigmoidlambda = 0 e^16 = 9000000 e^20=485000000 e^23.5 = 16000000000 e^26.4 = 291000000000
float sila = pow_F(sigmoidlambda, 0.5f);
const float sigm = 3.3f + 7.1f *(1.f - sila);//e^10.4 = 32860 => sigm vary from 3.3 to 10.4
const float bl = sigmoidbl;
//end sigmoid
@ -3049,6 +3051,13 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L
const float pow1n = pow_F(1.64f - pow_F(0.29f, nj), 0.73f);
const float coe = pow_F(fl, 0.25f);
const float QproFactor = (0.4f / c) * (aw + 4.0f) ;
const double shadows_range = params->locallab.spots.at(sp).blackEvjz;
const double targetgray = params->locallab.spots.at(sp).targetjz;
double targetgraycor = 0.15;
double dynamic_range = std::max(params->locallab.spots.at(sp).whiteEvjz - shadows_range, 0.5);
const double noise = pow(2., -16.6);//16.6 instead of 16 a little less than others, but we work in double
const double log2 = xlog(2.);
const float log2f = xlogf(2.f);
if((mocam == 0 || mocam ==2) && call == 0) {//Jz az bz ==> Jz Cz Hz before Ciecam16
double mini = 1000.;
@ -3169,9 +3178,9 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L
const float btjz = sigmoidthjz;
const float athjz = sigmoidthjz - 1.f;
const float bthjz = 1;
float powsig = pow_F(sigmoidlambdajz, 0.25f);
const float sigmjz = 1.4f + 25.f *(1.f - powsig);// e^26.4 = 291000000000
const float bthjz = 1.f;
float powsig = pow_F(sigmoidlambdajz, 0.5f);
const float sigmjz = 3.3f + 7.1f *(1.f - powsig);// e^10.4 = 32860
const float bljz = sigmoidbljz;
double contreal = 0.2 * params->locallab.spots.at(sp).contjzcie;
@ -3217,12 +3226,14 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L
//log encoding Jz
double gray = 0.15;
/*
const double shadows_range = params->locallab.spots.at(sp).blackEvjz;
const double targetgray = params->locallab.spots.at(sp).targetjz;
double targetgraycor = 0.15;
double dynamic_range = std::max(params->locallab.spots.at(sp).whiteEvjz - shadows_range, 0.5);
const double noise = pow(2., -16.6);//16.6 instead of 16 a little less than others, but we work in double
const double log2 = xlog(2.);
*/
double base = 10.;
double linbase = 10.;
if(logjz) {//with brightness Jz
@ -3539,7 +3550,7 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L
if(issigjz && iscie) {//sigmoid Jz
float val = Jz;
if(islogjz) {
val = std::max((xlog(Jz) / log2 - shadows_range) / dynamic_range, noise);//in range EV
val = std::max((xlog(Jz) / log2 - shadows_range) / (dynamic_range + 1.5), noise);//in range EV
}
if(sigmoidthjz >= 1.f) {
thjz = athjz * val + bthjz;//threshold
@ -3686,6 +3697,8 @@ if(mocam == 0 || mocam == 1 || call == 1 || call == 2 || call == 10) {//call=2
plum = 100.f;
}
#ifdef _OPENMP
#pragma omp parallel for reduction(min:minicam) reduction(max:maxicam) reduction(min:minicamq) reduction(max:maxicamq) reduction(min:minisat) reduction(max:maxisat) reduction(min:miniM) reduction(max:maxiM) reduction(+:sumcam) reduction(+:sumcamq) reduction(+:sumsat) reduction(+:sumM)if(multiThread)
#endif
@ -3750,6 +3763,36 @@ if(mocam == 0 || mocam == 1 || call == 1 || call == 2 || call == 10) {//call=2
printf("Cam16 Scene Saturati-s Colorfulln_M- minSat=%3.1f maxSat=%3.1f meanSat=%3.1f minM=%3.1f maxM=%3.1f meanM=%3.1f\n", (double) minisat, (double) maxisat, (double) sumsat, (double) miniM, (double) maxiM, (double) sumM);
}
float base = 10.;
float linbase = 10.;
float gray = 15.;
if(islogq) {//with brightness Jz
gray = 0.01f * (float) params->locallab.spots.at(sp).sourceGraycie;
gray = pow_F(gray, 1.2f);//or 1.15 => modification to increase sensitivity gain, only on defaults, of course we can change this value manually...take into account suuround and Yb Cam16
const float targetgraycie = params->locallab.spots.at(sp).targetGraycie;
float targetgraycor = pow_F(0.01f * targetgraycie, 1.15f);
base = targetgraycie > 1.f && targetgraycie < 100.f && (float) dynamic_range > 0.f ? find_gray(std::abs((float) shadows_range) / (float) dynamic_range,(targetgraycor)) : 0.f;
linbase = std::max(base, 2.f);//2. minimal base log to avoid very bad results
if (settings->verbose) {
printf("Base logarithm encoding Q=%5.1f\n", (double) linbase);
}
}
const auto applytoq =
[ = ](float x) -> float {
x = rtengine::max(x, (float) noise);
x = rtengine::max(x / gray, (float) noise);//gray = gain - before log conversion
x = rtengine::max((xlogf(x) / log2f - (float) shadows_range) / (float) dynamic_range, (float) noise);//x in range EV
assert(x == x);
if (linbase > 0.f)//apply log base in function of targetgray blackEvjz and Dynamic Range
{
x = xlog2lin(x, linbase);
}
return x;
};
//Ciecam "old" code not change except sigmoid added
@ -3878,8 +3921,21 @@ if(mocam == 0 || mocam == 1 || call == 1 || call == 2 || call == 10) {//call=2
Qpro = CAMBrightCurveQ[(float)(Qpro * coefQ)] / coefQ; //brightness and contrast
if(sigmoidlambda > 0.f && iscie && sigmoidqj == true) {//sigmoid Q only with ciecam module
if(islogq && issigq) {
float val = Qpro * coefq;;
if (val > (float) noise) {
float mm = applytoq(val);
float f = mm / val;
Qpro *= f;
}
}
if(issigq && iscie && !islogq) {//sigmoid Q only with ciecam module
float val = Qpro * coefq;
if(sigmoidqj == true) {
val = std::max((xlog(val) / log2 - shadows_range) / (dynamic_range + 1.5), noise);//in range EV
}
if(sigmoidth >= 1.f) {
th = ath * val + bth;
} else {
@ -3890,6 +3946,7 @@ if(mocam == 0 || mocam == 1 || call == 1 || call == 2 || call == 10) {//call=2
Qpro = std::max(bl * Qpro + bl2 * val / coefq, 0.f);
}
float Mp, sres;
Mp = Mpro / 100.0f;
Ciecam02::curvecolorfloat(mchr, Mp, sres, 2.5f);
@ -3907,21 +3964,6 @@ if(mocam == 0 || mocam == 1 || call == 1 || call == 2 || call == 10) {//call=2
}
Jpro = CAMBrightCurveJ[(float)(Jpro * 327.68f)]; //lightness CIECAM02 + contrast
if(sigmoidlambda > 0.f && iscie && sigmoidqj == false) {//sigmoid J only with ciecam module
float val = Jpro / 100.f;
if(sigmoidth >= 1.f) {
th = ath * val + bth;
} else {
th = at * val + bt;
}
sigmoidla (val, th, sigm);
Jpro = 100.f * LIM01(bl * 0.01f * Jpro + val);
if (Jpro > 99.9f) {
Jpro = 99.9f;
}
}
float Sp = spro / 100.0f;
Ciecam02::curvecolorfloat(schr, Sp, sres, 1.5f);
dred = 100.f; // in C mode

View File

@ -1180,6 +1180,8 @@ enum ProcEventCode {
Evlocallabtargetjz = 1145,
Evlocallabforcebw = 1146,
Evlocallabsigjz = 1147,
Evlocallabsigq = 1148,
Evlocallablogcie = 1149,
NUMOFEVENTS
};

View File

@ -4283,8 +4283,10 @@ LocallabParams::LocallabSpot::LocallabSpot() :
qtoj(false),
jabcie(true),
sigmoidqjcie(false),
logcie(false),
logjz(false),
sigjz(false),
sigq(false),
chjzcie(true),
sourceGraycie(18.),
sourceabscie(2000.),
@ -4453,7 +4455,7 @@ LocallabParams::LocallabSpot::LocallabSpot() :
blackEvjz(-5.0),
whiteEvjz(10.0),
targetjz(18.0),
sigmoidldacie(0.),
sigmoidldacie(0.5),
sigmoidthcie(1.),
sigmoidblcie(1.),
sigmoidldajzcie(0.5),
@ -5159,8 +5161,10 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const
&& qtoj == other.qtoj
&& jabcie == other.jabcie
&& sigmoidqjcie == other.sigmoidqjcie
&& logcie == other.logcie
&& logjz == other.logjz
&& sigjz == other.sigjz
&& sigq == other.sigq
&& chjzcie == other.chjzcie
&& sourceGraycie == other.sourceGraycie
&& sourceabscie == other.sourceabscie
@ -6947,8 +6951,10 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || spot_edited->qtoj, "Locallab", "Qtoj_" + index_str, spot.qtoj, keyFile);
saveToKeyfile(!pedited || spot_edited->jabcie, "Locallab", "jabcie_" + index_str, spot.jabcie, keyFile);
saveToKeyfile(!pedited || spot_edited->sigmoidqjcie, "Locallab", "sigmoidqjcie_" + index_str, spot.sigmoidqjcie, keyFile);
saveToKeyfile(!pedited || spot_edited->logcie, "Locallab", "logcie_" + index_str, spot.logcie, keyFile);
saveToKeyfile(!pedited || spot_edited->logjz, "Locallab", "Logjz_" + index_str, spot.logjz, keyFile);
saveToKeyfile(!pedited || spot_edited->sigjz, "Locallab", "Sigjz_" + index_str, spot.sigjz, keyFile);
saveToKeyfile(!pedited || spot_edited->sigq, "Locallab", "Sigq_" + index_str, spot.sigq, keyFile);
saveToKeyfile(!pedited || spot_edited->chjzcie, "Locallab", "chjzcie_" + index_str, spot.chjzcie, keyFile);
saveToKeyfile(!pedited || spot_edited->sourceGraycie, "Locallab", "SourceGraycie_" + index_str, spot.sourceGraycie, keyFile);
saveToKeyfile(!pedited || spot_edited->sourceabscie, "Locallab", "Sourceabscie_" + index_str, spot.sourceabscie, keyFile);
@ -9113,8 +9119,10 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Locallab", "Qtoj_" + index_str, pedited, spot.qtoj, spotEdited.qtoj);
assignFromKeyfile(keyFile, "Locallab", "jabcie_" + index_str, pedited, spot.jabcie, spotEdited.jabcie);
assignFromKeyfile(keyFile, "Locallab", "sigmoidqjcie_" + index_str, pedited, spot.sigmoidqjcie, spotEdited.sigmoidqjcie);
assignFromKeyfile(keyFile, "Locallab", "logcie_" + index_str, pedited, spot.logcie, spotEdited.logcie);
assignFromKeyfile(keyFile, "Locallab", "Logjz_" + index_str, pedited, spot.logjz, spotEdited.logjz);
assignFromKeyfile(keyFile, "Locallab", "Sigjz_" + index_str, pedited, spot.sigjz, spotEdited.sigjz);
assignFromKeyfile(keyFile, "Locallab", "Sigq_" + index_str, pedited, spot.sigq, spotEdited.sigq);
assignFromKeyfile(keyFile, "Locallab", "chjzcie_" + index_str, pedited, spot.chjzcie, spotEdited.chjzcie);
assignFromKeyfile(keyFile, "Locallab", "SourceGraycie_" + index_str, pedited, spot.sourceGraycie, spotEdited.sourceGraycie);
assignFromKeyfile(keyFile, "Locallab", "Sourceabscie_" + index_str, pedited, spot.sourceabscie, spotEdited.sourceabscie);

View File

@ -1605,8 +1605,10 @@ struct LocallabParams {
bool qtoj;
bool jabcie;
bool sigmoidqjcie;
bool logcie;
bool logjz;
bool sigjz;
bool sigq;
bool chjzcie;
double sourceGraycie;
double sourceabscie;

View File

@ -1184,7 +1184,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
AUTOEXP, //Evlocallablogjz
AUTOEXP, //Evlocallabtargetjz
AUTOEXP, //Evlocallabforcebw
AUTOEXP //Evlocallabsigjz
AUTOEXP, //Evlocallabsigjz
AUTOEXP, //Evlocallabsigq
AUTOEXP //Evlocallablogcie
};

View File

@ -59,6 +59,7 @@ public:
Glib::ustring rec2020; // filename of Rec2020 profile (default to the bundled one)
Glib::ustring ACESp0; // filename of ACES P0 profile (default to the bundled one)
Glib::ustring ACESp1; // filename of ACES P1 profile (default to the bundled one)
Glib::ustring DCIP3; // filename of DCIP3 profile (default to the bundled one)
bool gamutICC; // no longer used
bool gamutLch;

View File

@ -79,6 +79,7 @@ ICCProfileCreator::ICCProfileCreator(RTWindow *rtwindow)
primaries->append(M("ICCPROFCREATOR_PRIM_BEST"));
primaries->append(M("ICCPROFCREATOR_PRIM_BETA"));
primaries->append(M("ICCPROFCREATOR_PRIM_BRUCE"));
primaries->append(M("ICCPROFCREATOR_PRIM_DCIP3"));
primaries->set_tooltip_text(M("ICCPROFCREATOR_PRIM_TOOLTIP"));
mainGrid->attach(*primaries, 1, 0, 1, 1);
@ -176,6 +177,7 @@ ICCProfileCreator::ICCProfileCreator(RTWindow *rtwindow)
cIlluminant->append(M("ICCPROFCREATOR_ILL_50"));
cIlluminant->append(M("ICCPROFCREATOR_ILL_55"));
cIlluminant->append(M("ICCPROFCREATOR_ILL_60"));
cIlluminant->append(M("ICCPROFCREATOR_ILL_63"));
cIlluminant->append(M("ICCPROFCREATOR_ILL_65"));
cIlluminant->append(M("ICCPROFCREATOR_ILL_80"));
cIlluminant->append(M("ICCPROFCREATOR_ILL_INC"));
@ -265,6 +267,8 @@ ICCProfileCreator::ICCProfileCreator(RTWindow *rtwindow)
primaries->set_active_text(M("ICCPROFCREATOR_PRIM_BETA"));
} else if (primariesPreset == "BruceRGB") {
primaries->set_active_text(M("ICCPROFCREATOR_PRIM_BRUCE"));
} else if (primariesPreset == "DCIP3") {
primaries->set_active_text(M("ICCPROFCREATOR_PRIM_DCIP3"));
}
trcPresets->set_active(0);
@ -296,6 +300,8 @@ ICCProfileCreator::ICCProfileCreator(RTWindow *rtwindow)
cIlluminant->set_active_text(M("ICCPROFCREATOR_ILL_55"));
} else if (illuminant == "D60") {
cIlluminant->set_active_text(M("ICCPROFCREATOR_ILL_60"));
} else if (illuminant == "D63") {
cIlluminant->set_active_text(M("ICCPROFCREATOR_ILL_63"));
} else if (illuminant == "D65") {
cIlluminant->set_active_text(M("ICCPROFCREATOR_ILL_65"));
} else if (illuminant == "D80") {
@ -437,6 +443,8 @@ void ICCProfileCreator::storeValues()
options.ICCPC_illuminant = illuminant = "D55";
} else if (cIlluminant->get_active_text() == M("ICCPROFCREATOR_ILL_60")) {
options.ICCPC_illuminant = illuminant = "D60";
} else if (cIlluminant->get_active_text() == M("ICCPROFCREATOR_ILL_63")) {
options.ICCPC_illuminant = illuminant = "D63";
} else if (cIlluminant->get_active_text() == M("ICCPROFCREATOR_ILL_65")) {
options.ICCPC_illuminant = illuminant = "D65";
} else if (cIlluminant->get_active_text() == M("ICCPROFCREATOR_ILL_80")) {
@ -482,6 +490,8 @@ Glib::ustring ICCProfileCreator::getPrimariesPresetName(const Glib::ustring &pre
return Glib::ustring("BetaRGB");
} else if (primaries->get_active_text() == M("ICCPROFCREATOR_PRIM_BRUCE")) {
return Glib::ustring("BruceRGB");
} else if (primaries->get_active_text() == M("ICCPROFCREATOR_PRIM_DCIP3")) {
return Glib::ustring("DCIP3");
} else if (primaries->get_active_text() == M("ICCPROFCREATOR_CUSTOM")) {
return Glib::ustring("custom");
} else {
@ -570,6 +580,13 @@ void ICCProfileCreator::getPrimaries(const Glib::ustring &preset, double *p, Col
p[3] = 0.8404;
p[4] = 0.0366;
p[5] = 0.0001;
} else if (preset == "DCIP3") {
p[0] = 0.68; // DCIP3 primaries
p[1] = 0.32;
p[2] = 0.265;
p[3] = 0.69;
p[4] = 0.15;
p[5] = 0.06;
} else if (preset == "custom") {
p[0] = redPrimaryX;
p[1] = redPrimaryY;
@ -655,7 +672,7 @@ void ICCProfileCreator::savePressed()
// -------------------------------------------- Compute the default file name
// -----------------setmedia white point for monitor profile sRGB or AdobeRGB in case of profile used for monitor---------------------
//instead of calculations made by LCMS..small differences
bool isD65 = (primariesPreset == "sRGB" || primariesPreset == "Adobe" || primariesPreset == "Rec2020" || primariesPreset == "BruceRGB");
bool isD65 = (primariesPreset == "sRGB" || primariesPreset == "Adobe" || primariesPreset == "Rec2020" || primariesPreset == "BruceRGB" || primariesPreset == "DCIP3");
bool isD60 = (primariesPreset == "ACES-AP1" || primariesPreset == "ACES-AP0");
bool isD50 = (primariesPreset == "ProPhoto" || primariesPreset == "Widegamut" || primariesPreset == "BestRGB" || primariesPreset == "BetaRGB");
// v2except = (profileVersion == "v2" && (primariesPreset == "sRGB" || primariesPreset == "Adobe" || primariesPreset == "Rec2020" || primariesPreset == "BruceRGB" || primariesPreset == "ACES-AP1" || primariesPreset == "ACES-AP0") && illuminant == "DEF");
@ -693,23 +710,23 @@ void ICCProfileCreator::savePressed()
if (options.rtSettings.widegamut.substr(0, 4) == "RTv4") {
options.rtSettings.widegamut = "RTv2_Wide";
}
sNewProfile = options.rtSettings.widegamut;
sPrimariesPreset = "Wide";
} else if (primariesPreset == "DCIP3") {//only at the request of the user
sNewProfile = options.rtSettings.DCIP3;
sPrimariesPreset = "DCIP3";
} else if (primariesPreset == "BestRGB" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.best)) {
if (options.rtSettings.best.substr(0, 4) == "RTv4") {
options.rtSettings.best = "RTv2_Best";
}
sNewProfile = options.rtSettings.best;
sPrimariesPreset = "Best";
} else if (primariesPreset == "BetaRGB" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.beta)) {
sNewProfile = options.rtSettings.beta;
if (options.rtSettings.beta.substr(0, 4) == "RTv4") {
options.rtSettings.widegamut = "RTv2_Beta";
}
sNewProfile = options.rtSettings.beta;
sPrimariesPreset = "Beta";
} else if (primariesPreset == "BruceRGB" && rtengine::ICCStore::getInstance()->outputProfileExist(options.rtSettings.bruce)) {
@ -750,6 +767,8 @@ void ICCProfileCreator::savePressed()
sPrimariesPreset = "Best";
} else if (primariesPreset == "BetaRGB") {
sPrimariesPreset = "Beta";
} else if (primariesPreset == "DCIP3") {
sPrimariesPreset = "DCIP3";
} else if (primariesPreset == "custom") {
sPrimariesPreset = "Custom";
}
@ -1012,6 +1031,8 @@ void ICCProfileCreator::savePressed()
tempv4 = 5500.;
} else if (illuminant == "D60") {
tempv4 = 6004.;
} else if (illuminant == "D63") {
tempv4 = 6300.;
} else if (illuminant == "D65") {
tempv4 = 6504.;
} else if (illuminant == "D80") {
@ -1030,6 +1051,10 @@ void ICCProfileCreator::savePressed()
xyD = {0.32168, 0.33767, 1.0};
}
if (illuminant == "D63") {
xyD = {0.314, 0.351, 1.0};
}
if (illuminant == "D50") {
xyD = {0.3457, 0.3585, 1.0};//white D50 near LCMS values but not perfect...it's a compromise!!
}
@ -1077,6 +1102,9 @@ void ICCProfileCreator::savePressed()
} else if (illuminant == "D60") {
Wx = 0.952646075;
Wz = 1.008825184;
} else if (illuminant == "D63") {
Wx = 0.894587;
Wz = 0.954416;
} else if (illuminant == "D41") {
Wx = 0.991488263;
Wz = 0.631604625;

View File

@ -1580,10 +1580,12 @@ private:
Gtk::CheckButton* const forcebw;
Gtk::Frame* const sigmoidFrame;
Gtk::CheckButton* const sigq;
Adjuster* const sigmoidldacie;
Adjuster* const sigmoidthcie;
Adjuster* const sigmoidblcie;
Gtk::CheckButton* const sigmoidqjcie;
Gtk::CheckButton* const logcie;
Gtk::Frame* const sigmoidjzFrame;
Gtk::CheckButton* const sigjz;
Adjuster* const sigmoidldajzcie;
@ -1668,7 +1670,7 @@ private:
CurveEditorGroup* const mask2cieCurveEditorG;
DiagonalCurveEditor* const Lmaskcieshape;
sigc::connection AutograycieConn, forcejzConn, forcebwConn, qtojConn, showmaskcieMethodConn, enacieMaskConn, jabcieConn, sursourcieconn, surroundcieconn, modecieconn, modecamconn, sigmoidqjcieconn, logjzconn, sigjzconn, chjzcieconn, toneMethodcieConn, toneMethodcieConn2;
sigc::connection AutograycieConn, forcejzConn, forcebwConn, qtojConn, showmaskcieMethodConn, enacieMaskConn, jabcieConn, sursourcieconn, surroundcieconn, modecieconn, modecamconn, sigmoidqjcieconn, logcieconn, logjzconn, sigjzconn, sigqconn, chjzcieconn, toneMethodcieConn, toneMethodcieConn2;
public:
Locallabcie();
~Locallabcie();
@ -1713,8 +1715,10 @@ private:
void qtojChanged();
void jabcieChanged();
void sigmoidqjcieChanged();
void logcieChanged();
void logjzChanged();
void sigjzChanged();
void sigqChanged();
void chjzcieChanged();
void updatecieGUI();
void updateMaskBackground(const double normChromar, const double normLumar, const double normHuer, const double normHuerjz) override;

View File

@ -7444,10 +7444,12 @@ Locallabcie::Locallabcie():
forcebw(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_BWFORCE")))),
sigmoidFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGFRA")))),
sigmoidldacie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0., 1.0, 0.01, 0.))),
sigq(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGFRA")))),
sigmoidldacie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0.0, 1., 0.01, 0.5))),
sigmoidthcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDTH"), 0.1, 4., 0.01, 1., Gtk::manage(new RTImage("circle-black-small.png")), Gtk::manage(new RTImage("circle-white-small.png"))))),
sigmoidblcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDBL"), 0.5, 1.5, 0.01, 1.))),
sigmoidqjcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGMOIDQJ")))),
logcie(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_LOGCIE")))),
sigmoidjzFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGJZFRA")))),
sigjz(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SIGJZFRA")))),
sigmoidldajzcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SIGMOIDLAMBDA"), 0., 1.0, 0.01, 0.5))),
@ -7562,7 +7564,7 @@ Locallabcie::Locallabcie():
modecie->append (M ("TP_LOCALLAB_CIEMODE_TM"));
modecie->append (M ("TP_LOCALLAB_CIEMODE_WAV"));
modecie->append (M ("TP_LOCALLAB_CIEMODE_DR"));
modecie->append (M ("TP_LOCALLAB_CIEMODE_LOG"));
// modecie->append (M ("TP_LOCALLAB_CIEMODE_LOG"));
modecie->set_active (0);
modeHBoxcie->pack_start (*modecie);
modecieconn = modecie->signal_changed().connect ( sigc::mem_fun (*this, &Locallabcie::modecieChanged) );
@ -7611,6 +7613,21 @@ Locallabcie::Locallabcie():
bevwevFrame->add(*bevwevBox);
cieFBox->pack_start (*bevwevFrame);
sigmoidFrame->set_label_align(0.025, 0.5);
sigmoidFrame->set_label_widget(*sigq);
ToolParamBlock* const sigBox = Gtk::manage(new ToolParamBlock());
Gtk::Separator* const separatorsig = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL));
sigBox->pack_start(*sigmoidldacie);
sigBox->pack_start(*sigmoidthcie);
sigBox->pack_start(*sigmoidblcie);
sigBox->pack_start(*sigmoidqjcie);
sigBox->pack_start(*separatorsig);
sigBox->pack_start(*logcie);
sigmoidFrame->add(*sigBox);
cieFBox->pack_start(*sigmoidFrame);
sigmoidjzFrame->set_label_align(0.025, 0.5);
sigmoidjzFrame->set_label_widget(*sigjz);
ToolParamBlock* const sigjzBox = Gtk::manage(new ToolParamBlock());
@ -7814,8 +7831,10 @@ Locallabcie::Locallabcie():
jabcieConn = jabcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::jabcieChanged));
AutograycieConn = Autograycie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::AutograycieChanged));
sigmoidqjcieconn = sigmoidqjcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigmoidqjcieChanged));
logcieconn = logcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::logcieChanged));
logjzconn = logjz->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::logjzChanged));
sigjzconn = sigjz->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigjzChanged));
sigqconn = sigq->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::sigqChanged));
forcejzConn = forcejz->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::forcejzChanged));
qtojConn = qtoj->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::qtojChanged));
chjzcieconn = chjzcie->signal_toggled().connect(sigc::mem_fun(*this, &Locallabcie::chjzcieChanged));
@ -7984,7 +8003,7 @@ Locallabcie::Locallabcie():
cieP1Box->pack_start(*cie1colorFrame);
// pack_start(*blackEvjz);
// pack_start(*whiteEvjz);
/*
sigmoidFrame->set_label_align(0.025, 0.5);
ToolParamBlock* const sigBox = Gtk::manage(new ToolParamBlock());
@ -7994,6 +8013,7 @@ Locallabcie::Locallabcie():
sigBox->pack_start(*sigmoidqjcie);
sigmoidFrame->add(*sigBox);
cieP1Box->pack_start(*sigmoidFrame);
*/
ToolParamBlock* const cieP11Box = Gtk::manage(new ToolParamBlock());
cieP11Box->pack_start(*cieCurveEditorG);
cieP11Box->pack_start(*cieCurveEditorG2);
@ -8160,6 +8180,7 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips)
cieFrame->set_tooltip_text(M("TP_LOCALLAB_LOGSCENE_TOOLTIP"));
PQFrame->set_tooltip_text(M("TP_LOCALLAB_JZPQFRA_TOOLTIP"));
qtoj->set_tooltip_text(M("TP_LOCALLAB_JZQTOJ_TOOLTIP"));
logcie->set_tooltip_text(M("TP_LOCALLAB_LOGCIE_TOOLTIP"));
modecam->set_tooltip_text(M("TP_LOCALLAB_JZMODECAM_TOOLTIP"));
adapjzcie->set_tooltip_text(M("TP_LOCALLAB_JABADAP_TOOLTIP"));
jz100->set_tooltip_text(M("TP_LOCALLAB_JZ100_TOOLTIP"));
@ -8168,8 +8189,8 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips)
Autograycie->set_tooltip_text(M("TP_LOCALLAB_AUTOGRAYCIE_TOOLTIP"));
sigmalcjz->set_tooltip_text(M("TP_LOCALLAB_WAT_SIGMALC_TOOLTIP"));
logjzFrame->set_tooltip_text(M("TP_LOCALLAB_JZLOGWB_TOOLTIP"));
blackEvjz->set_tooltip_text(M("TP_LOCALLAB_JZLOGWB_TOOLTIP"));
whiteEvjz->set_tooltip_text(M("TP_LOCALLAB_JZLOGWB_TOOLTIP"));
blackEvjz->set_tooltip_text(M("TP_LOCALLAB_JZLOGWBS_TOOLTIP"));
whiteEvjz->set_tooltip_text(M("TP_LOCALLAB_JZLOGWBS_TOOLTIP"));
clariFramejz->set_tooltip_markup(M("TP_LOCALLAB_CLARIJZ_TOOLTIP"));
clarilresjz->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARILJZ_TOOLTIP"));
claricresjz->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARICJZ_TOOLTIP"));
@ -8182,6 +8203,7 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips)
sourceabscie->set_tooltip_text(M("TP_COLORAPP_ADAPSCEN_TOOLTIP"));
cie1Frame->set_tooltip_text(M("TP_LOCALLAB_LOGIMAGE_TOOLTIP"));
sigmoidFrame->set_tooltip_text(M("TP_LOCALLAB_SIGMOID_TOOLTIP"));
sigmoidjzFrame->set_tooltip_text(M("TP_LOCALLAB_SIGMOID_TOOLTIP"));
contlcie->set_tooltip_text(M("TP_LOCALLAB_LOGCONTL_TOOLTIP"));
contqcie->set_tooltip_text(M("TP_LOCALLAB_LOGCONTQ_TOOLTIP"));
contthrescie->set_tooltip_text(M("TP_LOCALLAB_LOGCONTTHRES_TOOLTIP"));
@ -8215,6 +8237,7 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips)
PQFrame->set_tooltip_text("");
modecam->set_tooltip_text("");
qtoj->set_tooltip_text("");
logcie->set_tooltip_text("");
jabcie->set_tooltip_text("");
adapjzcie->set_tooltip_text("");
jz100->set_tooltip_text("");
@ -8229,6 +8252,7 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips)
sourceabscie->set_tooltip_text("");
cie1Frame->set_tooltip_text("");
sigmoidFrame->set_tooltip_text("");
sigmoidjzFrame->set_tooltip_text("");
contlcie->set_tooltip_text("");
contqcie->set_tooltip_text("");
contthrescie->set_tooltip_text("");
@ -8273,8 +8297,10 @@ void Locallabcie::disableListener()
qtojConn.block(true);
jabcieConn.block(true);
sigmoidqjcieconn.block(true);
logcieconn.block(true);
logjzconn.block(true);
sigjzconn.block(true);
sigqconn.block(true);
chjzcieconn.block(true);
sursourcieconn.block (true);
surroundcieconn.block (true);
@ -8295,8 +8321,10 @@ void Locallabcie::enableListener()
qtojConn.block(false);
jabcieConn.block(false);
sigmoidqjcieconn.block(false);
logcieconn.block(false);
logjzconn.block(false);
sigjzconn.block(false);
sigqconn.block(false);
chjzcieconn.block(false);
sursourcieconn.block (false);
surroundcieconn.block (false);
@ -8385,8 +8413,8 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE
modecie->set_active (2);
} else if (spot.modecie == "dr") {
modecie->set_active (3);
} else if (spot.modecie == "log") {
modecie->set_active (4);
// } else if (spot.modecie == "log") {
// modecie->set_active (4);
}
if (spot.toneMethodcie == "one") {
@ -8409,14 +8437,29 @@ void Locallabcie::read(const rtengine::procparams::ProcParams* pp, const ParamsE
qtoj->set_active(spot.qtoj);
sourceGraycie->setValue(spot.sourceGraycie);
sigmoidqjcie->set_active(spot.sigmoidqjcie);
logcie->set_active(spot.logcie);
logjz->set_active(spot.logjz);
sigjz->set_active(spot.sigjz);
sigq->set_active(spot.sigq);
// chjzcie->set_active(spot.chjzcie);
chjzcie->set_active(true);//force to true to avoid other mode
sourceabscie->setValue(spot.sourceabscie);
jabcie->set_active(spot.jabcie);
jabcieChanged();
modecamChanged();
if(logcie->get_active()) {
sigmoidldacie->set_sensitive(false);
sigmoidthcie->set_sensitive(false);
sigmoidblcie->set_sensitive(false);
sigmoidqjcie->set_sensitive(false);
} else {
sigmoidldacie->set_sensitive(true);
sigmoidthcie->set_sensitive(true);
sigmoidblcie->set_sensitive(true);
sigmoidqjcie->set_sensitive(true);
}
if (spot.sursourcie == "Average") {
sursourcie->set_active (0);
} else if (spot.sursourcie == "Dim") {
@ -8556,8 +8599,8 @@ void Locallabcie::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi
spot.modecie = "wav";
} else if (modecie->get_active_row_number() == 3) {
spot.modecie = "dr";
} else if (modecie->get_active_row_number() == 4) {
spot.modecie = "log";
// } else if (modecie->get_active_row_number() == 4) {
// spot.modecie = "log";
}
if (toneMethodcie->get_active_row_number() == 0) {
@ -8582,9 +8625,11 @@ void Locallabcie::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi
spot.sourceGraycie = sourceGraycie->getValue();
spot.sourceabscie = sourceabscie->getValue();
spot.sigmoidqjcie = sigmoidqjcie->get_active();
spot.logcie = logcie->get_active();
spot.logjz = logjz->get_active();
spot.sigjz = sigjz->get_active();
spot.chjzcie = chjzcie->get_active();
spot.sigq = sigq->get_active();
if(sursourcie->get_active_row_number() == 0) {
spot.sursourcie = "Average";
@ -8873,6 +8918,34 @@ void Locallabcie::sigmoidqjcieChanged()
}
}
void Locallabcie::logcieChanged()
{
if(logcie->get_active()) {
sigmoidldacie->set_sensitive(false);
sigmoidthcie->set_sensitive(false);
sigmoidblcie->set_sensitive(false);
sigmoidqjcie->set_sensitive(false);
} else {
sigmoidldacie->set_sensitive(true);
sigmoidthcie->set_sensitive(true);
sigmoidblcie->set_sensitive(true);
sigmoidqjcie->set_sensitive(true);
}
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (logcie->get_active()) {
listener->panelChanged(Evlocallablogcie,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallablogcie,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::logjzChanged()
{
if (isLocActivated && exp->getEnabled()) {
@ -8903,6 +8976,21 @@ void Locallabcie::sigjzChanged()
}
}
void Locallabcie::sigqChanged()
{
if (isLocActivated && exp->getEnabled()) {
if (listener) {
if (sigq->get_active()) {
listener->panelChanged(Evlocallabsigq,
M("GENERAL_ENABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
} else {
listener->panelChanged(Evlocallabsigq,
M("GENERAL_DISABLED") + " (" + escapeHtmlChars(getSpotName()) + ")");
}
}
}
}
void Locallabcie::chjzcieChanged()
{
if (chjzcie->get_active()) {
@ -8938,6 +9026,7 @@ void Locallabcie::modecamChanged()
logjzFrame->show();
bevwevFrame->show();
sigmoidjzFrame->show();
sigmoidFrame->hide();
forcejz->hide();
} else {
@ -8950,7 +9039,10 @@ void Locallabcie::modecamChanged()
jabcie->hide();
PQFrame->hide();
logjzFrame->hide();
bevwevFrame->hide();
if (modecam->get_active_row_number() == 0){
bevwevFrame->show();
sigmoidFrame->show();
}
sigmoidjzFrame->hide();
forcejz->hide();
catadcie->show();
@ -9021,7 +9113,13 @@ void Locallabcie::modecamChanged()
PQFrame->hide();
logjzFrame->hide();
sigmoidjzFrame->hide();
sigmoidFrame->hide();
bevwevFrame->hide();
if (modecam->get_active_row_number() == 0){
bevwevFrame->show();
sigmoidFrame->show();
}
forcejz->hide();
pqremapcam16->show();
catadcie->show();
@ -9039,6 +9137,11 @@ void Locallabcie::modecamChanged()
} else {
cieFrame->show();
cie2Frame->show();
if (modecam->get_active_row_number() == 0){
bevwevFrame->show();
sigmoidjzFrame->hide();
}
if (modecam->get_active_row_number() == 1) {
targetGraycie->hide();
targabscie->hide();
@ -9048,6 +9151,7 @@ void Locallabcie::modecamChanged()
PQFrame->show();
logjzFrame->show();
sigmoidjzFrame->show();
sigmoidFrame->hide();
bevwevFrame->show();
catadcie->hide();
cie2Frame->hide();
@ -9208,6 +9312,11 @@ void Locallabcie::updateGUIToMode(const modeType new_type)
logjzFrame->hide();
sigmoidjzFrame->hide();
bevwevFrame->hide();
sigmoidFrame->hide();
}
if (modecam->get_active_row_number() == 0){
bevwevFrame->show();
sigmoidFrame->show();
}
if (modecam->get_active_row_number() == 1) {
@ -9220,6 +9329,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type)
logjzFrame->hide();
bevwevFrame->hide();
sigmoidjzFrame->hide();
sigmoidFrame->hide();
catadcie->hide();
cie2Frame->hide();
maskusablecie->hide();
@ -9292,6 +9402,10 @@ void Locallabcie::updateGUIToMode(const modeType new_type)
maskusablecie->hide();
maskunusablecie->show();
}
if (modecam->get_active_row_number() == 0){
bevwevFrame->show();
sigmoidFrame->show();
}
if (modecam->get_active_row_number() == 2) {
PQFrame->hide();
@ -9310,6 +9424,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type)
logjzFrame->hide();
sigmoidjzFrame->hide();
bevwevFrame->hide();
sigmoidFrame->hide();
catadcie->hide();
cie2Frame->hide();
exprecovcie->hide();
@ -9379,6 +9494,9 @@ void Locallabcie::updateGUIToMode(const modeType new_type)
maskusablecie->hide();
maskunusablecie->show();
}
if (modecam->get_active_row_number() == 0){
bevwevFrame->show();
}
if (modecam->get_active_row_number() == 1 || modecam->get_active_row_number() == 2) {
jabcie->show();
@ -9391,6 +9509,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type)
logjzFrame->show();
bevwevFrame->show();
sigmoidjzFrame->show();
sigmoidFrame->hide();
forcejz->hide();
}
@ -9406,6 +9525,11 @@ void Locallabcie::updateGUIToMode(const modeType new_type)
logjzFrame->hide();
sigmoidjzFrame->hide();
bevwevFrame->hide();
if (modecam->get_active_row_number() == 0){
bevwevFrame->show();
sigmoidFrame->show();
}
}
if (modecam->get_active_row_number() == 2) {
PQFrame->show();
@ -9423,6 +9547,7 @@ void Locallabcie::updateGUIToMode(const modeType new_type)
PQFrame->show();
logjzFrame->show();
sigmoidjzFrame->show();
sigmoidFrame->hide();
bevwevFrame->show();
catadcie->hide();
cie2Frame->hide();
@ -9483,6 +9608,9 @@ void Locallabcie::updatecieGUI()
cie1Frame->show();
cie2Frame->show();
expcam16->show();
if (modecam->get_active_row_number() == 0){
bevwevFrame->show();
}
if (modecam->get_active_row_number() == 2 && mode == Expert) {
PQFrame->show();
@ -9514,6 +9642,7 @@ void Locallabcie::updatecieGUI()
logjzFrame->show();
sigmoidjzFrame->show();
bevwevFrame->show();
sigmoidFrame->hide();
catadcie->hide();
cie2Frame->hide();
if(mode != Expert) {
@ -9524,7 +9653,12 @@ void Locallabcie::updatecieGUI()
PQFrame->hide();
logjzFrame->hide();
sigmoidjzFrame->hide();
sigmoidFrame->hide();
bevwevFrame->hide();
if (modecam->get_active_row_number() == 0){
bevwevFrame->show();
sigmoidFrame->show();
}
exprecovcie->hide();
expmaskcie->hide();
maskusablecie->hide();

View File

@ -595,6 +595,7 @@ void Options::setDefaults()
rtSettings.adobe = "RTv2_Medium"; // put the name of yours profiles (here windows)
rtSettings.prophoto = "RTv2_Large"; // these names appear in the menu "output profile"
rtSettings.widegamut = "RTv2_Wide";
rtSettings.DCIP3 = "RTv2_DCIP3";
rtSettings.srgb = "RTv4_sRGB";
rtSettings.bruce = "RTv2_Bruce";
rtSettings.beta = "RTv2_Beta";
@ -1682,6 +1683,13 @@ void Options::readFromFile(Glib::ustring fname)
}
}
if (keyFile.has_key("Color Management", "DCIP3")) {
rtSettings.DCIP3 = keyFile.get_string("Color Management", "DCIP3");
if (rtSettings.DCIP3 == "RTv4_DCIP3") {
rtSettings.DCIP3 = "RTv2_DCIP3";
}
}
if (keyFile.has_key("Color Management", "sRGB")) {
rtSettings.srgb = keyFile.get_string("Color Management", "sRGB");
if (rtSettings.srgb == "RT_sRGB" || rtSettings.srgb == "RTv2_sRGB") {
@ -2369,6 +2377,7 @@ void Options::saveToFile(Glib::ustring fname)
keyFile.set_string("Color Management", "AdobeRGB", rtSettings.adobe);
keyFile.set_string("Color Management", "ProPhoto", rtSettings.prophoto);
keyFile.set_string("Color Management", "WideGamut", rtSettings.widegamut);
keyFile.set_string("Color Management", "DCIP3", rtSettings.DCIP3);
keyFile.set_string("Color Management", "sRGB", rtSettings.srgb);
keyFile.set_string("Color Management", "Beta", rtSettings.beta);
keyFile.set_string("Color Management", "Best", rtSettings.best);

View File

@ -1685,8 +1685,10 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
locallab.spots.at(j).qtoj = locallab.spots.at(j).qtoj && pSpot.qtoj == otherSpot.qtoj;
locallab.spots.at(j).jabcie = locallab.spots.at(j).jabcie && pSpot.jabcie == otherSpot.jabcie;
locallab.spots.at(j).sigmoidqjcie = locallab.spots.at(j).sigmoidqjcie && pSpot.sigmoidqjcie == otherSpot.sigmoidqjcie;
locallab.spots.at(j).logcie = locallab.spots.at(j).logcie && pSpot.logcie == otherSpot.logcie;
locallab.spots.at(j).logjz = locallab.spots.at(j).logjz && pSpot.logjz == otherSpot.logjz;
locallab.spots.at(j).sigjz = locallab.spots.at(j).sigjz && pSpot.sigjz == otherSpot.sigjz;
locallab.spots.at(j).sigq = locallab.spots.at(j).sigq && pSpot.sigq == otherSpot.sigq;
locallab.spots.at(j).chjzcie = locallab.spots.at(j).chjzcie && pSpot.chjzcie == otherSpot.chjzcie;
locallab.spots.at(j).sourceGraycie = locallab.spots.at(j).sourceGraycie && pSpot.sourceGraycie == otherSpot.sourceGraycie;
locallab.spots.at(j).sourceabscie = locallab.spots.at(j).sourceabscie && pSpot.sourceabscie == otherSpot.sourceabscie;
@ -5736,6 +5738,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).sigmoidqjcie = mods.locallab.spots.at(i).sigmoidqjcie;
}
if (locallab.spots.at(i).logcie) {
toEdit.locallab.spots.at(i).logcie = mods.locallab.spots.at(i).logcie;
}
if (locallab.spots.at(i).logjz) {
toEdit.locallab.spots.at(i).logjz = mods.locallab.spots.at(i).logjz;
}
@ -5744,6 +5750,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.locallab.spots.at(i).sigjz = mods.locallab.spots.at(i).sigjz;
}
if (locallab.spots.at(i).sigq) {
toEdit.locallab.spots.at(i).sigq = mods.locallab.spots.at(i).sigq;
}
if (locallab.spots.at(i).chjzcie) {
toEdit.locallab.spots.at(i).chjzcie = mods.locallab.spots.at(i).chjzcie;
}
@ -7978,8 +7988,10 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) :
qtoj(v),
jabcie(v),
sigmoidqjcie(v),
logcie(v),
logjz(v),
sigjz(v),
sigq(v),
chjzcie(v),
sourceGraycie(v),
sourceabscie(v),
@ -8675,8 +8687,10 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v)
qtoj = v;
jabcie = v;
sigmoidqjcie = v;
logcie = v;
logjz = v;
sigjz = v;
sigq = v;
chjzcie = v;
sourceGraycie = v;
sourceabscie = v;

View File

@ -987,8 +987,10 @@ public:
bool qtoj;
bool jabcie;
bool sigmoidqjcie;
bool logcie;
bool logjz;
bool sigjz;
bool sigq;
bool chjzcie;
bool sourceGraycie;
bool sourceabscie;