B&W + channel mixer + color filter = maximum brightness too low, whites turn gray issue2583
This commit is contained in:
parent
77177deb61
commit
c381db2f1f
@ -479,14 +479,13 @@ namespace rtengine {
|
||||
* @param setting BlackWhite::setting
|
||||
* @param setting BlackWhite::filter
|
||||
*/
|
||||
void Color::computeBWMixerConstants (const Glib::ustring &setting, const Glib::ustring &filter, const Glib::ustring &algo, float &mixerRed, float &mixerGreen,
|
||||
void Color::computeBWMixerConstants (const Glib::ustring &setting, const Glib::ustring &filter, const Glib::ustring &algo, float &filcor, float &mixerRed, float &mixerGreen,
|
||||
float &mixerBlue, float mixerOrange, float mixerYellow, float mixerCyan, float mixerPurple, float mixerMagenta,
|
||||
bool autoc, bool complement, float &kcorec, double &rrm, double &ggm, double &bbm)
|
||||
{
|
||||
float somm;
|
||||
float som = mixerRed+mixerGreen+mixerBlue;
|
||||
// rM = mixerRed, gM = mixerGreen, bM = mixerBlue !
|
||||
|
||||
//presets
|
||||
if (setting=="RGB-Abs" || setting=="ROYGCBPM-Abs")
|
||||
kcorec=som/100.f;
|
||||
@ -609,25 +608,24 @@ namespace rtengine {
|
||||
kcorec = koymcp+som/100.f;
|
||||
//Color filters
|
||||
float filred,filgreen,filblue;
|
||||
filred=1.f;filgreen=1.f;filblue=1.f;
|
||||
if (filter=="None") {filred=1.f; filgreen=1.f; filblue=1.f;}
|
||||
else if (filter=="Red") {filred=1.f; filgreen=0.05f;filblue=0.f;}
|
||||
else if (filter=="Orange") {filred=1.f; filgreen=0.6f; filblue=0.f;}
|
||||
else if (filter=="Yellow") {filred=1.f; filgreen=1.f; filblue=0.05f;}
|
||||
else if (filter=="YellowGreen") {filred=0.6f; filgreen=1.f; filblue=0.3f;}
|
||||
else if (filter=="Green") {filred=0.2f; filgreen=1.f; filblue=0.3f;}
|
||||
else if (filter=="Cyan") {filred=0.05f;filgreen=1.f; filblue=1.f;}
|
||||
else if (filter=="Blue") {filred=0.f; filgreen=0.05f;filblue=1.f;}
|
||||
else if (filter=="Purple") {filred=1.f; filgreen=0.05f;filblue=1.f;}
|
||||
|
||||
|
||||
filred=1.f;filgreen=1.f;filblue=1.f;filcor=1.f;
|
||||
if (filter=="None") {filred=1.f; filgreen=1.f; filblue=1.f; filcor=1.f;}
|
||||
else if (filter=="Red") {filred=1.f; filgreen=0.05f;filblue=0.f; filcor=1.08f;}
|
||||
else if (filter=="Orange") {filred=1.f; filgreen=0.6f; filblue=0.f; filcor=1.35f;}
|
||||
else if (filter=="Yellow") {filred=1.f; filgreen=1.f; filblue=0.05f;filcor=1.23f;}
|
||||
else if (filter=="YellowGreen") {filred=0.6f; filgreen=1.f; filblue=0.3f;filcor=1.32f;}
|
||||
else if (filter=="Green") {filred=0.2f; filgreen=1.f; filblue=0.3f;filcor=1.41f;}
|
||||
else if (filter=="Cyan") {filred=0.05f;filgreen=1.f; filblue=1.f; filcor=1.23f;}
|
||||
else if (filter=="Blue") {filred=0.f; filgreen=0.05f;filblue=1.f; filcor=1.20f;}
|
||||
else if (filter=="Purple") {filred=1.f; filgreen=0.05f;filblue=1.f; filcor=1.23f;}
|
||||
mixerRed = mixerRed * filred;
|
||||
mixerGreen = mixerGreen * filgreen;
|
||||
mixerBlue = mixerBlue * filblue;
|
||||
|
||||
mixerRed = mixerRed / (mixerRed + mixerGreen + mixerBlue);
|
||||
mixerGreen = mixerGreen / (mixerRed + mixerGreen + mixerBlue);
|
||||
mixerBlue = mixerBlue / (mixerRed + mixerGreen + mixerBlue);
|
||||
mixerRed = filcor*mixerRed / (mixerRed + mixerGreen + mixerBlue);
|
||||
mixerGreen = filcor*mixerGreen / (mixerRed + mixerGreen + mixerBlue);
|
||||
mixerBlue = filcor*mixerBlue / (mixerRed + mixerGreen + mixerBlue);
|
||||
|
||||
if(filter!="None") {
|
||||
som = mixerRed+mixerGreen+mixerBlue;
|
||||
if(setting=="RGB-Abs" || setting=="ROYGCBPM-Abs") kcorec = kcorec*som;
|
||||
|
@ -734,7 +734,7 @@ public:
|
||||
* @param ggm green channel of the mixer (return value)
|
||||
* @param bbm blue channel of the mixer (return value)
|
||||
*/
|
||||
static void computeBWMixerConstants (const Glib::ustring &setting, const Glib::ustring &filter, const Glib::ustring &algo, float &mixerRed, float &mixerGreen,
|
||||
static void computeBWMixerConstants (const Glib::ustring &setting, const Glib::ustring &filter, const Glib::ustring &algo, float &filcor, float &mixerRed, float &mixerGreen,
|
||||
float &mixerBlue, float mixerOrange, float mixerYellow, float mixerCyan, float mixerPurple, float mixerMagenta,
|
||||
bool autoc, bool complement, float &kcorec, double &rrm, double &ggm, double &bbm);
|
||||
|
||||
|
@ -3422,8 +3422,8 @@ void ImProcFunctions::rgbProc (Imagefloat* working, LabImage* lab, EditBuffer *e
|
||||
mixerPurple = 33.f;
|
||||
mixerCyan = 33.f;
|
||||
}
|
||||
|
||||
Color::computeBWMixerConstants(params->blackwhite.setting, params->blackwhite.filter,params->blackwhite.algo,
|
||||
float filcor;
|
||||
Color::computeBWMixerConstants(params->blackwhite.setting, params->blackwhite.filter,params->blackwhite.algo,filcor,
|
||||
bwr, bwg, bwb, mixerOrange, mixerYellow, mixerCyan, mixerPurple, mixerMagenta,
|
||||
params->blackwhite.autoc, complem, kcorec, rrm, ggm, bbm);
|
||||
|
||||
|
@ -1088,10 +1088,16 @@ void BlackWhite::updateRGBLabel () {
|
||||
b = mixerBlue->getValue();
|
||||
}
|
||||
double mixR, mixG, mixB;
|
||||
float filcor;
|
||||
Glib::ustring sSetting = getSettingString();
|
||||
Color::computeBWMixerConstants(sSetting, getFilterString(),getalgoString(), r, g, b,
|
||||
Color::computeBWMixerConstants(sSetting, getFilterString(),getalgoString(), filcor, r, g, b,
|
||||
mixerOrange->getValue(), mixerYellow->getValue(), mixerCyan->getValue(), mixerPurple->getValue(), mixerMagenta->getValue(),
|
||||
autoch->get_active(), enabledcc->get_active(), kcorrec, mixR, mixG, mixB);
|
||||
if( filcor!=1.f){
|
||||
r=kcorrec*r/(r+g+b);
|
||||
g=kcorrec*g/(r+g+b);
|
||||
b=kcorrec*b/(r+g+b);
|
||||
}
|
||||
RGBLabels->set_text(
|
||||
Glib::ustring::compose(M("TP_BWMIX_RGBLABEL"),
|
||||
Glib::ustring::format(std::fixed, std::setprecision(1), r*100.),
|
||||
|
Loading…
x
Reference in New Issue
Block a user