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:
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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 netteté
|
TP_SHARPENEDGE_AMOUNT;Quantité
|
||||||
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
|
||||||
|
@@ -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
|
||||||
|
@@ -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>
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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)
|
||||||
|
@@ -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!!
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
344
rtgui/clarity.cc
344
rtgui/clarity.cc
@@ -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);
|
|
||||||
|
|
||||||
}
|
|
@@ -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
|
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
182
rtgui/sharpenedge.cc
Normal 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
62
rtgui/sharpenedge.h
Normal 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
179
rtgui/sharpenmicro.cc
Normal 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
63
rtgui/sharpenmicro.h
Normal 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
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user