Splitting "Local sharpening" (formerly "Clarity and Sharpening") in 2 separate tools : "Edges" and "Microcontrast" (see issue 927)

I've modified the languages files as well, but traductors should have a look at what i did...
This commit is contained in:
natureh
2011-09-04 12:00:18 +02:00
parent 9dc19120c2
commit 247cebbb2e
29 changed files with 821 additions and 746 deletions

View File

@@ -520,7 +520,7 @@ PARTIALPASTE_FLATFIELDAUTOSELECT;FF Automatický výběr
PARTIALPASTE_FLATFIELDBLURRADIUS;FF Poloměr rozostření PARTIALPASTE_FLATFIELDBLURRADIUS;FF Poloměr rozostření
PARTIALPASTE_FLATFIELDBLURTYPE;FF Typ rozostření PARTIALPASTE_FLATFIELDBLURTYPE;FF Typ rozostření
PARTIALPASTE_FLATFIELDFILE;Flat-Field (FF) Soubor PARTIALPASTE_FLATFIELDFILE;Flat-Field (FF) Soubor
PARTIALPASTE_GRADIENTSHARPEN;Gradient ostření (okraj) PARTIALPASTE_SHARPENEDGE;Okraj
PARTIALPASTE_HLRECONSTRUCTION;Rekonstrukce světel PARTIALPASTE_HLRECONSTRUCTION;Rekonstrukce světel
PARTIALPASTE_HLRECOVERYAMOUNT;Míra obnovení světel PARTIALPASTE_HLRECOVERYAMOUNT;Míra obnovení světel
PARTIALPASTE_HLRECOVERY;Obnovení světel PARTIALPASTE_HLRECOVERY;Obnovení světel
@@ -535,7 +535,7 @@ PARTIALPASTE_LENSGROUP;Nastavení objektivu
PARTIALPASTE_LUMADENOISE;Redukce šumu v jasech PARTIALPASTE_LUMADENOISE;Redukce šumu v jasech
PARTIALPASTE_LUMINANCEGROUP;Nastavení jasu PARTIALPASTE_LUMINANCEGROUP;Nastavení jasu
PARTIALPASTE_METAICMGROUP;Nastavení metadat a ICM PARTIALPASTE_METAICMGROUP;Nastavení metadat a ICM
PARTIALPASTE_MICROCONTRAST;Mikrokontrast PARTIALPASTE_SHARPENMICRO;Mikrokontrast
PARTIALPASTE_PERSPECTIVE;Perspektiva PARTIALPASTE_PERSPECTIVE;Perspektiva
PARTIALPASTE_PREPROCESS_GREENEQUIL;Vyrovnání zelené PARTIALPASTE_PREPROCESS_GREENEQUIL;Vyrovnání zelené
PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Aplikovat filtr na vypálené/mrtvé body PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Aplikovat filtr na vypálené/mrtvé body
@@ -738,13 +738,14 @@ TOOLBAR_TOOLTIP_WB;Bodové vyvážení bílé <b>W</b>
TP_CACORRECTION_BLUE;Modrá TP_CACORRECTION_BLUE;Modrá
TP_CACORRECTION_LABEL;Úprava chromatické vady TP_CACORRECTION_LABEL;Úprava chromatické vady
TP_CACORRECTION_RED;Červená TP_CACORRECTION_RED;Červená
TP_CLARITY_LABEL;Ostrost a doostření TP_SHARPENEDGE_AMOUNT;Míra
TP_CLARITY_MATRIX;Matice 3x3 místo 5x5 TP_SHARPENEDGE_LABEL;Okraj
TP_CLARITY_MICRO;Mikrokontrast (textura) TP_SHARPENEDGE_PASSES;Průchody gradientu
TP_CLARITY_PASSES;Průchody gradientu TP_SHARPENEDGE_THREE;Pouze jas
TP_CLARITY_SHARPEN;Gradient ostření (okraj) TP_SHARPENMICRO_AMOUNT;Míra
TP_CLARITY_STRENGTH;Síla gradientu TP_SHARPENMICRO_LABEL;Mikrokontrast
TP_CLARITY_THREE;Pouze jas TP_SHARPENMICRO_MATRIX;Matice 3×3 místo 5×5
TP_SHARPENMICRO_UNIFORMITY;Jednolitost
TP_COARSETRAF_DEGREE;Stupeň: TP_COARSETRAF_DEGREE;Stupeň:
TP_COARSETRAF_TOOLTIP_HFLIP;Překlopit horizontálně TP_COARSETRAF_TOOLTIP_HFLIP;Překlopit horizontálně
TP_COARSETRAF_TOOLTIP_ROTLEFT;Otočit doleva TP_COARSETRAF_TOOLTIP_ROTLEFT;Otočit doleva
@@ -893,8 +894,6 @@ TP_LENSGEOM_LABEL;Objektiv / Geometrie
TP_LUMADENOISE_EDGETOLERANCE;Tolerance okrajům TP_LUMADENOISE_EDGETOLERANCE;Tolerance okrajům
TP_LUMADENOISE_LABEL;Redukce šumu v jasech TP_LUMADENOISE_LABEL;Redukce šumu v jasech
TP_LUMADENOISE_RADIUS;Poloměr TP_LUMADENOISE_RADIUS;Poloměr
TP_MLMICRO_STRENGTH;Síla
TP_MLMICRO_UNIFORMITY;Jednolitost
TP_PERSPECTIVE_HORIZONTAL;Vodorovně TP_PERSPECTIVE_HORIZONTAL;Vodorovně
TP_PERSPECTIVE_LABEL;Perspektiva TP_PERSPECTIVE_LABEL;Perspektiva
TP_PERSPECTIVE_VERTICAL;Svisle TP_PERSPECTIVE_VERTICAL;Svisle

View File

@@ -529,7 +529,7 @@ PARTIALPASTE_FLATFIELDAUTOSELECT;Weißbild: Automatische Auswahl
PARTIALPASTE_FLATFIELDBLURRADIUS;Weißbild: Unschärferadius PARTIALPASTE_FLATFIELDBLURRADIUS;Weißbild: Unschärferadius
PARTIALPASTE_FLATFIELDBLURTYPE;Weißbild: Unschärfetyp PARTIALPASTE_FLATFIELDBLURTYPE;Weißbild: Unschärfetyp
PARTIALPASTE_FLATFIELDFILE;Weißbild: Datei PARTIALPASTE_FLATFIELDFILE;Weißbild: Datei
PARTIALPASTE_GRADIENTSHARPEN;Kantenschärfung PARTIALPASTE_SHARPENEDGE;Kantenschärfung
PARTIALPASTE_HLRECONSTRUCTION;Lichter wiederherstellen PARTIALPASTE_HLRECONSTRUCTION;Lichter wiederherstellen
PARTIALPASTE_HLRECOVERY;Lichter wiederherstellen PARTIALPASTE_HLRECOVERY;Lichter wiederherstellen
PARTIALPASTE_HLRECOVERYAMOUNT;Lichter wiederherstellen\nStärke PARTIALPASTE_HLRECOVERYAMOUNT;Lichter wiederherstellen\nStärke
@@ -543,7 +543,7 @@ PARTIALPASTE_LENSGROUP;Gruppe Objektivkorrekturen
PARTIALPASTE_LUMADENOISE;Luminanz-Rauschfilter PARTIALPASTE_LUMADENOISE;Luminanz-Rauschfilter
PARTIALPASTE_LUMINANCEGROUP;Gruppe Luminanzeinstellungen PARTIALPASTE_LUMINANCEGROUP;Gruppe Luminanzeinstellungen
PARTIALPASTE_METAICMGROUP;Gruppe Metadaten / ICM PARTIALPASTE_METAICMGROUP;Gruppe Metadaten / ICM
PARTIALPASTE_MICROCONTRAST;Mikrokontrast PARTIALPASTE_SHARPENMICRO;Mikrokontrast
PARTIALPASTE_PERSPECTIVE;Perspektive PARTIALPASTE_PERSPECTIVE;Perspektive
PARTIALPASTE_PREPROCESS_GREENEQUIL;Vorverarbeitung: Grün-Ausgleich PARTIALPASTE_PREPROCESS_GREENEQUIL;Vorverarbeitung: Grün-Ausgleich
PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Vorverarbeitung: Hot/Dead-Pixel-Filter anwenden 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_LABEL;Kanal-Mixer
TP_CHMIXER_RED;Rot TP_CHMIXER_RED;Rot
TP_CHROMATABERR_LABEL;Chromatische Aberration TP_CHROMATABERR_LABEL;Chromatische Aberration
TP_CLARITY_LABEL;Lokale Schärfung TP_SHARPENEDGE_AMOUNT;Quantität
TP_CLARITY_MATRIX;3×3-Matrix statt 5×5-Matrix TP_SHARPENEDGE_LABEL;Kantenschärfung
TP_CLARITY_MICRO;Mikrokontrast TP_SHARPENEDGE_PASSES;Iterationen
TP_CLARITY_PASSES;Iterationen TP_SHARPENEDGE_THREE;Nur Luminanz
TP_CLARITY_SHARPEN;Kantenschärfung TP_SHARPENMICRO_AMOUNT;Quantität
TP_CLARITY_STRENGTH;Quantität TP_SHARPENMICRO_LABEL;Mikrokontrast
TP_CLARITY_THREE;Nur Luminanz TP_SHARPENMICRO_MATRIX;3×3-Matrix statt 5×5-Matrix
TP_SHARPENMICRO_UNIFORMITY;Gleichmäßigkeit
TP_COARSETRAF_DEGREE;Grad: TP_COARSETRAF_DEGREE;Grad:
TP_COARSETRAF_TOOLTIP_HFLIP;Horizontal spiegeln TP_COARSETRAF_TOOLTIP_HFLIP;Horizontal spiegeln
TP_COARSETRAF_TOOLTIP_ROTLEFT;Nach links drehen <b>[</b> TP_COARSETRAF_TOOLTIP_ROTLEFT;Nach links drehen <b>[</b>
@@ -908,8 +909,6 @@ TP_LENSGEOM_LABEL;Objektivkorrekturen
TP_LUMADENOISE_EDGETOLERANCE;Kantentoleranz TP_LUMADENOISE_EDGETOLERANCE;Kantentoleranz
TP_LUMADENOISE_LABEL;Luminanz-Rauschfilter TP_LUMADENOISE_LABEL;Luminanz-Rauschfilter
TP_LUMADENOISE_RADIUS;Radius TP_LUMADENOISE_RADIUS;Radius
TP_MLMICRO_STRENGTH;Quantität
TP_MLMICRO_UNIFORMITY;Gleichmäßigkeit
TP_PERSPECTIVE_HORIZONTAL;Horizontal TP_PERSPECTIVE_HORIZONTAL;Horizontal
TP_PERSPECTIVE_LABEL;Perspektive TP_PERSPECTIVE_LABEL;Perspektive
TP_PERSPECTIVE_VERTICAL;Vertikal TP_PERSPECTIVE_VERTICAL;Vertikal

View File

@@ -514,7 +514,7 @@ PARTIALPASTE_FLATFIELDAUTOSELECT;Sélection auto du Champ Uniforme
PARTIALPASTE_FLATFIELDBLURRADIUS;Rayon de floutage du Champ Uniforme PARTIALPASTE_FLATFIELDBLURRADIUS;Rayon de floutage du Champ Uniforme
PARTIALPASTE_FLATFIELDBLURTYPE;Type de floutage du Champ Uniforme PARTIALPASTE_FLATFIELDBLURTYPE;Type de floutage du Champ Uniforme
PARTIALPASTE_FLATFIELDFILE;Fichier de Champ Uniforme PARTIALPASTE_FLATFIELDFILE;Fichier de Champ Uniforme
PARTIALPASTE_GRADIENTSHARPEN;Détail local PARTIALPASTE_SHARPENEDGE;Bords
PARTIALPASTE_HLRECONSTRUCTION;Reconstruction des hautes lumières PARTIALPASTE_HLRECONSTRUCTION;Reconstruction des hautes lumières
PARTIALPASTE_HLRECOVERY;Récupération des hautes lumières PARTIALPASTE_HLRECOVERY;Récupération des hautes lumières
PARTIALPASTE_HLRECOVERYAMOUNT;Quantité de récup. 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_LUMADENOISE;Réduction du bruit de luminance
PARTIALPASTE_LUMINANCEGROUP;Réglages de la luminance PARTIALPASTE_LUMINANCEGROUP;Réglages de la luminance
PARTIALPASTE_METAICMGROUP;Réglages des Métadonnées/ICM PARTIALPASTE_METAICMGROUP;Réglages des Métadonnées/ICM
PARTIALPASTE_MICROCONTRAST;Microcontraste PARTIALPASTE_SHARPENMICRO;Microcontraste
PARTIALPASTE_PERSPECTIVE;Perspective PARTIALPASTE_PERSPECTIVE;Perspective
PARTIALPASTE_PREPROCESS_GREENEQUIL;Équilibrage du vert PARTIALPASTE_PREPROCESS_GREENEQUIL;Équilibrage du vert
PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Filtrage des pixels chauds/morts PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Filtrage des pixels chauds/morts
@@ -748,15 +748,14 @@ TP_CHMIXER_GREEN;Vert
TP_CHMIXER_LABEL;Mixage des canaux TP_CHMIXER_LABEL;Mixage des canaux
TP_CHMIXER_RED;Rouge TP_CHMIXER_RED;Rouge
TP_CHROMATABERR_LABEL;Aberration Chromatique TP_CHROMATABERR_LABEL;Aberration Chromatique
TP_CLARITY_LABEL;Clareté et nette TP_SHARPENEDGE_AMOUNT;Quanti
TP_CLARITY_SHARPEN;Netteté des Bords TP_SHARPENEDGE_LABEL;Bords
TP_CLARITY_STRENGTH;Quantité TP_SHARPENEDGE_PASSES;Itérations
TP_CLARITY_PASSES;Itérations TP_SHARPENEDGE_THREE;Luminance uniquement
TP_CLARITY_MICRO;Microcontraste TP_SHARPENMICRO_AMOUNT;Quantité
TP_CLARITY_THREE;Luminance uniquement TP_SHARPENMICRO_LABEL;Microcontraste
TP_CLARITY_MATRIX;Matrice 3x3 au lieu de 5x5 TP_SHARPENMICRO_MATRIX;Matrice 3×3 au lieu de 5×5
TP_MLMICRO_STRENGTH;Quantité TP_SHARPENMICRO_UNIFORMITY;Uniformité
TP_MLMICRO_UNIFORMITY;Uniformité
TP_COARSETRAF_DEGREE;degré: TP_COARSETRAF_DEGREE;degré:
TP_COARSETRAF_TOOLTIP_HFLIP;Symétriser / axe vertical TP_COARSETRAF_TOOLTIP_HFLIP;Symétriser / axe vertical
TP_COARSETRAF_TOOLTIP_ROTLEFT;Rotation vers la gauche TP_COARSETRAF_TOOLTIP_ROTLEFT;Rotation vers la gauche

View File

@@ -519,7 +519,7 @@ PARTIALPASTE_FLATFIELDAUTOSELECT;Autoselezione FF
PARTIALPASTE_FLATFIELDBLURRADIUS;Raggio di sfocamento FF PARTIALPASTE_FLATFIELDBLURRADIUS;Raggio di sfocamento FF
PARTIALPASTE_FLATFIELDBLURTYPE;Modalità di sfocamento FF PARTIALPASTE_FLATFIELDBLURTYPE;Modalità di sfocamento FF
PARTIALPASTE_FLATFIELDFILE;File di Flat-Field PARTIALPASTE_FLATFIELDFILE;File di Flat-Field
PARTIALPASTE_GRADIENTSHARPEN;Acutanza PARTIALPASTE_SHARPENEDGE;Bordi
PARTIALPASTE_HLRECONSTRUCTION;Ricostruzione alteluci PARTIALPASTE_HLRECONSTRUCTION;Ricostruzione alteluci
PARTIALPASTE_HLRECOVERY;Recupero alteluci PARTIALPASTE_HLRECOVERY;Recupero alteluci
PARTIALPASTE_HLRECOVERYAMOUNT;Quantità di 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_LUMADENOISE;Riduzione rumore di luminanza
PARTIALPASTE_LUMINANCEGROUP;Parametri riguardanti la luminanza PARTIALPASTE_LUMINANCEGROUP;Parametri riguardanti la luminanza
PARTIALPASTE_METAICMGROUP;Parametri di metadati e ICM PARTIALPASTE_METAICMGROUP;Parametri di metadati e ICM
PARTIALPASTE_MICROCONTRAST;Microcontrasto PARTIALPASTE_SHARPENMICRO;Microcontrasto
PARTIALPASTE_PERSPECTIVE;Prospettiva PARTIALPASTE_PERSPECTIVE;Prospettiva
PARTIALPASTE_PREPROCESS_GREENEQUIL;Uniformazione del verde PARTIALPASTE_PREPROCESS_GREENEQUIL;Uniformazione del verde
PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Interpolazione dei pixel surriscaldati/guasti PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Interpolazione dei pixel surriscaldati/guasti
@@ -746,15 +746,14 @@ TP_CHMIXER_GREEN;Verde
TP_CHMIXER_LABEL;Miscelatore canali TP_CHMIXER_LABEL;Miscelatore canali
TP_CHMIXER_RED;Rosso TP_CHMIXER_RED;Rosso
TP_CHROMATABERR_LABEL;Aberrazioni cromatiche TP_CHROMATABERR_LABEL;Aberrazioni cromatiche
TP_CLARITY_LABEL;Acutanza TP_SHARPENEDGE_AMOUNT;Quantità
TP_CLARITY_SHARPEN;Gradiente ai margini TP_SHARPENEDGE_LABEL;Bordi
TP_CLARITY_STRENGTH;Quantità TP_SHARPENEDGE_PASSES;Iterazioni
TP_CLARITY_PASSES;Iterazioni TP_SHARPENEDGE_THREE;Solo per luminanza
TP_CLARITY_MICRO;Microcontrasto TP_SHARPENMICRO_AMOUNT;Quantità
TP_CLARITY_THREE;Solo per luminanza TP_SHARPENMICRO_LABEL;Microcontrasto
TP_CLARITY_MATRIX;Matrice 3x3 invece di 5x5 TP_SHARPENMICRO_MATRIX;Matrice 3×3 invece di 5×5
TP_MLMICRO_STRENGTH;Quantità TP_SHARPENMICRO_UNIFORMITY;Uniformità
TP_MLMICRO_UNIFORMITY;Uniformità
TP_COARSETRAF_DEGREE;Angolo: TP_COARSETRAF_DEGREE;Angolo:
TP_COARSETRAF_TOOLTIP_HFLIP;Rifletti orizzontalmente TP_COARSETRAF_TOOLTIP_HFLIP;Rifletti orizzontalmente
TP_COARSETRAF_TOOLTIP_ROTLEFT;Ruota a sinistra TP_COARSETRAF_TOOLTIP_ROTLEFT;Ruota a sinistra

View File

@@ -513,7 +513,7 @@ PARTIALPASTE_FLATFIELDAUTOSELECT;FF Auto Select
PARTIALPASTE_FLATFIELDBLURRADIUS;FF Blur Radius PARTIALPASTE_FLATFIELDBLURRADIUS;FF Blur Radius
PARTIALPASTE_FLATFIELDBLURTYPE;FF Blur Type PARTIALPASTE_FLATFIELDBLURTYPE;FF Blur Type
PARTIALPASTE_FLATFIELDFILE;Flat field (FF) File PARTIALPASTE_FLATFIELDFILE;Flat field (FF) File
PARTIALPASTE_GRADIENTSHARPEN;Local Sharpening PARTIALPASTE_SHARPENEDGE;Edges
PARTIALPASTE_HLRECONSTRUCTION;Highlight reconstruction PARTIALPASTE_HLRECONSTRUCTION;Highlight reconstruction
PARTIALPASTE_HLRECOVERY;Highlight recovery PARTIALPASTE_HLRECOVERY;Highlight recovery
PARTIALPASTE_HLRECOVERYAMOUNT;Highlight recovery amount PARTIALPASTE_HLRECOVERYAMOUNT;Highlight recovery amount
@@ -527,7 +527,7 @@ PARTIALPASTE_LENSGROUP;Lens related settings
PARTIALPASTE_LUMADENOISE;Luminance noise reduction PARTIALPASTE_LUMADENOISE;Luminance noise reduction
PARTIALPASTE_LUMINANCEGROUP;Luminance related settings PARTIALPASTE_LUMINANCEGROUP;Luminance related settings
PARTIALPASTE_METAICMGROUP;Metadata/ICM settings PARTIALPASTE_METAICMGROUP;Metadata/ICM settings
PARTIALPASTE_MICROCONTRAST;Microcontrast PARTIALPASTE_SHARPENMICRO;Microcontrast
PARTIALPASTE_PERSPECTIVE;Perspective PARTIALPASTE_PERSPECTIVE;Perspective
PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration PARTIALPASTE_PREPROCESS_GREENEQUIL;Green equilibration
PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Apply hot/dead pixel filter PARTIALPASTE_PREPROCESS_HOTDEADPIXFILT;Apply hot/dead pixel filter
@@ -740,15 +740,14 @@ TP_CHMIXER_GREEN;Green
TP_CHMIXER_LABEL;Channel Mixer TP_CHMIXER_LABEL;Channel Mixer
TP_CHMIXER_RED;Red TP_CHMIXER_RED;Red
TP_CHROMATABERR_LABEL;Chromatic Aberration TP_CHROMATABERR_LABEL;Chromatic Aberration
TP_CLARITY_LABEL;Local Sharpening TP_SHARPENEDGE_AMOUNT;Quantity
TP_CLARITY_SHARPEN;Edges Sharpening TP_SHARPENEDGE_LABEL;Edges
TP_CLARITY_STRENGTH;Quantity TP_SHARPENEDGE_PASSES;Iterations
TP_CLARITY_PASSES;Iterations TP_SHARPENEDGE_THREE;Luminance only
TP_CLARITY_MICRO;Microcontrast TP_SHARPENMICRO_AMOUNT;Quantity
TP_CLARITY_THREE;Luminance only TP_SHARPENMICRO_LABEL;Microcontrast
TP_CLARITY_MATRIX;3x3 matrix instead of 5x5 TP_SHARPENMICRO_MATRIX;3<EFBFBD>3 matrix instead of 5<EFBFBD>5
TP_MLMICRO_STRENGTH;Quantity TP_SHARPENMICRO_UNIFORMITY;Uniformity
TP_MLMICRO_UNIFORMITY;Uniformity
TP_COARSETRAF_DEGREE;degree: TP_COARSETRAF_DEGREE;degree:
TP_COARSETRAF_TOOLTIP_HFLIP;Flip horizontally TP_COARSETRAF_TOOLTIP_HFLIP;Flip horizontally
TP_COARSETRAF_TOOLTIP_ROTLEFT;Rotate left <b>[</b> TP_COARSETRAF_TOOLTIP_ROTLEFT;Rotate left <b>[</b>

View File

@@ -255,11 +255,11 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) {
ipf.defringe (nprevl); ipf.defringe (nprevl);
progress ("Denoising luma/chroma...",100*readyphase/numofphases); progress ("Denoising luma/chroma...",100*readyphase/numofphases);
ipf.dirpyrdenoise (nprevl); ipf.dirpyrdenoise (nprevl);
if (params.clarity.enabled) { if (params.sharpenEdge.enabled) {
progress ("Clarity...",100*readyphase/numofphases); progress ("Edge sharpening...",100*readyphase/numofphases);
ipf.MLsharpen (nprevl); ipf.MLsharpen (nprevl);
} }
if (params.clarity.enabledtwo) { if (params.sharpenMicro.enabled) {
progress ("Microcontrast...",100*readyphase/numofphases); progress ("Microcontrast...",100*readyphase/numofphases);
ipf.MLmicrocontrast (nprevl); ipf.MLmicrocontrast (nprevl);
} }

View File

@@ -239,7 +239,7 @@ void ImProcFunctions::sharpenHaloCtrl (LabImage* lab, float** blurmap, float** b
} }
} }
// To the extent possible under law, Manuel Llorens <manuelllorens@gmail.com>[ // To the extent possible under law, Manuel Llorens <manuelllorens@gmail.com>
// has waived all copyright and related or neighboring rights to this work. // has waived all copyright and related or neighboring rights to this work.
// This work is published from: Spain. // This work is published from: Spain.
@@ -247,7 +247,7 @@ void ImProcFunctions::sharpenHaloCtrl (LabImage* lab, float** blurmap, float** b
void ImProcFunctions::MLsharpen (LabImage* lab) { 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) // 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... // 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; return;
MyTime t1e,t2e; MyTime t1e,t2e;
t1e.set(); t1e.set();
@@ -260,13 +260,13 @@ void ImProcFunctions::MLsharpen (LabImage* lab) {
float templab; float templab;
int iii,kkk; int iii,kkk;
width2 = 2*width; width2 = 2*width;
float strength; float amount;
strength = params->clarity.clstrength / 100.0f; amount = params->sharpenEdge.amount / 100.0f;
if (strength < 0.00001f) if (amount < 0.00001f)
return; return;
if (settings->verbose) if (settings->verbose)
printf ("Clarity strength %f\n", strength); printf ("SharpenEdge amount %f\n", amount);
L = new float[width*height]; L = new float[width*height];
@@ -275,13 +275,13 @@ void ImProcFunctions::MLsharpen (LabImage* lab) {
chmax[2] = 3.0f; chmax[2] = 3.0f;
int channels; int channels;
if (params->clarity.clthreechannels) channels=0; else channels=2; if (params->sharpenEdge.threechannels) channels=0; else channels=2;
if (settings->verbose) 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) if (settings->verbose)
printf ("Clarity passes %d\n", passes); printf ("SharpenEdge passes %d\n", passes);
for (p=0; p<passes; p++) for (p=0; p<passes; p++)
for (c=0; c<=channels; c++) {// c=0 Luminance only for (c=0; c<=channels; c++) {// c=0 Luminance only
@@ -294,7 +294,7 @@ void ImProcFunctions::MLsharpen (LabImage* lab) {
else if (c==1) L[offset] = lab->a[ii][kk]/327.68f; else if (c==1) L[offset] = lab->a[ii][kk]/327.68f;
else if (c==2) L[offset] = lab->b[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; j<height-2; j++) for(j=2; j<height-2; j++)
for(i=2,offset=j*width+i; i<width-2; i++,offset++) { for(i=2,offset=j*width+i; i<width-2; i++,offset++) {
// weight functions // weight functions
@@ -390,11 +390,11 @@ void ImProcFunctions::MLsharpen (LabImage* lab) {
} }
} }
s = strength; s = amount;
// avoid sharpening diagonals too much // avoid sharpening diagonals too much
if (((fabs(wH/wV)<0.45f)&&(fabs(wH/wV)>0.05f))||((fabs(wV/wH)<0.45f)&&(fabs(wV/wH)>0.05f))) if (((fabs(wH/wV)<0.45f)&&(fabs(wH/wV)>0.05f))||((fabs(wV/wH)<0.45f)&&(fabs(wV/wH)>0.05f)))
s = strength/3.0f; s = amount/3.0f;
// final mix // final mix
if ((wH!=0.0f)&&(wV!=0.0f)&&(wD1!=0.0f)&&(wD2!=0.0f)) { if ((wH!=0.0f)&&(wV!=0.0f)&&(wD1!=0.0f)&&(wD2!=0.0f)) {
@@ -413,7 +413,7 @@ void ImProcFunctions::MLsharpen (LabImage* lab) {
t2e.set(); t2e.set();
if (settings->verbose) 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 <manuelllorens@gmail.com> // To the extent possible under law, Manuel Llorens <manuelllorens@gmail.com>
@@ -422,30 +422,30 @@ void ImProcFunctions::MLsharpen (LabImage* lab) {
// http://creativecommons.org/publicdomain/zero/1.0/ // http://creativecommons.org/publicdomain/zero/1.0/
// addition from JD : pyramid + ponderated contrast with matrix 5x5 // addition from JD : pyramid + ponderated contrast with matrix 5x5
void ImProcFunctions::MLmicrocontrast(LabImage* lab) { void ImProcFunctions::MLmicrocontrast(LabImage* lab) {
if (params->clarity.enabledtwo==false) if (params->sharpenMicro.enabled==false)
return; return;
MyTime t1e,t2e; MyTime t1e,t2e;
t1e.set(); t1e.set();
int k; 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 // k=2 matrix 5x5 k=1 matrix 3x3
int offset,offset2,c,i,j,col,row,n; int offset,offset2,c,i,j,col,row,n;
float temp,temp2,temp3,temp4,tempL; float temp,temp2,temp3,temp4,tempL;
float *LM,v,s,contrast,w; float *LM,v,s,contrast,w;
int signs[25]; int signs[25];
int width = lab->W, height = lab->H; 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; int unif;
unif = (int)(uniform/10.0f); //put unif between 0 to 10 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 float amount = params->sharpenMicro.amount/1500.0f; //amount 2000.0 quasi no artefacts ==> 1500 = maximum, after artefacts
if (strength < 0.000001f) if (amount < 0.000001f)
return; return;
if (k==1) if (k==1)
strength *= 2.7f; //25/9 if 3x3 amount *= 2.7f; //25/9 if 3x3
if (settings->verbose) if (settings->verbose)
printf ("Microcontrast strength %f\n", strength); printf ("Micro-contrast amount %f\n", amount);
if (settings->verbose) if (settings->verbose)
printf ("Microcontrast uniformity %i\n",unif); printf ("Micro-contrast uniformity %i\n",unif);
//modulation uniformity in function of luminance //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 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}; 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 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; j<height-k; j++) for(j=k; j<height-k; j++)
for(i=k,offset=j*width+i; i<width-k; i++,offset++) { for(i=k,offset=j*width+i; i<width-k; i++,offset++) {
s=strength; s=amount;
v=LM[offset]; v=LM[offset];
n=0; n=0;
for(row=j-k; row<=j+k; row++) for(row=j-k; row<=j+k; row++)
@@ -611,7 +611,7 @@ void ImProcFunctions::MLmicrocontrast(LabImage* lab) {
delete [] LM; delete [] LM;
t2e.set(); t2e.set();
if (settings->verbose) if (settings->verbose)
printf("Microcontrast %d usec\n", t2e.etime(t1e)); printf("Micro-contrast %d usec\n", t2e.etime(t1e));
} }

View File

@@ -163,14 +163,14 @@ enum ProcEvent {
EvPreProcessExpBlacktwo=138, EvPreProcessExpBlacktwo=138,
EvPreProcessExpBlackthree=139, EvPreProcessExpBlackthree=139,
EvPreProcessExptwoGreen=140, EvPreProcessExptwoGreen=140,
EvClaritypasses=141, EvSharpenEdgePasses=141,
EvClaritystrength=142, EvSharpenEdgeAmount=142,
EvMLmicrostrength=143, EvSharpenMicroAmount=143,
EvMLuniformity=144, EvSharpenMicroUniformity=144,
EvClarityEnabled=145, EvSharpenEdgeEnabled=145,
EvClaritythreechannels=146, EvSharpenEdgeThreechannels=146,
EvClarityEnabledtwo=147, EvSharpenMicroEnabled=147,
EvClaritymatrix=148, EvSharpenMicroMatrix=148,
EvDemosaicALLEnhanced=149, EvDemosaicALLEnhanced=149,
NUMOFEVENTS=150 NUMOFEVENTS=150

View File

@@ -91,15 +91,16 @@ void ProcParams::setDefaults () {
labCurve.bcurve.clear (); labCurve.bcurve.clear ();
labCurve.bcurve.push_back(DCT_Linear); labCurve.bcurve.push_back(DCT_Linear);
clarity.enabled = false; sharpenEdge.enabled = false;
clarity.clpasses = 2; sharpenEdge.passes = 2;
clarity.clstrength = 50.0; sharpenEdge.amount = 50.0;
clarity.enabledtwo = false; sharpenEdge.threechannels = false;
clarity.mlstrength = 20.0;
clarity.uniformity = 50.0; sharpenMicro.enabled = false;
clarity.clthreechannels = false; sharpenMicro.amount = 20.0;
clarity.MLmicromatrix = false; sharpenMicro.uniformity = 50.0;
sharpenMicro.matrix = false;
sharpening.enabled = false; sharpening.enabled = false;
sharpening.radius = 1.0; sharpening.radius = 1.0;
sharpening.amount = 90; sharpening.amount = 90;
@@ -311,15 +312,15 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2) const {
// save luma curve // save luma curve
keyFile.set_integer ("Luminance Curve", "Brightness", labCurve.brightness); keyFile.set_integer ("Luminance Curve", "Brightness", labCurve.brightness);
keyFile.set_integer ("Luminance Curve", "Contrast", labCurve.contrast); keyFile.set_integer ("Luminance Curve", "Contrast", labCurve.contrast);
keyFile.set_integer ("Luminance Curve", "Saturation", labCurve.saturation); keyFile.set_integer ("Luminance Curve", "Saturation", labCurve.saturation);
keyFile.set_boolean ("Luminance Curve", "AvoidColorClipping", labCurve.avoidclip); keyFile.set_boolean ("Luminance Curve", "AvoidColorClipping", labCurve.avoidclip);
keyFile.set_boolean ("Luminance Curve", "SaturationLimiter", labCurve.enable_saturationlimiter); keyFile.set_boolean ("Luminance Curve", "SaturationLimiter", labCurve.enable_saturationlimiter);
keyFile.set_double ("Luminance Curve", "SaturationLimit", labCurve.saturationlimit); keyFile.set_double ("Luminance Curve", "SaturationLimit", labCurve.saturationlimit);
Glib::ArrayHandle<double> lcurve = labCurve.lcurve; Glib::ArrayHandle<double> lcurve = labCurve.lcurve;
Glib::ArrayHandle<double> acurve = labCurve.acurve; Glib::ArrayHandle<double> acurve = labCurve.acurve;
Glib::ArrayHandle<double> bcurve = labCurve.bcurve; Glib::ArrayHandle<double> bcurve = labCurve.bcurve;
keyFile.set_double_list("Luminance Curve", "LCurve", lcurve); 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); keyFile.set_double_list("Luminance Curve", "bCurve", bcurve);
// save sharpening // 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", "DeconvAmount", sharpening.deconvamount);
keyFile.set_integer ("Sharpening", "DeconvDamping", sharpening.deconvdamping); keyFile.set_integer ("Sharpening", "DeconvDamping", sharpening.deconvdamping);
keyFile.set_integer ("Sharpening", "DeconvIterations", sharpening.deconviter); 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 // save colorBoost
keyFile.set_integer ("Color Boost", "Amount", colorBoost.amount); keyFile.set_integer ("Color Boost", "Amount", colorBoost.amount);
keyFile.set_boolean ("Color Boost", "AvoidColorClipping", colorBoost.avoidclip); 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_key ("Sharpening", "DeconvIterations")) sharpening.deconviter = keyFile.get_integer ("Sharpening", "DeconvIterations");
} }
// load edge sharpening
if (keyFile.has_group ("Clarity")) { if (keyFile.has_group ("SharpenEdge")) {
if (keyFile.has_key ("Clarity", "Enabled")) clarity.enabled = keyFile.get_boolean ("Clarity", "Enabled"); if (keyFile.has_key ("SharpenEdge", "Enabled")) sharpenEdge.enabled = keyFile.get_boolean ("SharpenEdge", "Enabled");
if (keyFile.has_key ("Clarity", "Clpasses")) clarity.clpasses = keyFile.get_integer ("Clarity", "Clpasses"); if (keyFile.has_key ("SharpenEdge", "Passes")) sharpenEdge.passes = keyFile.get_integer ("SharpenEdge", "Passes");
if (keyFile.has_key ("Clarity", "Clstrength")) clarity.clstrength = keyFile.get_double ("Clarity", "Clstrength"); if (keyFile.has_key ("SharpenEdge", "Strength")) sharpenEdge.amount = keyFile.get_double ("SharpenEdge", "Strength");
if (keyFile.has_key ("Clarity", "Clthreechannels")) clarity.clthreechannels = keyFile.get_boolean ("Clarity", "Clthreechannels"); if (keyFile.has_key ("SharpenEdge", "ThreeChannels")) sharpenEdge.threechannels = keyFile.get_boolean ("SharpenEdge", "ThreeChannels");
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 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 // load colorBoost
if (keyFile.has_group ("Color Boost")) { if (keyFile.has_group ("Color Boost")) {
if (keyFile.has_key ("Color Boost", "Amount")) colorBoost.amount = keyFile.get_integer ("Color Boost", "Amount"); 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.avoidclip == other.labCurve.avoidclip
&& labCurve.enable_saturationlimiter == other.labCurve.enable_saturationlimiter && labCurve.enable_saturationlimiter == other.labCurve.enable_saturationlimiter
&& labCurve.saturationlimit == other.labCurve.saturationlimit && labCurve.saturationlimit == other.labCurve.saturationlimit
&& clarity.enabled == other.clarity.enabled && sharpenEdge.enabled == other.sharpenEdge.enabled
&& clarity.clpasses == other.clarity.clpasses && sharpenEdge.passes == other.sharpenEdge.passes
&& clarity.clstrength == other.clarity.clstrength && sharpenEdge.amount == other.sharpenEdge.amount
&& clarity.enabledtwo == other.clarity.enabledtwo && sharpenEdge.threechannels == other.sharpenEdge.threechannels
&& clarity.mlstrength == other.clarity.mlstrength && sharpenMicro.enabled == other.sharpenMicro.enabled
&& clarity.uniformity == other.clarity.uniformity && sharpenMicro.matrix == other.sharpenMicro.matrix
&& clarity.MLmicromatrix == other.clarity.MLmicromatrix && sharpenMicro.amount == other.sharpenMicro.amount
&& clarity.clthreechannels == other.clarity.clthreechannels && sharpenMicro.uniformity == other.sharpenMicro.uniformity
&& sharpening.enabled == other.sharpening.enabled && sharpening.enabled == other.sharpening.enabled
&& sharpening.radius == other.sharpening.radius && sharpening.radius == other.sharpening.radius
&& sharpening.amount == other.sharpening.amount && sharpening.amount == other.sharpening.amount

View File

@@ -38,7 +38,7 @@ class ToneCurveParams {
int brightness; int brightness;
int black; int black;
int contrast; int contrast;
int saturation; int saturation;
int shcompr; int shcompr;
int hlcompr; int hlcompr;
int hlcomprthresh; int hlcomprthresh;
@@ -51,14 +51,14 @@ class LCurveParams {
public: public:
std::vector<double> lcurve; std::vector<double> lcurve;
std::vector<double> acurve; std::vector<double> acurve;
std::vector<double> bcurve; std::vector<double> bcurve;
int brightness; int brightness;
int contrast; int contrast;
int saturation; int saturation;
bool avoidclip; bool avoidclip;
bool enable_saturationlimiter; bool enable_saturationlimiter;
double saturationlimit; double saturationlimit;
}; };
/** /**
@@ -76,23 +76,25 @@ class SharpeningParams {
int edges_tolerance; int edges_tolerance;
bool halocontrol; bool halocontrol;
int halocontrol_amount; int halocontrol_amount;
Glib::ustring method; Glib::ustring method;
int deconvamount; int deconvamount;
double deconvradius; double deconvradius;
int deconviter; int deconviter;
int deconvdamping; int deconvdamping;
}; };
class ClarityParams { class SharpenEdgeParams {
public: public:
bool enabled; bool enabled;
int clpasses; int passes;
double clstrength; double amount;
bool enabledtwo; bool threechannels;
double mlstrength; };
bool clthreechannels; class SharpenMicroParams {
double uniformity; public:
bool MLmicromatrix; bool enabled;
bool matrix;
double amount;
double uniformity;
}; };
/** /**
* Parameters of the color boost * Parameters of the color boost
@@ -448,7 +450,8 @@ class ProcParams {
ToneCurveParams toneCurve; ///< Tone curve parameters ToneCurveParams toneCurve; ///< Tone curve parameters
LCurveParams labCurve; ///< CIELAB luminance curve parameters LCurveParams labCurve; ///< CIELAB luminance curve parameters
SharpeningParams sharpening; ///< Sharpening parameters SharpeningParams sharpening; ///< Sharpening parameters
ClarityParams clarity; ///< clarity parameters SharpenEdgeParams sharpenEdge; ///< Sharpen edge parameters
SharpenMicroParams sharpenMicro; ///< Sharpen microcontrast parameters
ColorBoostParams colorBoost; ///< Color boost parameters ColorBoostParams colorBoost; ///< Color boost parameters
WBParams wb; ///< White balance parameters WBParams wb; ///< White balance parameters
ColorShiftParams colorShift; ///< Color shift parameters ColorShiftParams colorShift; ///< Color shift parameters

View File

@@ -152,24 +152,24 @@ FLATFIELD, // EvFlatFieldBlurType,
TRANSFORM, // EvAutoDIST, TRANSFORM, // EvAutoDIST,
DIRPYRDENOISE, // EvDPDNLumCurve, DIRPYRDENOISE, // EvDPDNLumCurve,
DIRPYRDENOISE, // EvDPDNChromCurve, DIRPYRDENOISE, // EvDPDNChromCurve,
ALL, // EvGAMMA ALL, // EvGAMMA
ALL, // EvGAMPOS ALL, // EvGAMPOS
ALL, //EvGAMFREE ALL, // EvGAMFREE
ALL, //EvSLPOS ALL, // EvSLPOS
DARKFRAME, // EvPreProcessExpBlackzero DARKFRAME, // EvPreProcessExpBlackzero
DARKFRAME, // EvPreProcessExpBlackone DARKFRAME, // EvPreProcessExpBlackone
DARKFRAME, // EvPreProcessExpBlacktwo DARKFRAME, // EvPreProcessExpBlacktwo
DARKFRAME, // EvPreProcessExpBlackthree DARKFRAME, // EvPreProcessExpBlackthree
DARKFRAME, //EvPreProcessExptwoGreen DARKFRAME, // EvPreProcessExptwoGreen
SHARPENING, //EvClaritypasses SHARPENING, // EvSharpenEdgePasses
SHARPENING, //EvClaritystrength SHARPENING, // EvSharpenEdgeStrength
SHARPENING, //EvMLmicrostrength SHARPENING, // EvSharpenMicroStrength
SHARPENING, //EvMLuniformity SHARPENING, // EvSharpenMicroUniformity
SHARPENING, //EvClarityEnabled SHARPENING, // EvSharpenEdgeEnabled
SHARPENING, //EvClaritythreechannels SHARPENING, // EvSharpenEdgeThreechannels
SHARPENING, //EvClarityEnabledtwo SHARPENING, // EvSharpenMicroEnabled
SHARPENING, //EvClaritymatrix SHARPENING, // EvSharpenMicroMatrix
DEMOSAIC, // EvDemosaicALLEnhanced DEMOSAIC, // EvDemosaicALLEnhanced
}; };

View File

@@ -177,10 +177,10 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p
ipf.impulsedenoise (labView); ipf.impulsedenoise (labView);
ipf.defringe (labView); ipf.defringe (labView);
ipf.dirpyrdenoise (labView); ipf.dirpyrdenoise (labView);
if (params.clarity.enabled) { if (params.sharpenEdge.enabled) {
ipf.MLsharpen(labView); ipf.MLsharpen(labView);
} }
if (params.clarity.enabledtwo) { if (params.sharpenMicro.enabled) {
ipf.MLmicrocontrast (labView); ipf.MLmicrocontrast (labView);
} }
if (params.sharpening.enabled) { if (params.sharpening.enabled) {

View File

@@ -28,7 +28,7 @@ set (BASESOURCEFILES
profilestore.cc partialpastedlg.cc rawprocess.cc preprocess.cc profilestore.cc partialpastedlg.cc rawprocess.cc preprocess.cc
darkframe.cc flatfield.cc rawcacorrection.cc rawexposure.cc darkframe.cc flatfield.cc rawcacorrection.cc rawexposure.cc
dirpyrequalizer.cc hsvequalizer.cc defringe.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) if (WIN32)
set (EXTRA_SRC windirmonitor.cc myicon.rc) set (EXTRA_SRC windirmonitor.cc myicon.rc)

View File

@@ -5,48 +5,48 @@
// UPDATE THE DEFAULT VALUE IN OPTIONS.CC TOO !!! // UPDATE THE DEFAULT VALUE IN OPTIONS.CC TOO !!!
#define ADDSET_TC_EXPCOMP 0 #define ADDSET_TC_EXPCOMP 0
#define ADDSET_TC_BRIGHTNESS 1 #define ADDSET_TC_BRIGHTNESS 1
#define ADDSET_TC_BLACKLEVEL 2 #define ADDSET_TC_BLACKLEVEL 2
#define ADDSET_TC_CONTRAST 3 #define ADDSET_TC_CONTRAST 3
#define ADDSET_SH_HIGHLIGHTS 4 #define ADDSET_SH_HIGHLIGHTS 4
#define ADDSET_SH_SHADOWS 5 #define ADDSET_SH_SHADOWS 5
#define ADDSET_SH_LOCALCONTRAST 6 #define ADDSET_SH_LOCALCONTRAST 6
#define ADDSET_LC_BRIGHTNESS 7 #define ADDSET_LC_BRIGHTNESS 7
#define ADDSET_LC_CONTRAST 8 #define ADDSET_LC_CONTRAST 8
#define ADDSET_SHARP_AMOUNT 9 #define ADDSET_SHARP_AMOUNT 9
#define ADDSET_LD_EDGETOLERANCE 10 #define ADDSET_LD_EDGETOLERANCE 10
#define ADDSET_WB_TEMPERATURE 11 #define ADDSET_WB_TEMPERATURE 11
#define ADDSET_WB_GREEN 12 #define ADDSET_WB_GREEN 12
#define ADDSET_CBOOST_AMOUNT 13 #define ADDSET_CBOOST_AMOUNT 13
#define ADDSET_CS_BLUEYELLOW 14 #define ADDSET_CS_BLUEYELLOW 14
#define ADDSET_CS_GREENMAGENTA 15 #define ADDSET_CS_GREENMAGENTA 15
#define ADDSET_ROTATE_DEGREE 16 #define ADDSET_ROTATE_DEGREE 16
#define ADDSET_DIST_AMOUNT 17 #define ADDSET_DIST_AMOUNT 17
#define ADDSET_PERSPECTIVE 18 #define ADDSET_PERSPECTIVE 18
#define ADDSET_CA 19 #define ADDSET_CA 19
#define ADDSET_VIGN_AMOUNT 20 #define ADDSET_VIGN_AMOUNT 20
#define ADDSET_LC_SATURATION 21 #define ADDSET_LC_SATURATION 21
#define ADDSET_TC_SATURATION 22 #define ADDSET_TC_SATURATION 22
#define ADDSET_TC_HLCOMPAMOUNT 23 #define ADDSET_TC_HLCOMPAMOUNT 23
#define ADDSET_TC_HLCOMPTHRESH 24 #define ADDSET_TC_HLCOMPTHRESH 24
#define ADDSET_TC_SHCOMP 25 #define ADDSET_TC_SHCOMP 25
#define ADDSET_DIRPYREQ 26 #define ADDSET_DIRPYREQ 26
#define ADDSET_DIRPYRDN_CHLUM 27 #define ADDSET_DIRPYRDN_CHLUM 27
#define ADDSET_DIRPYRDN_GAMMA 28 #define ADDSET_DIRPYRDN_GAMMA 28
#define ADDSET_CHMIXER 29 #define ADDSET_CHMIXER 29
#define ADDSET_PREPROCESS_GREENEQUIL 30 #define ADDSET_PREPROCESS_GREENEQUIL 30
#define ADDSET_PREPROCESS_LINEDENOISE 31 #define ADDSET_PREPROCESS_LINEDENOISE 31
#define ADDSET_RAWCACORR 32 #define ADDSET_RAWCACORR 32
#define ADDSET_RAWEXPOS_LINEAR 33 #define ADDSET_RAWEXPOS_LINEAR 33
#define ADDSET_RAWEXPOS_PRESER 34 #define ADDSET_RAWEXPOS_PRESER 34
#define ADDSET_RAWEXPOS_BLACKS 35 #define ADDSET_RAWEXPOS_BLACKS 35
#define ADDSET_CLAR_STREN 36 #define ADDSET_SHARPENEDGE_AMOUNT 36
#define ADDSET_CLAR_MLSTREN 37 #define ADDSET_SHARPENMICRO_AMOUNT 37
#define ADDSET_CLAR_PASS 38 #define ADDSET_SHARPENEDGE_PASS 38
#define ADDSET_CLAR_UNIFORMITY 39 #define ADDSET_SHARPENMICRO_UNIFORMITY 39
// When adding items, make sure to update ADDSET_PARAM_NUM // When adding items, make sure to update ADDSET_PARAM_NUM
#define ADDSET_PARAM_NUM 40 // THIS IS USED AS A DELIMITER!! #define ADDSET_PARAM_NUM 40 // THIS IS USED AS A DELIMITER!!

View File

@@ -126,7 +126,8 @@ void BatchToolPanelCoordinator::initSession () {
perspective->setAdjusterBehavior (false); perspective->setAdjusterBehavior (false);
cacorrection->setAdjusterBehavior (false); cacorrection->setAdjusterBehavior (false);
sharpening->setAdjusterBehavior (false); sharpening->setAdjusterBehavior (false);
clarity->setAdjusterBehavior (false, false, false, false); sharpenEdge->setAdjusterBehavior (false, false);
sharpenMicro->setAdjusterBehavior (false, false);
chmixer->setAdjusterBehavior (false); chmixer->setAdjusterBehavior (false);
shadowshighlights->setAdjusterBehavior (false, false, false); shadowshighlights->setAdjusterBehavior (false, false, false);
@@ -147,7 +148,8 @@ void BatchToolPanelCoordinator::initSession () {
perspective->setAdjusterBehavior (options.baBehav[ADDSET_PERSPECTIVE]); perspective->setAdjusterBehavior (options.baBehav[ADDSET_PERSPECTIVE]);
cacorrection->setAdjusterBehavior (options.baBehav[ADDSET_CA]); cacorrection->setAdjusterBehavior (options.baBehav[ADDSET_CA]);
sharpening->setAdjusterBehavior (options.baBehav[ADDSET_SHARP_AMOUNT]); 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]); chmixer->setAdjusterBehavior (options.baBehav[ADDSET_CHMIXER]);
shadowshighlights->setAdjusterBehavior (options.baBehav[ADDSET_SH_HIGHLIGHTS], options.baBehav[ADDSET_SH_SHADOWS], options.baBehav[ADDSET_SH_LOCALCONTRAST]); 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_LC_SATURATION]) pparams.labCurve.saturation = 0;
if (options.baBehav[ADDSET_SHARP_AMOUNT]) pparams.sharpening.amount = 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_SHARPENEDGE_AMOUNT]) pparams.sharpenEdge.amount = 0;
if (options.baBehav[ADDSET_CLAR_MLSTREN]) pparams.clarity.mlstrength = 0; if (options.baBehav[ADDSET_SHARPENMICRO_AMOUNT]) pparams.sharpenMicro.amount = 0;
if (options.baBehav[ADDSET_CLAR_PASS]) pparams.clarity.clpasses = 0; if (options.baBehav[ADDSET_SHARPENEDGE_PASS]) pparams.sharpenEdge.passes = 0;
if (options.baBehav[ADDSET_CLAR_UNIFORMITY]) pparams.clarity.uniformity = 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_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; if (options.baBehav[ADDSET_LD_EDGETOLERANCE]) pparams.lumaDenoise.edgetolerance = 0;

View File

@@ -1,344 +0,0 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include <clarity.h>
#include <guiutils.h>
#include <safegtk.h>
#include <sstream>
#include <iomanip>
#include <math.h>
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);
}

View File

@@ -1,70 +0,0 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef _CLARITY_H_
#define _CLARITY_H_
#include <gtkmm.h>
#include <adjuster.h>
#include <toolpanel.h>
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

View File

@@ -202,10 +202,10 @@ void Options::setDefaults () {
1, // ADDSET_RAWEXPOS_LINEAR 1, // ADDSET_RAWEXPOS_LINEAR
1, // ADDSET_RAWEXPOS_PRESER 1, // ADDSET_RAWEXPOS_PRESER
1, // ADDSET_RAWEXPOS_BLACKS 1, // ADDSET_RAWEXPOS_BLACKS
0, // ADDSET_CLAR_STREN 0, // ADDSET_SHARPENEDGE_AMOUNT
0, // ADDSET_CLAR_MLSTREN 0, // ADDSET_SHARPENMICRO_AMOUNT
0, // ADDSET_CLAR_PASS 0, // ADDSET_SHARPENEDGE_PASS
0 // ADDSET_CLAR_RELAT 0 // ADDSET_SHARPENMICRO_UNIFORMITY
}; };
baBehav = std::vector<int> (babehav, babehav+ADDSET_PARAM_NUM); baBehav = std::vector<int> (babehav, babehav+ADDSET_PARAM_NUM);

View File

@@ -62,16 +62,16 @@ void ParamsEdited::set (bool v) {
sharpening.deconvradius = v; sharpening.deconvradius = v;
sharpening.deconviter = v; sharpening.deconviter = v;
sharpening.deconvdamping = v; sharpening.deconvdamping = v;
clarity.clpasses = v; sharpenEdge.enabled = v;
clarity.clstrength = v; sharpenEdge.passes = v;
clarity.mlstrength = v; sharpenEdge.amount = v;
clarity.uniformity = v; sharpenEdge.threechannels = v;
clarity.enabled = v; sharpenMicro.enabled = v;
clarity.enabledtwo = v; sharpenMicro.matrix = v;
clarity.clthreechannels = v; sharpenMicro.amount = v;
clarity.MLmicromatrix = v; sharpenMicro.uniformity = v;
colorBoost.amount = v; colorBoost.amount = v;
colorBoost.avoidclip = v; colorBoost.avoidclip = v;
colorBoost.enable_saturationlimiter = v; colorBoost.enable_saturationlimiter = v;
colorBoost.saturationlimit = v; colorBoost.saturationlimit = v;
wb.method = v; wb.method = v;
@@ -221,14 +221,14 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
labCurve.avoidclip = labCurve.avoidclip && p.labCurve.avoidclip == other.labCurve.avoidclip; 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.enable_saturationlimiter = labCurve.enable_saturationlimiter && p.labCurve.enable_saturationlimiter == other.labCurve.enable_saturationlimiter;
labCurve.saturationlimit = labCurve.saturationlimit && p.labCurve.saturationlimit == other.labCurve.saturationlimit; labCurve.saturationlimit = labCurve.saturationlimit && p.labCurve.saturationlimit == other.labCurve.saturationlimit;
clarity.enabled = clarity.enabled && p.clarity.enabled == other.clarity.enabled; sharpenEdge.enabled = sharpenEdge.enabled && p.sharpenEdge.enabled == other.sharpenEdge.enabled;
clarity.clpasses = clarity.clpasses && p.clarity.clpasses == other.clarity.clpasses; sharpenEdge.passes = sharpenEdge.passes && p.sharpenEdge.passes == other.sharpenEdge.passes;
clarity.clstrength = clarity.clstrength && p.clarity.clstrength == other.clarity.clstrength; sharpenEdge.amount = sharpenEdge.amount && p.sharpenEdge.amount == other.sharpenEdge.amount;
clarity.enabledtwo = clarity.enabledtwo && p.clarity.enabledtwo == other.clarity.enabledtwo; sharpenEdge.threechannels = sharpenEdge.threechannels && p.sharpenEdge.threechannels == other.sharpenEdge.threechannels;
clarity.MLmicromatrix = clarity.MLmicromatrix && p.clarity.MLmicromatrix == other.clarity.MLmicromatrix; sharpenMicro.enabled = sharpenMicro.enabled && p.sharpenMicro.enabled == other.sharpenMicro.enabled;
clarity.mlstrength = clarity.mlstrength && p.clarity.mlstrength == other.clarity.mlstrength; sharpenMicro.matrix = sharpenMicro.matrix && p.sharpenMicro.matrix == other.sharpenMicro.matrix;
clarity.uniformity = clarity.uniformity && p.clarity.uniformity == other.clarity.uniformity; sharpenMicro.amount = sharpenMicro.amount && p.sharpenMicro.amount == other.sharpenMicro.amount;
clarity.clthreechannels = clarity.clthreechannels && p.clarity.clthreechannels == other.clarity.clthreechannels; sharpenMicro.uniformity = sharpenMicro.uniformity && p.sharpenMicro.uniformity == other.sharpenMicro.uniformity;
sharpening.enabled = sharpening.enabled && p.sharpening.enabled == other.sharpening.enabled; sharpening.enabled = sharpening.enabled && p.sharpening.enabled == other.sharpening.enabled;
sharpening.radius = sharpening.radius && p.sharpening.radius == other.sharpening.radius; sharpening.radius = sharpening.radius && p.sharpening.radius == other.sharpening.radius;
sharpening.amount = sharpening.amount && p.sharpening.amount == other.sharpening.amount; 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; 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.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.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.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.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.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.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.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.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; 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.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.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.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.avoidclip) toEdit.labCurve.avoidclip = mods.labCurve.avoidclip;
if (labCurve.enable_saturationlimiter)toEdit.labCurve.enable_saturationlimiter = mods.labCurve.enable_saturationlimiter; if (labCurve.enable_saturationlimiter) toEdit.labCurve.enable_saturationlimiter = mods.labCurve.enable_saturationlimiter;
if (labCurve.saturationlimit) toEdit.labCurve.saturationlimit = mods.labCurve.saturationlimit; if (labCurve.saturationlimit) toEdit.labCurve.saturationlimit = mods.labCurve.saturationlimit;
if (clarity.enabled) toEdit.clarity.enabled = mods.clarity.enabled; if (sharpenEdge.enabled) toEdit.sharpenEdge.enabled = mods.sharpenEdge.enabled;
if (clarity.clpasses) toEdit.clarity.clpasses = dontforceSet && options.baBehav[ADDSET_CLAR_PASS] ? toEdit.clarity.clpasses + mods.clarity.clpasses : mods.clarity.clpasses; if (sharpenEdge.passes) toEdit.sharpenEdge.passes = dontforceSet && options.baBehav[ADDSET_SHARPENEDGE_PASS] ? toEdit.sharpenEdge.passes + mods.sharpenEdge.passes : mods.sharpenEdge.passes;
if (clarity.clstrength) toEdit.clarity.clstrength = dontforceSet && options.baBehav[ADDSET_CLAR_STREN] ? toEdit.clarity.clstrength + mods.clarity.clstrength : mods.clarity.clstrength; if (sharpenEdge.amount) toEdit.sharpenEdge.amount = dontforceSet && options.baBehav[ADDSET_SHARPENEDGE_AMOUNT] ? toEdit.sharpenEdge.amount + mods.sharpenEdge.amount : mods.sharpenEdge.amount;
if (clarity.enabledtwo) toEdit.clarity.enabledtwo = mods.clarity.enabledtwo; if (sharpenEdge.threechannels) toEdit.sharpenEdge.threechannels = mods.sharpenEdge.threechannels;
if (clarity.MLmicromatrix) toEdit.clarity.MLmicromatrix = mods.clarity.MLmicromatrix; if (sharpenMicro.enabled) toEdit.sharpenMicro.enabled = mods.sharpenMicro.enabled;
if (clarity.mlstrength) toEdit.clarity.mlstrength = dontforceSet && options.baBehav[ADDSET_CLAR_MLSTREN] ? toEdit.clarity.mlstrength + mods.clarity.mlstrength : mods.clarity.mlstrength; if (sharpenMicro.matrix) toEdit.sharpenMicro.matrix = mods.sharpenMicro.matrix;
if (clarity.uniformity) toEdit.clarity.uniformity = dontforceSet && options.baBehav[ADDSET_CLAR_UNIFORMITY] ? toEdit.clarity.uniformity + mods.clarity.uniformity : mods.clarity.uniformity; if (sharpenMicro.amount) toEdit.sharpenMicro.amount = dontforceSet && options.baBehav[ADDSET_SHARPENMICRO_AMOUNT] ? toEdit.sharpenMicro.amount + mods.sharpenMicro.amount : mods.sharpenMicro.amount;
if (clarity.clthreechannels) toEdit.clarity.clthreechannels = mods.clarity.clthreechannels; 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.enabled) toEdit.sharpening.enabled = mods.sharpening.enabled;
if (sharpening.radius) toEdit.sharpening.radius = mods.sharpening.radius; 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; 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.edges_tolerance) toEdit.sharpening.edges_tolerance = mods.sharpening.edges_tolerance;
if (sharpening.halocontrol) toEdit.sharpening.halocontrol = mods.sharpening.halocontrol; if (sharpening.halocontrol) toEdit.sharpening.halocontrol = mods.sharpening.halocontrol;
if (sharpening.halocontrol_amount) toEdit.sharpening.halocontrol_amount = mods.sharpening.halocontrol_amount; 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.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.deconvradius) toEdit.sharpening.deconvradius = mods.sharpening.deconvradius;
if (sharpening.deconviter) toEdit.sharpening.deconviter = mods.sharpening.deconviter; if (sharpening.deconviter) toEdit.sharpening.deconviter = mods.sharpening.deconviter;
if (sharpening.deconvdamping) toEdit.sharpening.deconvdamping = mods.sharpening.deconvdamping; 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.avoidclip) toEdit.colorBoost.avoidclip = mods.colorBoost.avoidclip;
if (colorBoost.enable_saturationlimiter)toEdit.colorBoost.enable_saturationlimiter = mods.colorBoost.enable_saturationlimiter; if (colorBoost.enable_saturationlimiter)toEdit.colorBoost.enable_saturationlimiter = mods.colorBoost.enable_saturationlimiter;
if (colorBoost.saturationlimit) toEdit.colorBoost.saturationlimit = mods.colorBoost.saturationlimit; 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 return ccSteps && dmethod && dcbIterations && dcbEnhance && allEnhance && caCorrection && caRed && caBlue && greenEq
&& hotDeadPixel && linenoise && darkFrame && dfAuto && ff_file && ff_AutoSelect && ff_BlurRadius && ff_BlurType && hotDeadPixel && linenoise && darkFrame && dfAuto && ff_file && ff_AutoSelect && ff_BlurRadius && ff_BlurType
&& exPos && exPreser && exBlackzero && exBlackone && exBlacktwo && exBlackthree && exTwoGreen; && exPos && exPreser && exBlackzero && exBlackone && exBlacktwo && exBlackthree && exTwoGreen;
} }

View File

@@ -31,8 +31,8 @@ class ToneCurveParamsEdited {
bool brightness; bool brightness;
bool black; bool black;
bool contrast; bool contrast;
bool saturation; bool saturation;
bool shcompr; bool shcompr;
bool hlcompr; bool hlcompr;
bool hlcomprthresh; bool hlcomprthresh;
bool autoexp; bool autoexp;
@@ -45,26 +45,30 @@ class LCurveParamsEdited {
public: public:
bool brightness; bool brightness;
bool contrast; bool contrast;
bool saturation; bool saturation;
bool avoidclip; bool avoidclip;
bool enable_saturationlimiter; bool enable_saturationlimiter;
bool saturationlimit; bool saturationlimit;
bool lcurve; bool lcurve;
bool acurve; bool acurve;
bool bcurve; bool bcurve;
}; };
class ClarityParamsEdited { class SharpenEdgeParamsEdited {
public :
public :
bool clpasses; bool enabled;
bool clstrength; bool passes;
bool mlstrength; bool amount;
bool enabled; bool threechannels;
bool enabledtwo; };
bool clthreechannels;
bool uniformity; class SharpenMicroParamsEdited {
bool MLmicromatrix; public :
bool enabled;
bool matrix;
bool amount;
bool uniformity;
}; };
class SharpeningParamsEdited { class SharpeningParamsEdited {
@@ -79,7 +83,7 @@ class SharpeningParamsEdited {
bool edges_tolerance; bool edges_tolerance;
bool halocontrol; bool halocontrol;
bool halocontrol_amount; bool halocontrol_amount;
bool method; bool method;
bool deconvamount; bool deconvamount;
bool deconvradius; bool deconvradius;
@@ -334,38 +338,38 @@ class IPTCPairEdited {
class ParamsEdited { class ParamsEdited {
public: public:
ToneCurveParamsEdited toneCurve; ToneCurveParamsEdited toneCurve;
LCurveParamsEdited labCurve; LCurveParamsEdited labCurve;
SharpeningParamsEdited sharpening; SharpeningParamsEdited sharpening;
ClarityParamsEdited clarity; SharpenEdgeParamsEdited sharpenEdge;
SharpenMicroParamsEdited sharpenMicro;
ColorBoostParamsEdited colorBoost; ColorBoostParamsEdited colorBoost;
WBParamsEdited wb; WBParamsEdited wb;
ColorShiftParamsEdited colorShift; ColorShiftParamsEdited colorShift;
LumaDenoiseParamsEdited lumaDenoise; LumaDenoiseParamsEdited lumaDenoise;
ColorDenoiseParamsEdited colorDenoise; ColorDenoiseParamsEdited colorDenoise;
DefringeParamsEdited defringe; DefringeParamsEdited defringe;
DirPyrDenoiseParamsEdited dirpyrDenoise; DirPyrDenoiseParamsEdited dirpyrDenoise;
ImpulseDenoiseParamsEdited impulseDenoise; ImpulseDenoiseParamsEdited impulseDenoise;
SHParamsEdited sh; SHParamsEdited sh;
CropParamsEdited crop; CropParamsEdited crop;
CoarseTransformParamsEdited coarse; CoarseTransformParamsEdited coarse;
CommonTransformParamsEdited commonTrans; CommonTransformParamsEdited commonTrans;
RotateParamsEdited rotate; RotateParamsEdited rotate;
DistortionParamsEdited distortion; DistortionParamsEdited distortion;
PerspectiveParamsEdited perspective; PerspectiveParamsEdited perspective;
CACorrParamsEdited cacorrection; CACorrParamsEdited cacorrection;
VignettingParamsEdited vignetting; VignettingParamsEdited vignetting;
ChannelMixerParamsEdited chmixer; ChannelMixerParamsEdited chmixer;
HRecParamsEdited hlrecovery; HRecParamsEdited hlrecovery;
ResizeParamsEdited resize; ResizeParamsEdited resize;
ColorManagementParamsEdited icm; ColorManagementParamsEdited icm;
RAWParamsEdited raw; RAWParamsEdited raw;
DirPyrEqualizerParamsEdited dirpyrequalizer; DirPyrEqualizerParamsEdited dirpyrequalizer;
HSVEqualizerParamsEdited hsvequalizer; HSVEqualizerParamsEdited hsvequalizer;
std::vector<ExifPairEdited> exif; std::vector<ExifPairEdited> exif;
std::vector<IPTCPairEdited> iptc; std::vector<IPTCPairEdited> iptc;
ParamsEdited (); ParamsEdited ();
void set (bool v); void set (bool v);

View File

@@ -51,8 +51,8 @@ PartialPasteDlg::PartialPasteDlg () {
// options in detail: // options in detail:
sharpen = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHARPENING"))); sharpen = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHARPENING")));
gradsharpen = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_GRADIENTSHARPEN"))); sharpenedge = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHARPENEDGE")));
microcontrast = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_MICROCONTRAST"))); sharpenmicro = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_SHARPENMICRO")));
impden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IMPULSEDENOISE"))); impden = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_IMPULSEDENOISE")));
dirpyreq = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DIRPYREQUALIZER"))); dirpyreq = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DIRPYREQUALIZER")));
defringe = Gtk::manage (new Gtk::CheckButton (M("PARTIALPASTE_DEFRINGE"))); 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 (*detail, Gtk::PACK_SHRINK, 2);
vboxes[1]->pack_start (*hseps[1], 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 (*sharpen, Gtk::PACK_SHRINK, 2);
vboxes[1]->pack_start (*gradsharpen, Gtk::PACK_SHRINK, 2); vboxes[1]->pack_start (*sharpenedge, Gtk::PACK_SHRINK, 2);
vboxes[1]->pack_start (*microcontrast, 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 (*impden, Gtk::PACK_SHRINK, 2);
vboxes[1]->pack_start (*dirpyrden, Gtk::PACK_SHRINK, 2); vboxes[1]->pack_start (*dirpyrden, Gtk::PACK_SHRINK, 2);
vboxes[1]->pack_start (*defringe, 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)); 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)); 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)); gradsharpenConn = sharpenedge->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)); 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)); 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)); 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)); 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); detail->set_inconsistent (false);
sharpen->set_active (detail->get_active ()); sharpen->set_active (detail->get_active ());
gradsharpen->set_active (detail->get_active ()); sharpenedge->set_active (detail->get_active ());
microcontrast->set_active (detail->get_active ()); sharpenmicro->set_active (detail->get_active ());
impden->set_active (detail->get_active ()); impden->set_active (detail->get_active ());
dirpyrden->set_active (detail->get_active ()); dirpyrden->set_active (detail->get_active ());
defringe->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 (labcurve->get_active ()) dst->labCurve = src->labCurve;
if (sharpen->get_active ()) dst->sharpening = src->sharpening; if (sharpen->get_active ()) dst->sharpening = src->sharpening;
if (gradsharpen->get_active ()){ if (sharpenedge->get_active ()) dst->sharpenEdge = src->sharpenEdge;
dst->clarity.enabled = src->clarity.enabled; if (sharpenmicro->get_active()) dst->sharpenMicro = src->sharpenMicro;
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 (impden->get_active ()) dst->impulseDenoise = src->impulseDenoise; if (impden->get_active ()) dst->impulseDenoise = src->impulseDenoise;
if (dirpyreq->get_active ()) dst->dirpyrequalizer = src->dirpyrequalizer; if (dirpyreq->get_active ()) dst->dirpyrequalizer = src->dirpyrequalizer;
if (defringe->get_active ()) dst->defringe = src->defringe; if (defringe->get_active ()) dst->defringe = src->defringe;

View File

@@ -46,8 +46,8 @@ class PartialPasteDlg : public Gtk::Dialog {
// options in detail: // options in detail:
Gtk::CheckButton* sharpen; Gtk::CheckButton* sharpen;
Gtk::CheckButton* gradsharpen; Gtk::CheckButton* sharpenedge;
Gtk::CheckButton* microcontrast; Gtk::CheckButton* sharpenmicro;
Gtk::CheckButton* impden; Gtk::CheckButton* impden;
Gtk::CheckButton* waveq; Gtk::CheckButton* waveq;
Gtk::CheckButton* dirpyrden; Gtk::CheckButton* dirpyrden;

View File

@@ -169,13 +169,15 @@ Gtk::Widget* Preferences::getBatchProcPanel () {
appendBehavList (mi, M("TP_SHARPENING_AMOUNT"), ADDSET_SHARP_AMOUNT, false); appendBehavList (mi, M("TP_SHARPENING_AMOUNT"), ADDSET_SHARP_AMOUNT, false);
mi = behModel->append (); mi = behModel->append ();
mi->set_value (behavColumns.label, M("TP_CLARITY_LABEL")); mi->set_value (behavColumns.label, M("TP_SHARPENEDGE_LABEL"));
appendBehavList (mi, M("TP_CLARITY_PASSES"), ADDSET_CLAR_PASS, false); appendBehavList (mi, M("TP_SHARPENEDGE_PASSES"), ADDSET_SHARPENEDGE_PASS, false);
appendBehavList (mi, M("TP_CLARITY_STRENGTH"), ADDSET_CLAR_STREN, false); appendBehavList (mi, M("TP_SHARPENEDGE_AMOUNT"), ADDSET_SHARPENEDGE_AMOUNT, false);
appendBehavList (mi, M("TP_MLMICRO_STRENGTH"), ADDSET_CLAR_MLSTREN, false);
appendBehavList (mi, M("TP_MLMICRO_UNIFORMITY"), ADDSET_CLAR_UNIFORMITY, 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 = behModel->append ();
mi->set_value (behavColumns.label, M("TP_DIRPYRDENOISE_LABEL")); mi->set_value (behavColumns.label, M("TP_DIRPYRDENOISE_LABEL"));
appendBehavList (mi, M("TP_DIRPYRDENOISE_LUMA")+", "+M("TP_DIRPYRDENOISE_CHROMA"), ADDSET_DIRPYRDN_CHLUM, true); appendBehavList (mi, M("TP_DIRPYRDENOISE_LUMA")+", "+M("TP_DIRPYRDENOISE_CHROMA"), ADDSET_DIRPYRDN_CHLUM, true);

182
rtgui/sharpenedge.cc Normal file
View File

@@ -0,0 +1,182 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include <sharpenedge.h>
#include <guiutils.h>
#include <safegtk.h>
#include <sstream>
#include <iomanip>
#include <math.h>
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);
}

62
rtgui/sharpenedge.h Normal file
View File

@@ -0,0 +1,62 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* 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 <http://www.gnu.org/licenses/>.
*
*
* Manuel Llorens' algorithm of edge sharpening
*
*
*/
#ifndef _SHARPENEDGE_H_
#define _SHARPENEDGE_H_
#include <gtkmm.h>
#include <adjuster.h>
#include <toolpanel.h>
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

179
rtgui/sharpenmicro.cc Normal file
View File

@@ -0,0 +1,179 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include <sharpenmicro.h>
#include <guiutils.h>
#include <safegtk.h>
#include <sstream>
#include <iomanip>
#include <math.h>
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);
}

63
rtgui/sharpenmicro.h Normal file
View File

@@ -0,0 +1,63 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* 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 <http://www.gnu.org/licenses/>.
*
*
* Manuel Llorens' algorithm of micro-contrast sharpening
*
*
*/
#ifndef _SHARPENMICRO_H_
#define _SHARPENMICRO_H_
#include <gtkmm.h>
#include <adjuster.h>
#include <toolpanel.h>
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

View File

@@ -44,7 +44,8 @@ ToolPanelCoordinator::ToolPanelCoordinator () : ipc(NULL) {
defringe = Gtk::manage (new Defringe ()); defringe = Gtk::manage (new Defringe ());
dirpyrdenoise = Gtk::manage (new DirPyrDenoise ()); dirpyrdenoise = Gtk::manage (new DirPyrDenoise ());
sharpening = Gtk::manage (new Sharpening ()); 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 ()); lcurve = Gtk::manage (new LCurve ());
lensgeom = Gtk::manage (new LensGeometry ()); lensgeom = Gtk::manage (new LensGeometry ());
distortion = Gtk::manage (new Distortion ()); 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 (colorPanel, chmixer, M("TP_CHMIXER_LABEL")); toolPanels.push_back (chmixer);
addPanel (exposurePanel, shadowshighlights, M("TP_SHADOWSHLIGHTS_LABEL")); toolPanels.push_back (shadowshighlights); addPanel (exposurePanel, shadowshighlights, M("TP_SHADOWSHLIGHTS_LABEL")); toolPanels.push_back (shadowshighlights);
addPanel (detailsPanel, sharpening, M("TP_SHARPENING_LABEL")); toolPanels.push_back (sharpening); 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 (colorPanel, hsvequalizer, M("TP_HSVEQUALIZER_LABEL")); toolPanels.push_back (hsvequalizer);
addPanel (exposurePanel, lcurve, M("TP_LABCURVE_LABEL")); toolPanels.push_back (lcurve); addPanel (exposurePanel, lcurve, M("TP_LABCURVE_LABEL")); toolPanels.push_back (lcurve);
addPanel (detailsPanel, impulsedenoise, M("TP_IMPULSEDENOISE_LABEL")); toolPanels.push_back (impulsedenoise); addPanel (detailsPanel, impulsedenoise, M("TP_IMPULSEDENOISE_LABEL")); toolPanels.push_back (impulsedenoise);

View File

@@ -58,7 +58,8 @@
#include <flatfield.h> #include <flatfield.h>
#include <rawcacorrection.h> #include <rawcacorrection.h>
#include <rawexposure.h> #include <rawexposure.h>
#include <clarity.h> #include <sharpenmicro.h>
#include <sharpenedge.h>
class ImageEditorCoordinator; class ImageEditorCoordinator;
class ToolPanelCoordinator : public ToolPanelListener, class ToolPanelCoordinator : public ToolPanelListener,
@@ -73,7 +74,7 @@ class ToolPanelCoordinator : public ToolPanelListener,
public ImageAreaToolListener { public ImageAreaToolListener {
protected: protected:
WhiteBalance* whitebalance; WhiteBalance* whitebalance;
Vignetting* vignetting; Vignetting* vignetting;
LensGeometry* lensgeom; LensGeometry* lensgeom;
@@ -92,7 +93,8 @@ class ToolPanelCoordinator : public ToolPanelListener,
ImpulseDenoise* impulsedenoise; ImpulseDenoise* impulsedenoise;
DirPyrDenoise* dirpyrdenoise; DirPyrDenoise* dirpyrdenoise;
Sharpening* sharpening; Sharpening* sharpening;
Clarity* clarity; SharpenEdge* sharpenEdge;
SharpenMicro* sharpenMicro;
LCurve* lcurve; LCurve* lcurve;
DirPyrEqualizer * dirpyrequalizer; DirPyrEqualizer * dirpyrequalizer;
HSVEqualizer * hsvequalizer; HSVEqualizer * hsvequalizer;