Improve Dehaze for Raw files - Raw black point (#7133)

* Show min raw values in console, #5769

* Speedup

* outsourced calculation of raw min values

* First try GUI

* Improve GUI

* Clean code

* Change behavior GUI

* First step GUI Xtrans

* Second step GUI Xtrans

* Last step X-trans black dehaze

* Appimage and windows yml poordeha

* disabled sliders R G B when dehaze enabled

* Remove idle_register autoblackchanged

* Changes suggested by Lawrence37 to improve double processing

* Remove yml appaimage windows

---------

Co-authored-by: Ingo Weyrich <heckflosse67@gmx.de>
This commit is contained in:
Desmis
2024-09-17 08:29:21 +02:00
committed by GitHub
parent 40dccc3fcf
commit 348c8e8894
19 changed files with 410 additions and 34 deletions

View File

@@ -30,6 +30,10 @@ const Glib::ustring BayerRAWExposure::TOOL_NAME = "bayerrawexposure";
BayerRAWExposure::BayerRAWExposure () : FoldableToolPanel(this, TOOL_NAME, M("TP_EXPOS_BLACKPOINT_LABEL"), options.prevdemo != PD_Sidecar)
{
auto m = ProcEventMapper::getInstance();
EvDehablack = m->newEvent(DARKFRAME, "HISTORY_MSG_DEHABLACK");
EvDehablackVoid = m->newEvent(M_VOID, "HISTORY_MSG_DEHABLACK");
PexBlack1 = Gtk::manage(new Adjuster (M("TP_RAWEXPOS_BLACK_1"), -2048, 2048, 1.0, 0)); //black level
PexBlack1->setAdjusterListener (this);
@@ -58,11 +62,16 @@ BayerRAWExposure::BayerRAWExposure () : FoldableToolPanel(this, TOOL_NAME, M("TP
PextwoGreen->set_active (true);
PextwoGreen->setCheckBoxListener (this);
Dehablack = Gtk::manage(new CheckBox(M("TP_RAWEXPOS_DEHA"), multiImage));// Black dehaze
Dehablack->set_active (false);
Dehablack->setCheckBoxListener (this);
pack_start( *PexBlack1, Gtk::PACK_SHRINK, 0);//black R
pack_start( *PexBlack0, Gtk::PACK_SHRINK, 0);//black G1
pack_start( *PexBlack3, Gtk::PACK_SHRINK, 0);//black G2
pack_start( *PexBlack2, Gtk::PACK_SHRINK, 0);//black B
pack_start( *PextwoGreen, Gtk::PACK_SHRINK, 0);//black 2 green
pack_start( *Dehablack, Gtk::PACK_SHRINK, 0);//black Dehaze
PexBlack0->setLogScale(100, 0);
PexBlack1->setLogScale(100, 0);
@@ -73,7 +82,6 @@ BayerRAWExposure::BayerRAWExposure () : FoldableToolPanel(this, TOOL_NAME, M("TP
void BayerRAWExposure::read(const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited)
{
disableListener ();
if(pedited ) {
PexBlack0->setEditedState( pedited->raw.bayersensor.exBlack0 ? Edited : UnEdited );
PexBlack1->setEditedState( pedited->raw.bayersensor.exBlack1 ? Edited : UnEdited );
@@ -82,6 +90,7 @@ void BayerRAWExposure::read(const rtengine::procparams::ProcParams* pp, const Pa
}
PextwoGreen->setValue (pp->raw.bayersensor.twogreen);
Dehablack->setValue (pp->raw.bayersensor.Dehablack);
PexBlack0->setValue (pp->raw.bayersensor.black0);//black
PexBlack1->setValue (pp->raw.bayersensor.black1);//black
@@ -92,7 +101,7 @@ void BayerRAWExposure::read(const rtengine::procparams::ProcParams* pp, const Pa
} else {
PexBlack3->setValue (PexBlack0->getValue());
}
checkBoxToggled (Dehablack, CheckValue::on);
enableListener ();
}
@@ -102,6 +111,7 @@ void BayerRAWExposure::write( rtengine::procparams::ProcParams* pp, ParamsEdited
pp->raw.bayersensor.black1 = PexBlack1->getValue();// black
pp->raw.bayersensor.black2 = PexBlack2->getValue();// black
pp->raw.bayersensor.twogreen = PextwoGreen->getLastActive();
pp->raw.bayersensor.Dehablack = Dehablack->getLastActive();
if(PextwoGreen->getLastActive()) {
pp->raw.bayersensor.black3 = pp->raw.bayersensor.black0; // active or desactive 2 green together
@@ -115,10 +125,50 @@ void BayerRAWExposure::write( rtengine::procparams::ProcParams* pp, ParamsEdited
pedited->raw.bayersensor.exBlack2 = PexBlack2->getEditedState ();//black
pedited->raw.bayersensor.exBlack3 = PexBlack3->getEditedState ();//black
pedited->raw.bayersensor.exTwoGreen = !PextwoGreen->get_inconsistent();
pedited->raw.bayersensor.Dehablack = !Dehablack->get_inconsistent();
}
}
BayerRAWExposure::~BayerRAWExposure()
{
idle_register.destroy();
}
void BayerRAWExposure::autoBlackChanged (double reddeha, double greendeha, double bluedeha)
{
idle_register.add(
[this, reddeha, greendeha, bluedeha]() -> bool
{
if (reddeha != PexBlack1->getValue()) {
disableListener();
PexBlack1->setValue(reddeha);
enableListener();
}
if (greendeha != PexBlack0->getValue()) {
disableListener();
PexBlack0->setValue(greendeha);
enableListener();
}
if (greendeha != PexBlack3->getValue()) {
disableListener();
PexBlack3->setValue(greendeha);
enableListener();
}
if (bluedeha != PexBlack2->getValue()) {
disableListener();
PexBlack2->setValue(bluedeha);
enableListener();
}
return false;
}
);
}
void BayerRAWExposure::adjusterChanged(Adjuster* a, double newval)
{
if (listener) {
@@ -155,9 +205,29 @@ void BayerRAWExposure::checkBoxToggled (CheckBox* c, CheckValue newval)
PexBlack3->setValue (PexBlack0->getValue());//two green together
}
}
} else if(c == Dehablack) {
if(Dehablack->getLastActive()) {
PexBlack1->set_sensitive(false);
PexBlack2->set_sensitive(false);
PexBlack3->set_sensitive(false);
PexBlack0->set_sensitive(false);
} else {
PexBlack1->set_sensitive(true);
PexBlack2->set_sensitive(true);
PexBlack3->set_sensitive(true);
PexBlack0->set_sensitive(true);
}
if (listener) {
if (Dehablack->getLastActive()) {
listener->panelChanged (EvDehablack, M("GENERAL_ENABLED"));
} else {
listener->panelChanged (EvDehablackVoid, M("GENERAL_DISABLED"));
}
}
}
}
void BayerRAWExposure::setBatchMode(bool batchMode)
{
ToolPanel::setBatchMode (batchMode);