diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech index ca74c37bf..99bf285c8 100644 --- a/rtdata/languages/Czech +++ b/rtdata/languages/Czech @@ -520,7 +520,7 @@ PARTIALPASTE_FLATFIELDAUTOSELECT;FF Automatický výběr PARTIALPASTE_FLATFIELDBLURRADIUS;FF Poloměr rozostření PARTIALPASTE_FLATFIELDBLURTYPE;FF Typ rozostření PARTIALPASTE_FLATFIELDFILE;Flat-Field (FF) Soubor -PARTIALPASTE_GRADIENTSHARPEN;Gradient ostření (okraj) +PARTIALPASTE_SHARPENEDGE;Okraj PARTIALPASTE_HLRECONSTRUCTION;Rekonstrukce světel PARTIALPASTE_HLRECOVERYAMOUNT;Míra obnovení světel PARTIALPASTE_HLRECOVERY;Obnovení světel @@ -535,7 +535,7 @@ PARTIALPASTE_LENSGROUP;Nastavení objektivu PARTIALPASTE_LUMADENOISE;Redukce šumu v jasech PARTIALPASTE_LUMINANCEGROUP;Nastavení jasu PARTIALPASTE_METAICMGROUP;Nastavení metadat a ICM -PARTIALPASTE_MICROCONTRAST;Mikrokontrast +PARTIALPASTE_SHARPENMICRO;Mikrokontrast PARTIALPASTE_PERSPECTIVE;Perspektiva PARTIALPASTE_PREPROCESS_GREENEQUIL;Vyrovnání zelené PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Aplikovat filtr na vypálené/mrtvé body @@ -738,13 +738,14 @@ TOOLBAR_TOOLTIP_WB;Bodové vyvážení bílé W TP_CACORRECTION_BLUE;Modrá TP_CACORRECTION_LABEL;Úprava chromatické vady TP_CACORRECTION_RED;Červená -TP_CLARITY_LABEL;Ostrost a doostření -TP_CLARITY_MATRIX;Matice 3x3 místo 5x5 -TP_CLARITY_MICRO;Mikrokontrast (textura) -TP_CLARITY_PASSES;Průchody gradientu -TP_CLARITY_SHARPEN;Gradient ostření (okraj) -TP_CLARITY_STRENGTH;Síla gradientu -TP_CLARITY_THREE;Pouze jas +TP_SHARPENEDGE_AMOUNT;Míra +TP_SHARPENEDGE_LABEL;Okraj +TP_SHARPENEDGE_PASSES;Průchody gradientu +TP_SHARPENEDGE_THREE;Pouze jas +TP_SHARPENMICRO_AMOUNT;Míra +TP_SHARPENMICRO_LABEL;Mikrokontrast +TP_SHARPENMICRO_MATRIX;Matice 3×3 místo 5×5 +TP_SHARPENMICRO_UNIFORMITY;Jednolitost TP_COARSETRAF_DEGREE;Stupeň: TP_COARSETRAF_TOOLTIP_HFLIP;Překlopit horizontálně TP_COARSETRAF_TOOLTIP_ROTLEFT;Otočit doleva @@ -893,8 +894,6 @@ TP_LENSGEOM_LABEL;Objektiv / Geometrie TP_LUMADENOISE_EDGETOLERANCE;Tolerance okrajům TP_LUMADENOISE_LABEL;Redukce šumu v jasech TP_LUMADENOISE_RADIUS;Poloměr -TP_MLMICRO_STRENGTH;Síla -TP_MLMICRO_UNIFORMITY;Jednolitost TP_PERSPECTIVE_HORIZONTAL;Vodorovně TP_PERSPECTIVE_LABEL;Perspektiva TP_PERSPECTIVE_VERTICAL;Svisle diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index 4af1359ef..7738d1602 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -529,7 +529,7 @@ PARTIALPASTE_FLATFIELDAUTOSELECT;Weißbild: Automatische Auswahl PARTIALPASTE_FLATFIELDBLURRADIUS;Weißbild: Unschärferadius PARTIALPASTE_FLATFIELDBLURTYPE;Weißbild: Unschärfetyp PARTIALPASTE_FLATFIELDFILE;Weißbild: Datei -PARTIALPASTE_GRADIENTSHARPEN;Kantenschärfung +PARTIALPASTE_SHARPENEDGE;Kantenschärfung PARTIALPASTE_HLRECONSTRUCTION;Lichter wiederherstellen PARTIALPASTE_HLRECOVERY;Lichter wiederherstellen PARTIALPASTE_HLRECOVERYAMOUNT;Lichter wiederherstellen\nStärke @@ -543,7 +543,7 @@ PARTIALPASTE_LENSGROUP;Gruppe Objektivkorrekturen PARTIALPASTE_LUMADENOISE;Luminanz-Rauschfilter PARTIALPASTE_LUMINANCEGROUP;Gruppe Luminanzeinstellungen PARTIALPASTE_METAICMGROUP;Gruppe Metadaten / ICM -PARTIALPASTE_MICROCONTRAST;Mikrokontrast +PARTIALPASTE_SHARPENMICRO;Mikrokontrast PARTIALPASTE_PERSPECTIVE;Perspektive PARTIALPASTE_PREPROCESS_GREENEQUIL;Vorverarbeitung: Grün-Ausgleich PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Vorverarbeitung: Hot/Dead-Pixel-Filter anwenden @@ -756,13 +756,14 @@ TP_CHMIXER_GREEN;Grün TP_CHMIXER_LABEL;Kanal-Mixer TP_CHMIXER_RED;Rot TP_CHROMATABERR_LABEL;Chromatische Aberration -TP_CLARITY_LABEL;Lokale Schärfung -TP_CLARITY_MATRIX;3×3-Matrix statt 5×5-Matrix -TP_CLARITY_MICRO;Mikrokontrast -TP_CLARITY_PASSES;Iterationen -TP_CLARITY_SHARPEN;Kantenschärfung -TP_CLARITY_STRENGTH;Quantität -TP_CLARITY_THREE;Nur Luminanz +TP_SHARPENEDGE_AMOUNT;Quantität +TP_SHARPENEDGE_LABEL;Kantenschärfung +TP_SHARPENEDGE_PASSES;Iterationen +TP_SHARPENEDGE_THREE;Nur Luminanz +TP_SHARPENMICRO_AMOUNT;Quantität +TP_SHARPENMICRO_LABEL;Mikrokontrast +TP_SHARPENMICRO_MATRIX;3×3-Matrix statt 5×5-Matrix +TP_SHARPENMICRO_UNIFORMITY;Gleichmäßigkeit TP_COARSETRAF_DEGREE;Grad: TP_COARSETRAF_TOOLTIP_HFLIP;Horizontal spiegeln TP_COARSETRAF_TOOLTIP_ROTLEFT;Nach links drehen [ @@ -908,8 +909,6 @@ TP_LENSGEOM_LABEL;Objektivkorrekturen TP_LUMADENOISE_EDGETOLERANCE;Kantentoleranz TP_LUMADENOISE_LABEL;Luminanz-Rauschfilter TP_LUMADENOISE_RADIUS;Radius -TP_MLMICRO_STRENGTH;Quantität -TP_MLMICRO_UNIFORMITY;Gleichmäßigkeit TP_PERSPECTIVE_HORIZONTAL;Horizontal TP_PERSPECTIVE_LABEL;Perspektive TP_PERSPECTIVE_VERTICAL;Vertikal diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index 39d161ed2..ad7557828 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -514,7 +514,7 @@ PARTIALPASTE_FLATFIELDAUTOSELECT;Sélection auto du Champ Uniforme PARTIALPASTE_FLATFIELDBLURRADIUS;Rayon de floutage du Champ Uniforme PARTIALPASTE_FLATFIELDBLURTYPE;Type de floutage du Champ Uniforme PARTIALPASTE_FLATFIELDFILE;Fichier de Champ Uniforme -PARTIALPASTE_GRADIENTSHARPEN;Détail local +PARTIALPASTE_SHARPENEDGE;Bords PARTIALPASTE_HLRECONSTRUCTION;Reconstruction des hautes lumières PARTIALPASTE_HLRECOVERY;Récupération des hautes lumières PARTIALPASTE_HLRECOVERYAMOUNT;Quantité de récup. des hautes lumières @@ -528,7 +528,7 @@ PARTIALPASTE_LENSGROUP;Réglages de l'objectif PARTIALPASTE_LUMADENOISE;Réduction du bruit de luminance PARTIALPASTE_LUMINANCEGROUP;Réglages de la luminance PARTIALPASTE_METAICMGROUP;Réglages des Métadonnées/ICM -PARTIALPASTE_MICROCONTRAST;Microcontraste +PARTIALPASTE_SHARPENMICRO;Microcontraste PARTIALPASTE_PERSPECTIVE;Perspective PARTIALPASTE_PREPROCESS_GREENEQUIL;Équilibrage du vert PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Filtrage des pixels chauds/morts @@ -748,15 +748,14 @@ TP_CHMIXER_GREEN;Vert TP_CHMIXER_LABEL;Mixage des canaux TP_CHMIXER_RED;Rouge TP_CHROMATABERR_LABEL;Aberration Chromatique -TP_CLARITY_LABEL;Clareté et netteté -TP_CLARITY_SHARPEN;Netteté des Bords -TP_CLARITY_STRENGTH;Quantité -TP_CLARITY_PASSES;Itérations -TP_CLARITY_MICRO;Microcontraste -TP_CLARITY_THREE;Luminance uniquement -TP_CLARITY_MATRIX;Matrice 3x3 au lieu de 5x5 -TP_MLMICRO_STRENGTH;Quantité -TP_MLMICRO_UNIFORMITY;Uniformité +TP_SHARPENEDGE_AMOUNT;Quantité +TP_SHARPENEDGE_LABEL;Bords +TP_SHARPENEDGE_PASSES;Itérations +TP_SHARPENEDGE_THREE;Luminance uniquement +TP_SHARPENMICRO_AMOUNT;Quantité +TP_SHARPENMICRO_LABEL;Microcontraste +TP_SHARPENMICRO_MATRIX;Matrice 3×3 au lieu de 5×5 +TP_SHARPENMICRO_UNIFORMITY;Uniformité TP_COARSETRAF_DEGREE;degré: TP_COARSETRAF_TOOLTIP_HFLIP;Symétriser / axe vertical TP_COARSETRAF_TOOLTIP_ROTLEFT;Rotation vers la gauche diff --git a/rtdata/languages/Italian b/rtdata/languages/Italian index 5efbd182d..6aa206a82 100644 --- a/rtdata/languages/Italian +++ b/rtdata/languages/Italian @@ -519,7 +519,7 @@ PARTIALPASTE_FLATFIELDAUTOSELECT;Autoselezione FF PARTIALPASTE_FLATFIELDBLURRADIUS;Raggio di sfocamento FF PARTIALPASTE_FLATFIELDBLURTYPE;Modalità di sfocamento FF PARTIALPASTE_FLATFIELDFILE;File di Flat-Field -PARTIALPASTE_GRADIENTSHARPEN;Acutanza +PARTIALPASTE_SHARPENEDGE;Bordi PARTIALPASTE_HLRECONSTRUCTION;Ricostruzione alteluci PARTIALPASTE_HLRECOVERY;Recupero alteluci PARTIALPASTE_HLRECOVERYAMOUNT;Quantità di recupero alteluci @@ -533,7 +533,7 @@ PARTIALPASTE_LENSGROUP;Parametri correlati all'ottica PARTIALPASTE_LUMADENOISE;Riduzione rumore di luminanza PARTIALPASTE_LUMINANCEGROUP;Parametri riguardanti la luminanza PARTIALPASTE_METAICMGROUP;Parametri di metadati e ICM -PARTIALPASTE_MICROCONTRAST;Microcontrasto +PARTIALPASTE_SHARPENMICRO;Microcontrasto PARTIALPASTE_PERSPECTIVE;Prospettiva PARTIALPASTE_PREPROCESS_GREENEQUIL;Uniformazione del verde PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Interpolazione dei pixel surriscaldati/guasti @@ -746,15 +746,14 @@ TP_CHMIXER_GREEN;Verde TP_CHMIXER_LABEL;Miscelatore canali TP_CHMIXER_RED;Rosso TP_CHROMATABERR_LABEL;Aberrazioni cromatiche -TP_CLARITY_LABEL;Acutanza -TP_CLARITY_SHARPEN;Gradiente ai margini -TP_CLARITY_STRENGTH;Quantità -TP_CLARITY_PASSES;Iterazioni -TP_CLARITY_MICRO;Microcontrasto -TP_CLARITY_THREE;Solo per luminanza -TP_CLARITY_MATRIX;Matrice 3x3 invece di 5x5 -TP_MLMICRO_STRENGTH;Quantità -TP_MLMICRO_UNIFORMITY;Uniformità +TP_SHARPENEDGE_AMOUNT;Quantità +TP_SHARPENEDGE_LABEL;Bordi +TP_SHARPENEDGE_PASSES;Iterazioni +TP_SHARPENEDGE_THREE;Solo per luminanza +TP_SHARPENMICRO_AMOUNT;Quantità +TP_SHARPENMICRO_LABEL;Microcontrasto +TP_SHARPENMICRO_MATRIX;Matrice 3×3 invece di 5×5 +TP_SHARPENMICRO_UNIFORMITY;Uniformità TP_COARSETRAF_DEGREE;Angolo: TP_COARSETRAF_TOOLTIP_HFLIP;Rifletti orizzontalmente TP_COARSETRAF_TOOLTIP_ROTLEFT;Ruota a sinistra diff --git a/rtdata/languages/default b/rtdata/languages/default index 1e0521dbc..19d41711c 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -513,7 +513,7 @@ PARTIALPASTE_FLATFIELDAUTOSELECT;FF Auto Select PARTIALPASTE_FLATFIELDBLURRADIUS;FF Blur Radius PARTIALPASTE_FLATFIELDBLURTYPE;FF Blur Type PARTIALPASTE_FLATFIELDFILE;Flat field (FF) File -PARTIALPASTE_GRADIENTSHARPEN;Local Sharpening +PARTIALPASTE_SHARPENEDGE;Edges PARTIALPASTE_HLRECONSTRUCTION;Highlight reconstruction PARTIALPASTE_HLRECOVERY;Highlight recovery PARTIALPASTE_HLRECOVERYAMOUNT;Highlight recovery amount @@ -527,7 +527,7 @@ PARTIALPASTE_LENSGROUP;Lens related settings PARTIALPASTE_LUMADENOISE;Luminance noise reduction PARTIALPASTE_LUMINANCEGROUP;Luminance related settings PARTIALPASTE_METAICMGROUP;Metadata/ICM settings -PARTIALPASTE_MICROCONTRAST;Microcontrast +PARTIALPASTE_SHARPENMICRO;Microcontrast PARTIALPASTE_PERSPECTIVE;Perspective PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Apply hot/dead pixel filter @@ -740,15 +740,14 @@ TP_CHMIXER_GREEN;Green TP_CHMIXER_LABEL;Channel Mixer TP_CHMIXER_RED;Red TP_CHROMATABERR_LABEL;Chromatic Aberration -TP_CLARITY_LABEL;Local Sharpening -TP_CLARITY_SHARPEN;Edges Sharpening -TP_CLARITY_STRENGTH;Quantity -TP_CLARITY_PASSES;Iterations -TP_CLARITY_MICRO;Microcontrast -TP_CLARITY_THREE;Luminance only -TP_CLARITY_MATRIX;3x3 matrix instead of 5x5 -TP_MLMICRO_STRENGTH;Quantity -TP_MLMICRO_UNIFORMITY;Uniformity +TP_SHARPENEDGE_AMOUNT;Quantity +TP_SHARPENEDGE_LABEL;Edges +TP_SHARPENEDGE_PASSES;Iterations +TP_SHARPENEDGE_THREE;Luminance only +TP_SHARPENMICRO_AMOUNT;Quantity +TP_SHARPENMICRO_LABEL;Microcontrast +TP_SHARPENMICRO_MATRIX;33 matrix instead of 55 +TP_SHARPENMICRO_UNIFORMITY;Uniformity TP_COARSETRAF_DEGREE;degree: TP_COARSETRAF_TOOLTIP_HFLIP;Flip horizontally TP_COARSETRAF_TOOLTIP_ROTLEFT;Rotate left [ diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index bbc237a44..8472d9e80 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -255,11 +255,11 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) { ipf.defringe (nprevl); progress ("Denoising luma/chroma...",100*readyphase/numofphases); ipf.dirpyrdenoise (nprevl); - if (params.clarity.enabled) { - progress ("Clarity...",100*readyphase/numofphases); + if (params.sharpenEdge.enabled) { + progress ("Edge sharpening...",100*readyphase/numofphases); ipf.MLsharpen (nprevl); } - if (params.clarity.enabledtwo) { + if (params.sharpenMicro.enabled) { progress ("Microcontrast...",100*readyphase/numofphases); ipf.MLmicrocontrast (nprevl); } diff --git a/rtengine/ipsharpen.cc b/rtengine/ipsharpen.cc index 397bf43a5..9fb2a7e74 100644 --- a/rtengine/ipsharpen.cc +++ b/rtengine/ipsharpen.cc @@ -239,7 +239,7 @@ void ImProcFunctions::sharpenHaloCtrl (LabImage* lab, float** blurmap, float** b } } -// To the extent possible under law, Manuel Llorens [ +// To the extent possible under law, Manuel Llorens // has waived all copyright and related or neighboring rights to this work. // This work is published from: Spain. @@ -247,7 +247,7 @@ void ImProcFunctions::sharpenHaloCtrl (LabImage* lab, float** blurmap, float** b void ImProcFunctions::MLsharpen (LabImage* lab) { // JD: this algorithm maximize clarity of images; it does not play on accutance. It can remove (partialy) the effects of the AA filter) // I think we can use this algorithm alone in most cases, or first to clarify image and if you want a very little USM (unsharp mask sharpening) after... - if (params->clarity.enabled==false) + if (params->sharpenEdge.enabled==false) return; MyTime t1e,t2e; t1e.set(); @@ -260,13 +260,13 @@ void ImProcFunctions::MLsharpen (LabImage* lab) { float templab; int iii,kkk; width2 = 2*width; - float strength; - strength = params->clarity.clstrength / 100.0f; - if (strength < 0.00001f) + float amount; + amount = params->sharpenEdge.amount / 100.0f; + if (amount < 0.00001f) return; if (settings->verbose) - printf ("Clarity strength %f\n", strength); + printf ("SharpenEdge amount %f\n", amount); L = new float[width*height]; @@ -275,13 +275,13 @@ void ImProcFunctions::MLsharpen (LabImage* lab) { chmax[2] = 3.0f; int channels; - if (params->clarity.clthreechannels) channels=0; else channels=2; + if (params->sharpenEdge.threechannels) channels=0; else channels=2; if (settings->verbose) - printf ("Clarity channels %d\n", channels); + printf ("SharpenEdge channels %d\n", channels); - int passes=params->clarity.clpasses; + int passes=params->sharpenEdge.passes; if (settings->verbose) - printf ("Clarity passes %d\n", passes); + printf ("SharpenEdge passes %d\n", passes); for (p=0; pa[ii][kk]/327.68f; else if (c==2) L[offset] = lab->b[ii][kk]/327.68f; } -#pragma omp parallel for private(j,i,iii,kkk, templab,offset,wH,wV,wD1,wD2,s,lumH,lumV,lumD1,lumD2,v,contrast,f1,f2,f3,f4,difT,difB,difL,difR,difLT,difLB,difRT,difRB) shared(lab,L,strength) +#pragma omp parallel for private(j,i,iii,kkk, templab,offset,wH,wV,wD1,wD2,s,lumH,lumV,lumD1,lumD2,v,contrast,f1,f2,f3,f4,difT,difB,difL,difR,difLT,difLB,difRT,difRB) shared(lab,L,amount) for(j=2; j0.05f))||((fabs(wV/wH)<0.45f)&&(fabs(wV/wH)>0.05f))) - s = strength/3.0f; + s = amount/3.0f; // final mix if ((wH!=0.0f)&&(wV!=0.0f)&&(wD1!=0.0f)&&(wD2!=0.0f)) { @@ -413,7 +413,7 @@ void ImProcFunctions::MLsharpen (LabImage* lab) { t2e.set(); if (settings->verbose) - printf("Clarity gradient %d usec\n", t2e.etime(t1e)); + printf("SharpenEdge gradient %d usec\n", t2e.etime(t1e)); } // To the extent possible under law, Manuel Llorens @@ -422,30 +422,30 @@ void ImProcFunctions::MLsharpen (LabImage* lab) { // http://creativecommons.org/publicdomain/zero/1.0/ // addition from JD : pyramid + ponderated contrast with matrix 5x5 void ImProcFunctions::MLmicrocontrast(LabImage* lab) { - if (params->clarity.enabledtwo==false) + if (params->sharpenMicro.enabled==false) return; MyTime t1e,t2e; t1e.set(); int k; - if (params->clarity.MLmicromatrix == false) k=2; else k=1; + if (params->sharpenMicro.matrix == false) k=2; else k=1; // k=2 matrix 5x5 k=1 matrix 3x3 int offset,offset2,c,i,j,col,row,n; float temp,temp2,temp3,temp4,tempL; float *LM,v,s,contrast,w; int signs[25]; int width = lab->W, height = lab->H; - float uniform = params->clarity.uniformity;//between 0 to 100 + float uniform = params->sharpenMicro.uniformity;//between 0 to 100 int unif; unif = (int)(uniform/10.0f); //put unif between 0 to 10 - float strength = params->clarity.mlstrength/1500.0f; //strength 2000.0 quasi no artefacts ==> 1500 = maximum, after artefacts - if (strength < 0.000001f) + float amount = params->sharpenMicro.amount/1500.0f; //amount 2000.0 quasi no artefacts ==> 1500 = maximum, after artefacts + if (amount < 0.000001f) return; if (k==1) - strength *= 2.7f; //25/9 if 3x3 + amount *= 2.7f; //25/9 if 3x3 if (settings->verbose) - printf ("Microcontrast strength %f\n", strength); + printf ("Micro-contrast amount %f\n", amount); if (settings->verbose) - printf ("Microcontrast uniformity %i\n",unif); + printf ("Micro-contrast uniformity %i\n",unif); //modulation uniformity in function of luminance float L98[11] = {0.001f,0.0015f,0.002f,0.004f,0.006f,0.008f,0.01f,0.03f,0.05f,0.1f,0.1f}; float L95[11] = {0.0012f,0.002f,0.005f,0.01f,0.02f,0.05f,0.1f,0.12f,0.15f,0.2f,0.25f}; @@ -476,10 +476,10 @@ void ImProcFunctions::MLmicrocontrast(LabImage* lab) { LM[offset] = lab->L[j][i]/327.68f;// adjust to 0.100 and to RT variables } -#pragma omp parallel for private(j,i,offset,s,signs,v,n,row,col,offset2,contrast,temp,w,temp2,temp3,tempL,temp4) shared(lab,LM,strength,chmax,unif,k,L98,L95,L92,L90,L87,L83,L80,L75,L70,L63,L58,Cont0,Cont1,Cont2,Cont3,Cont4,Cont5) +#pragma omp parallel for private(j,i,offset,s,signs,v,n,row,col,offset2,contrast,temp,w,temp2,temp3,tempL,temp4) shared(lab,LM,amount,chmax,unif,k,L98,L95,L92,L90,L87,L83,L80,L75,L70,L63,L58,Cont0,Cont1,Cont2,Cont3,Cont4,Cont5) for(j=k; jverbose) - printf("Microcontrast %d usec\n", t2e.etime(t1e)); + printf("Micro-contrast %d usec\n", t2e.etime(t1e)); } diff --git a/rtengine/procevents.h b/rtengine/procevents.h index acafce8c1..67e6aec43 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -163,14 +163,14 @@ enum ProcEvent { EvPreProcessExpBlacktwo=138, EvPreProcessExpBlackthree=139, EvPreProcessExptwoGreen=140, - EvClaritypasses=141, - EvClaritystrength=142, - EvMLmicrostrength=143, - EvMLuniformity=144, - EvClarityEnabled=145, - EvClaritythreechannels=146, - EvClarityEnabledtwo=147, - EvClaritymatrix=148, + EvSharpenEdgePasses=141, + EvSharpenEdgeAmount=142, + EvSharpenMicroAmount=143, + EvSharpenMicroUniformity=144, + EvSharpenEdgeEnabled=145, + EvSharpenEdgeThreechannels=146, + EvSharpenMicroEnabled=147, + EvSharpenMicroMatrix=148, EvDemosaicALLEnhanced=149, NUMOFEVENTS=150 diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 227f3b2f4..04a1771c0 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -91,15 +91,16 @@ void ProcParams::setDefaults () { labCurve.bcurve.clear (); labCurve.bcurve.push_back(DCT_Linear); - clarity.enabled = false; - clarity.clpasses = 2; - clarity.clstrength = 50.0; - clarity.enabledtwo = false; - clarity.mlstrength = 20.0; - clarity.uniformity = 50.0; - clarity.clthreechannels = false; - clarity.MLmicromatrix = false; - + sharpenEdge.enabled = false; + sharpenEdge.passes = 2; + sharpenEdge.amount = 50.0; + sharpenEdge.threechannels = false; + + sharpenMicro.enabled = false; + sharpenMicro.amount = 20.0; + sharpenMicro.uniformity = 50.0; + sharpenMicro.matrix = false; + sharpening.enabled = false; sharpening.radius = 1.0; sharpening.amount = 90; @@ -311,15 +312,15 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2) const { // save luma curve keyFile.set_integer ("Luminance Curve", "Brightness", labCurve.brightness); keyFile.set_integer ("Luminance Curve", "Contrast", labCurve.contrast); - keyFile.set_integer ("Luminance Curve", "Saturation", labCurve.saturation); - keyFile.set_boolean ("Luminance Curve", "AvoidColorClipping", labCurve.avoidclip); + keyFile.set_integer ("Luminance Curve", "Saturation", labCurve.saturation); + keyFile.set_boolean ("Luminance Curve", "AvoidColorClipping", labCurve.avoidclip); keyFile.set_boolean ("Luminance Curve", "SaturationLimiter", labCurve.enable_saturationlimiter); keyFile.set_double ("Luminance Curve", "SaturationLimit", labCurve.saturationlimit); Glib::ArrayHandle lcurve = labCurve.lcurve; - Glib::ArrayHandle acurve = labCurve.acurve; + Glib::ArrayHandle acurve = labCurve.acurve; Glib::ArrayHandle bcurve = labCurve.bcurve; keyFile.set_double_list("Luminance Curve", "LCurve", lcurve); - keyFile.set_double_list("Luminance Curve", "aCurve", acurve); + keyFile.set_double_list("Luminance Curve", "aCurve", acurve); keyFile.set_double_list("Luminance Curve", "bCurve", bcurve); // save sharpening @@ -337,17 +338,19 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2) const { keyFile.set_integer ("Sharpening", "DeconvAmount", sharpening.deconvamount); keyFile.set_integer ("Sharpening", "DeconvDamping", sharpening.deconvdamping); keyFile.set_integer ("Sharpening", "DeconvIterations", sharpening.deconviter); - //save clarity - keyFile.set_boolean ("Clarity", "Enabled", clarity.enabled); - keyFile.set_integer ("Clarity", "Clpasses", clarity.clpasses); - keyFile.set_double ("Clarity", "Clstrength", clarity.clstrength); - keyFile.set_boolean ("Clarity", "Clthreechannels", clarity.clthreechannels); - keyFile.set_boolean ("Clarity", "Enabledtwo", clarity.enabledtwo); - keyFile.set_double ("Clarity", "Mlstrength", clarity.mlstrength); - keyFile.set_double ("Clarity", "Uniformity", clarity.uniformity); - keyFile.set_boolean ("Clarity", "Matrix", clarity.MLmicromatrix); - + //save edge sharpening + keyFile.set_boolean ("SharpenEdge", "Enabled", sharpenEdge.enabled); + keyFile.set_integer ("SharpenEdge", "Passes", sharpenEdge.passes); + keyFile.set_double ("SharpenEdge", "Strength", sharpenEdge.amount); + keyFile.set_boolean ("SharpenEdge", "ThreeChannels", sharpenEdge.threechannels); + + //save micro-contrast sharpening + keyFile.set_boolean ("SharpenMicro", "Enabled", sharpenMicro.enabled); + keyFile.set_boolean ("SharpenMicro", "Matrix", sharpenMicro.matrix); + keyFile.set_double ("SharpenMicro", "Strength", sharpenMicro.amount); + keyFile.set_double ("SharpenMicro", "Uniformity", sharpenMicro.uniformity); + // save colorBoost keyFile.set_integer ("Color Boost", "Amount", colorBoost.amount); keyFile.set_boolean ("Color Boost", "AvoidColorClipping", colorBoost.avoidclip); @@ -647,21 +650,22 @@ if (keyFile.has_group ("Sharpening")) { if (keyFile.has_key ("Sharpening", "DeconvIterations")) sharpening.deconviter = keyFile.get_integer ("Sharpening", "DeconvIterations"); } - -if (keyFile.has_group ("Clarity")) { - if (keyFile.has_key ("Clarity", "Enabled")) clarity.enabled = keyFile.get_boolean ("Clarity", "Enabled"); - if (keyFile.has_key ("Clarity", "Clpasses")) clarity.clpasses = keyFile.get_integer ("Clarity", "Clpasses"); - if (keyFile.has_key ("Clarity", "Clstrength")) clarity.clstrength = keyFile.get_double ("Clarity", "Clstrength"); - if (keyFile.has_key ("Clarity", "Clthreechannels")) clarity.clthreechannels = keyFile.get_boolean ("Clarity", "Clthreechannels"); - if (keyFile.has_key ("Clarity", "Enabledtwo")) clarity.enabledtwo = keyFile.get_boolean ("Clarity", "Enabledtwo"); - if (keyFile.has_key ("Clarity", "Matrix")) clarity.MLmicromatrix = keyFile.get_boolean ("Clarity", "Matrix"); - - if (keyFile.has_key ("Clarity", "Mlstrength")) clarity.mlstrength = keyFile.get_double ("Clarity", "Mlstrength"); - if (keyFile.has_key ("Clarity", "Uniformity")) clarity.uniformity = keyFile.get_double ("Clarity", "Uniformity"); - - + // load edge sharpening +if (keyFile.has_group ("SharpenEdge")) { + if (keyFile.has_key ("SharpenEdge", "Enabled")) sharpenEdge.enabled = keyFile.get_boolean ("SharpenEdge", "Enabled"); + if (keyFile.has_key ("SharpenEdge", "Passes")) sharpenEdge.passes = keyFile.get_integer ("SharpenEdge", "Passes"); + if (keyFile.has_key ("SharpenEdge", "Strength")) sharpenEdge.amount = keyFile.get_double ("SharpenEdge", "Strength"); + if (keyFile.has_key ("SharpenEdge", "ThreeChannels")) sharpenEdge.threechannels = keyFile.get_boolean ("SharpenEdge", "ThreeChannels"); } - + + // load micro-contrast sharpening +if (keyFile.has_group ("SharpenMicro")) { + if (keyFile.has_key ("SharpenMicro", "Enabled")) sharpenMicro.enabled = keyFile.get_boolean ("SharpenMicro", "Enabled"); + if (keyFile.has_key ("SharpenMicro", "Matrix")) sharpenMicro.matrix = keyFile.get_boolean ("SharpenMicro", "Matrix"); + if (keyFile.has_key ("SharpenMicro", "Strength")) sharpenMicro.amount = keyFile.get_double ("SharpenMicro", "Strength"); + if (keyFile.has_key ("SharpenMicro", "Uniformity")) sharpenMicro.uniformity = keyFile.get_double ("SharpenMicro", "Uniformity"); +} + // load colorBoost if (keyFile.has_group ("Color Boost")) { if (keyFile.has_key ("Color Boost", "Amount")) colorBoost.amount = keyFile.get_integer ("Color Boost", "Amount"); @@ -953,14 +957,14 @@ bool ProcParams::operator== (const ProcParams& other) { && labCurve.avoidclip == other.labCurve.avoidclip && labCurve.enable_saturationlimiter == other.labCurve.enable_saturationlimiter && labCurve.saturationlimit == other.labCurve.saturationlimit - && clarity.enabled == other.clarity.enabled - && clarity.clpasses == other.clarity.clpasses - && clarity.clstrength == other.clarity.clstrength - && clarity.enabledtwo == other.clarity.enabledtwo - && clarity.mlstrength == other.clarity.mlstrength - && clarity.uniformity == other.clarity.uniformity - && clarity.MLmicromatrix == other.clarity.MLmicromatrix - && clarity.clthreechannels == other.clarity.clthreechannels + && sharpenEdge.enabled == other.sharpenEdge.enabled + && sharpenEdge.passes == other.sharpenEdge.passes + && sharpenEdge.amount == other.sharpenEdge.amount + && sharpenEdge.threechannels == other.sharpenEdge.threechannels + && sharpenMicro.enabled == other.sharpenMicro.enabled + && sharpenMicro.matrix == other.sharpenMicro.matrix + && sharpenMicro.amount == other.sharpenMicro.amount + && sharpenMicro.uniformity == other.sharpenMicro.uniformity && sharpening.enabled == other.sharpening.enabled && sharpening.radius == other.sharpening.radius && sharpening.amount == other.sharpening.amount diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 8a2d53f0e..35340cb26 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -38,7 +38,7 @@ class ToneCurveParams { int brightness; int black; int contrast; - int saturation; + int saturation; int shcompr; int hlcompr; int hlcomprthresh; @@ -51,14 +51,14 @@ class LCurveParams { public: std::vector lcurve; - std::vector acurve; - std::vector bcurve; - int brightness; - int contrast; - int saturation; - bool avoidclip; - bool enable_saturationlimiter; - double saturationlimit; + std::vector acurve; + std::vector bcurve; + int brightness; + int contrast; + int saturation; + bool avoidclip; + bool enable_saturationlimiter; + double saturationlimit; }; /** @@ -76,23 +76,25 @@ class SharpeningParams { int edges_tolerance; bool halocontrol; int halocontrol_amount; - Glib::ustring method; int deconvamount; double deconvradius; int deconviter; int deconvdamping; }; -class ClarityParams { +class SharpenEdgeParams { public: bool enabled; - int clpasses; - double clstrength; - bool enabledtwo; - double mlstrength; - bool clthreechannels; - double uniformity; - bool MLmicromatrix; + int passes; + double amount; + bool threechannels; +}; +class SharpenMicroParams { + public: + bool enabled; + bool matrix; + double amount; + double uniformity; }; /** * Parameters of the color boost @@ -448,7 +450,8 @@ class ProcParams { ToneCurveParams toneCurve; ///< Tone curve parameters LCurveParams labCurve; ///< CIELAB luminance curve parameters SharpeningParams sharpening; ///< Sharpening parameters - ClarityParams clarity; ///< clarity parameters + SharpenEdgeParams sharpenEdge; ///< Sharpen edge parameters + SharpenMicroParams sharpenMicro; ///< Sharpen microcontrast parameters ColorBoostParams colorBoost; ///< Color boost parameters WBParams wb; ///< White balance parameters ColorShiftParams colorShift; ///< Color shift parameters diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index b5a5f72ae..3b5a91c1a 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -152,24 +152,24 @@ FLATFIELD, // EvFlatFieldBlurType, TRANSFORM, // EvAutoDIST, DIRPYRDENOISE, // EvDPDNLumCurve, DIRPYRDENOISE, // EvDPDNChromCurve, -ALL, // EvGAMMA -ALL, // EvGAMPOS -ALL, //EvGAMFREE -ALL, //EvSLPOS +ALL, // EvGAMMA +ALL, // EvGAMPOS +ALL, // EvGAMFREE +ALL, // EvSLPOS DARKFRAME, // EvPreProcessExpBlackzero DARKFRAME, // EvPreProcessExpBlackone DARKFRAME, // EvPreProcessExpBlacktwo DARKFRAME, // EvPreProcessExpBlackthree -DARKFRAME, //EvPreProcessExptwoGreen -SHARPENING, //EvClaritypasses -SHARPENING, //EvClaritystrength -SHARPENING, //EvMLmicrostrength -SHARPENING, //EvMLuniformity -SHARPENING, //EvClarityEnabled -SHARPENING, //EvClaritythreechannels -SHARPENING, //EvClarityEnabledtwo -SHARPENING, //EvClaritymatrix -DEMOSAIC, // EvDemosaicALLEnhanced +DARKFRAME, // EvPreProcessExptwoGreen +SHARPENING, // EvSharpenEdgePasses +SHARPENING, // EvSharpenEdgeStrength +SHARPENING, // EvSharpenMicroStrength +SHARPENING, // EvSharpenMicroUniformity +SHARPENING, // EvSharpenEdgeEnabled +SHARPENING, // EvSharpenEdgeThreechannels +SHARPENING, // EvSharpenMicroEnabled +SHARPENING, // EvSharpenMicroMatrix +DEMOSAIC, // EvDemosaicALLEnhanced }; diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index a708c027e..93ca62102 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -177,10 +177,10 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p ipf.impulsedenoise (labView); ipf.defringe (labView); ipf.dirpyrdenoise (labView); - if (params.clarity.enabled) { + if (params.sharpenEdge.enabled) { ipf.MLsharpen(labView); } - if (params.clarity.enabledtwo) { + if (params.sharpenMicro.enabled) { ipf.MLmicrocontrast (labView); } if (params.sharpening.enabled) { diff --git a/rtgui/CMakeLists.txt b/rtgui/CMakeLists.txt index 1936480ca..89fb6210a 100644 --- a/rtgui/CMakeLists.txt +++ b/rtgui/CMakeLists.txt @@ -28,7 +28,7 @@ set (BASESOURCEFILES profilestore.cc partialpastedlg.cc rawprocess.cc preprocess.cc darkframe.cc flatfield.cc rawcacorrection.cc rawexposure.cc dirpyrequalizer.cc hsvequalizer.cc defringe.cc - popupcommon.cc popupbutton.cc popuptogglebutton.cc clarity.cc) + popupcommon.cc popupbutton.cc popuptogglebutton.cc sharpenedge.cc sharpenmicro.cc) if (WIN32) set (EXTRA_SRC windirmonitor.cc myicon.rc) diff --git a/rtgui/addsetids.h b/rtgui/addsetids.h index c24c8da77..26422fcd4 100644 --- a/rtgui/addsetids.h +++ b/rtgui/addsetids.h @@ -5,48 +5,48 @@ // UPDATE THE DEFAULT VALUE IN OPTIONS.CC TOO !!! -#define ADDSET_TC_EXPCOMP 0 -#define ADDSET_TC_BRIGHTNESS 1 -#define ADDSET_TC_BLACKLEVEL 2 -#define ADDSET_TC_CONTRAST 3 -#define ADDSET_SH_HIGHLIGHTS 4 -#define ADDSET_SH_SHADOWS 5 -#define ADDSET_SH_LOCALCONTRAST 6 -#define ADDSET_LC_BRIGHTNESS 7 -#define ADDSET_LC_CONTRAST 8 -#define ADDSET_SHARP_AMOUNT 9 +#define ADDSET_TC_EXPCOMP 0 +#define ADDSET_TC_BRIGHTNESS 1 +#define ADDSET_TC_BLACKLEVEL 2 +#define ADDSET_TC_CONTRAST 3 +#define ADDSET_SH_HIGHLIGHTS 4 +#define ADDSET_SH_SHADOWS 5 +#define ADDSET_SH_LOCALCONTRAST 6 +#define ADDSET_LC_BRIGHTNESS 7 +#define ADDSET_LC_CONTRAST 8 +#define ADDSET_SHARP_AMOUNT 9 #define ADDSET_LD_EDGETOLERANCE 10 -#define ADDSET_WB_TEMPERATURE 11 -#define ADDSET_WB_GREEN 12 -#define ADDSET_CBOOST_AMOUNT 13 -#define ADDSET_CS_BLUEYELLOW 14 -#define ADDSET_CS_GREENMAGENTA 15 -#define ADDSET_ROTATE_DEGREE 16 -#define ADDSET_DIST_AMOUNT 17 +#define ADDSET_WB_TEMPERATURE 11 +#define ADDSET_WB_GREEN 12 +#define ADDSET_CBOOST_AMOUNT 13 +#define ADDSET_CS_BLUEYELLOW 14 +#define ADDSET_CS_GREENMAGENTA 15 +#define ADDSET_ROTATE_DEGREE 16 +#define ADDSET_DIST_AMOUNT 17 #define ADDSET_PERSPECTIVE 18 -#define ADDSET_CA 19 -#define ADDSET_VIGN_AMOUNT 20 -#define ADDSET_LC_SATURATION 21 -#define ADDSET_TC_SATURATION 22 -#define ADDSET_TC_HLCOMPAMOUNT 23 -#define ADDSET_TC_HLCOMPTHRESH 24 -#define ADDSET_TC_SHCOMP 25 +#define ADDSET_CA 19 +#define ADDSET_VIGN_AMOUNT 20 +#define ADDSET_LC_SATURATION 21 +#define ADDSET_TC_SATURATION 22 +#define ADDSET_TC_HLCOMPAMOUNT 23 +#define ADDSET_TC_HLCOMPTHRESH 24 +#define ADDSET_TC_SHCOMP 25 -#define ADDSET_DIRPYREQ 26 +#define ADDSET_DIRPYREQ 26 #define ADDSET_DIRPYRDN_CHLUM 27 #define ADDSET_DIRPYRDN_GAMMA 28 #define ADDSET_CHMIXER 29 -#define ADDSET_PREPROCESS_GREENEQUIL 30 -#define ADDSET_PREPROCESS_LINEDENOISE 31 -#define ADDSET_RAWCACORR 32 -#define ADDSET_RAWEXPOS_LINEAR 33 -#define ADDSET_RAWEXPOS_PRESER 34 -#define ADDSET_RAWEXPOS_BLACKS 35 -#define ADDSET_CLAR_STREN 36 -#define ADDSET_CLAR_MLSTREN 37 -#define ADDSET_CLAR_PASS 38 -#define ADDSET_CLAR_UNIFORMITY 39 +#define ADDSET_PREPROCESS_GREENEQUIL 30 +#define ADDSET_PREPROCESS_LINEDENOISE 31 +#define ADDSET_RAWCACORR 32 +#define ADDSET_RAWEXPOS_LINEAR 33 +#define ADDSET_RAWEXPOS_PRESER 34 +#define ADDSET_RAWEXPOS_BLACKS 35 +#define ADDSET_SHARPENEDGE_AMOUNT 36 +#define ADDSET_SHARPENMICRO_AMOUNT 37 +#define ADDSET_SHARPENEDGE_PASS 38 +#define ADDSET_SHARPENMICRO_UNIFORMITY 39 // When adding items, make sure to update ADDSET_PARAM_NUM #define ADDSET_PARAM_NUM 40 // THIS IS USED AS A DELIMITER!! diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index dbbc4eb29..79b6ab052 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -126,7 +126,8 @@ void BatchToolPanelCoordinator::initSession () { perspective->setAdjusterBehavior (false); cacorrection->setAdjusterBehavior (false); sharpening->setAdjusterBehavior (false); - clarity->setAdjusterBehavior (false, false, false, false); + sharpenEdge->setAdjusterBehavior (false, false); + sharpenMicro->setAdjusterBehavior (false, false); chmixer->setAdjusterBehavior (false); shadowshighlights->setAdjusterBehavior (false, false, false); @@ -147,7 +148,8 @@ void BatchToolPanelCoordinator::initSession () { perspective->setAdjusterBehavior (options.baBehav[ADDSET_PERSPECTIVE]); cacorrection->setAdjusterBehavior (options.baBehav[ADDSET_CA]); sharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_AMOUNT]); - clarity->setAdjusterBehavior (options.baBehav[ADDSET_CLAR_STREN],options.baBehav[ADDSET_CLAR_MLSTREN],options.baBehav[ADDSET_CLAR_PASS],options.baBehav[ADDSET_CLAR_UNIFORMITY]); + sharpenEdge->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENEDGE_AMOUNT],options.baBehav[ADDSET_SHARPENEDGE_PASS]); + sharpenMicro->setAdjusterBehavior (options.baBehav[ADDSET_SHARPENMICRO_AMOUNT],options.baBehav[ADDSET_SHARPENMICRO_UNIFORMITY]); chmixer->setAdjusterBehavior (options.baBehav[ADDSET_CHMIXER]); shadowshighlights->setAdjusterBehavior (options.baBehav[ADDSET_SH_HIGHLIGHTS], options.baBehav[ADDSET_SH_SHADOWS], options.baBehav[ADDSET_SH_LOCALCONTRAST]); @@ -174,12 +176,11 @@ void BatchToolPanelCoordinator::initSession () { if (options.baBehav[ADDSET_LC_SATURATION]) pparams.labCurve.saturation = 0; if (options.baBehav[ADDSET_SHARP_AMOUNT]) pparams.sharpening.amount = 0; - if (options.baBehav[ADDSET_CLAR_STREN]) pparams.clarity.clstrength = 0; - if (options.baBehav[ADDSET_CLAR_MLSTREN]) pparams.clarity.mlstrength = 0; - if (options.baBehav[ADDSET_CLAR_PASS]) pparams.clarity.clpasses = 0; - if (options.baBehav[ADDSET_CLAR_UNIFORMITY]) pparams.clarity.uniformity = 0; - - + if (options.baBehav[ADDSET_SHARPENEDGE_AMOUNT]) pparams.sharpenEdge.amount = 0; + if (options.baBehav[ADDSET_SHARPENMICRO_AMOUNT]) pparams.sharpenMicro.amount = 0; + if (options.baBehav[ADDSET_SHARPENEDGE_PASS]) pparams.sharpenEdge.passes = 0; + if (options.baBehav[ADDSET_SHARPENMICRO_UNIFORMITY]) pparams.sharpenMicro.uniformity = 0; + if (options.baBehav[ADDSET_CHMIXER]) for (int i=0; i<3; i++) pparams.chmixer.red[i] = pparams.chmixer.green[i] = pparams.chmixer.blue[i] = 0; if (options.baBehav[ADDSET_LD_EDGETOLERANCE]) pparams.lumaDenoise.edgetolerance = 0; diff --git a/rtgui/clarity.cc b/rtgui/clarity.cc deleted file mode 100644 index 2194361ce..000000000 --- a/rtgui/clarity.cc +++ /dev/null @@ -1,344 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * RawTherapee is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * RawTherapee is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with RawTherapee. If not, see . - */ -#include -#include -#include -#include -#include -#include - - - -using namespace rtengine; -using namespace rtengine::procparams; - - - -Clarity::Clarity () : Gtk::VBox(), FoldableToolPanel(this) -{ - set_border_width(4); - set_spacing(4); - - //******************************** SHARPEN - - Gtk::Frame *sharpenFrame = Gtk::manage (new Gtk::Frame(M("TP_CLARITY_SHARPEN"))); - Gtk::VBox *sharpenVBox = Gtk::manage (new Gtk::VBox()); - sharpenVBox->set_spacing(2); - - enabled = Gtk::manage (new Gtk::CheckButton (M("GENERAL_ENABLED"))); - enabled->set_active (true); - sharpenVBox->pack_start(*enabled, Gtk::PACK_SHRINK, 0); - - Claritypasses = Gtk::manage(new Adjuster (M("TP_CLARITY_PASSES"),1,4,1,1)); - Claritypasses->setAdjusterListener (this); - if (Claritypasses->delay < 1000) Claritypasses->delay = 1000; - Claritystrength = Gtk::manage(new Adjuster (M("TP_CLARITY_STRENGTH"),0,100,1,40)); - Claritystrength->setAdjusterListener (this); - if (Claritystrength->delay < 1000) Claritystrength->delay = 1000; - - Claritythreechannels = Gtk::manage(new Gtk::CheckButton((M("TP_CLARITY_THREE"))));// L + a + b - Claritythreechannels->set_active (false); - sharpenVBox->pack_start( *Claritypasses, Gtk::PACK_SHRINK, 0);//passes - sharpenVBox->pack_start( *Claritystrength, Gtk::PACK_SHRINK, 0);//strength - sharpenVBox->pack_start( *Claritythreechannels, Gtk::PACK_SHRINK, 0);//one or 3 channels Lab - - sharpenFrame->add (*sharpenVBox); - pack_start(*sharpenFrame, Gtk::PACK_SHRINK, 0); - sharpenFrame->show (); - - //******************************** MICRO - - Gtk::Frame *microFrame = Gtk::manage (new Gtk::Frame(M("TP_CLARITY_MICRO"))); - Gtk::VBox *microVBox = Gtk::manage (new Gtk::VBox()); - microVBox->set_spacing(2); - - enabledtwo = Gtk::manage (new Gtk::CheckButton (M("GENERAL_ENABLED"))); - enabledtwo->set_active (true); - microVBox->pack_start(*enabledtwo, Gtk::PACK_SHRINK, 0); - enabledtwo->show (); - - MLmicrostrength= Gtk::manage(new Adjuster (M("TP_MLMICRO_STRENGTH"),0,100,1,25)); - MLmicrostrength->setAdjusterListener (this); - if (MLmicrostrength->delay < 1000) MLmicrostrength->delay = 1000; - MLmicrostrength->show(); - uniformity= Gtk::manage(new Adjuster (M("TP_MLMICRO_UNIFORMITY"),0,100,10,50)); - - uniformity->setAdjusterListener (this); - if (uniformity->delay < 1000) uniformity->delay = 1000; - uniformity->show(); - MLmicromatrix = Gtk::manage (new Gtk::CheckButton (M("TP_CLARITY_MATRIX"))); - MLmicromatrix->set_active (true); - microVBox->pack_start(*MLmicromatrix, Gtk::PACK_SHRINK, 0); - MLmicromatrix->show (); - - microVBox->pack_start( *MLmicrostrength, Gtk::PACK_SHRINK, 0);//microcontraste strength - microVBox->pack_start( *uniformity, Gtk::PACK_SHRINK, 0);//uniformity - - microFrame->add (*microVBox); - pack_start(*microFrame, Gtk::PACK_SHRINK, 0); - microFrame->show (); - - enaconn = enabled->signal_toggled().connect( sigc::mem_fun(*this, &Clarity::enabled_toggled) ); - chanthreeconn = Claritythreechannels->signal_toggled().connect( sigc::mem_fun(*this, &Clarity::chanthree_toggled) ); - enatwoconn = enabledtwo->signal_toggled().connect( sigc::mem_fun(*this, &Clarity::enabledtwo_toggled) ); - matrixconn = MLmicromatrix->signal_toggled().connect( sigc::mem_fun(*this, &Clarity::MLmicromatrix_toggled) ); - -} -Clarity::~Clarity () { - -} - -void Clarity::read(const ProcParams* pp, const ParamsEdited* pedited) -{ - disableListener (); - - if(pedited ){ - Claritypasses->setEditedState (pedited->clarity.clpasses ? Edited : UnEdited); - Claritystrength->setEditedState (pedited->clarity.clstrength ? Edited : UnEdited); - MLmicrostrength->setEditedState (pedited->clarity.mlstrength ? Edited : UnEdited); - uniformity->setEditedState (pedited->clarity.uniformity ? Edited : UnEdited); - enabled->set_inconsistent (!pedited->clarity.enabled); - Claritythreechannels->set_inconsistent (!pedited->clarity.clthreechannels); - enabledtwo->set_inconsistent (!pedited->clarity.enabledtwo); - MLmicromatrix->set_inconsistent (!pedited->clarity.MLmicromatrix); - - } - enaconn.block (true); - enabled->set_active (pp->clarity.enabled); - enaconn.block (false); - lastEnabled = pp->clarity.enabled; - - enatwoconn.block (true); - enabledtwo->set_active (pp->clarity.enabledtwo); - enatwoconn.block (false); - lastEnabledtwo = pp->clarity.enabledtwo; - - chanthreeconn.block (true); - Claritythreechannels->set_active (pp->clarity.clthreechannels); - chanthreeconn.block (false); - lastchanthree = pp->clarity.clthreechannels; - - matrixconn.block (true); - MLmicromatrix->set_active (pp->clarity.MLmicromatrix); - matrixconn.block (false); - lastmatrix = pp->clarity.MLmicromatrix; - - Claritypasses->setValue (pp->clarity.clpasses); - Claritystrength->setValue (pp->clarity.clstrength); - MLmicrostrength->setValue (pp->clarity.mlstrength); - uniformity->setValue (pp->clarity.uniformity); - - enableListener (); -} - -void Clarity::write( ProcParams* pp, ParamsEdited* pedited) -{ - pp->clarity.clpasses = (int)Claritypasses->getValue(); - pp->clarity.enabled = enabled->get_active (); - pp->clarity.clstrength = Claritystrength->getValue (); - pp->clarity.mlstrength = MLmicrostrength->getValue (); - pp->clarity.uniformity = uniformity->getValue (); - pp->clarity.clthreechannels = Claritythreechannels->get_active (); - pp->clarity.enabledtwo = enabledtwo->get_active (); - pp->clarity.MLmicromatrix = MLmicromatrix->get_active (); - - - if (pedited) { - pedited->clarity.clpasses = Claritypasses->getEditedState (); - pedited->clarity.enabled = !enabled->get_inconsistent(); - pedited->clarity.clthreechannels = !Claritythreechannels->get_inconsistent(); - pedited->clarity.clstrength = Claritystrength->getEditedState (); - pedited->clarity.mlstrength = MLmicrostrength->getEditedState (); - pedited->clarity.uniformity = uniformity->getEditedState (); - pedited->clarity.enabledtwo = !enabledtwo->get_inconsistent(); - pedited->clarity.MLmicromatrix = !MLmicromatrix->get_inconsistent(); - } - -} - -void Clarity::enabled_toggled () { - - if (batchMode) { - if (enabled->get_inconsistent()) { - enabled->set_inconsistent (false); - enaconn.block (true); - enabled->set_active (false); - enaconn.block (false); - } - else if (lastEnabled) - enabled->set_inconsistent (true); - - lastEnabled = enabled->get_active (); - } - - if (listener) { - if (enabled->get_active ()) - listener->panelChanged (EvClarityEnabled, M("GENERAL_ENABLED")); - // listener->panelChanged (EvMLunifor, M("GENERAL_ENABLED")); - - else - listener->panelChanged (EvClarityEnabled, M("GENERAL_DISABLED")); - } -} -void Clarity::enabledtwo_toggled () { - - if (batchMode) { - if (enabledtwo->get_inconsistent()) { - enabledtwo->set_inconsistent (false); - enatwoconn.block (true); - enabledtwo->set_active (false); - enatwoconn.block (false); - } - else if (lastEnabledtwo) - enabledtwo->set_inconsistent (true); - - lastEnabledtwo = enabledtwo->get_active (); - } - - if (listener) { - if (enabledtwo->get_active ()) - listener->panelChanged (EvClarityEnabledtwo, M("GENERAL_ENABLED")); - - else - listener->panelChanged (EvClarityEnabledtwo, M("GENERAL_DISABLED")); - - } -} - -void Clarity::chanthree_toggled () { - - if (batchMode) { - if (Claritythreechannels->get_inconsistent()) { - Claritythreechannels->set_inconsistent (false); - chanthreeconn.block (true); - Claritythreechannels->set_active (false); - chanthreeconn.block (false); - } - else if (lastchanthree) - Claritythreechannels->set_inconsistent (true); - - lastchanthree = Claritythreechannels->get_active (); - } - - if (listener && enabled->get_active ()) { - if (Claritythreechannels->get_active ()) - listener->panelChanged (EvClaritythreechannels, M("GENERAL_ENABLED")); - else - listener->panelChanged (EvClaritythreechannels, M("GENERAL_DISABLED")); - } -} - -void Clarity::MLmicromatrix_toggled () { - if (batchMode) { - if (MLmicromatrix->get_inconsistent()) { - MLmicromatrix->set_inconsistent (false); - matrixconn.block (true); - MLmicromatrix->set_active (false); - matrixconn.block (false); - } - else if (lastmatrix) - MLmicromatrix->set_inconsistent (true); - - lastmatrix = MLmicromatrix->get_active (); - } - - if (listener && enabledtwo->get_active ()) { - if (MLmicromatrix->get_active ()) - listener->panelChanged (EvClaritymatrix, M("GENERAL_ENABLED")); - else - listener->panelChanged (EvClaritymatrix, M("GENERAL_DISABLED")); - } - -} - - -void Clarity::adjusterChanged (Adjuster* a, double newval) -{ - if (listener && enabled->get_active()) { - Glib::ustring value = a->getTextValue(); - { - - if (a == Claritypasses ) - listener->panelChanged (EvClaritypasses, value ); - else if (a == Claritystrength) - listener->panelChanged (EvClaritystrength, value ); - } - - } - if (listener && enabledtwo->get_active()) { - Glib::ustring value = a->getTextValue(); - { - if (a == MLmicrostrength) - listener->panelChanged (EvMLmicrostrength, value ); - else if (a == uniformity) - listener->panelChanged (EvMLuniformity, value ); - - } - - } - - - -} - -void Clarity::setBatchMode(bool batchMode) -{ - Claritypasses->showEditedCB (); - Claritystrength->showEditedCB (); - MLmicrostrength->showEditedCB (); - uniformity->showEditedCB (); - -} - -void Clarity::setDefaults(const ProcParams* defParams, const ParamsEdited* pedited) -{ - Claritypasses->setDefault (defParams->clarity.clpasses); - Claritystrength->setDefault (defParams->clarity.clstrength); - MLmicrostrength->setDefault (defParams->clarity.mlstrength); - uniformity->setDefault (defParams->clarity.uniformity); - - if (pedited) { - Claritypasses->setDefaultEditedState (pedited->clarity.clpasses ? Edited : UnEdited); - Claritystrength->setDefaultEditedState (pedited->clarity.clstrength ? Edited : UnEdited); - MLmicrostrength->setDefaultEditedState (pedited->clarity.mlstrength ? Edited : UnEdited); - uniformity->setDefaultEditedState (pedited->clarity.uniformity ? Edited : UnEdited); - - } else { - Claritypasses->setDefaultEditedState (Irrelevant); - Claritystrength->setDefaultEditedState (Irrelevant); - MLmicrostrength->setDefaultEditedState (Irrelevant); - uniformity->setDefaultEditedState (Irrelevant); - - } -} - -void Clarity::setAdjusterBehavior (bool strengthadd, bool mlstrentghadd, bool passadd, bool uniformityadd ) { - Claritystrength->setAddMode(strengthadd); - MLmicrostrength->setAddMode(mlstrentghadd); - Claritypasses->setAddMode(passadd); - uniformity->setAddMode(uniformityadd); -} - -void Clarity::trimValues (ProcParams* pp) { - Claritystrength->trimValue(pp->clarity.clstrength); - MLmicrostrength->trimValue(pp->clarity.mlstrength); - Claritypasses->trimValue(pp->clarity.clpasses); - uniformity->trimValue(pp->clarity.uniformity); - -} diff --git a/rtgui/clarity.h b/rtgui/clarity.h deleted file mode 100644 index 32e4c2b96..000000000 --- a/rtgui/clarity.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * RawTherapee is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * RawTherapee is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with RawTherapee. If not, see . - */ -#ifndef _CLARITY_H_ -#define _CLARITY_H_ - -#include -#include -#include - -class Clarity : public Gtk::VBox, public AdjusterListener, public FoldableToolPanel { - - protected: - Adjuster* Claritypasses; - Adjuster* Claritystrength; - - Adjuster* MLmicrostrength; - Adjuster* uniformity; - Gtk::CheckButton* enabled; - Gtk::CheckButton* Claritythreechannels; - Gtk::CheckButton* enabledtwo; - Gtk::CheckButton* MLmicromatrix; - - bool lastEnabled; - bool lastEnabledtwo; - sigc::connection enaconn; - sigc::connection enatwoconn; - sigc::connection matrixconn; - - sigc::connection chanthreeconn; - bool lastchanthree; - bool lastmatrix; - - public: - - Clarity (); - virtual ~Clarity (); - - void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited=NULL); - void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited=NULL); - void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited=NULL); - void setBatchMode (bool batchMode); - - void adjusterChanged (Adjuster* a, double newval); - void setAdjusterBehavior (bool strengthadd, bool mlstrentghadd, bool passadd, bool uniformityadd ); - void enabled_toggled(); - void enabledtwo_toggled(); - void MLmicromatrix_toggled(); - - void chanthree_toggled(); - void trimValues (rtengine::procparams::ProcParams* pp); - -}; - -#endif diff --git a/rtgui/options.cc b/rtgui/options.cc index ef39b43a3..62c259ef5 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -202,10 +202,10 @@ void Options::setDefaults () { 1, // ADDSET_RAWEXPOS_LINEAR 1, // ADDSET_RAWEXPOS_PRESER 1, // ADDSET_RAWEXPOS_BLACKS - 0, // ADDSET_CLAR_STREN - 0, // ADDSET_CLAR_MLSTREN - 0, // ADDSET_CLAR_PASS - 0 // ADDSET_CLAR_RELAT + 0, // ADDSET_SHARPENEDGE_AMOUNT + 0, // ADDSET_SHARPENMICRO_AMOUNT + 0, // ADDSET_SHARPENEDGE_PASS + 0 // ADDSET_SHARPENMICRO_UNIFORMITY }; baBehav = std::vector (babehav, babehav+ADDSET_PARAM_NUM); diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index bd3c0185b..a585e1c54 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -62,16 +62,16 @@ void ParamsEdited::set (bool v) { sharpening.deconvradius = v; sharpening.deconviter = v; sharpening.deconvdamping = v; - clarity.clpasses = v; - clarity.clstrength = v; - clarity.mlstrength = v; - clarity.uniformity = v; - clarity.enabled = v; - clarity.enabledtwo = v; - clarity.clthreechannels = v; - clarity.MLmicromatrix = v; - colorBoost.amount = v; - colorBoost.avoidclip = v; + sharpenEdge.enabled = v; + sharpenEdge.passes = v; + sharpenEdge.amount = v; + sharpenEdge.threechannels = v; + sharpenMicro.enabled = v; + sharpenMicro.matrix = v; + sharpenMicro.amount = v; + sharpenMicro.uniformity = v; + colorBoost.amount = v; + colorBoost.avoidclip = v; colorBoost.enable_saturationlimiter = v; colorBoost.saturationlimit = v; wb.method = v; @@ -221,14 +221,14 @@ void ParamsEdited::initFrom (const std::vector labCurve.avoidclip = labCurve.avoidclip && p.labCurve.avoidclip == other.labCurve.avoidclip; labCurve.enable_saturationlimiter = labCurve.enable_saturationlimiter && p.labCurve.enable_saturationlimiter == other.labCurve.enable_saturationlimiter; labCurve.saturationlimit = labCurve.saturationlimit && p.labCurve.saturationlimit == other.labCurve.saturationlimit; - clarity.enabled = clarity.enabled && p.clarity.enabled == other.clarity.enabled; - clarity.clpasses = clarity.clpasses && p.clarity.clpasses == other.clarity.clpasses; - clarity.clstrength = clarity.clstrength && p.clarity.clstrength == other.clarity.clstrength; - clarity.enabledtwo = clarity.enabledtwo && p.clarity.enabledtwo == other.clarity.enabledtwo; - clarity.MLmicromatrix = clarity.MLmicromatrix && p.clarity.MLmicromatrix == other.clarity.MLmicromatrix; - clarity.mlstrength = clarity.mlstrength && p.clarity.mlstrength == other.clarity.mlstrength; - clarity.uniformity = clarity.uniformity && p.clarity.uniformity == other.clarity.uniformity; - clarity.clthreechannels = clarity.clthreechannels && p.clarity.clthreechannels == other.clarity.clthreechannels; + sharpenEdge.enabled = sharpenEdge.enabled && p.sharpenEdge.enabled == other.sharpenEdge.enabled; + sharpenEdge.passes = sharpenEdge.passes && p.sharpenEdge.passes == other.sharpenEdge.passes; + sharpenEdge.amount = sharpenEdge.amount && p.sharpenEdge.amount == other.sharpenEdge.amount; + sharpenEdge.threechannels = sharpenEdge.threechannels && p.sharpenEdge.threechannels == other.sharpenEdge.threechannels; + sharpenMicro.enabled = sharpenMicro.enabled && p.sharpenMicro.enabled == other.sharpenMicro.enabled; + sharpenMicro.matrix = sharpenMicro.matrix && p.sharpenMicro.matrix == other.sharpenMicro.matrix; + sharpenMicro.amount = sharpenMicro.amount && p.sharpenMicro.amount == other.sharpenMicro.amount; + sharpenMicro.uniformity = sharpenMicro.uniformity && p.sharpenMicro.uniformity == other.sharpenMicro.uniformity; sharpening.enabled = sharpening.enabled && p.sharpening.enabled == other.sharpening.enabled; sharpening.radius = sharpening.radius && p.sharpening.radius == other.sharpening.radius; sharpening.amount = sharpening.amount && p.sharpening.amount == other.sharpening.amount; @@ -370,14 +370,14 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten bool dontforceSet = !forceSet; - if (toneCurve.curve) toEdit.toneCurve.curve = mods.toneCurve.curve; + if (toneCurve.curve) toEdit.toneCurve.curve = mods.toneCurve.curve; if (toneCurve.brightness) toEdit.toneCurve.brightness = dontforceSet && options.baBehav[ADDSET_TC_BRIGHTNESS] ? toEdit.toneCurve.brightness + mods.toneCurve.brightness : mods.toneCurve.brightness; if (toneCurve.black) toEdit.toneCurve.black = dontforceSet && options.baBehav[ADDSET_TC_BLACKLEVEL] ? toEdit.toneCurve.black + mods.toneCurve.black : mods.toneCurve.black; if (toneCurve.contrast) toEdit.toneCurve.contrast = dontforceSet && options.baBehav[ADDSET_TC_CONTRAST] ? toEdit.toneCurve.contrast + mods.toneCurve.contrast : mods.toneCurve.contrast; if (toneCurve.saturation) toEdit.toneCurve.saturation = dontforceSet && options.baBehav[ADDSET_TC_SATURATION] ? toEdit.toneCurve.saturation + mods.toneCurve.saturation : mods.toneCurve.saturation; if (toneCurve.shcompr) toEdit.toneCurve.shcompr = dontforceSet && options.baBehav[ADDSET_TC_SHCOMP] ? toEdit.toneCurve.shcompr + mods.toneCurve.shcompr : mods.toneCurve.shcompr; if (toneCurve.autoexp) toEdit.toneCurve.autoexp = mods.toneCurve.autoexp; - if (toneCurve.clip) toEdit.toneCurve.clip = mods.toneCurve.clip; + if (toneCurve.clip) toEdit.toneCurve.clip = mods.toneCurve.clip; if (toneCurve.expcomp) toEdit.toneCurve.expcomp = dontforceSet && options.baBehav[ADDSET_TC_EXPCOMP] ? toEdit.toneCurve.expcomp + mods.toneCurve.expcomp : mods.toneCurve.expcomp; if (toneCurve.hlcompr) toEdit.toneCurve.hlcompr = dontforceSet && options.baBehav[ADDSET_TC_HLCOMPAMOUNT] ? toEdit.toneCurve.hlcompr + mods.toneCurve.hlcompr : mods.toneCurve.hlcompr; if (toneCurve.hlcomprthresh) toEdit.toneCurve.hlcomprthresh = dontforceSet && options.baBehav[ADDSET_TC_HLCOMPTHRESH] ? toEdit.toneCurve.hlcomprthresh + mods.toneCurve.hlcomprthresh : mods.toneCurve.hlcomprthresh; @@ -387,17 +387,17 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten if (labCurve.brightness) toEdit.labCurve.brightness = dontforceSet && options.baBehav[ADDSET_LC_BRIGHTNESS] ? toEdit.labCurve.brightness + mods.labCurve.brightness : mods.labCurve.brightness; if (labCurve.contrast) toEdit.labCurve.contrast = dontforceSet && options.baBehav[ADDSET_LC_CONTRAST] ? toEdit.labCurve.contrast + mods.labCurve.contrast : mods.labCurve.contrast; if (labCurve.saturation) toEdit.labCurve.saturation = dontforceSet && options.baBehav[ADDSET_LC_SATURATION] ? toEdit.labCurve.saturation + mods.labCurve.saturation : mods.labCurve.saturation; - if (labCurve.avoidclip) toEdit.labCurve.avoidclip = mods.labCurve.avoidclip; - if (labCurve.enable_saturationlimiter)toEdit.labCurve.enable_saturationlimiter = mods.labCurve.enable_saturationlimiter; + if (labCurve.avoidclip) toEdit.labCurve.avoidclip = mods.labCurve.avoidclip; + if (labCurve.enable_saturationlimiter) toEdit.labCurve.enable_saturationlimiter = mods.labCurve.enable_saturationlimiter; if (labCurve.saturationlimit) toEdit.labCurve.saturationlimit = mods.labCurve.saturationlimit; - if (clarity.enabled) toEdit.clarity.enabled = mods.clarity.enabled; - if (clarity.clpasses) toEdit.clarity.clpasses = dontforceSet && options.baBehav[ADDSET_CLAR_PASS] ? toEdit.clarity.clpasses + mods.clarity.clpasses : mods.clarity.clpasses; - if (clarity.clstrength) toEdit.clarity.clstrength = dontforceSet && options.baBehav[ADDSET_CLAR_STREN] ? toEdit.clarity.clstrength + mods.clarity.clstrength : mods.clarity.clstrength; - if (clarity.enabledtwo) toEdit.clarity.enabledtwo = mods.clarity.enabledtwo; - if (clarity.MLmicromatrix) toEdit.clarity.MLmicromatrix = mods.clarity.MLmicromatrix; - if (clarity.mlstrength) toEdit.clarity.mlstrength = dontforceSet && options.baBehav[ADDSET_CLAR_MLSTREN] ? toEdit.clarity.mlstrength + mods.clarity.mlstrength : mods.clarity.mlstrength; - if (clarity.uniformity) toEdit.clarity.uniformity = dontforceSet && options.baBehav[ADDSET_CLAR_UNIFORMITY] ? toEdit.clarity.uniformity + mods.clarity.uniformity : mods.clarity.uniformity; - if (clarity.clthreechannels) toEdit.clarity.clthreechannels = mods.clarity.clthreechannels; + if (sharpenEdge.enabled) toEdit.sharpenEdge.enabled = mods.sharpenEdge.enabled; + if (sharpenEdge.passes) toEdit.sharpenEdge.passes = dontforceSet && options.baBehav[ADDSET_SHARPENEDGE_PASS] ? toEdit.sharpenEdge.passes + mods.sharpenEdge.passes : mods.sharpenEdge.passes; + if (sharpenEdge.amount) toEdit.sharpenEdge.amount = dontforceSet && options.baBehav[ADDSET_SHARPENEDGE_AMOUNT] ? toEdit.sharpenEdge.amount + mods.sharpenEdge.amount : mods.sharpenEdge.amount; + if (sharpenEdge.threechannels) toEdit.sharpenEdge.threechannels = mods.sharpenEdge.threechannels; + if (sharpenMicro.enabled) toEdit.sharpenMicro.enabled = mods.sharpenMicro.enabled; + if (sharpenMicro.matrix) toEdit.sharpenMicro.matrix = mods.sharpenMicro.matrix; + if (sharpenMicro.amount) toEdit.sharpenMicro.amount = dontforceSet && options.baBehav[ADDSET_SHARPENMICRO_AMOUNT] ? toEdit.sharpenMicro.amount + mods.sharpenMicro.amount : mods.sharpenMicro.amount; + if (sharpenMicro.uniformity) toEdit.sharpenMicro.uniformity = dontforceSet && options.baBehav[ADDSET_SHARPENMICRO_UNIFORMITY] ? toEdit.sharpenMicro.uniformity + mods.sharpenMicro.uniformity : mods.sharpenMicro.uniformity; if (sharpening.enabled) toEdit.sharpening.enabled = mods.sharpening.enabled; if (sharpening.radius) toEdit.sharpening.radius = mods.sharpening.radius; if (sharpening.amount) toEdit.sharpening.amount = dontforceSet && options.baBehav[ADDSET_SHARP_AMOUNT] ? toEdit.sharpening.amount + mods.sharpening.amount : mods.sharpening.amount; @@ -407,12 +407,12 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten if (sharpening.edges_tolerance) toEdit.sharpening.edges_tolerance = mods.sharpening.edges_tolerance; if (sharpening.halocontrol) toEdit.sharpening.halocontrol = mods.sharpening.halocontrol; if (sharpening.halocontrol_amount) toEdit.sharpening.halocontrol_amount = mods.sharpening.halocontrol_amount; - if (sharpening.method) toEdit.sharpening.method = mods.sharpening.method; + if (sharpening.method) toEdit.sharpening.method = mods.sharpening.method; if (sharpening.deconvamount) toEdit.sharpening.deconvamount = dontforceSet && options.baBehav[ADDSET_SHARP_AMOUNT] ? toEdit.sharpening.deconvamount + mods.sharpening.deconvamount : mods.sharpening.deconvamount; if (sharpening.deconvradius) toEdit.sharpening.deconvradius = mods.sharpening.deconvradius; if (sharpening.deconviter) toEdit.sharpening.deconviter = mods.sharpening.deconviter; if (sharpening.deconvdamping) toEdit.sharpening.deconvdamping = mods.sharpening.deconvdamping; - if (colorBoost.amount) toEdit.colorBoost.amount = dontforceSet && options.baBehav[ADDSET_CBOOST_AMOUNT] ? toEdit.colorBoost.amount + mods.colorBoost.amount : mods.colorBoost.amount; + if (colorBoost.amount) toEdit.colorBoost.amount = dontforceSet && options.baBehav[ADDSET_CBOOST_AMOUNT] ? toEdit.colorBoost.amount + mods.colorBoost.amount : mods.colorBoost.amount; if (colorBoost.avoidclip) toEdit.colorBoost.avoidclip = mods.colorBoost.avoidclip; if (colorBoost.enable_saturationlimiter)toEdit.colorBoost.enable_saturationlimiter = mods.colorBoost.enable_saturationlimiter; if (colorBoost.saturationlimit) toEdit.colorBoost.saturationlimit = mods.colorBoost.saturationlimit; @@ -539,4 +539,4 @@ bool RAWParamsEdited::isUnchanged() const { return ccSteps && dmethod && dcbIterations && dcbEnhance && allEnhance && caCorrection && caRed && caBlue && greenEq && hotDeadPixel && linenoise && darkFrame && dfAuto && ff_file && ff_AutoSelect && ff_BlurRadius && ff_BlurType && exPos && exPreser && exBlackzero && exBlackone && exBlacktwo && exBlackthree && exTwoGreen; -} \ No newline at end of file +} diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 5adaca689..53681667b 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -31,8 +31,8 @@ class ToneCurveParamsEdited { bool brightness; bool black; bool contrast; - bool saturation; - bool shcompr; + bool saturation; + bool shcompr; bool hlcompr; bool hlcomprthresh; bool autoexp; @@ -45,26 +45,30 @@ class LCurveParamsEdited { public: bool brightness; bool contrast; - bool saturation; - bool avoidclip; - bool enable_saturationlimiter; - bool saturationlimit; + bool saturation; + bool avoidclip; + bool enable_saturationlimiter; + bool saturationlimit; bool lcurve; - bool acurve; - bool bcurve; + bool acurve; + bool bcurve; }; -class ClarityParamsEdited { - public : - - bool clpasses; - bool clstrength; - bool mlstrength; - bool enabled; - bool enabledtwo; - bool clthreechannels; - bool uniformity; - bool MLmicromatrix; +class SharpenEdgeParamsEdited { + + public : + bool enabled; + bool passes; + bool amount; + bool threechannels; +}; + +class SharpenMicroParamsEdited { + public : + bool enabled; + bool matrix; + bool amount; + bool uniformity; }; class SharpeningParamsEdited { @@ -79,7 +83,7 @@ class SharpeningParamsEdited { bool edges_tolerance; bool halocontrol; bool halocontrol_amount; - + bool method; bool deconvamount; bool deconvradius; @@ -334,38 +338,38 @@ class IPTCPairEdited { class ParamsEdited { public: - ToneCurveParamsEdited toneCurve; - LCurveParamsEdited labCurve; - SharpeningParamsEdited sharpening; - ClarityParamsEdited clarity; - - ColorBoostParamsEdited colorBoost; - WBParamsEdited wb; - ColorShiftParamsEdited colorShift; - LumaDenoiseParamsEdited lumaDenoise; - ColorDenoiseParamsEdited colorDenoise; - DefringeParamsEdited defringe; - DirPyrDenoiseParamsEdited dirpyrDenoise; - ImpulseDenoiseParamsEdited impulseDenoise; - SHParamsEdited sh; - CropParamsEdited crop; - CoarseTransformParamsEdited coarse; + ToneCurveParamsEdited toneCurve; + LCurveParamsEdited labCurve; + SharpeningParamsEdited sharpening; + SharpenEdgeParamsEdited sharpenEdge; + SharpenMicroParamsEdited sharpenMicro; + ColorBoostParamsEdited colorBoost; + WBParamsEdited wb; + ColorShiftParamsEdited colorShift; + LumaDenoiseParamsEdited lumaDenoise; + ColorDenoiseParamsEdited colorDenoise; + DefringeParamsEdited defringe; + DirPyrDenoiseParamsEdited dirpyrDenoise; + ImpulseDenoiseParamsEdited impulseDenoise; + SHParamsEdited sh; + CropParamsEdited crop; + CoarseTransformParamsEdited coarse; CommonTransformParamsEdited commonTrans; - RotateParamsEdited rotate; + RotateParamsEdited rotate; DistortionParamsEdited distortion; PerspectiveParamsEdited perspective; - CACorrParamsEdited cacorrection; - VignettingParamsEdited vignetting; - ChannelMixerParamsEdited chmixer; - HRecParamsEdited hlrecovery; - ResizeParamsEdited resize; - ColorManagementParamsEdited icm; + CACorrParamsEdited cacorrection; + VignettingParamsEdited vignetting; + ChannelMixerParamsEdited chmixer; + HRecParamsEdited hlrecovery; + ResizeParamsEdited resize; + ColorManagementParamsEdited icm; RAWParamsEdited raw; DirPyrEqualizerParamsEdited dirpyrequalizer; HSVEqualizerParamsEdited hsvequalizer; - std::vector exif; - std::vector iptc; - + std::vector exif; + std::vector iptc; + ParamsEdited (); void set (bool v); diff --git a/rtgui/partialpastedlg.cc b/rtgui/partialpastedlg.cc index 026aa41ff..4f9654759 100644 --- a/rtgui/partialpastedlg.cc +++ b/rtgui/partialpastedlg.cc @@ -51,8 +51,8 @@ PartialPasteDlg::PartialPasteDlg () { // options in detail: sharpen = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHARPENING"))); - gradsharpen = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_GRADIENTSHARPEN"))); - microcontrast = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_MICROCONTRAST"))); + sharpenedge = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHARPENEDGE"))); + sharpenmicro = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHARPENMICRO"))); impden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IMPULSEDENOISE"))); dirpyreq = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DIRPYREQUALIZER"))); defringe = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DEFRINGE"))); @@ -123,8 +123,8 @@ PartialPasteDlg::PartialPasteDlg () { vboxes[1]->pack_start (*detail, Gtk::PACK_SHRINK, 2); vboxes[1]->pack_start (*hseps[1], Gtk::PACK_SHRINK, 2); vboxes[1]->pack_start (*sharpen, Gtk::PACK_SHRINK, 2); - vboxes[1]->pack_start (*gradsharpen, Gtk::PACK_SHRINK, 2); - vboxes[1]->pack_start (*microcontrast, Gtk::PACK_SHRINK, 2); + vboxes[1]->pack_start (*sharpenedge, Gtk::PACK_SHRINK, 2); + vboxes[1]->pack_start (*sharpenmicro, Gtk::PACK_SHRINK, 2); vboxes[1]->pack_start (*impden, Gtk::PACK_SHRINK, 2); vboxes[1]->pack_start (*dirpyrden, Gtk::PACK_SHRINK, 2); vboxes[1]->pack_start (*defringe, Gtk::PACK_SHRINK, 2); @@ -234,8 +234,8 @@ PartialPasteDlg::PartialPasteDlg () { labcurveConn = labcurve->signal_toggled().connect (sigc::bind (sigc::mem_fun(*basic, &Gtk::CheckButton::set_inconsistent), true)); sharpenConn = sharpen->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); - gradsharpenConn = gradsharpen->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); - microcontrastConn = microcontrast->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); + gradsharpenConn = sharpenedge->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); + microcontrastConn = sharpenmicro->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); impdenConn = impden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); dirpyrdenConn = dirpyrden->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); dirpyreqConn = dirpyreq->signal_toggled().connect (sigc::bind (sigc::mem_fun(*detail, &Gtk::CheckButton::set_inconsistent), true)); @@ -433,8 +433,8 @@ void PartialPasteDlg::detailToggled () { detail->set_inconsistent (false); sharpen->set_active (detail->get_active ()); - gradsharpen->set_active (detail->get_active ()); - microcontrast->set_active (detail->get_active ()); + sharpenedge->set_active (detail->get_active ()); + sharpenmicro->set_active (detail->get_active ()); impden->set_active (detail->get_active ()); dirpyrden->set_active (detail->get_active ()); defringe->set_active (detail->get_active ()); @@ -535,18 +535,8 @@ void PartialPasteDlg::applyPaste (rtengine::procparams::ProcParams* dst, const r if (labcurve->get_active ()) dst->labCurve = src->labCurve; if (sharpen->get_active ()) dst->sharpening = src->sharpening; - if (gradsharpen->get_active ()){ - dst->clarity.enabled = src->clarity.enabled; - dst->clarity.clstrength = src->clarity.clstrength; - dst->clarity.clpasses = src->clarity.clpasses; - dst->clarity.clthreechannels = src->clarity.clthreechannels; - } - if (microcontrast->get_active ()){ - dst->clarity.enabledtwo = src->clarity.enabledtwo; - dst->clarity.MLmicromatrix = src->clarity.MLmicromatrix; - dst->clarity.mlstrength = src->clarity.mlstrength; - dst->clarity.uniformity = src->clarity.uniformity; - } + if (sharpenedge->get_active ()) dst->sharpenEdge = src->sharpenEdge; + if (sharpenmicro->get_active()) dst->sharpenMicro = src->sharpenMicro; if (impden->get_active ()) dst->impulseDenoise = src->impulseDenoise; if (dirpyreq->get_active ()) dst->dirpyrequalizer = src->dirpyrequalizer; if (defringe->get_active ()) dst->defringe = src->defringe; diff --git a/rtgui/partialpastedlg.h b/rtgui/partialpastedlg.h index 2f1e70fcb..ae1aea738 100644 --- a/rtgui/partialpastedlg.h +++ b/rtgui/partialpastedlg.h @@ -46,8 +46,8 @@ class PartialPasteDlg : public Gtk::Dialog { // options in detail: Gtk::CheckButton* sharpen; - Gtk::CheckButton* gradsharpen; - Gtk::CheckButton* microcontrast; + Gtk::CheckButton* sharpenedge; + Gtk::CheckButton* sharpenmicro; Gtk::CheckButton* impden; Gtk::CheckButton* waveq; Gtk::CheckButton* dirpyrden; diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index c19247bbc..16ec7da8c 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -169,13 +169,15 @@ Gtk::Widget* Preferences::getBatchProcPanel () { appendBehavList (mi, M("TP_SHARPENING_AMOUNT"), ADDSET_SHARP_AMOUNT, false); mi = behModel->append (); - mi->set_value (behavColumns.label, M("TP_CLARITY_LABEL")); - appendBehavList (mi, M("TP_CLARITY_PASSES"), ADDSET_CLAR_PASS, false); - appendBehavList (mi, M("TP_CLARITY_STRENGTH"), ADDSET_CLAR_STREN, false); - appendBehavList (mi, M("TP_MLMICRO_STRENGTH"), ADDSET_CLAR_MLSTREN, false); - appendBehavList (mi, M("TP_MLMICRO_UNIFORMITY"), ADDSET_CLAR_UNIFORMITY, false); - - + mi->set_value (behavColumns.label, M("TP_SHARPENEDGE_LABEL")); + appendBehavList (mi, M("TP_SHARPENEDGE_PASSES"), ADDSET_SHARPENEDGE_PASS, false); + appendBehavList (mi, M("TP_SHARPENEDGE_AMOUNT"), ADDSET_SHARPENEDGE_AMOUNT, false); + + mi = behModel->append (); + mi->set_value (behavColumns.label, M("TP_SHARPENMICRO_LABEL")); + appendBehavList (mi, M("TP_SHARPENMICRO_AMOUNT"), ADDSET_SHARPENMICRO_AMOUNT, false); + appendBehavList (mi, M("TP_SHARPENMICRO_UNIFORMITY"), ADDSET_SHARPENMICRO_UNIFORMITY, false); + mi = behModel->append (); mi->set_value (behavColumns.label, M("TP_DIRPYRDENOISE_LABEL")); appendBehavList (mi, M("TP_DIRPYRDENOISE_LUMA")+", "+M("TP_DIRPYRDENOISE_CHROMA"), ADDSET_DIRPYRDN_CHLUM, true); diff --git a/rtgui/sharpenedge.cc b/rtgui/sharpenedge.cc new file mode 100644 index 000000000..dcf16aa42 --- /dev/null +++ b/rtgui/sharpenedge.cc @@ -0,0 +1,182 @@ +/* + * This file is part of RawTherapee. + * + * Copyright (c) 2004-2010 Gabor Horvath + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . + */ +#include +#include +#include +#include +#include +#include + +using namespace rtengine; +using namespace rtengine::procparams; + + +SharpenEdge::SharpenEdge () : Gtk::VBox(), FoldableToolPanel(this) { + enabled = Gtk::manage (new Gtk::CheckButton (M("GENERAL_ENABLED"))); + enabled->set_active (true); + pack_start(*enabled, Gtk::PACK_SHRINK, 0); + + passes = Gtk::manage(new Adjuster (M("TP_SHARPENEDGE_PASSES"),1,4,1,1)); + passes->setAdjusterListener (this); + if (passes->delay < 1000) passes->delay = 1000; + amount = Gtk::manage(new Adjuster (M("TP_SHARPENEDGE_AMOUNT"),0,100,1,40)); + amount->setAdjusterListener (this); + if (amount->delay < 1000) amount->delay = 1000; + + threechannels = Gtk::manage(new Gtk::CheckButton((M("TP_SHARPENEDGE_THREE"))));// L + a + b + threechannels->set_active (false); + pack_start( *passes, Gtk::PACK_SHRINK, 0);//passes + pack_start( *amount, Gtk::PACK_SHRINK, 0);//amount + pack_start( *threechannels, Gtk::PACK_SHRINK, 0);//one or 3 channels Lab + + show (); + + enaconn = enabled->signal_toggled().connect( sigc::mem_fun(*this, &SharpenEdge::enabled_toggled) ); + chanthreeconn = threechannels->signal_toggled().connect( sigc::mem_fun(*this, &SharpenEdge::chanthree_toggled) ); +} + +void SharpenEdge::read(const ProcParams* pp, const ParamsEdited* pedited) { + disableListener (); + + if(pedited ){ + passes->setEditedState (pedited->sharpenEdge.passes ? Edited : UnEdited); + amount->setEditedState (pedited->sharpenEdge.amount ? Edited : UnEdited); + enabled->set_inconsistent (!pedited->sharpenEdge.enabled); + threechannels->set_inconsistent (!pedited->sharpenEdge.threechannels); + } + enaconn.block (true); + enabled->set_active (pp->sharpenEdge.enabled); + enaconn.block (false); + lastEnabled = pp->sharpenEdge.enabled; + + chanthreeconn.block (true); + threechannels->set_active (pp->sharpenEdge.threechannels); + chanthreeconn.block (false); + lastchanthree = pp->sharpenEdge.threechannels; + + passes->setValue (pp->sharpenEdge.passes); + amount->setValue (pp->sharpenEdge.amount); + + enableListener (); +} + +void SharpenEdge::write( ProcParams* pp, ParamsEdited* pedited) { + pp->sharpenEdge.enabled = enabled->get_active (); + pp->sharpenEdge.passes = (int)passes->getValue(); + pp->sharpenEdge.amount = amount->getValue (); + pp->sharpenEdge.threechannels = threechannels->get_active (); + + if (pedited) { + pedited->sharpenEdge.enabled = !enabled->get_inconsistent(); + pedited->sharpenEdge.passes = passes->getEditedState (); + pedited->sharpenEdge.amount = amount->getEditedState (); + pedited->sharpenEdge.threechannels = !threechannels->get_inconsistent(); + } + +} + +void SharpenEdge::enabled_toggled () { + + if (batchMode) { + if (enabled->get_inconsistent()) { + enabled->set_inconsistent (false); + enaconn.block (true); + enabled->set_active (false); + enaconn.block (false); + } + else if (lastEnabled) + enabled->set_inconsistent (true); + + lastEnabled = enabled->get_active (); + } + + if (listener) { + if (enabled->get_active ()) + listener->panelChanged (EvSharpenEdgeEnabled, M("GENERAL_ENABLED")); + //listener->panelChanged (EvMLunifor, M("GENERAL_ENABLED")); + + else + listener->panelChanged (EvSharpenEdgeEnabled, M("GENERAL_DISABLED")); + } +} + +void SharpenEdge::chanthree_toggled () { + + if (batchMode) { + if (threechannels->get_inconsistent()) { + threechannels->set_inconsistent (false); + chanthreeconn.block (true); + threechannels->set_active (false); + chanthreeconn.block (false); + } + else if (lastchanthree) + threechannels->set_inconsistent (true); + + lastchanthree = threechannels->get_active (); + } + + if (listener && enabled->get_active ()) { + if (threechannels->get_active ()) + listener->panelChanged (EvSharpenEdgeThreechannels, M("GENERAL_ENABLED")); + else + listener->panelChanged (EvSharpenEdgeThreechannels, M("GENERAL_DISABLED")); + } +} + +void SharpenEdge::adjusterChanged (Adjuster* a, double newval) { + if (listener && enabled->get_active()) { + Glib::ustring value = a->getTextValue(); + + if (a == passes ) + listener->panelChanged (EvSharpenEdgePasses, value ); + else if (a == amount) + listener->panelChanged (EvSharpenEdgeAmount, value ); + } +} + +void SharpenEdge::setBatchMode(bool batchMode) { + passes->showEditedCB (); + amount->showEditedCB (); +} + +void SharpenEdge::setDefaults(const ProcParams* defParams, const ParamsEdited* pedited) { + passes->setDefault (defParams->sharpenEdge.passes); + amount->setDefault (defParams->sharpenEdge.amount); + + if (pedited) { + passes->setDefaultEditedState (pedited->sharpenEdge.passes ? Edited : UnEdited); + amount->setDefaultEditedState (pedited->sharpenEdge.amount ? Edited : UnEdited); + + } else { + passes->setDefaultEditedState (Irrelevant); + amount->setDefaultEditedState (Irrelevant); + + } +} + +void SharpenEdge::setAdjusterBehavior (bool amountadd, bool passadd) { + amount->setAddMode (amountadd); + passes->setAddMode (passadd); +} + +void SharpenEdge::trimValues (ProcParams* pp) { + amount->trimValue (pp->sharpenEdge.amount); + passes->trimValue (pp->sharpenEdge.passes); + +} diff --git a/rtgui/sharpenedge.h b/rtgui/sharpenedge.h new file mode 100644 index 000000000..508cccfcd --- /dev/null +++ b/rtgui/sharpenedge.h @@ -0,0 +1,62 @@ +/* + * This file is part of RawTherapee. + * + * Copyright (c) 2004-2010 Gabor Horvath + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . + * + * + * Manuel Llorens' algorithm of edge sharpening + * + * + */ +#ifndef _SHARPENEDGE_H_ +#define _SHARPENEDGE_H_ + +#include +#include +#include + +class SharpenEdge : public Gtk::VBox, public AdjusterListener, public FoldableToolPanel { + +protected: + + Gtk::CheckButton* enabled; + Adjuster* passes; + Adjuster* amount; + Gtk::CheckButton* threechannels; + + bool lastEnabled; + sigc::connection enaconn; + sigc::connection chanthreeconn; + bool lastchanthree; + +public: + + SharpenEdge (); + + void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited=NULL); + void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited=NULL); + void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited=NULL); + void setBatchMode (bool batchMode); + void trimValues (rtengine::procparams::ProcParams* pp); + void setAdjusterBehavior (bool amountadd, bool passadd); + void adjusterChanged (Adjuster* a, double newval); + + void enabled_toggled (); + void chanthree_toggled (); + +}; + +#endif diff --git a/rtgui/sharpenmicro.cc b/rtgui/sharpenmicro.cc new file mode 100644 index 000000000..a45d2b6fd --- /dev/null +++ b/rtgui/sharpenmicro.cc @@ -0,0 +1,179 @@ +/* + * This file is part of RawTherapee. + * + * Copyright (c) 2004-2010 Gabor Horvath + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . + */ +#include +#include +#include +#include +#include +#include + +using namespace rtengine; +using namespace rtengine::procparams; + + +SharpenMicro::SharpenMicro () : Gtk::VBox(), FoldableToolPanel(this) { + enabled = Gtk::manage (new Gtk::CheckButton (M("GENERAL_ENABLED"))); + enabled->set_active (true); + pack_start(*enabled, Gtk::PACK_SHRINK, 0); + enabled->show (); + + amount= Gtk::manage(new Adjuster (M("TP_SHARPENMICRO_AMOUNT"),0,100,1,25)); + amount->setAdjusterListener (this); + if (amount->delay < 1000) amount->delay = 1000; + amount->show(); + uniformity= Gtk::manage(new Adjuster (M("TP_SHARPENMICRO_UNIFORMITY"),0,100,10,50)); + + uniformity->setAdjusterListener (this); + if (uniformity->delay < 1000) uniformity->delay = 1000; + uniformity->show(); + matrix = Gtk::manage (new Gtk::CheckButton (M("TP_SHARPENMICRO_MATRIX"))); + matrix->set_active (true); + pack_start(*matrix, Gtk::PACK_SHRINK, 0); + matrix->show (); + + pack_start( *amount, Gtk::PACK_SHRINK, 0); + pack_start( *uniformity, Gtk::PACK_SHRINK, 0); + + show (); + + enaconn = enabled->signal_toggled().connect( sigc::mem_fun(*this, &SharpenMicro::enabled_toggled) ); + matrixconn = matrix->signal_toggled().connect( sigc::mem_fun(*this, &SharpenMicro::matrix_toggled) ); +} + +void SharpenMicro::read(const ProcParams* pp, const ParamsEdited* pedited) { + disableListener (); + + if(pedited ){ + enabled->set_inconsistent (!pedited->sharpenMicro.enabled); + matrix->set_inconsistent (!pedited->sharpenMicro.matrix); + amount->setEditedState (pedited->sharpenMicro.amount ? Edited : UnEdited); + uniformity->setEditedState (pedited->sharpenMicro.uniformity ? Edited : UnEdited); + } + enaconn.block (true); + enabled->set_active (pp->sharpenMicro.enabled); + enaconn.block (false); + lastEnabled = pp->sharpenMicro.enabled; + + matrixconn.block (true); + matrix->set_active (pp->sharpenMicro.matrix); + matrixconn.block (false); + lastmatrix = pp->sharpenMicro.matrix; + + amount->setValue (pp->sharpenMicro.amount); + uniformity->setValue (pp->sharpenMicro.uniformity); + + enableListener (); +} + +void SharpenMicro::write( ProcParams* pp, ParamsEdited* pedited) { + pp->sharpenMicro.enabled = enabled->get_active (); + pp->sharpenMicro.matrix = matrix->get_active (); + pp->sharpenMicro.amount = amount->getValue (); + pp->sharpenMicro.uniformity = uniformity->getValue (); + + if (pedited) { + pedited->sharpenMicro.enabled = !enabled->get_inconsistent(); + pedited->sharpenMicro.matrix = !matrix->get_inconsistent(); + pedited->sharpenMicro.amount = amount->getEditedState (); + pedited->sharpenMicro.uniformity = uniformity->getEditedState (); + } +} + +void SharpenMicro::enabled_toggled () { + if (batchMode) { + if (enabled->get_inconsistent()) { + enabled->set_inconsistent (false); + enaconn.block (true); + enabled->set_active (false); + enaconn.block (false); + } + else if (lastEnabled) + enabled->set_inconsistent (true); + + lastEnabled = enabled->get_active (); + } + + if (listener) { + if (enabled->get_active ()) + listener->panelChanged (EvSharpenMicroEnabled, M("GENERAL_ENABLED")); + else + listener->panelChanged (EvSharpenMicroEnabled, M("GENERAL_DISABLED")); + + } +} + +void SharpenMicro::matrix_toggled () { + if (batchMode) { + if (matrix->get_inconsistent()) { + matrix->set_inconsistent (false); + matrixconn.block (true); + matrix->set_active (false); + matrixconn.block (false); + } + else if (lastmatrix) + matrix->set_inconsistent (true); + + lastmatrix = matrix->get_active (); + } + + if (listener && enabled->get_active ()) { + if (matrix->get_active ()) + listener->panelChanged (EvSharpenMicroMatrix, M("GENERAL_ENABLED")); + else + listener->panelChanged (EvSharpenMicroMatrix, M("GENERAL_DISABLED")); + } +} + +void SharpenMicro::adjusterChanged (Adjuster* a, double newval) { + if (listener && enabled->get_active()) { + Glib::ustring value = a->getTextValue(); + if (a == amount) + listener->panelChanged (EvSharpenMicroAmount, value ); + else if (a == uniformity) + listener->panelChanged (EvSharpenMicroUniformity, value ); + } +} + +void SharpenMicro::setBatchMode(bool batchMode) { + amount->showEditedCB (); + uniformity->showEditedCB (); +} + +void SharpenMicro::setDefaults(const ProcParams* defParams, const ParamsEdited* pedited) { + amount->setDefault (defParams->sharpenMicro.amount); + uniformity->setDefault (defParams->sharpenMicro.uniformity); + + if (pedited) { + amount->setDefaultEditedState (pedited->sharpenMicro.amount ? Edited : UnEdited); + uniformity->setDefaultEditedState (pedited->sharpenMicro.uniformity ? Edited : UnEdited); + } else { + amount->setDefaultEditedState (Irrelevant); + uniformity->setDefaultEditedState (Irrelevant); + } +} + +void SharpenMicro::setAdjusterBehavior (bool amountadd, bool uniformityadd ) { + amount->setAddMode (amountadd); + uniformity->setAddMode (uniformityadd); +} + +void SharpenMicro::trimValues (ProcParams* pp) { + amount->trimValue (pp->sharpenMicro.amount); + uniformity->trimValue (pp->sharpenMicro.uniformity); +} diff --git a/rtgui/sharpenmicro.h b/rtgui/sharpenmicro.h new file mode 100644 index 000000000..0fa2b1fef --- /dev/null +++ b/rtgui/sharpenmicro.h @@ -0,0 +1,63 @@ +/* + * This file is part of RawTherapee. + * + * Copyright (c) 2004-2010 Gabor Horvath + * + * RawTherapee is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * RawTherapee is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with RawTherapee. If not, see . + * + * + * Manuel Llorens' algorithm of micro-contrast sharpening + * + * + */ +#ifndef _SHARPENMICRO_H_ +#define _SHARPENMICRO_H_ + +#include +#include +#include + +class SharpenMicro : public Gtk::VBox, public AdjusterListener, public FoldableToolPanel { + +protected: + + Gtk::CheckButton* enabled; + Gtk::CheckButton* matrix; + Adjuster* amount; + Adjuster* uniformity; + + bool lastEnabled; + sigc::connection enaconn; + sigc::connection matrixconn; + bool lastmatrix; + +public: + + SharpenMicro (); + + void read (const rtengine::procparams::ProcParams* pp, const ParamsEdited* pedited=NULL); + void write (rtengine::procparams::ProcParams* pp, ParamsEdited* pedited=NULL); + void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited=NULL); + void setBatchMode (bool batchMode); + void trimValues (rtengine::procparams::ProcParams* pp); + void setAdjusterBehavior (bool amountadd, bool uniformityadd ); + void adjusterChanged (Adjuster* a, double newval); + + void enabled_toggled (); + void matrix_toggled (); + + +}; + +#endif diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index f985d4ed7..36a9b4233 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -44,7 +44,8 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL) { defringe = Gtk::manage (new Defringe ()); dirpyrdenoise = Gtk::manage (new DirPyrDenoise ()); sharpening = Gtk::manage (new Sharpening ()); - clarity = Gtk::manage (new Clarity ()); + sharpenEdge = Gtk::manage (new SharpenEdge ()); + sharpenMicro = Gtk::manage (new SharpenMicro ()); lcurve = Gtk::manage (new LCurve ()); lensgeom = Gtk::manage (new LensGeometry ()); distortion = Gtk::manage (new Distortion ()); @@ -75,7 +76,8 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL) { addPanel (colorPanel, chmixer, M("TP_CHMIXER_LABEL")); toolPanels.push_back (chmixer); addPanel (exposurePanel, shadowshighlights, M("TP_SHADOWSHLIGHTS_LABEL")); toolPanels.push_back (shadowshighlights); addPanel (detailsPanel, sharpening, M("TP_SHARPENING_LABEL")); toolPanels.push_back (sharpening); - addPanel (detailsPanel, clarity, M("TP_CLARITY_LABEL")); toolPanels.push_back (clarity); + addPanel (detailsPanel, sharpenEdge, M("TP_SHARPENEDGE_LABEL")); toolPanels.push_back (sharpenEdge); + addPanel (detailsPanel, sharpenMicro, M("TP_SHARPENMICRO_LABEL")); toolPanels.push_back (sharpenMicro); addPanel (colorPanel, hsvequalizer, M("TP_HSVEQUALIZER_LABEL")); toolPanels.push_back (hsvequalizer); addPanel (exposurePanel, lcurve, M("TP_LABCURVE_LABEL")); toolPanels.push_back (lcurve); addPanel (detailsPanel, impulsedenoise, M("TP_IMPULSEDENOISE_LABEL")); toolPanels.push_back (impulsedenoise); diff --git a/rtgui/toolpanelcoord.h b/rtgui/toolpanelcoord.h index ed80eef0e..469af10d4 100644 --- a/rtgui/toolpanelcoord.h +++ b/rtgui/toolpanelcoord.h @@ -58,7 +58,8 @@ #include #include #include -#include +#include +#include class ImageEditorCoordinator; class ToolPanelCoordinator : public ToolPanelListener, @@ -73,7 +74,7 @@ class ToolPanelCoordinator : public ToolPanelListener, public ImageAreaToolListener { protected: - + WhiteBalance* whitebalance; Vignetting* vignetting; LensGeometry* lensgeom; @@ -92,7 +93,8 @@ class ToolPanelCoordinator : public ToolPanelListener, ImpulseDenoise* impulsedenoise; DirPyrDenoise* dirpyrdenoise; Sharpening* sharpening; - Clarity* clarity; + SharpenEdge* sharpenEdge; + SharpenMicro* sharpenMicro; LCurve* lcurve; DirPyrEqualizer * dirpyrequalizer; HSVEqualizer * hsvequalizer;