diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais
index 5bf947779..7f4fc8391 100644
--- a/rtdata/languages/Francais
+++ b/rtdata/languages/Francais
@@ -1,4 +1,3 @@
-
ABOUT_TAB_BUILD;Version
ABOUT_TAB_CREDITS;Crédits
ABOUT_TAB_LICENSE;Licence
@@ -69,6 +68,7 @@ EXPORT_BYPASS_RAW_DF;Forcer la Trame Noire [raw]
EXPORT_BYPASS_RAW_FF;Forcer le Champ Uniforme [raw]
EXPORT_BYPASS_RAW_GREENTHRESH;Forcer l'équilibrage du vert [raw]
EXPORT_BYPASS_RAW_LINENOISE;Forcer le filtre de bruit de ligne [raw]
+EXPORT_BYPASS_RAW_LMMSE_ITERATIONS;Forcer le niveau d'amélioration LMMSE [raw]
EXPORT_BYPASS_SHARPENEDGE;Forcer netteté des bords
EXPORT_BYPASS_SHARPENING;Forcer la netteté
EXPORT_BYPASS_SHARPENMICRO;Forcer netteté des microcontrastes
@@ -94,6 +94,7 @@ FILEBROWSER_CACHECLEARFROMFULL;Supprimer du cache (complet)
FILEBROWSER_CACHECLEARFROMPARTIAL;Supprimer du cache (partiel)
FILEBROWSER_CACHE;Cache
FILEBROWSER_CLEARPROFILE;Remettre le profil à zéro
+FILEBROWSER_COLORLABEL_TOOLTIP;Label couleur\n\nUtilisez le menu déroulant ou le raccourcis clavier:\nShift-Ctrl-1 Red\nShift-Ctrl-2 Yellow\nShift-Ctrl-3 Green\nShift-Ctrl-4 Blue\nShift-Ctrl-5 Purple
FILEBROWSER_COPYPROFILE;Copier le profil
FILEBROWSER_CURRENT_NAME;Nom courant:
FILEBROWSER_DARKFRAME;Trame Noire
@@ -151,7 +152,12 @@ FILEBROWSER_PROCESSINGSETTINGSHINT;Règle le format de fichier et le dossier de
FILEBROWSER_PROCESSINGSETTINGS;Réglages
FILEBROWSER_QUERYBUTTONHINT;Effacer la recherche
FILEBROWSER_QUERYHINT;Taper la partie du nom du fichier à chercher ou une liste spéarée par des virgules.\nEx: 1001.1004.1199\n\nCtrl-F pour placer le curseur dans le champ de saisie.\nEntrée pour lancer la recherche\nEsc pour effacer.\nShift-Esc pour enlever le focus.
-FILEBROWSER_QUERYLABEL;Chercher:
+FILEBROWSER_QUERYLABEL;Chercher:
+FILEBROWSER_RANK1_TOOLTIP;Rang 1 *\nRaccourcis: Shift-1
+FILEBROWSER_RANK2_TOOLTIP;Rang 2 *\nRaccourcis: Shift-2
+FILEBROWSER_RANK3_TOOLTIP;Rang 3 *\nRaccourcis: Shift-3
+FILEBROWSER_RANK4_TOOLTIP;Rang 4 *\nRaccourcis: Shift-4
+FILEBROWSER_RANK5_TOOLTIP;Rang 5 *\nRaccourcis: Shift-5
FILEBROWSER_RENAMEDLGLABEL;Renommage du fichier
FILEBROWSER_RENAMEDLGMSG;Renommer le fichier "%1" en:
FILEBROWSER_SELECTDARKFRAME;Choisir une image de Trame Noire...
@@ -182,6 +188,7 @@ FILEBROWSER_STOPPROCESSINGHINT;Arrête le traitement des images
FILEBROWSER_STOPPROCESSING;Arrêter le traitement
FILEBROWSER_THUMBSIZE;Taille vign.
FILEBROWSER_TOOLTIP_STOPPROCESSING;Démarrer automatiquement le traitement à l'arrivée d'une nouvelle tâche
+FILEBROWSER_UNRANK_TOOLTIP;Effacer le rang\nRaccourcis: Shift - ~
FILEBROWSER_USETEMPLATE;Utiliser le modèle:
FILEBROWSER_ZOOMINHINT;Augmenter la taille des vignettes.\nRaccourcis: +\n\nRaccourcis dans le mode Éditeur unique: Alt +
FILEBROWSER_ZOOMOUTHINT;Diminuer la taille des vignettes.\nRaccourcis: -\n\nRaccourcis dans le mode Éditeur unique: Alt -
@@ -432,6 +439,9 @@ HISTORY_MSG_201;Réd. de bruit - Delta chrom. rouge
HISTORY_MSG_202;Réd. de bruit - Delta chrom. bleu
HISTORY_MSG_203;Réd. de bruit - Méthode
HISTORY_MSG_204;Niveau d'amélioration LMMSE
+HISTORY_MSG_205;CAM02 pixels chauds/morts
+HISTORY_MSG_206;CAT02 - Adapt. auto à la scène
+HISTORY_MSG_207;A.C. - Teinte
HISTORY_NEWSNAPSHOTAS;Sous...
HISTORY_NEWSNAPSHOT;Ajouter
HISTORY_NEWSNAPSHOT_TOOLTIP;Raccourcis: Alt-s
@@ -925,16 +935,19 @@ TP_COARSETRAF_TOOLTIP_HFLIP;Symétriser / axe vertical
TP_COARSETRAF_TOOLTIP_ROTLEFT;Rotation vers la gauche\nRaccourcis: [\n\nRaccourcis en mode Éditeur unique: Alt-[
TP_COARSETRAF_TOOLTIP_ROTRIGHT;Rotation vers la droite\nRaccourcis: ]\n\nRaccourcis en mode Éditeur unique: Alt-]
TP_COARSETRAF_TOOLTIP_VFLIP;Symétriser / axe horizontal
-TP_COLORAPP_ADAPTSCENE;Luminosité d'adaptation (cd/m2)
-TP_COLORAPP_ADAPTSCENE_TOOLTIP;Luminance absolue de l'environnement de la scène\n(souvent 2000cd/m2)
-TP_COLORAPP_ADAPTVIEWING;Luminosité d'adaptation (cd/m2)
-TP_COLORAPP_ADAPTVIEWING_TOOLTIP;Luminance absolue de l'environnement de visionnage\n(souvent 16cd/m2)
+TP_COLORAPP_ADAP_AUTO_TOOLTIP;Si la case est cochée (recommendé), une valeur optimum est calculée à partir des données Exif.\nPour régler la valeur manuellement, décochez d'abord la case
+TP_COLORAPP_ADAPTSCENE;Luminosité d'adaptation
+TP_COLORAPP_ADAPTSCENE_TOOLTIP;Luminance absolue de l'environnement de la scène(cd/m²).\n1)Calculé à partir des données Exif:\nVitess d'obturation - val. ISO - ouverture F - Correction d'expos. du boitier.\n2)Calculé aussi à partir du Point Blanc Raw et de la compensation d'Exposition de RawTherapee
+TP_COLORAPP_ADAPTVIEWING;Luminosité d'adaptation (cd/m²)
+TP_COLORAPP_ADAPTVIEWING_TOOLTIP;Luminance absolue de l'environnement de visionnage\n(souvent 16cd/m²)
TP_COLORAPP_ALGO;Algorithme
TP_COLORAPP_ALGO_ALL;Tout
TP_COLORAPP_ALGO_JC;Luminosité + Chroma (JC)
TP_COLORAPP_ALGO_JS;Luminosité + Saturation (JS)
TP_COLORAPP_ALGO_QM;Brillance + Niveau de couleur (QM)
TP_COLORAPP_ALGO_TOOLTIP;Permet de choisir entre des jeux réduits de paramètre ou tout les paramètres
+TP_COLORAPP_BADPIXSL;Filtrer les pixels chauds/morts
+TP_COLORAPP_BADPIXSL_TOOLTIP;Suppression des pixels chauds/morts (colorés de manière intense).\n0=Aucun effet 1=Médian 2=Gaussien.\n\nCes artefacts sont dues aux limitations de CIECAM02. Vous pouvez également adjuster l'image afin d'éviter les ombres très sombres.
TP_COLORAPP_BRIGHT;Brillance (Q)
TP_COLORAPP_BRIGHT_TOOLTIP;Brillance dans CIECAM02 est différent de Lab et RVB, prend en compte la luminosité du blanc
TP_COLORAPP_CHROMA;Chroma (C)
@@ -1019,6 +1032,8 @@ TP_DARKFRAME_LABEL;Trame Noire
TP_DEFRINGE_LABEL;Aberration chromatique (lab / ciecam02)
TP_DEFRINGE_RADIUS;Rayon
TP_DEFRINGE_THRESHOLD;Seuil
+TP_PFCURVE_CURVEEDITOR_CH;Teinte
+TP_PFCURVE_CURVEEDITOR_CH_TOOLTIP;Controle la force du défrangeage en fonction de la couleur. En haut = action maxi, en bas = pas d'action sur la couleur.
TP_DIRPYRDENOISE_BLUE;Delta chrominance Bleu
TP_DIRPYRDENOISE_CHROMA;Chrominance (Maître)
TP_DIRPYRDENOISE_ENABLED_TOOLTIP;Peut être utilisé sur les images raw et non-raw.\n\nPour les images non-raw, la réduction de bruit de luminance dépend du gamma du profile couleur d'entée. Un gamma sRGB est supposé, c'est pourquoi si l'image a un profile couleur d'un gamma différent, la réduction de bruit de luminance variera.
@@ -1134,7 +1149,7 @@ TP_ICM_SAVEREFERENCE;Utiliser l'image comme profil de référence
TP_ICM_TONECURVE;Utiliser la courbe tonale du profil DCP
TP_ICM_TONECURVE_TOOLTIP;Permet d'utiliser la courbe tonale contenue dans le profile DCP, si elle existe
TP_ICM_WORKINGPROFILE;Profil de Travail
-TP_IMPULSEDENOISE_LABEL;Réduction du bruit d'impulsion
+TP_IMPULSEDENOISE_LABEL;Réduction du bruit d'impulsion (Lab/CIECAM02)
TP_IMPULSEDENOISE_THRESH;Seuil
TP_LABCURVE_AVOIDCOLORSHIFT;Éviter les dérives de teinte
TP_LABCURVE_AVOIDCOLORSHIFT_TOOLTIP;Ramènes les données dans le gamut de l'espace couleur de travail\npuis applique la correction de Munsell
@@ -1186,6 +1201,7 @@ TP_PERSPECTIVE_LABEL;Perspective
TP_PERSPECTIVE_VERTICAL;Verticale
TP_PREPROCESS_GREENEQUIL;Équilibrage du vert
TP_PREPROCESS_HOTDEADPIXFILT;Filtrer les pixels chauds/morts
+TP_PREPROCESS_HOTDEADPIXFILT_TOOLTIP;Essai de supprimer les pixels chauds/morts
TP_PREPROCESS_HOTDEADPIXTHRESH;Seuil de détection des pixels morts
TP_PREPROCESS_LABEL;Traitement pre-dématriçage
TP_PREPROCESS_LINEDENOISE;Filtre de bruit de ligne
diff --git a/rtdata/languages/default b/rtdata/languages/default
index 57de48285..f44d85835 100644
--- a/rtdata/languages/default
+++ b/rtdata/languages/default
@@ -441,6 +441,7 @@ HISTORY_MSG_203;NR - Method
HISTORY_MSG_204;LMMSE Enhancement Steps
HISTORY_MSG_205;CAM02 hot/bad pixels
HISTORY_MSG_206;CAT02 - Adapt scene auto
+HISTORY_MSG_207;Defringing Hue curve
HISTORY_NEWSNAPSHOTAS;As...
HISTORY_NEWSNAPSHOT;Add
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s
@@ -1024,6 +1025,9 @@ TP_DARKFRAME_LABEL;Dark Frame
TP_DEFRINGE_LABEL;Defringe (Lab/CIECAM02)
TP_DEFRINGE_RADIUS;Radius
TP_DEFRINGE_THRESHOLD;Threshold
+TP_PFCURVE_CURVEEDITOR_CH;Hue
+TP_PFCURVE_CURVEEDITOR_CH_TOOLTIP;Controls defringe strength by color. Higher = more, lower = less.
+TP_PFCURVE_CURVEEDITOR_CH_TOOLTIP;Modulates the action depending on the color and radius. Lower values reduce the action, the higher values increase action, with reference to the radius
TP_DIRPYRDENOISE_BLUE;Delta chrominance Blue
TP_DIRPYRDENOISE_CHROMA;Chrominance (Master)
TP_DIRPYRDENOISE_ENABLED_TOOLTIP;Can be used on raw and non-raw images.\n\nFor non-raw images noise reduction of luminance depends on gamma of the input color profile. Gamma of sRGB is assumed, thus if input image is in color profile of a different gamma, luminance noise reduction will vary.
diff --git a/rtdata/profiles/BW 1.pp3 b/rtdata/profiles/BW 1.pp3
index ea2386655..318aeb80d 100644
--- a/rtdata/profiles/BW 1.pp3
+++ b/rtdata/profiles/BW 1.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=true
diff --git a/rtdata/profiles/BW 2.pp3 b/rtdata/profiles/BW 2.pp3
index 2de32ec82..e69aac294 100644
--- a/rtdata/profiles/BW 2.pp3
+++ b/rtdata/profiles/BW 2.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=true
diff --git a/rtdata/profiles/BW 3.pp3 b/rtdata/profiles/BW 3.pp3
index 8f03ecf64..deb2dfae4 100644
--- a/rtdata/profiles/BW 3.pp3
+++ b/rtdata/profiles/BW 3.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=true
diff --git a/rtdata/profiles/BW 4.pp3 b/rtdata/profiles/BW 4.pp3
index 8a833243c..88f11f09f 100644
--- a/rtdata/profiles/BW 4.pp3
+++ b/rtdata/profiles/BW 4.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=true
diff --git a/rtdata/profiles/Deep Shadows.pp3 b/rtdata/profiles/Deep Shadows.pp3
index 54d136f8e..0eabb491d 100644
--- a/rtdata/profiles/Deep Shadows.pp3
+++ b/rtdata/profiles/Deep Shadows.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Default ISO High.pp3 b/rtdata/profiles/Default ISO High.pp3
index 776e435fb..b4ebf964a 100644
--- a/rtdata/profiles/Default ISO High.pp3
+++ b/rtdata/profiles/Default ISO High.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=true
diff --git a/rtdata/profiles/Default ISO Medium.pp3 b/rtdata/profiles/Default ISO Medium.pp3
index f78972dad..45058afcf 100644
--- a/rtdata/profiles/Default ISO Medium.pp3
+++ b/rtdata/profiles/Default ISO Medium.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=true
diff --git a/rtdata/profiles/Default.pp3 b/rtdata/profiles/Default.pp3
index d3c855651..afa142023 100644
--- a/rtdata/profiles/Default.pp3
+++ b/rtdata/profiles/Default.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=true
@@ -119,6 +119,8 @@ Threshold=50
Enabled=false
Radius=2.0
Threshold=25
+HueCurve=1;0.166666667;0;0.35;0.35;0.347;0;0.35;0.35;0.513667426;0;0.35;0.35;0.668944571;0;0.35;0.35;0.8287775246;0.97835991;0.35;0.35;0.9908883827;0;0.35;0.35;
+
[Directional Pyramid Denoising]
Enabled=false
diff --git a/rtdata/profiles/Equilibrated.pp3 b/rtdata/profiles/Equilibrated.pp3
index 98b710c4f..d3dd41abe 100644
--- a/rtdata/profiles/Equilibrated.pp3
+++ b/rtdata/profiles/Equilibrated.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Amber 1 TM Bright.pp3 b/rtdata/profiles/Faded Amber 1 TM Bright.pp3
index b4f0f5580..e03e47ff3 100644
--- a/rtdata/profiles/Faded Amber 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded Amber 1 TM Bright.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Amber 1 TM.pp3 b/rtdata/profiles/Faded Amber 1 TM.pp3
index 86887f43f..7e8344359 100644
--- a/rtdata/profiles/Faded Amber 1 TM.pp3
+++ b/rtdata/profiles/Faded Amber 1 TM.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Amber 1.pp3 b/rtdata/profiles/Faded Amber 1.pp3
index 199e1d386..ebacd9816 100644
--- a/rtdata/profiles/Faded Amber 1.pp3
+++ b/rtdata/profiles/Faded Amber 1.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Blue 1 TM Bright.pp3 b/rtdata/profiles/Faded Blue 1 TM Bright.pp3
index 1b72923be..847a1c9a5 100644
--- a/rtdata/profiles/Faded Blue 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded Blue 1 TM Bright.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Blue 1 TM.pp3 b/rtdata/profiles/Faded Blue 1 TM.pp3
index fc0f92672..906180954 100644
--- a/rtdata/profiles/Faded Blue 1 TM.pp3
+++ b/rtdata/profiles/Faded Blue 1 TM.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Blue 1.pp3 b/rtdata/profiles/Faded Blue 1.pp3
index 3ea8a709f..0530bc4e0 100644
--- a/rtdata/profiles/Faded Blue 1.pp3
+++ b/rtdata/profiles/Faded Blue 1.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Blue Pink TM.pp3 b/rtdata/profiles/Faded Blue Pink TM.pp3
index 14447f3ba..e4c60bf1c 100644
--- a/rtdata/profiles/Faded Blue Pink TM.pp3
+++ b/rtdata/profiles/Faded Blue Pink TM.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Blue Pink.pp3 b/rtdata/profiles/Faded Blue Pink.pp3
index 120dcb889..caa74dc46 100644
--- a/rtdata/profiles/Faded Blue Pink.pp3
+++ b/rtdata/profiles/Faded Blue Pink.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Chocolate 1 TM Bright.pp3 b/rtdata/profiles/Faded Chocolate 1 TM Bright.pp3
index 7c114e804..c2884d3cb 100644
--- a/rtdata/profiles/Faded Chocolate 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded Chocolate 1 TM Bright.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Chocolate 2 TM Bright.pp3 b/rtdata/profiles/Faded Chocolate 2 TM Bright.pp3
index 0fef120e8..4f8331658 100644
--- a/rtdata/profiles/Faded Chocolate 2 TM Bright.pp3
+++ b/rtdata/profiles/Faded Chocolate 2 TM Bright.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Golden 1.pp3 b/rtdata/profiles/Faded Golden 1.pp3
index 38cfcf7f0..5f0dcf358 100644
--- a/rtdata/profiles/Faded Golden 1.pp3
+++ b/rtdata/profiles/Faded Golden 1.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Golden 2.pp3 b/rtdata/profiles/Faded Golden 2.pp3
index db7bb306a..39c2c15b0 100644
--- a/rtdata/profiles/Faded Golden 2.pp3
+++ b/rtdata/profiles/Faded Golden 2.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Green 1 TM Bright.pp3 b/rtdata/profiles/Faded Green 1 TM Bright.pp3
index 422552e10..a76170d70 100644
--- a/rtdata/profiles/Faded Green 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded Green 1 TM Bright.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Green 1 TM.pp3 b/rtdata/profiles/Faded Green 1 TM.pp3
index 6670b82da..adc4dfed3 100644
--- a/rtdata/profiles/Faded Green 1 TM.pp3
+++ b/rtdata/profiles/Faded Green 1 TM.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Green 1.pp3 b/rtdata/profiles/Faded Green 1.pp3
index 51743481e..cc94b290e 100644
--- a/rtdata/profiles/Faded Green 1.pp3
+++ b/rtdata/profiles/Faded Green 1.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Green 2.pp3 b/rtdata/profiles/Faded Green 2.pp3
index 488f3434a..5a7924bde 100644
--- a/rtdata/profiles/Faded Green 2.pp3
+++ b/rtdata/profiles/Faded Green 2.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Green 3.pp3 b/rtdata/profiles/Faded Green 3.pp3
index 7be4be4c9..5d295db81 100644
--- a/rtdata/profiles/Faded Green 3.pp3
+++ b/rtdata/profiles/Faded Green 3.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Neutral TM.pp3 b/rtdata/profiles/Faded Neutral TM.pp3
index 86c631d19..4a9d6e3cd 100644
--- a/rtdata/profiles/Faded Neutral TM.pp3
+++ b/rtdata/profiles/Faded Neutral TM.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Neutral.pp3 b/rtdata/profiles/Faded Neutral.pp3
index 8f4f890a7..49957f63c 100644
--- a/rtdata/profiles/Faded Neutral.pp3
+++ b/rtdata/profiles/Faded Neutral.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Purple 1 TM Bright.pp3 b/rtdata/profiles/Faded Purple 1 TM Bright.pp3
index 9274fc332..68fdcf4dd 100644
--- a/rtdata/profiles/Faded Purple 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded Purple 1 TM Bright.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Purple 1 TM.pp3 b/rtdata/profiles/Faded Purple 1 TM.pp3
index 1afc3fbc1..bbc953aee 100644
--- a/rtdata/profiles/Faded Purple 1 TM.pp3
+++ b/rtdata/profiles/Faded Purple 1 TM.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Purple 1.pp3 b/rtdata/profiles/Faded Purple 1.pp3
index 36f3d3956..d424fae7d 100644
--- a/rtdata/profiles/Faded Purple 1.pp3
+++ b/rtdata/profiles/Faded Purple 1.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Purple 2 TM.pp3 b/rtdata/profiles/Faded Purple 2 TM.pp3
index 6a42d3e91..ca2ae2bc1 100644
--- a/rtdata/profiles/Faded Purple 2 TM.pp3
+++ b/rtdata/profiles/Faded Purple 2 TM.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Purple 2.pp3 b/rtdata/profiles/Faded Purple 2.pp3
index 179a3c694..bd57019f0 100644
--- a/rtdata/profiles/Faded Purple 2.pp3
+++ b/rtdata/profiles/Faded Purple 2.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Teal Orange TM Bright.pp3 b/rtdata/profiles/Faded Teal Orange TM Bright.pp3
index a6b947855..b8b6278d2 100644
--- a/rtdata/profiles/Faded Teal Orange TM Bright.pp3
+++ b/rtdata/profiles/Faded Teal Orange TM Bright.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Teal Orange TM.pp3 b/rtdata/profiles/Faded Teal Orange TM.pp3
index d1d1f2778..001b751b2 100644
--- a/rtdata/profiles/Faded Teal Orange TM.pp3
+++ b/rtdata/profiles/Faded Teal Orange TM.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Teal Orange.pp3 b/rtdata/profiles/Faded Teal Orange.pp3
index 09f322f2e..2827a6762 100644
--- a/rtdata/profiles/Faded Teal Orange.pp3
+++ b/rtdata/profiles/Faded Teal Orange.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Warm 1 TM Bright.pp3 b/rtdata/profiles/Faded Warm 1 TM Bright.pp3
index 72f897e6c..597114727 100644
--- a/rtdata/profiles/Faded Warm 1 TM Bright.pp3
+++ b/rtdata/profiles/Faded Warm 1 TM Bright.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Warm 1 TM.pp3 b/rtdata/profiles/Faded Warm 1 TM.pp3
index f2c1ef4f4..fa78027ea 100644
--- a/rtdata/profiles/Faded Warm 1 TM.pp3
+++ b/rtdata/profiles/Faded Warm 1 TM.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Warm 1.pp3 b/rtdata/profiles/Faded Warm 1.pp3
index 9f26555a8..bf69f1e17 100644
--- a/rtdata/profiles/Faded Warm 1.pp3
+++ b/rtdata/profiles/Faded Warm 1.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Warm 2.pp3 b/rtdata/profiles/Faded Warm 2.pp3
index 84519e254..a544fc6dd 100644
--- a/rtdata/profiles/Faded Warm 2.pp3
+++ b/rtdata/profiles/Faded Warm 2.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Faded Warm 3.pp3 b/rtdata/profiles/Faded Warm 3.pp3
index 843204ee4..f59b513be 100644
--- a/rtdata/profiles/Faded Warm 3.pp3
+++ b/rtdata/profiles/Faded Warm 3.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/High-Key.pp3 b/rtdata/profiles/High-Key.pp3
index 1a873fd4c..a2408943e 100644
--- a/rtdata/profiles/High-Key.pp3
+++ b/rtdata/profiles/High-Key.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=true
diff --git a/rtdata/profiles/Natural 1.pp3 b/rtdata/profiles/Natural 1.pp3
index 272ed71f2..1eeb9809b 100644
--- a/rtdata/profiles/Natural 1.pp3
+++ b/rtdata/profiles/Natural 1.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=true
diff --git a/rtdata/profiles/Natural 2.pp3 b/rtdata/profiles/Natural 2.pp3
index 5db2dd764..c24b50dc1 100644
--- a/rtdata/profiles/Natural 2.pp3
+++ b/rtdata/profiles/Natural 2.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=true
diff --git a/rtdata/profiles/Neutral.pp3 b/rtdata/profiles/Neutral.pp3
index c8915ae4d..446ce95e3 100644
--- a/rtdata/profiles/Neutral.pp3
+++ b/rtdata/profiles/Neutral.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=false
@@ -118,6 +118,7 @@ Threshold=50
Enabled=false
Radius=2.0
Threshold=25
+HueCurve=1;0.166666667;0;0.35;0.35;0.347;0;0.35;0.35;0.513667426;0;0.35;0.35;0.668944571;0;0.35;0.35;0.8287775246;0.97835991;0.35;0.35;0.9908883827;0;0.35;0.35;
[Directional Pyramid Denoising]
Enabled=false
diff --git a/rtdata/profiles/Pop 1.pp3 b/rtdata/profiles/Pop 1.pp3
index 7b5397773..140fbfb31 100644
--- a/rtdata/profiles/Pop 1.pp3
+++ b/rtdata/profiles/Pop 1.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Pop 2 L.pp3 b/rtdata/profiles/Pop 2 L.pp3
index 82bc98a7b..d39bf2a86 100644
--- a/rtdata/profiles/Pop 2 L.pp3
+++ b/rtdata/profiles/Pop 2 L.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Pop 3 Skin.pp3 b/rtdata/profiles/Pop 3 Skin.pp3
index 0f62b4fe1..d199f3859 100644
--- a/rtdata/profiles/Pop 3 Skin.pp3
+++ b/rtdata/profiles/Pop 3 Skin.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Pop 4 BW.pp3 b/rtdata/profiles/Pop 4 BW.pp3
index 166c91c85..37423489a 100644
--- a/rtdata/profiles/Pop 4 BW.pp3
+++ b/rtdata/profiles/Pop 4 BW.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Portrait Lejto.pp3 b/rtdata/profiles/Portrait Lejto.pp3
index dd8e81654..bf29ea391 100644
--- a/rtdata/profiles/Portrait Lejto.pp3
+++ b/rtdata/profiles/Portrait Lejto.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Portrait Smooth.pp3 b/rtdata/profiles/Portrait Smooth.pp3
index 09ec40671..6609f4fee 100644
--- a/rtdata/profiles/Portrait Smooth.pp3
+++ b/rtdata/profiles/Portrait Smooth.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=false
diff --git a/rtdata/profiles/Punchy 1.pp3 b/rtdata/profiles/Punchy 1.pp3
index 30c6f031c..20aba7f4e 100644
--- a/rtdata/profiles/Punchy 1.pp3
+++ b/rtdata/profiles/Punchy 1.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=true
diff --git a/rtdata/profiles/Punchy 2.pp3 b/rtdata/profiles/Punchy 2.pp3
index 4b3416c8a..cbe47ae8a 100644
--- a/rtdata/profiles/Punchy 2.pp3
+++ b/rtdata/profiles/Punchy 2.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[Exposure]
Auto=true
diff --git a/rtdata/profiles/Skintones - Natural TM.pp3 b/rtdata/profiles/Skintones - Natural TM.pp3
index dea5e7e84..6a9f3bd74 100644
--- a/rtdata/profiles/Skintones - Natural TM.pp3
+++ b/rtdata/profiles/Skintones - Natural TM.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[General]
Rank=0
diff --git a/rtdata/profiles/Skintones - Natural.pp3 b/rtdata/profiles/Skintones - Natural.pp3
index 0268aceeb..b5d3fe42e 100644
--- a/rtdata/profiles/Skintones - Natural.pp3
+++ b/rtdata/profiles/Skintones - Natural.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[General]
Rank=0
diff --git a/rtdata/profiles/Skintones - Pale TM Bright.pp3 b/rtdata/profiles/Skintones - Pale TM Bright.pp3
index 4ce228ca6..143105fb3 100644
--- a/rtdata/profiles/Skintones - Pale TM Bright.pp3
+++ b/rtdata/profiles/Skintones - Pale TM Bright.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[General]
Rank=0
diff --git a/rtdata/profiles/Skintones - Pale TM.pp3 b/rtdata/profiles/Skintones - Pale TM.pp3
index 8f32be23e..e3429773a 100644
--- a/rtdata/profiles/Skintones - Pale TM.pp3
+++ b/rtdata/profiles/Skintones - Pale TM.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[General]
Rank=0
diff --git a/rtdata/profiles/Skintones - Pale.pp3 b/rtdata/profiles/Skintones - Pale.pp3
index 877ecbec1..33939c9af 100644
--- a/rtdata/profiles/Skintones - Pale.pp3
+++ b/rtdata/profiles/Skintones - Pale.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[General]
Rank=0
diff --git a/rtdata/profiles/Skintones - Soft Texture.pp3 b/rtdata/profiles/Skintones - Soft Texture.pp3
index 863b98fc0..3785e9080 100644
--- a/rtdata/profiles/Skintones - Soft Texture.pp3
+++ b/rtdata/profiles/Skintones - Soft Texture.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[RGB Curves]
LumaMode=true
diff --git a/rtdata/profiles/Skintones - Strong Texture.pp3 b/rtdata/profiles/Skintones - Strong Texture.pp3
index 1345138cd..c80ecd6b9 100644
--- a/rtdata/profiles/Skintones - Strong Texture.pp3
+++ b/rtdata/profiles/Skintones - Strong Texture.pp3
@@ -1,6 +1,6 @@
[Version]
AppVersion=4.0.11.0
-Version=307
+Version=308
[RGB Curves]
LumaMode=true
diff --git a/rtdata/profiles/Skintones - Studio TM.pp3 b/rtdata/profiles/Skintones - Studio TM.pp3
index 1a41fc204..bf78bab1e 100644
--- a/rtdata/profiles/Skintones - Studio TM.pp3
+++ b/rtdata/profiles/Skintones - Studio TM.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[General]
Rank=0
diff --git a/rtdata/profiles/Skintones - Studio.pp3 b/rtdata/profiles/Skintones - Studio.pp3
index 88829638e..fa15ef54d 100644
--- a/rtdata/profiles/Skintones - Studio.pp3
+++ b/rtdata/profiles/Skintones - Studio.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[General]
Rank=0
diff --git a/rtdata/profiles/Skintones - StudioBase 1 TM.pp3 b/rtdata/profiles/Skintones - StudioBase 1 TM.pp3
index 8413176e3..20363639d 100644
--- a/rtdata/profiles/Skintones - StudioBase 1 TM.pp3
+++ b/rtdata/profiles/Skintones - StudioBase 1 TM.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[General]
Rank=0
diff --git a/rtdata/profiles/Skintones - StudioBase 1.pp3 b/rtdata/profiles/Skintones - StudioBase 1.pp3
index 962a9fa8f..4085448d2 100644
--- a/rtdata/profiles/Skintones - StudioBase 1.pp3
+++ b/rtdata/profiles/Skintones - StudioBase 1.pp3
@@ -1,7 +1,7 @@
[Version]
AppVersion=4.0.11
-Version=307
+Version=308
[General]
Rank=0
diff --git a/rtengine/PF_correct_RT.cc b/rtengine/PF_correct_RT.cc
index 59902ed81..398ad8561 100644
--- a/rtengine/PF_correct_RT.cc
+++ b/rtengine/PF_correct_RT.cc
@@ -29,6 +29,7 @@
#include "improcfun.h"
#include "sleef.c"
#include "mytime.h"
+#include "../rtgui/myflatcurve.h"
#ifdef _OPENMP
#include
@@ -58,6 +59,10 @@ void ImProcFunctions::PF_correct_RT(LabImage * src, LabImage * dst, double radiu
#include "rt_math.h"
+ FlatCurve* chCurve = NULL;
+ if (params->defringe.huecurve.size() && FlatCurveType(params->defringe.huecurve.at(0)) > FCT_Linear)
+ chCurve = new FlatCurve(params->defringe.huecurve);
+
// local variables
int width=src->W, height=src->H;
//temporary array to store chromaticity
@@ -88,7 +93,16 @@ float chromave=0;
#endif
for(int i = 0; i < height; i++ ) {
for(int j = 0; j < width; j++) {
- float chroma = SQR(src->a[i][j]-tmp1->a[i][j])+SQR(src->b[i][j]-tmp1->b[i][j]);
+ float HH=xatan2f(src->b[i][j],src->a[i][j]);
+ double hr;
+ float chromaChfactor=1.0f;
+ if (chCurve) {
+ Color::huelab_to_huehsv (HH, hr);
+ float chparam = float((chCurve->getVal(hr)-0.5f) * 2.0f);//get C=f(H)
+ if(chparam > 0.f) chparam /=2.f; // reduced action if chparam > 0
+ chromaChfactor=1.0f+chparam;
+ }
+ float chroma = SQR(chromaChfactor*(src->a[i][j]-tmp1->a[i][j]))+SQR(chromaChfactor*(src->b[i][j]-tmp1->b[i][j]));//modulate chroma function hue
chromave += chroma;
fringe[i*width+j]=chroma;
}
@@ -144,12 +158,17 @@ float chromave=0;
}
delete tmp1;
+ if(chCurve) delete chCurve;
free(fringe);
}
+
void ImProcFunctions::PF_correct_RTcam(CieImage * src, CieImage * dst, double radius, int thresh) {
int halfwin = ceil(2*radius)+1;
#include "rt_math.h"
+ FlatCurve* chCurve = NULL;
+ if (params->defringe.huecurve.size() && FlatCurveType(params->defringe.huecurve.at(0)) > FCT_Linear)
+ chCurve = new FlatCurve(params->defringe.huecurve);
// local variables
int width=src->W, height=src->H;
@@ -223,7 +242,20 @@ float chromave=0;
#endif
for(int i = 0; i < height; i++ ) {
for(int j = 0; j < width; j++) {
- float chroma =SQR(sraa[i][j]-tmaa[i][j])+SQR(srbb[i][j]-tmbb[i][j]);
+ float HH=xatan2f(srbb[i][j],sraa[i][j]); //piid*src->h_p[i][j];
+ float chromaChfactor=1.0f;
+ double hr;
+ if (chCurve) {
+ Color::huelab_to_huehsv (HH, hr); //approximation Cam / Lab
+ float chparam = float((chCurve->getVal(hr)-0.5f) * 2.0f);//get C=f(H)
+ if(chparam > 0.f) chparam /=2.f; // reduced action if chparam > 0
+ chromaChfactor=1.0f+chparam;
+ }
+ float chroma = SQR(chromaChfactor*(sraa[i][j]-tmaa[i][j]))+SQR(chromaChfactor*(srbb[i][j]-tmbb[i][j]));//modulate chroma function hue
+
+
+
+ // float chroma =SQR(sraa[i][j]-tmaa[i][j])+SQR(srbb[i][j]-tmbb[i][j]);
chromave += chroma;
fringe[i*width+j]=chroma;
}
@@ -297,8 +329,10 @@ float chromave=0;
/* for (int i=0; ihr # 0.33 ==> 0.33 0.42
+ else if (HH<-2.1f) hr=0.266666667*double(HH)+1.14; //Lab cyan =>hr # 0.50 ==> 0.42 0.58
+ else if (HH<-0.9f) hr=0.141666 *double(HH)+0.8775; //Lab blue =>hr # 0.67 ==> 0.58 0.75
+ else if (HH<-0.1f) hr=0.2125 *double(HH)+0.94125; //Lab magenta (purple) =>hr # 0.83 ==> 0.75 0.92
+ else if (HH< 1.3f) hr=0.12142857 *double(HH)+0.932142857; //Lab red and skin =>hr # 0 ==> 0.92 1.09
+ else if (HH< 2.2f) hr=0.1666667 *double(HH)-0.1266667; //Lab yellow and green yellow =>hr # 0.16 ==> 0.09 0.24
+ else hr=0.0955828 *double(HH)+0.02971784; //Lab green =>hr # 0.33 ==> 0.24 0.33
+ //allways put h between 0 and 1
+ if (hr<0.0) hr += 1.0;
+ else if(hr>1.0) hr -= 1.0;
+ }
+
double Color::f2xyz(double f) {
const double epsilonExpInv3 = 6.0/29.0;
const double kappaInv = 27.0/24389.0; // inverse of kappa
diff --git a/rtengine/color.h b/rtengine/color.h
index ffbc7f8c0..81c449dfb 100644
--- a/rtengine/color.h
+++ b/rtengine/color.h
@@ -135,6 +135,7 @@ public:
static void Yuv2Lab(float Y, float u, float v, float &L, float &a, float &b, double wp[3][3]);
static double f2xyz(double f);
static void calcGamma (double pwr, double ts, int mode, int imax, double &gamma0, double &gamma1, double &gamma2, double &gamma3, double &gamma4,double &gamma5);
+ static void huelab_to_huehsv (float HH, double &hr);
// standard srgb gamma and its inverse
static inline double gamma2 (double x) {
diff --git a/rtengine/curves.cc b/rtengine/curves.cc
index 183f8c989..0239b45a3 100644
--- a/rtengine/curves.cc
+++ b/rtengine/curves.cc
@@ -37,12 +37,7 @@ using namespace std;
namespace rtengine {
- Curve::Curve () {
- x = 0;
- y = 0;
- ypp = 0;
- hashSize = 1000; // has to be initialized to the maximum value
- }
+ Curve::Curve () : N(0), x(NULL), y(NULL), ypp(NULL), hashSize(1000 /* has to be initialized to the maximum value */ ) {}
void Curve::AddPolygons ()
{
diff --git a/rtengine/curves.h b/rtengine/curves.h
index 8cea03043..27cd9366c 100644
--- a/rtengine/curves.h
+++ b/rtengine/curves.h
@@ -278,6 +278,7 @@ class FlatCurve : public Curve {
FlatCurveType kind;
double* leftTangent;
double* rightTangent;
+ double identityValue;
bool periodic;
void CtrlPoints_set ();
@@ -289,6 +290,7 @@ class FlatCurve : public Curve {
double getVal (double t) const;
void getVal (const std::vector& t, std::vector& res) const;
+ bool setIdentityValue (double iVal);
bool isIdentity () const { return kind==FCT_Empty; };
};
diff --git a/rtengine/flatcurves.cc b/rtengine/flatcurves.cc
index 77243f1e5..3236b57d1 100644
--- a/rtengine/flatcurves.cc
+++ b/rtengine/flatcurves.cc
@@ -29,15 +29,12 @@
namespace rtengine {
-FlatCurve::FlatCurve (const std::vector& p, bool isPeriodic, int poly_pn) : leftTangent(NULL), rightTangent(NULL) {
+FlatCurve::FlatCurve (const std::vector& p, bool isPeriodic, int poly_pn) : kind(FCT_Empty), leftTangent(NULL), rightTangent(NULL), identityValue(0.5), periodic(isPeriodic) {
ppn = poly_pn > 65500 ? 65500 : poly_pn;
poly_x.clear();
poly_y.clear();
- kind = FCT_Empty;
- periodic = isPeriodic;
-
bool identity = true;
if (p.size()>4) {
@@ -55,8 +52,8 @@ FlatCurve::FlatCurve (const std::vector& p, bool isPeriodic, int poly_pn
y[i] = p[ix++];
leftTangent[i] = p[ix++];
rightTangent[i] = p[ix++];
- if (y[i] != 0.5f)
- identity = false;
+ if (y[i] >= identityValue+1.e-7 || y[i] <= identityValue-1.e-7)
+ identity = false;
}
// The first point is copied to the end of the point list, to handle the curve periodicity
if (periodic) {
@@ -91,6 +88,31 @@ FlatCurve::~FlatCurve () {
poly_y.clear();
}
+/*
+ * The nominal (identity) curve may not be 0.5, use this method to set it to whatever value in the 0.-1. range you want
+ * Return true if the curve is nominal
+ */
+bool FlatCurve::setIdentityValue (double iVal) {
+
+ if (identityValue == iVal)
+ return kind==FCT_Empty;
+
+ identityValue = iVal;
+ bool identity = true;
+ for (int i=0; i= identityValue+1.e-7 || y[i] <= identityValue-1.e-7) {
+ identity = false;
+ break;
+ }
+ }
+ if (identity)
+ kind = FCT_Empty;
+ else
+ kind = FCT_MinMaxCPoints;
+
+ return kind==FCT_Empty;
+}
+
void FlatCurve::CtrlPoints_set () {
int nbSubCurvesPoints = N*6;
@@ -274,7 +296,7 @@ void FlatCurve::CtrlPoints_set () {
poly_x.push_back(sc_x[j]);
poly_y.push_back(sc_y[j++]);
}
- else {
+ else {
nbr_points = (int)(((double)(ppn) * sc_length[i] )/ total_length);
if (nbr_points<0){
for(size_t it=0;it < sc_x.size(); it+=3) printf("sc_length[%zd/3]=%f \n",it,sc_length[it/3]);
@@ -287,7 +309,7 @@ void FlatCurve::CtrlPoints_set () {
x2 = sc_x[j]; y2 = sc_y[j++];
x3 = sc_x[j]; y3 = sc_y[j++];
AddPolygons ();
- }
+ }
}
// adding the final horizontal segment, always (see under)
@@ -344,7 +366,7 @@ double FlatCurve::getVal (double t) const {
case FCT_Empty :
case FCT_Linear : // Linear doesn't exist yet and is then considered as identity
default:
- return 0.5;
+ return identityValue;
}
}
diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc
index 38d0d8644..40ee4b847 100644
--- a/rtengine/improcfun.cc
+++ b/rtengine/improcfun.cc
@@ -2553,19 +2553,7 @@ void ImProcFunctions::chromiLuminanceCurve (int pW, LabImage* lold, LabImage* ln
// calculate C=f(H)
if (chutili) {
double hr;
- //hr=translate Hue Lab value (-Pi +Pi) in approximative hr (hsv values) (0 1) [red 1/6 yellow 1/6 green 1/6 cyan 1/6 blue 1/6 magenta 1/6 ]
- // with multi linear correspondances (I expect there is no error !!)
- if (HH<-2.7f) hr=0.020380804*double(HH)+0.970281708; //Lab green =>hr # 0.33 ==> 0.33 0.42
- else if (HH<-2.1f) hr=0.266666667*double(HH)+1.14; //Lab cyan =>hr # 0.50 ==> 0.42 0.58
- else if (HH<-0.9f) hr=0.141666 *double(HH)+0.8775; //Lab blue =>hr # 0.67 ==> 0.58 0.75
- else if (HH<-0.1f) hr=0.2125 *double(HH)+0.94125; //Lab magenta (purple) =>hr # 0.83 ==> 0.75 0.92
- else if (HH< 1.3f) hr=0.12142857 *double(HH)+0.932142857; //Lab red and skin =>hr # 0 ==> 0.92 1.09
- else if (HH< 2.2f) hr=0.1666667 *double(HH)-0.1266667; //Lab yellow and green yellow =>hr # 0.16 ==> 0.09 0.24
- else hr=0.0955828 *double(HH)+0.02971784; //Lab green =>hr # 0.33 ==> 0.24 0.33
-
- //allways put h between 0 and 1
- if (hr<0.0) hr += 1.0;
- else if(hr>1.0) hr -= 1.0;
+ Color::huelab_to_huehsv (HH, hr);
float chparam = float((chCurve->getVal(hr)-0.5f) * 2.0f);//get C=f(H)
chromaChfactor=1.0f+chparam;
}
diff --git a/rtengine/procevents.h b/rtengine/procevents.h
index 68408eaaa..501e9a4e8 100644
--- a/rtengine/procevents.h
+++ b/rtengine/procevents.h
@@ -229,8 +229,8 @@ enum ProcEvent {
EvDemosaicLMMSEIter=203,
EvCATbadpix=204,
EvCATAutoAdap=205,
-
- NUMOFEVENTS=206
+ EvPFCurve=206,
+ NUMOFEVENTS=207
};
}
#endif
diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc
index f44c48702..48e96d045 100644
--- a/rtengine/procparams.cc
+++ b/rtengine/procparams.cc
@@ -239,13 +239,13 @@ void ProcParams::setDefaults () {
colorappearance.tonecie = false;
// colorappearance.sharpcie = false;
colorappearance.curve.clear ();
- colorappearance.curve.push_back(DCT_Linear);
+ colorappearance.curve.push_back(DCT_Linear);
colorappearance.curve2.clear ();
- colorappearance.curve2.push_back(DCT_Linear);
+ colorappearance.curve2.push_back(DCT_Linear);
colorappearance.curveMode =ColorAppearanceParams::TC_MODE_LIGHT;
colorappearance.curveMode2 = ColorAppearanceParams::TC_MODE_LIGHT;
colorappearance.curve3.clear ();
- colorappearance.curve3.push_back(DCT_Linear);
+ colorappearance.curve3.push_back(DCT_Linear);
colorappearance.curveMode3 = ColorAppearanceParams::TC_MODE_CHROMA;
impulseDenoise.enabled = false;
@@ -254,6 +254,32 @@ void ProcParams::setDefaults () {
defringe.enabled = false;
defringe.radius = 2.0;
defringe.threshold = 25;
+ defringe.huecurve.resize (25);
+ defringe.huecurve.at(0) = FCT_MinMaxCPoints;
+ defringe.huecurve.at(1) = 0.166666667;
+ defringe.huecurve.at(2) = 0.;
+ defringe.huecurve.at(3) = 0.35;
+ defringe.huecurve.at(4) = 0.35;
+ defringe.huecurve.at(5) = 0.347;
+ defringe.huecurve.at(6) = 0.;
+ defringe.huecurve.at(7) = 0.35;
+ defringe.huecurve.at(8) = 0.35;
+ defringe.huecurve.at(9) = 0.513667426;
+ defringe.huecurve.at(10) = 0;
+ defringe.huecurve.at(11) = 0.35;
+ defringe.huecurve.at(12) = 0.35;
+ defringe.huecurve.at(13) = 0.668944571;
+ defringe.huecurve.at(14) = 0.;
+ defringe.huecurve.at(15) = 0.35;
+ defringe.huecurve.at(16) = 0.35;
+ defringe.huecurve.at(17) = 0.8287775246;
+ defringe.huecurve.at(18) = 0.97835991;
+ defringe.huecurve.at(19) = 0.35;
+ defringe.huecurve.at(20) = 0.35;
+ defringe.huecurve.at(21) = 0.9908883827;
+ defringe.huecurve.at(22) = 0.;
+ defringe.huecurve.at(23) = 0.35;
+ defringe.huecurve.at(24) = 0.35;
dirpyrDenoise.enabled = false;
// dirpyrDenoise.perform = false;
@@ -674,6 +700,10 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2, ParamsEdited* p
if (!pedited || pedited->defringe.enabled) keyFile.set_boolean ("Defringing", "Enabled", defringe.enabled);
if (!pedited || pedited->defringe.radius) keyFile.set_double ("Defringing", "Radius", defringe.radius);
if (!pedited || pedited->defringe.threshold) keyFile.set_integer ("Defringing", "Threshold", defringe.threshold);
+ if (!pedited || pedited->defringe.huecurve) {
+ Glib::ArrayHandle huecurve = defringe.huecurve;
+ keyFile.set_double_list("Defringing", "HueCurve", huecurve);
+ }
// save dirpyrDenoise
if (!pedited || pedited->dirpyrDenoise.enabled) keyFile.set_boolean ("Directional Pyramid Denoising", "Enabled", dirpyrDenoise.enabled);
@@ -1118,6 +1148,7 @@ if (keyFile.has_group ("Defringing")) {
if (keyFile.has_key ("Defringing", "Enabled")) { defringe.enabled = keyFile.get_boolean ("Defringing", "Enabled"); if (pedited) pedited->defringe.enabled = true; }
if (keyFile.has_key ("Defringing", "Radius")) { defringe.radius = keyFile.get_double ("Defringing", "Radius"); if (pedited) pedited->defringe.radius = true; }
if (keyFile.has_key ("Defringing", "Threshold")) { defringe.threshold = keyFile.get_integer ("Defringing", "Threshold"); if (pedited) pedited->defringe.threshold = true; }
+ if (keyFile.has_key ("Defringing", "HueCurve")) { defringe.huecurve = keyFile.get_double_list ("Defringing", "HueCurve"); if (pedited) pedited->defringe.huecurve = true; }
}
// load colorappearance
if (keyFile.has_group ("Color appearance")) {
@@ -1584,6 +1615,8 @@ bool ProcParams::operator== (const ProcParams& other) {
&& defringe.enabled == other.defringe.enabled
&& defringe.radius == other.defringe.radius
&& defringe.threshold == other.defringe.threshold
+ && defringe.huecurve == other.defringe.huecurve
+
//&& lumaDenoise.enabled == other.lumaDenoise.enabled
//&& lumaDenoise.radius == other.lumaDenoise.radius
//&& lumaDenoise.edgetolerance == other.lumaDenoise.edgetolerance
diff --git a/rtengine/procparams.h b/rtengine/procparams.h
index 5a3e9a484..1e9a38ae7 100644
--- a/rtengine/procparams.h
+++ b/rtengine/procparams.h
@@ -376,9 +376,9 @@ class WBParams {
Glib::ustring surround;
double adapscen;
bool autoadapscen;
-
+
double adaplum;
- int badpixsl;
+ int badpixsl;
Glib::ustring wbmodel;
Glib::ustring algo;
double contrast;
@@ -396,7 +396,6 @@ class WBParams {
bool datacie;
bool tonecie;
// bool sharpcie;
-
};
/**
@@ -432,54 +431,54 @@ class WBParams {
int amount;
};*/
- /**
- * Parameters of defringing
- */
- class DefringeParams {
+/**
+ * Parameters of defringing
+ */
+class DefringeParams {
public:
bool enabled;
double radius;
int threshold;
- };
+ std::vector huecurve;
+};
- /**
- * Parameters of impulse denoising
- */
- class ImpulseDenoiseParams {
+/**
+ * Parameters of impulse denoising
+ */
+class ImpulseDenoiseParams {
public:
bool enabled;
int thresh;
- };
+};
- /**
- * Parameters of the directional pyramid denoising
- */
- class DirPyrDenoiseParams {
+/**
+ * Parameters of the directional pyramid denoising
+ */
+class DirPyrDenoiseParams {
public:
bool enabled;
bool perform;
- double luma;
- double Ldetail;
+ double luma;
+ double Ldetail;
double chroma;
- double redchro;
- double bluechro;
- double gamma;
+ double redchro;
+ double bluechro;
+ double gamma;
Glib::ustring dmethod;
-
- };
+};
//EPD related parameters.
class EPDParams{
-public:
- bool enabled;
- double Strength;
- double EdgeStopping;
- double Scale;
- int ReweightingIterates;
+ public:
+ bool enabled;
+ double Strength;
+ double EdgeStopping;
+ double Scale;
+ int ReweightingIterates;
};
/**
diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc
index 2ba94b635..85099a9ea 100644
--- a/rtengine/refreshmap.cc
+++ b/rtengine/refreshmap.cc
@@ -225,7 +225,8 @@ ALLNORAW, // EvDPDNperform
ALLNORAW, //EvDPDNmet
DEMOSAIC, // EvDemosaicLMMSEIter
LUMINANCECURVE, // EvCATbadpix
-LUMINANCECURVE // EvCATAutoadap
+LUMINANCECURVE, // EvCATAutoadap
+DEFRINGE // EvPFCurve,
//LUMINANCECURVE // EvCATsharpcie
diff --git a/rtgui/curveeditor.cc b/rtgui/curveeditor.cc
index 05ba0dd2c..7d8b9cf11 100644
--- a/rtgui/curveeditor.cc
+++ b/rtgui/curveeditor.cc
@@ -97,7 +97,8 @@ void DiagonalCurveEditor::getRangeDefaultMilestones(double &m1, double &m2, doub
FlatCurveEditor::FlatCurveEditor (Glib::ustring text, CurveEditorGroup* ceGroup, CurveEditorSubGroup* ceSubGroup, bool isPeriodic) : CurveEditor::CurveEditor(text, static_cast(ceGroup), ceSubGroup) {
- periodic = isPeriodic;
+ periodic = isPeriodic;
+ identityValue = 0.5;
// Order set in the same order than "enum FlatCurveType". Shouldn't change, for compatibility reason
curveType->addEntry("curveType-flatLinear.png", M("CURVEEDITOR_LINEAR")); // 0 Linear
diff --git a/rtgui/curveeditor.h b/rtgui/curveeditor.h
index 6167fa8ec..129d5b83b 100644
--- a/rtgui/curveeditor.h
+++ b/rtgui/curveeditor.h
@@ -107,6 +107,8 @@ class CurveEditor {
bool openIfNonlinear(); // Open up the curve if it has modifications and it's not already opened
void setCurve (const std::vector& p);
+ virtual void setIdentityValue (const double iValue=0.5) {};
+ virtual double getIdentityValue () { return 0.5; };
virtual std::vector getCurve () = 0;
void setTooltip(Glib::ustring ttip);
@@ -157,9 +159,12 @@ class FlatCurveEditor : public CurveEditor {
// reflects the buttonType active selection ; used as a pre-'selectionChange' reminder value
std::vector controlPointsCurveEd;
bool periodic;
+ double identityValue;
public:
FlatCurveEditor (Glib::ustring text, CurveEditorGroup* ceGroup, CurveEditorSubGroup* ceSubGroup, bool isPeriodic = true);
+ virtual void setIdentityValue (const double iValue=0.5) { identityValue = iValue; }
+ virtual double getIdentityValue () { return identityValue; };
std::vector getCurve ();
};
diff --git a/rtgui/curveeditorgroup.cc b/rtgui/curveeditorgroup.cc
index b03676cbe..da795b26f 100644
--- a/rtgui/curveeditorgroup.cc
+++ b/rtgui/curveeditorgroup.cc
@@ -280,7 +280,7 @@ void CurveEditorGroup::curveChanged () {
*/
void CurveEditorGroup::curveResetPressed () {
if (displayedCurve) {
- if (displayedCurve->subGroup->curveReset(displayedCurve->selected)) {
+ if (displayedCurve->subGroup->curveReset(displayedCurve->selected, displayedCurve->getIdentityValue())) {
curveChanged();
}
}
diff --git a/rtgui/curveeditorgroup.h b/rtgui/curveeditorgroup.h
index 76c5d484d..a14f2d28f 100644
--- a/rtgui/curveeditorgroup.h
+++ b/rtgui/curveeditorgroup.h
@@ -129,7 +129,7 @@ protected:
Glib::ustring outputFile ();
Glib::ustring inputFile ();
- virtual bool curveReset (int cType) = 0; // Reset a curve editor, return TRUE if successful (curve changed)
+ virtual bool curveReset (int cType, double iValue) = 0; // Reset a curve editor, return TRUE if successful (curve changed)
virtual void storeCurveValues (CurveEditor* ce, const std::vector& p) = 0;
virtual void storeDisplayedCurve () = 0;
virtual void restoreDisplayedHistogram() {};
diff --git a/rtgui/defringe.cc b/rtgui/defringe.cc
index 3fc98d497..a99dd0f18 100644
--- a/rtgui/defringe.cc
+++ b/rtgui/defringe.cc
@@ -26,6 +26,13 @@ using namespace rtengine::procparams;
Defringe::Defringe () : Gtk::VBox(), FoldableToolPanel(this) {
set_border_width(4);
+ std::vector bottomMilestones;
+ float R, G, B;
+ for (int i=0; i<7; i++) {
+ float x = float(i)*(1.0f/6.0);
+ Color::hsv2rgb01(x, 0.5f, 0.5f, R, G, B);
+ bottomMilestones.push_back( GradientMilestone(double(x), double(R), double(G), double(B)) );
+ }
enabled = Gtk::manage (new Gtk::CheckButton (M("GENERAL_ENABLED")));
enabled->set_active (false);
@@ -38,6 +45,14 @@ Defringe::Defringe () : Gtk::VBox(), FoldableToolPanel(this) {
hsep1->show ();
pack_start (*hsep1);
+ curveEditorPF = new CurveEditorGroup (options.lastPFCurvesDir);
+ curveEditorPF->setCurveListener (this);
+ chshape = static_cast(curveEditorPF->addCurve(CT_Flat, M("TP_PFCURVE_CURVEEDITOR_CH")));
+ chshape->setTooltip(M("TP_PFCURVE_CURVEEDITOR_CH_TOOLTIP"));
+ chshape->setIdentityValue(0.);
+ chshape->setBottomBarBgGradient(bottomMilestones);
+ chshape->setCurveColorProvider(this, 1);
+
enaConn = enabled->signal_toggled().connect( sigc::mem_fun(*this, &Defringe::enabledChanged) );
//edgConn = enabled->signal_toggled().connect( sigc::mem_fun(*this, &Defringe::edgeChanged) );
@@ -50,6 +65,24 @@ Defringe::Defringe () : Gtk::VBox(), FoldableToolPanel(this) {
pack_start (*radius);
pack_start (*threshold);
+ curveEditorPF->curveListComplete();
+
+ pack_start (*curveEditorPF, Gtk::PACK_SHRINK, 4);
+}
+
+Defringe::~Defringe () {
+ delete curveEditorPF;
+}
+
+void Defringe::colorForValue (double valX, double valY, int callerId, ColorCaller *caller) {
+
+ float R, G, B;
+ if (callerId == 1) { // ch
+ Color::hsv2rgb01(float(valX), float(valY), 0.5f, R, G, B);
+ }
+ caller->ccRed = double(R);
+ caller->ccGreen = double(G);
+ caller->ccBlue = double(B);
}
void Defringe::read (const ProcParams* pp, const ParamsEdited* pedited) {
@@ -57,33 +90,43 @@ void Defringe::read (const ProcParams* pp, const ParamsEdited* pedited) {
disableListener ();
if (pedited) {
- radius->setEditedState (pedited->defringe.radius ? Edited : UnEdited);
- threshold->setEditedState (pedited->defringe.threshold ? Edited : UnEdited);
+ radius->setEditedState ( pedited->defringe.radius ? Edited : UnEdited);
+ threshold->setEditedState ( pedited->defringe.threshold ? Edited : UnEdited);
enabled->set_inconsistent (!pedited->defringe.enabled);
+ chshape->setUnChanged (!pedited->defringe.huecurve);
}
enaConn.block (true);
enabled->set_active (pp->defringe.enabled);
enaConn.block (false);
-
+
lastEnabled = pp->defringe.enabled;
radius->setValue (pp->defringe.radius);
- threshold->setValue (pp->defringe.threshold);
+ threshold->setValue (pp->defringe.threshold);
+ chshape->setCurve (pp->defringe.huecurve);
enableListener ();
}
+
+void Defringe::autoOpenCurve () {
+ // WARNING: The following line won't work, since linear is a flat curve at 0.
+ chshape->openIfNonlinear();
+}
+
void Defringe::write (ProcParams* pp, ParamsEdited* pedited) {
- pp->defringe.radius = radius->getValue ();
+ pp->defringe.radius = radius->getValue ();
pp->defringe.threshold = (int)threshold->getValue ();
- pp->defringe.enabled = enabled->get_active();
+ pp->defringe.enabled = enabled->get_active();
+ pp->defringe.huecurve = chshape->getCurve ();
if (pedited) {
- pedited->defringe.radius = radius->getEditedState ();
+ pedited->defringe.radius = radius->getEditedState ();
pedited->defringe.threshold = threshold->getEditedState ();
- pedited->defringe.enabled = !enabled->get_inconsistent();
+ pedited->defringe.enabled = !enabled->get_inconsistent();
+ pedited->defringe.huecurve = !chshape->isUnChanged ();
}
}
@@ -94,13 +137,17 @@ void Defringe::setDefaults (const ProcParams* defParams, const ParamsEdited* ped
if (pedited) {
radius->setDefaultEditedState (pedited->defringe.radius ? Edited : UnEdited);
- threshold->setDefaultEditedState (pedited->defringe.threshold ? Edited : UnEdited);
- }
+ threshold->setDefaultEditedState (pedited->defringe.threshold ? Edited : UnEdited);
+ }
else {
radius->setDefaultEditedState (Irrelevant);
- threshold->setDefaultEditedState (Irrelevant);
+ threshold->setDefaultEditedState (Irrelevant);
}
}
+void Defringe::curveChanged () {
+
+ if (listener && enabled->get_active()) listener->panelChanged (EvPFCurve, M("HISTORY_CUSTOMCURVE"));
+}
void Defringe::adjusterChanged (Adjuster* a, double newval) {
diff --git a/rtgui/defringe.h b/rtgui/defringe.h
index 0030cc064..9edbe644c 100644
--- a/rtgui/defringe.h
+++ b/rtgui/defringe.h
@@ -22,10 +22,17 @@
#include
#include "adjuster.h"
#include "toolpanel.h"
+#include "guiutils.h"
+#include "curveeditor.h"
+#include "curveeditorgroup.h"
+#include "colorprovider.h"
-class Defringe : public Gtk::VBox, public AdjusterListener, public FoldableToolPanel {
+class Defringe : public Gtk::VBox, public AdjusterListener, public FoldableToolPanel, public CurveListener, public ColorProvider{
protected:
+ CurveEditorGroup* curveEditorPF;
+ FlatCurveEditor* chshape;
+
Adjuster* radius;
Adjuster* threshold;
Gtk::CheckButton* enabled;
@@ -36,14 +43,17 @@ class Defringe : public Gtk::VBox, public AdjusterListener, public FoldableToolP
public:
Defringe ();
-
+ ~Defringe ();
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 autoOpenCurve ();
+ void curveChanged ();
void adjusterChanged (Adjuster* a, double newval);
- void enabledChanged ();
+ void enabledChanged ();
+ virtual void colorForValue (double valX, double valY, int callerId, ColorCaller* caller);
};
diff --git a/rtgui/diagonalcurveeditorsubgroup.cc b/rtgui/diagonalcurveeditorsubgroup.cc
index d4193fdfa..12a822a1c 100644
--- a/rtgui/diagonalcurveeditorsubgroup.cc
+++ b/rtgui/diagonalcurveeditorsubgroup.cc
@@ -634,7 +634,7 @@ void DiagonalCurveEditorSubGroup::removeEditor () {
removeIfThere (parent, NURBSCurveBox, false);
}
-bool DiagonalCurveEditorSubGroup::curveReset(int cType) {
+bool DiagonalCurveEditorSubGroup::curveReset(int cType, double iValue) {
switch ((DiagonalCurveType) cType) {
case (DCT_NURBS) : // = Control cage
NURBSCurve->reset ();
diff --git a/rtgui/diagonalcurveeditorsubgroup.h b/rtgui/diagonalcurveeditorsubgroup.h
index d4fac0949..71a46e959 100644
--- a/rtgui/diagonalcurveeditorsubgroup.h
+++ b/rtgui/diagonalcurveeditorsubgroup.h
@@ -75,7 +75,7 @@ protected:
void loadPressed ();
void copyPressed ();
void pastePressed ();
- bool curveReset (int cType);
+ bool curveReset (int cType, double iValue);
void removeEditor ();
const std::vector getCurveFromGUI (int type);
void shcChanged ();
diff --git a/rtgui/flatcurveeditorsubgroup.cc b/rtgui/flatcurveeditorsubgroup.cc
index 926d1ab8e..a453b7bdb 100644
--- a/rtgui/flatcurveeditorsubgroup.cc
+++ b/rtgui/flatcurveeditorsubgroup.cc
@@ -357,10 +357,10 @@ void FlatCurveEditorSubGroup::removeEditor () {
removeIfThere (parent, CPointsCurveBox, false);
}
-bool FlatCurveEditorSubGroup::curveReset(int cType) {
+bool FlatCurveEditorSubGroup::curveReset(int cType, double iValue) {
switch ((FlatCurveType) cType) {
case (FCT_MinMaxCPoints) : // = Control cage
- CPointsCurve->reset ();
+ CPointsCurve->reset (iValue);
return true;
break;
/*case (FCT_Parametric) :
diff --git a/rtgui/flatcurveeditorsubgroup.h b/rtgui/flatcurveeditorsubgroup.h
index 3a584006b..95eb90b4b 100644
--- a/rtgui/flatcurveeditorsubgroup.h
+++ b/rtgui/flatcurveeditorsubgroup.h
@@ -55,7 +55,7 @@ protected:
void loadPressed ();
void copyPressed ();
void pastePressed ();
- bool curveReset (int cType);
+ bool curveReset (int cType, double iValue);
void removeEditor ();
const std::vector getCurveFromGUI (int type);
};
diff --git a/rtgui/mycurve.h b/rtgui/mycurve.h
index 4d33e21c5..e14b58d1d 100644
--- a/rtgui/mycurve.h
+++ b/rtgui/mycurve.h
@@ -113,7 +113,7 @@ class MyCurve : public Gtk::DrawingArea, public BackBuffer, public ColorCaller {
virtual std::vector getPoints () = 0;
virtual void setPoints (const std::vector& p) = 0;
virtual bool handleEvents (GdkEvent* event) = 0;
- virtual void reset () = 0;
+ virtual void reset (double identityValue=0.5) = 0;
static int getBarWidth() { return options.slimUI ? CBAR_WIDTH_SLIM : CBAR_WIDTH_STD; }
};
diff --git a/rtgui/mydiagonalcurve.cc b/rtgui/mydiagonalcurve.cc
index 9456142e7..9399e9e86 100644
--- a/rtgui/mydiagonalcurve.cc
+++ b/rtgui/mydiagonalcurve.cc
@@ -810,7 +810,7 @@ void MyDiagonalCurve::updateBackgroundHistogram (LUTu & hist) {
}
-void MyDiagonalCurve::reset() {
+void MyDiagonalCurve::reset(double identityValue) {
switch (curve.type) {
case DCT_Spline :
diff --git a/rtgui/mydiagonalcurve.h b/rtgui/mydiagonalcurve.h
index 5ab2ed35a..aebd01b08 100644
--- a/rtgui/mydiagonalcurve.h
+++ b/rtgui/mydiagonalcurve.h
@@ -77,7 +77,7 @@ class MyDiagonalCurve : public MyCurve {
void setType (DiagonalCurveType t);
bool handleEvents (GdkEvent* event);
void setActiveParam (int ac);
- void reset ();
+ void reset (double identityValue=0.5);
void updateBackgroundHistogram (LUTu & hist);
};
diff --git a/rtgui/myflatcurve.cc b/rtgui/myflatcurve.cc
index 9687d9350..8ef935673 100644
--- a/rtgui/myflatcurve.cc
+++ b/rtgui/myflatcurve.cc
@@ -1238,12 +1238,12 @@ void MyFlatCurve::setType (FlatCurveType t) {
setDirty(true);
}
-void MyFlatCurve::reset() {
+void MyFlatCurve::reset(double identityValue) {
calcDimensions();
switch (curve.type) {
case FCT_MinMaxCPoints :
- defaultCurve();
+ defaultCurve(identityValue);
lit_point = -1;
curveIsDirty = true;
break;
@@ -1256,7 +1256,7 @@ void MyFlatCurve::reset() {
draw();
}
-void MyFlatCurve::defaultCurve () {
+void MyFlatCurve::defaultCurve (double iVal) {
curve.x.resize(6);
curve.y.resize(6);
@@ -1266,7 +1266,7 @@ void MyFlatCurve::defaultCurve () {
// Point for RGBCMY colors
for (int i=0; i<6; i++) {
curve.x.at(i) = (1./6.)*i;
- curve.y.at(i) = 0.5;
+ curve.y.at(i) = iVal;
curve.leftTangent.at(i) = 0.35;
curve.rightTangent.at(i) = 0.35;
}
diff --git a/rtgui/myflatcurve.h b/rtgui/myflatcurve.h
index dc6a2c8b8..7f9db613f 100644
--- a/rtgui/myflatcurve.h
+++ b/rtgui/myflatcurve.h
@@ -103,7 +103,7 @@ class MyFlatCurve : public MyCurve {
void draw ();
void movePoint(bool moveX, bool moveY);
- void defaultCurve ();
+ void defaultCurve (double iVal=0.5);
void interpolate ();
void getCursorPosition(GdkEvent* event);
void getMouseOverArea ();
@@ -118,7 +118,7 @@ class MyFlatCurve : public MyCurve {
void setPoints (const std::vector& p);
void setType (FlatCurveType t);
bool handleEvents (GdkEvent* event);
- void reset ();
+ void reset (double identityValue=0.5);
//void updateBackgroundHistogram (unsigned int* hist);
};
diff --git a/rtgui/options.cc b/rtgui/options.cc
index c9a108700..ca9aa2abf 100644
--- a/rtgui/options.cc
+++ b/rtgui/options.cc
@@ -149,6 +149,8 @@ void Options::updatePaths() {
lastRgbCurvesDir = preferredPath;
if (lastLabCurvesDir.empty() || !safe_file_test (lastLabCurvesDir, Glib::FILE_TEST_EXISTS) || !safe_file_test (lastLabCurvesDir, Glib::FILE_TEST_IS_DIR))
lastLabCurvesDir = preferredPath;
+ if (lastPFCurvesDir.empty() || !safe_file_test (lastPFCurvesDir, Glib::FILE_TEST_EXISTS) || !safe_file_test (lastPFCurvesDir, Glib::FILE_TEST_IS_DIR))
+ lastPFCurvesDir = preferredPath;
if (lastHsvCurvesDir.empty() || !safe_file_test (lastHsvCurvesDir, Glib::FILE_TEST_EXISTS) || !safe_file_test (lastHsvCurvesDir, Glib::FILE_TEST_IS_DIR))
lastHsvCurvesDir = preferredPath;
if (lastToneCurvesDir.empty() || !safe_file_test (lastToneCurvesDir, Glib::FILE_TEST_EXISTS) || !safe_file_test (lastToneCurvesDir, Glib::FILE_TEST_IS_DIR))
@@ -472,6 +474,7 @@ void Options::setDefaults () {
// at the end of the "updatePaths" method.
lastRgbCurvesDir = "";
lastLabCurvesDir = "";
+ lastPFCurvesDir = "";
lastHsvCurvesDir = "";
lastToneCurvesDir = "";
lastVibranceCurvesDir = "";
@@ -750,6 +753,7 @@ if (keyFile.has_group ("Dialogs")) {
safeDirGet(keyFile, "Dialogs", "LastFlatfieldDir", lastFlatfieldDir);
safeDirGet(keyFile, "Dialogs", "LastRgbCurvesDir", lastRgbCurvesDir);
safeDirGet(keyFile, "Dialogs", "LastLabCurvesDir", lastLabCurvesDir);
+ safeDirGet(keyFile, "Dialogs", "LastPFCurvesDir", lastPFCurvesDir);
safeDirGet(keyFile, "Dialogs", "LastHsvCurvesDir", lastHsvCurvesDir);
safeDirGet(keyFile, "Dialogs", "LastToneCurvesDir", lastToneCurvesDir);
safeDirGet(keyFile, "Dialogs", "LastVibranceCurvesDir", lastVibranceCurvesDir);
@@ -998,6 +1002,7 @@ int Options::saveToFile (Glib::ustring fname) {
keyFile.set_string ("Dialogs", "LastFlatfieldDir", lastFlatfieldDir);
keyFile.set_string ("Dialogs", "LastRgbCurvesDir", lastRgbCurvesDir);
keyFile.set_string ("Dialogs", "LastLabCurvesDir", lastLabCurvesDir);
+ keyFile.set_string ("Dialogs", "LastPFCurvesDir", lastPFCurvesDir);
keyFile.set_string ("Dialogs", "LastHsvCurvesDir", lastHsvCurvesDir);
keyFile.set_string ("Dialogs", "LastToneCurvesDir", lastToneCurvesDir);
keyFile.set_string ("Dialogs", "LastVibranceCurvesDir", lastVibranceCurvesDir);
diff --git a/rtgui/options.h b/rtgui/options.h
index 57f32778e..bf4bbc49a 100644
--- a/rtgui/options.h
+++ b/rtgui/options.h
@@ -245,6 +245,7 @@ class Options {
Glib::ustring lastFlatfieldDir;
Glib::ustring lastRgbCurvesDir;
Glib::ustring lastLabCurvesDir;
+ Glib::ustring lastPFCurvesDir;
Glib::ustring lastHsvCurvesDir;
Glib::ustring lastToneCurvesDir;
Glib::ustring lastVibranceCurvesDir;
diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc
index fe8729e69..261a61fcd 100644
--- a/rtgui/paramsedited.cc
+++ b/rtgui/paramsedited.cc
@@ -143,6 +143,7 @@ void ParamsEdited::set (bool v) {
defringe.enabled = v;
defringe.radius = v;
defringe.threshold = v;
+ defringe.huecurve = v;
impulseDenoise.enabled = v;
impulseDenoise.thresh = v;
dirpyrDenoise.enabled = v;
@@ -385,6 +386,7 @@ void ParamsEdited::initFrom (const std::vector
defringe.enabled = defringe.enabled && p.defringe.enabled == other.defringe.enabled;
defringe.radius = defringe.radius && p.defringe.radius == other.defringe.radius;
defringe.threshold = defringe.threshold && p.defringe.threshold == other.defringe.threshold;
+ defringe.huecurve = defringe.huecurve && p.defringe.huecurve == other.defringe.huecurve;
impulseDenoise.enabled = impulseDenoise.enabled && p.impulseDenoise.enabled == other.impulseDenoise.enabled;
impulseDenoise.thresh = impulseDenoise.thresh && p.impulseDenoise.thresh == other.impulseDenoise.thresh;
@@ -601,9 +603,10 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
//if (colorDenoise.enabled) toEdit.colorDenoise.enabled = mods.colorDenoise.enabled;
//if (colorDenoise.amount) toEdit.colorDenoise.amount = mods.colorDenoise.amount;
- if (defringe.enabled) toEdit.defringe.enabled = mods.defringe.enabled;
- if (defringe.radius) toEdit.defringe.radius = mods.defringe.radius;
- if (defringe.threshold) toEdit.defringe.threshold = mods.defringe.threshold;
+ if (defringe.enabled) toEdit.defringe.enabled = mods.defringe.enabled;
+ if (defringe.radius) toEdit.defringe.radius = mods.defringe.radius;
+ if (defringe.threshold) toEdit.defringe.threshold = mods.defringe.threshold;
+ if (defringe.huecurve) toEdit.defringe.huecurve = mods.defringe.huecurve;
if (colorappearance.curve) toEdit.colorappearance.curve = mods.colorappearance.curve;
if (colorappearance.curve2) toEdit.colorappearance.curve2 = mods.colorappearance.curve2;
diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h
index 7232f97f7..5c2514877 100644
--- a/rtgui/paramsedited.h
+++ b/rtgui/paramsedited.h
@@ -173,6 +173,7 @@ public:
bool enabled;
bool radius;
bool threshold;
+ bool huecurve;
};
class ImpulseDenoiseParamsEdited {
diff --git a/rtgui/ppversion.h b/rtgui/ppversion.h
index 8f40bda20..737016de3 100644
--- a/rtgui/ppversion.h
+++ b/rtgui/ppversion.h
@@ -2,7 +2,7 @@
#define _PPVERSION_
// This number have to be incremented whenever the PP3 file format is modified
-#define PPVERSION 307
+#define PPVERSION 308
#define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified
/* Log of version changes