Solving issue 1894: "White balance adjustements" ; Warning: it is recommended to clear the "cache\data" folder
This commit is contained in:
parent
6ae0dd0166
commit
1a6619a035
BIN
rtdata/images/Dark/actions/wb-water.png
Normal file
BIN
rtdata/images/Dark/actions/wb-water.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 648 B |
BIN
rtdata/images/Light/actions/wb-water.png
Normal file
BIN
rtdata/images/Light/actions/wb-water.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 644 B |
@ -443,6 +443,7 @@ HISTORY_MSG_204;Niveau d'amélioration LMMSE
|
|||||||
HISTORY_MSG_205;CAM02 pixels chauds/morts
|
HISTORY_MSG_205;CAM02 pixels chauds/morts
|
||||||
HISTORY_MSG_206;CAT02 - Adapt. auto à la scène
|
HISTORY_MSG_206;CAT02 - Adapt. auto à la scène
|
||||||
HISTORY_MSG_207;A.C. - Teinte
|
HISTORY_MSG_207;A.C. - Teinte
|
||||||
|
HISTORY_MSG_208;Égaliseur Bleu/Rouge
|
||||||
HISTORY_NEWSNAPSHOTAS;Sous...
|
HISTORY_NEWSNAPSHOTAS;Sous...
|
||||||
HISTORY_NEWSNAPSHOT;Ajouter
|
HISTORY_NEWSNAPSHOT;Ajouter
|
||||||
HISTORY_NEWSNAPSHOT_TOOLTIP;Raccourci: <b>Alt-s</b>
|
HISTORY_NEWSNAPSHOT_TOOLTIP;Raccourci: <b>Alt-s</b>
|
||||||
@ -554,7 +555,7 @@ MAIN_TAB_DETAIL;Détail
|
|||||||
MAIN_TAB_DETAIL_TOOLTIP;<b>Alt-d</b>
|
MAIN_TAB_DETAIL_TOOLTIP;<b>Alt-d</b>
|
||||||
MAIN_TAB_DEVELOP; Développer
|
MAIN_TAB_DEVELOP; Développer
|
||||||
MAIN_TAB_EXIF;EXIF
|
MAIN_TAB_EXIF;EXIF
|
||||||
MAIN_TAB_EXPORT; Exporter
|
MAIN_TAB_EXPORT;Export Rapide
|
||||||
MAIN_TAB_EXPOSURE;Exposition
|
MAIN_TAB_EXPOSURE;Exposition
|
||||||
MAIN_TAB_EXPOSURE_TOOLTIP;<b>Alt-e</b>
|
MAIN_TAB_EXPOSURE_TOOLTIP;<b>Alt-e</b>
|
||||||
MAIN_TAB_FILTER; Filtrer
|
MAIN_TAB_FILTER; Filtrer
|
||||||
@ -787,8 +788,8 @@ PREFERENCES_MULTITABDUALMON;Éditeurs multiple, si possible sur un second monite
|
|||||||
PREFERENCES_MULTITAB;Éditeurs multiple
|
PREFERENCES_MULTITAB;Éditeurs multiple
|
||||||
PREFERENCES_OUTDIRFOLDERHINT;Place les images traitées dans le dossier selectionné
|
PREFERENCES_OUTDIRFOLDERHINT;Place les images traitées dans le dossier selectionné
|
||||||
PREFERENCES_OUTDIRFOLDER;Dossier de sauvegarde
|
PREFERENCES_OUTDIRFOLDER;Dossier de sauvegarde
|
||||||
PREFERENCES_OUTDIRHINT;<i>Vous pouvez utiliser les paramètres de chaîne formatées suivants:</i>\n<b>%f, %d1, %d2, ..., %p1, %p2, ...</b>\n<i>\nCes paramètres de chaînes formatées se réfèrent aux dossiers et sous-chemins du chemin du fichier RAW.\n\nPar exemple, si </i> <b>/home/tom/image/02-09-2006/dsc0012.nef</b><i>a été ouvert, la signification des paramètres est:\n</i><b>%f=dsc0012, %d1=02-09-2006, %d2=image, ...\n%p1=/home/tom/image/02-09-2006, %p2=/home/tom/image, p3=/home/tom, ...\n</b><i>\nSi vous voulez enregistrer l'image de sortie là où se trouve l'originale, écrivez:\n</i><b>%p1/%f\n</b><i>\nSi vous voulez enregistrer l'image de sortie dans un dossier 'convertis' situé dans le dossier de l'originale, écrivez:\n</i><b>%p1/convertis/%f\n</b><i>\nSi vous voulez enregistrer l'image de sortie dans le dossier '/home/tom/convertis' en conservant le même sous-dossier de dates, écrivez:\n</i><b>%p2/convertis/%d1/%f</b>
|
PREFERENCES_OUTDIRHINT;Vous pouvez utiliser les paramètres de chaîne formatées suivants:\n<b>%f</b>, <b>%d1</b>, <b>%d2</b>, ..., <b>%p1</b>, <b>%p2</b>, ..., <b>%r</b>\n\nCes chaînes de formattage se réfèrent aux différentes parties du chemin de la photo ou certains de ses attributs.\n\nPar exemple, si la photo en cours de traitement a le chemin suivant:\n<b><i>/home/tom/image/02-09-2006/dsc0012.nef</i></b>\nla signification des chaînes de formattage est:\n<b>%d4</b> = <i>home</i>\n<b>%d3</b> = <i>tom</i>\n<b>%d2</b> = <i>photos</i>\n<b>%d1</b> = <i>2010-10-31</i>\n<b>%f</b> = <i>dsc0042</i>\n<b>%p1</b> = <i>/home/tom/photos/2010-10-31/</i>\n<b>%p2</b> = <i>/home/tom/photos/</i>\n<b>%p3</b> = <i>/home/tom/</i>\n<b>%p4</b> = <i>/home/</i>\n\n<b>%r</b> sera remplacé par le rang de la photo. Si la photo n'a pas de rang, %r sera remplacé par '0'. Si la photo est dans la corbeille de RawTherapee, %r sera remplacé par 'x'.\n\nSi vous voulez enregistrer l'image de sortie là où se trouve l'originale, écrivez:\n<b>%p1/%f</b>\n\nSi vous voulez enregistrer l'image de sortie dans un dossier nommé "<i>convertis</i>" situé dans le dossier de l'originale, écrivez:\n<b>%p1/convertis/%f</b>\n\nSi vous voulez enregistrer l'image de sortie dans un dossier nommé "<i>/home/tom/photos/convertis/2010-10-31</i>", écrivez:\n<b>%p2/convertis/%d1/%f</b>
|
||||||
PREFERENCES_OUTDIRTEMPLATEHINT;<i>Vous pouvez utiliser les paramètres de chaîne formatées suivants:</i>\n<b>%f, %d1, %d2, ..., %p1, %p2, ...</b>\n<i>\nCes paramètres de chaînes formatées se réfèrent aux dossiers et sous-chemins du chemin du fichier RAW.\n\nPar exemple, si </i> <b>/home/tom/image/02-09-2006/dsc0012.nef</b><i>a été ouvert, la signification des paramètres est:\n</i><b>%f=dsc0012, %d1=02-09-2006, %d2=image, ...\n%p1=/home/tom/image/02-09-2006, %p2=/home/tom/image, p3=/home/tom, ...\n</b><i>\nSi vous voulez enregistrer l'image de sortie là où se trouve l'originale, écrivez:\n</i><b>%p1/%f\n</b><i>\nSi vous voulez enregistrer l'image de sortie dans un dossier 'convertis' situé dans le dossier de l'originale, écrivez:\n</i><b>%p1/convertis/%f\n</b><i>\nSi vous voulez enregistrer l'image de sortie dans le dossier '/home/tom/convertis' en conservant le même sous-dossier de dates, écrivez:\n</i><b>%p2/convertis/%d1/%f</b>
|
PREFERENCES_OUTDIRTEMPLATEHINT;Vous pouvez utiliser les paramètres de chaîne formatées suivants:\n<b>%f</b>, <b>%d1</b>, <b>%d2</b>, ..., <b>%p1</b>, <b>%p2</b>, ..., <b>%r</b>, <b>%s1</b>, <b>%s2</b>, ...\n\nCes chaînes de formattage se réfèrent aux différentes parties du chemin de la photo, certains de ses attributs ou un numéro de séquence arbitraire dans le traitement par lot.\n\nPar exemple, si la photo en cours de traitement a le chemin suivant:\n<b><i>/home/tom/image/02-09-2006/dsc0012.nef</i></b>\nla signification des chaînes de formattage est:\n<b>%d4</b> = <i>home</i>\n<b>%d3</b> = <i>tom</i>\n<b>%d2</b> = <i>photos</i>\n<b>%d1</b> = <i>2010-10-31</i>\n<b>%f</b> = <i>dsc0042</i>\n<b>%p1</b> = <i>/home/tom/photos/2010-10-31/</i>\n<b>%p2</b> = <i>/home/tom/photos/</i>\n<b>%p3</b> = <i>/home/tom/</i>\n<b>%p4</b> = <i>/home/</i>\n\n<b>%r</b> sera remplacé par le rang de la photo. Si la photo n'a pas de rang, %r sera remplacé par '0'. Si la photo est dans la corbeille de RawTherapee, %r sera remplacé par 'x'.\n\n<b>%s1</b>, <b>%s2</b>, etc. sera remplacé par un index de séquence constitué de 1 à 9 chiffre. L'index de la séquence commencera à 1 à chaque fois que le file de traitement est démarrée, et est incrémenté de 1 pour chaque image traitée.\n\nSi vous voulez enregistrer l'image de sortie là où se trouve l'originale, écrivez:\n<b>%p1/%f</b>\n\nSi vous voulez enregistrer l'image de sortie dans un dossier nommé "<i>convertis</i>" situé dans le dossier de l'originale, écrivez:\n<b>%p1/convertis/%f</b>\n\nSi vous voulez enregistrer l'image de sortie dans un dossier nommé "<i>/home/tom/photos/convertis/2010-10-31</i>", écrivez:\n<b>%p2/convertis/%d1/%f</b>
|
||||||
PREFERENCES_OUTDIRTEMPLATE;Utiliser le modèle
|
PREFERENCES_OUTDIRTEMPLATE;Utiliser le modèle
|
||||||
PREFERENCES_OUTDIR;Dossier de sortie
|
PREFERENCES_OUTDIR;Dossier de sortie
|
||||||
PREFERENCES_OVERLAY_FILENAMES;Superposer les noms de fichier sur les vignettes
|
PREFERENCES_OVERLAY_FILENAMES;Superposer les noms de fichier sur les vignettes
|
||||||
@ -979,11 +980,11 @@ TP_COLORAPP_GAMUT_TOOLTIP;Permet le controle du gamut en mode Lab
|
|||||||
TP_COLORAPP_HUE;Teinte (h)
|
TP_COLORAPP_HUE;Teinte (h)
|
||||||
TP_COLORAPP_HUE_TOOLTIP;Teinte (h) - angle entre 0° et 360°
|
TP_COLORAPP_HUE_TOOLTIP;Teinte (h) - angle entre 0° et 360°
|
||||||
TP_COLORAPP_LABEL;Apparence de la Couleur (CIECAM02)
|
TP_COLORAPP_LABEL;Apparence de la Couleur (CIECAM02)
|
||||||
TP_COLORAPP_LABEL_CAM02;Édition de l'image avec CIECAM
|
TP_COLORAPP_LABEL_CAM02;Édition de l'image avec CIE-CAM 2002
|
||||||
TP_COLORAPP_LABEL_SCENE;Conditions de la scène
|
TP_COLORAPP_LABEL_SCENE;Conditions de la scène
|
||||||
TP_COLORAPP_LABEL_VIEWING;Conditions de visionnage
|
TP_COLORAPP_LABEL_VIEWING;Conditions de visionnage
|
||||||
TP_COLORAPP_LIGHT;Luminosité (J)
|
TP_COLORAPP_LIGHT;Luminosité (J)
|
||||||
TP_COLORAPP_LIGHT_TOOLTIP;Luminosité dans CIECAM02 est différent de Lab et RVB
|
TP_COLORAPP_LIGHT_TOOLTIP;Luminosité dans CIECAM02 est différent de celui de Lab et RVB
|
||||||
TP_COLORAPP_MODEL;Modèle de Point Blanc
|
TP_COLORAPP_MODEL;Modèle de Point Blanc
|
||||||
TP_COLORAPP_MODEL_TOOLTIP;<b>BB [RT] + [sortie]:</b>\nLa BB de RT est utilisée pour la scène, CIECAM est réglé sur D50, le blanc du périphérique de sortie utilise la valeur réglée dans Préférences\n\n<b>BB [RT+CAT02] + [sortie]:</b>\nLes réglages de BB de RT sont utilisés par CAT02 et le blanc du périphérique de sortie utilise la valeur réglée dans Préférences
|
TP_COLORAPP_MODEL_TOOLTIP;<b>BB [RT] + [sortie]:</b>\nLa BB de RT est utilisée pour la scène, CIECAM est réglé sur D50, le blanc du périphérique de sortie utilise la valeur réglée dans Préférences\n\n<b>BB [RT+CAT02] + [sortie]:</b>\nLes réglages de BB de RT sont utilisés par CAT02 et le blanc du périphérique de sortie utilise la valeur réglée dans Préférences
|
||||||
TP_COLORAPP_RSTPRO;Protection des tons chairs et rouges
|
TP_COLORAPP_RSTPRO;Protection des tons chairs et rouges
|
||||||
@ -1006,8 +1007,8 @@ TP_COLORAPP_TCMODE_LABEL2;Courbe mode 2
|
|||||||
TP_COLORAPP_TCMODE_LABEL3;Courbe chroma mode
|
TP_COLORAPP_TCMODE_LABEL3;Courbe chroma mode
|
||||||
TP_COLORAPP_TCMODE_LIGHTNESS;Luminosité
|
TP_COLORAPP_TCMODE_LIGHTNESS;Luminosité
|
||||||
TP_COLORAPP_TCMODE_SATUR;Saturation
|
TP_COLORAPP_TCMODE_SATUR;Saturation
|
||||||
TP_COLORAPP_TONECIE;Compression tonale avec brillance Q CIECAM
|
TP_COLORAPP_TONECIE;Compression Tonale utilisant la Brillance CIECAM02 (Q)
|
||||||
TP_COLORAPP_TONECIE_TOOLTIP;Si vous choisissez cette option, tous les réglages "compression tonale" (si activé) seront utilisés par CIECAM
|
TP_COLORAPP_TONECIE_TOOLTIP;Si cette option est désactivée, la compression tonale est faite dans l'espace Lab.\nSi cette options est activée, la compression tonale est faite en utilisant CIECAM02.\nL'outil Compression Tonale doit être activé pour que ce réglage prenne effet
|
||||||
TP_COLORAPP_WBCAM;BB [RT+CAT02] + [sortie]
|
TP_COLORAPP_WBCAM;BB [RT+CAT02] + [sortie]
|
||||||
TP_COLORAPP_WBRT;BB [RT] + [sortie]
|
TP_COLORAPP_WBRT;BB [RT] + [sortie]
|
||||||
TP_CROP_FIXRATIO;Ratio fixe:
|
TP_CROP_FIXRATIO;Ratio fixe:
|
||||||
@ -1317,10 +1318,14 @@ TP_VIGNETTING_LABEL;Correction vignettage
|
|||||||
TP_VIGNETTING_RADIUS;Rayon
|
TP_VIGNETTING_RADIUS;Rayon
|
||||||
TP_VIGNETTING_STRENGTH;Force
|
TP_VIGNETTING_STRENGTH;Force
|
||||||
TP_WBALANCE_AUTO;Auto
|
TP_WBALANCE_AUTO;Auto
|
||||||
|
TP_WBALANCE_EQBLUERED;Égaliseur Bleu/Rouge
|
||||||
|
TP_WBALANCE_EQBLUERED_TOOLTIP;Permet de dévier du comportement normal de la "balance des blancs" en modulant la balance bleu/rouge.\nCeci peut être utile lorsque les conditions de prise de vue:\na) sont loins de l'illuminant strandard (ex: sous-marin)\nb) sont loins des conditions où a été réalisé le calibrage\nc) où les matrices ou les profiles ICC sont incorrect
|
||||||
TP_WBALANCE_CAMERA;Appareil photo
|
TP_WBALANCE_CAMERA;Appareil photo
|
||||||
TP_WBALANCE_CLOUDY;Nuageux
|
TP_WBALANCE_CLOUDY;Nuageux
|
||||||
TP_WBALANCE_CUSTOM;Personnalisé
|
TP_WBALANCE_CUSTOM;Personnalisé
|
||||||
TP_WBALANCE_DAYLIGHT;Lumière du jour (ensoleillé)
|
TP_WBALANCE_DAYLIGHT;Lumière du jour (ensoleillé)
|
||||||
|
TP_WBALANCE_WATER1;Sous-marin 1
|
||||||
|
TP_WBALANCE_WATER2;Sous-marin 2
|
||||||
TP_WBALANCE_FLASH55;Leica
|
TP_WBALANCE_FLASH55;Leica
|
||||||
TP_WBALANCE_FLASH60;Standard, Canon, Pentax, Olympus
|
TP_WBALANCE_FLASH60;Standard, Canon, Pentax, Olympus
|
||||||
TP_WBALANCE_FLASH65;Nikon, Panasonic, Sony, Minolta
|
TP_WBALANCE_FLASH65;Nikon, Panasonic, Sony, Minolta
|
||||||
@ -1338,6 +1343,7 @@ TP_WBALANCE_FLUO10;F10 - Philips TL85
|
|||||||
TP_WBALANCE_FLUO11;F11 - Philips TL84
|
TP_WBALANCE_FLUO11;F11 - Philips TL84
|
||||||
TP_WBALANCE_FLUO12;F12 - Philips TL83
|
TP_WBALANCE_FLUO12;F12 - Philips TL83
|
||||||
TP_WBALANCE_FLUO_HEADER;Fluorescent
|
TP_WBALANCE_FLUO_HEADER;Fluorescent
|
||||||
|
TP_WBALANCE_WATER_HEADER;Sous-marin
|
||||||
TP_WBALANCE_GREEN;Teinte
|
TP_WBALANCE_GREEN;Teinte
|
||||||
TP_WBALANCE_GTI;GTI
|
TP_WBALANCE_GTI;GTI
|
||||||
TP_WBALANCE_HMI;HMI
|
TP_WBALANCE_HMI;HMI
|
||||||
|
@ -442,6 +442,7 @@ HISTORY_MSG_204;LMMSE Enhancement Steps
|
|||||||
HISTORY_MSG_205;CAM02 hot/bad pixels
|
HISTORY_MSG_205;CAM02 hot/bad pixels
|
||||||
HISTORY_MSG_206;CAT02 - Adapt scene auto
|
HISTORY_MSG_206;CAT02 - Adapt scene auto
|
||||||
HISTORY_MSG_207;Defringing Hue curve
|
HISTORY_MSG_207;Defringing Hue curve
|
||||||
|
HISTORY_MSG_208;Blue/Red Equalizer
|
||||||
HISTORY_NEWSNAPSHOTAS;As...
|
HISTORY_NEWSNAPSHOTAS;As...
|
||||||
HISTORY_NEWSNAPSHOT;Add
|
HISTORY_NEWSNAPSHOT;Add
|
||||||
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: <b>Alt-s</b>
|
HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: <b>Alt-s</b>
|
||||||
@ -1297,10 +1298,14 @@ TP_VIGNETTING_LABEL;Vignetting Correction
|
|||||||
TP_VIGNETTING_RADIUS;Radius
|
TP_VIGNETTING_RADIUS;Radius
|
||||||
TP_VIGNETTING_STRENGTH;Strength
|
TP_VIGNETTING_STRENGTH;Strength
|
||||||
TP_WBALANCE_AUTO;Auto
|
TP_WBALANCE_AUTO;Auto
|
||||||
|
TP_WBALANCE_EQBLUERED;Blue/Red Equalizer
|
||||||
|
TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behavior of "white balance" by modulating the blue/red balance.\nThis can be useful when shooting conditions:\na) are far from the standard illuminant (e.g. underwater)\nb) are far from conditions where calibrations were performed\nc) where the matrices or ICC profiles are unsuitable
|
||||||
TP_WBALANCE_CAMERA;Camera
|
TP_WBALANCE_CAMERA;Camera
|
||||||
TP_WBALANCE_CLOUDY;Cloudy
|
TP_WBALANCE_CLOUDY;Cloudy
|
||||||
TP_WBALANCE_CUSTOM;Custom
|
TP_WBALANCE_CUSTOM;Custom
|
||||||
TP_WBALANCE_DAYLIGHT;Daylight (sunny)
|
TP_WBALANCE_DAYLIGHT;Daylight (sunny)
|
||||||
|
TP_WBALANCE_WATER1;UnderWater 1
|
||||||
|
TP_WBALANCE_WATER2;UnderWater 2
|
||||||
TP_WBALANCE_FLASH55;Leica
|
TP_WBALANCE_FLASH55;Leica
|
||||||
TP_WBALANCE_FLASH60;Standard, Canon, Pentax, Olympus
|
TP_WBALANCE_FLASH60;Standard, Canon, Pentax, Olympus
|
||||||
TP_WBALANCE_FLASH65;Nikon, Panasonic, Sony, Minolta
|
TP_WBALANCE_FLASH65;Nikon, Panasonic, Sony, Minolta
|
||||||
@ -1318,6 +1323,7 @@ TP_WBALANCE_FLUO10;F10 - Philips TL85
|
|||||||
TP_WBALANCE_FLUO11;F11 - Philips TL84
|
TP_WBALANCE_FLUO11;F11 - Philips TL84
|
||||||
TP_WBALANCE_FLUO12;F12 - Philips TL83
|
TP_WBALANCE_FLUO12;F12 - Philips TL83
|
||||||
TP_WBALANCE_FLUO_HEADER;Fluorescent
|
TP_WBALANCE_FLUO_HEADER;Fluorescent
|
||||||
|
TP_WBALANCE_WATER_HEADER;UnderWater
|
||||||
TP_WBALANCE_GREEN;Tint
|
TP_WBALANCE_GREEN;Tint
|
||||||
TP_WBALANCE_GTI;GTI
|
TP_WBALANCE_GTI;GTI
|
||||||
TP_WBALANCE_HMI;HMI
|
TP_WBALANCE_HMI;HMI
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=true
|
Auto=true
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=true
|
Auto=true
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=true
|
Auto=true
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=true
|
Auto=true
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=true
|
Auto=true
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=true
|
Auto=true
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=true
|
Auto=true
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=true
|
Auto=true
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=true
|
Auto=true
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=true
|
Auto=true
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=false
|
Auto=false
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=false
|
Auto=false
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5325
|
Temperature=5325
|
||||||
Green=1.162
|
Green=1.162
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=true
|
Enabled=true
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=false
|
Auto=false
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5325
|
Temperature=5325
|
||||||
Green=1.162
|
Green=1.162
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=true
|
Enabled=true
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=false
|
Auto=false
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5388
|
Temperature=5388
|
||||||
Green=1.101
|
Green=1.101
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=true
|
Enabled=true
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=false
|
Auto=false
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=7922
|
Temperature=7922
|
||||||
Green=1.159
|
Green=1.159
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=true
|
Enabled=true
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=false
|
Auto=false
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=7922
|
Temperature=7922
|
||||||
Green=1.159
|
Green=1.159
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=true
|
Auto=true
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11.0
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=true
|
Auto=true
|
||||||
@ -80,6 +80,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5745
|
Temperature=5745
|
||||||
Green=1.0
|
Green=1.0
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=false
|
Auto=false
|
||||||
@ -81,6 +81,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=4500
|
Temperature=4500
|
||||||
Green=1.073
|
Green=1.073
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=true
|
Enabled=true
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=false
|
Auto=false
|
||||||
@ -81,6 +81,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=4500
|
Temperature=4500
|
||||||
Green=1.073
|
Green=1.073
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=true
|
Enabled=true
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=false
|
Auto=false
|
||||||
@ -81,6 +81,7 @@ Uniformity=50
|
|||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=4500
|
Temperature=4500
|
||||||
Green=1.073
|
Green=1.073
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=true
|
Enabled=true
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=false
|
Auto=false
|
||||||
@ -80,7 +80,8 @@ Uniformity=50
|
|||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=5699
|
Temperature=5699
|
||||||
Green=1.0329999999999999
|
Green=1.033
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=true
|
Enabled=true
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
[Version]
|
[Version]
|
||||||
AppVersion=4.0.11
|
AppVersion=4.0.11.20
|
||||||
Version=308
|
Version=309
|
||||||
|
|
||||||
[Exposure]
|
[Exposure]
|
||||||
Auto=false
|
Auto=false
|
||||||
@ -80,7 +80,8 @@ Uniformity=50
|
|||||||
[White Balance]
|
[White Balance]
|
||||||
Setting=Camera
|
Setting=Camera
|
||||||
Temperature=4670
|
Temperature=4670
|
||||||
Green=1.1000000000000001
|
Green=1.1
|
||||||
|
Equal=1.0
|
||||||
|
|
||||||
[Color appearance]
|
[Color appearance]
|
||||||
Enabled=false
|
Enabled=false
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "mytime.h"
|
#include "mytime.h"
|
||||||
#include "sleef.c"
|
#include "sleef.c"
|
||||||
|
#include "../rtgui/options.h"
|
||||||
|
|
||||||
#undef CLIPD
|
#undef CLIPD
|
||||||
#define CLIPD(a) ((a)>0.0?((a)<1.0?(a):1.0):0.0)
|
#define CLIPD(a) ((a)>0.0?((a)<1.0?(a):1.0):0.0)
|
||||||
#define CLIPQQ(a) ((a)>0?((a)<250?(a):250):0)
|
#define CLIPQQ(a) ((a)>0?((a)<250?(a):250):0)
|
||||||
@ -34,7 +36,7 @@
|
|||||||
namespace rtengine {
|
namespace rtengine {
|
||||||
using namespace procparams;
|
using namespace procparams;
|
||||||
|
|
||||||
extern const Settings* settings;
|
extern const Settings* settings;
|
||||||
|
|
||||||
static const double cie_colour_match_jd[97][3] = {//350nm to 830nm 5 nm J.Desmis observer 2°
|
static const double cie_colour_match_jd[97][3] = {//350nm to 830nm 5 nm J.Desmis observer 2°
|
||||||
{0.0000000,0.000000,0.000000}, {0.0000000,0.000000,0.000000}, {0.0001299,0.0003917,0.0006061},
|
{0.0000000,0.000000,0.000000}, {0.0000000,0.000000,0.000000}, {0.0001299,0.0003917,0.0006061},
|
||||||
@ -72,9 +74,9 @@ extern const Settings* settings;
|
|||||||
{0.000001251141,0.00000045181,0.000000}
|
{0.000001251141,0.00000045181,0.000000}
|
||||||
};
|
};
|
||||||
|
|
||||||
ColorTemp::ColorTemp (double t, double g, Glib::ustring m) : temp(t), green(g), method(m) {
|
ColorTemp::ColorTemp (double t, double g, double e, Glib::ustring m) : temp(t), green(g), equal(e), method(m) {
|
||||||
|
|
||||||
clip (temp, green);
|
clip (temp, green, equal);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColorTemp::clip (double &temp, double &green) {
|
void ColorTemp::clip (double &temp, double &green) {
|
||||||
@ -83,26 +85,44 @@ void ColorTemp::clip (double &temp, double &green) {
|
|||||||
temp = MINTEMP;
|
temp = MINTEMP;
|
||||||
else if (temp > MAXTEMP)
|
else if (temp > MAXTEMP)
|
||||||
temp = MAXTEMP;
|
temp = MAXTEMP;
|
||||||
|
|
||||||
if (green < MINGREEN)
|
if (green < MINGREEN)
|
||||||
green = MINGREEN;
|
green = MINGREEN;
|
||||||
else if (green > MAXGREEN)
|
else if (green > MAXGREEN)
|
||||||
green = MAXGREEN;
|
green = MAXGREEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
ColorTemp::ColorTemp (double mulr, double mulg, double mulb) {
|
void ColorTemp::clip (double &temp, double &green, double &equal) {
|
||||||
method = "Custom";
|
|
||||||
mul2temp (mulr, mulg, mulb, temp, green);
|
if (temp < MINTEMP)
|
||||||
|
temp = MINTEMP;
|
||||||
|
else if (temp > MAXTEMP)
|
||||||
|
temp = MAXTEMP;
|
||||||
|
|
||||||
|
if (green < MINGREEN)
|
||||||
|
green = MINGREEN;
|
||||||
|
else if (green > MAXGREEN)
|
||||||
|
green = MAXGREEN;
|
||||||
|
|
||||||
|
if(equal < MINEQUAL)
|
||||||
|
equal = MINEQUAL;
|
||||||
|
else if(equal > MAXEQUAL)
|
||||||
|
equal = MAXEQUAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColorTemp::mul2temp (double rmul, double gmul, double bmul, double& temp, double& green) {
|
ColorTemp::ColorTemp (double mulr, double mulg, double mulb, double e) : equal(e) {
|
||||||
|
method = "Custom";
|
||||||
|
mul2temp (mulr, mulg, mulb, equal, temp, green);
|
||||||
|
}
|
||||||
|
|
||||||
double maxtemp=(double)MAXTEMP, mintemp=(double)MINTEMP;
|
void ColorTemp::mul2temp (const double rmul, const double gmul, const double bmul, const double equal, double& temp, double& green) {
|
||||||
|
|
||||||
|
double maxtemp=double(MAXTEMP), mintemp=double(MINTEMP);
|
||||||
double tmpr, tmpg, tmpb;
|
double tmpr, tmpg, tmpb;
|
||||||
temp=(maxtemp+mintemp)/2;
|
temp=(maxtemp+mintemp)/2;
|
||||||
|
|
||||||
while (maxtemp-mintemp>1) {
|
while (maxtemp-mintemp>1) {
|
||||||
temp2mul (temp, 1.0, tmpr, tmpg, tmpb);
|
temp2mul (temp, 1.0, equal, tmpr, tmpg, tmpb);
|
||||||
if (tmpb/tmpr > bmul/rmul)
|
if (tmpb/tmpr > bmul/rmul)
|
||||||
maxtemp = temp;
|
maxtemp = temp;
|
||||||
else
|
else
|
||||||
@ -114,7 +134,7 @@ void ColorTemp::mul2temp (double rmul, double gmul, double bmul, double& temp, d
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// spectral data for Daylight direct Sun: I have choose 5300K beacuse Nikon=5200K, Olympus=5300K, Panasonic=5500K, Leica=5400K, Minolta=5100K
|
// spectral data for Daylight direct Sun: I have choose 5300K because Nikon=5200K, Olympus=5300K, Panasonic=5500K, Leica=5400K, Minolta=5100K
|
||||||
const double ColorTemp::Daylight5300_spect[97] = {
|
const double ColorTemp::Daylight5300_spect[97] = {
|
||||||
24.82,26.27,27.72,28.97,30.22,29.71,29.19,31.95,34.71,45.49,56.26,59.97,63.68,65.30,66.92,65.39,63.86,72.59,81.32,87.53,93.73,95.15,96.56,96.55,96.54,98.13,99.73,97.70,95.66,97.19,98.72,
|
24.82,26.27,27.72,28.97,30.22,29.71,29.19,31.95,34.71,45.49,56.26,59.97,63.68,65.30,66.92,65.39,63.86,72.59,81.32,87.53,93.73,95.15,96.56,96.55,96.54,98.13,99.73,97.70,95.66,97.19,98.72,
|
||||||
98.90,99.08,98.98,98.87,101.13,103.39,102.48,101.57,102.14,102.71,101.36,100.00,98.71,97.42,97.81,98.21,95.20,92.20,93.92,95.63,96.15,96.67,96.34,96.01,94.21,92.41,93.58,94.74,93.05,91.36,92.29,
|
98.90,99.08,98.98,98.87,101.13,103.39,102.48,101.57,102.14,102.71,101.36,100.00,98.71,97.42,97.81,98.21,95.20,92.20,93.92,95.63,96.15,96.67,96.34,96.01,94.21,92.41,93.58,94.74,93.05,91.36,92.29,
|
||||||
@ -122,7 +142,7 @@ const double ColorTemp::Daylight5300_spect[97] = {
|
|||||||
63.88,67.13,68.85,70.57
|
63.88,67.13,68.85,70.57
|
||||||
};
|
};
|
||||||
|
|
||||||
//spectral data for Daylight Cloudy: I have choose 6200K beacuse Nikon=6000K, Olympus=6000K, Panasonic=6200K, Leica=6400K, Minolta=6500K
|
//spectral data for Daylight Cloudy: I have choose 6200K because Nikon=6000K, Olympus=6000K, Panasonic=6200K, Leica=6400K, Minolta=6500K
|
||||||
const double ColorTemp::Cloudy6200_spect[97] = {
|
const double ColorTemp::Cloudy6200_spect[97] = {
|
||||||
39.50,40.57,41.63,43.85,46.08,45.38,44.69,47.20,49.71,63.06,76.41,80.59,84.77,85.91,87.05,84.14,81.23,90.29,99.35,105.47,111.58,112.23,112.87,111.74,110.62,111.41,112.20,108.98,105.76,106.32,
|
39.50,40.57,41.63,43.85,46.08,45.38,44.69,47.20,49.71,63.06,76.41,80.59,84.77,85.91,87.05,84.14,81.23,90.29,99.35,105.47,111.58,112.23,112.87,111.74,110.62,111.41,112.20,108.98,105.76,106.32,
|
||||||
106.89,106.34,105.79,104.62,103.45,105.09,106.72,105.24,103.76,103.75,103.75,101.87,100.00,98.29,96.58,96.46,96.34,92.85,89.37,90.25,91.12,91.06,90.99,90.17,89.35,87.22,85.10,85.48,85.85,
|
106.89,106.34,105.79,104.62,103.45,105.09,106.72,105.24,103.76,103.75,103.75,101.87,100.00,98.29,96.58,96.46,96.34,92.85,89.37,90.25,91.12,91.06,90.99,90.17,89.35,87.22,85.10,85.48,85.85,
|
||||||
@ -130,7 +150,7 @@ const double ColorTemp::Cloudy6200_spect[97] = {
|
|||||||
53.63,56.47,59.31,60.80,62.29
|
53.63,56.47,59.31,60.80,62.29
|
||||||
};
|
};
|
||||||
|
|
||||||
//spectral data for Daylight Shade: I have choose 7600K beacuse Nikon=8000K, Olympus=7500K, Panasonic=7500K, Leica=7500K, Minolta=7500K
|
//spectral data for Daylight Shade: I have choose 7600K because Nikon=8000K, Olympus=7500K, Panasonic=7500K, Leica=7500K, Minolta=7500K
|
||||||
const double ColorTemp::Shade7600_spect[97] = {
|
const double ColorTemp::Shade7600_spect[97] = {
|
||||||
64.42,64.46,64.51,68.35,72.20,70.22,68.24,69.79,71.35,87.49,103.64,108.68,113.72,114.12,114.53,109.54,104.55,113.59,122.63,128.52,134.41,134.02,133.63,131.02,128.41,128.08,127.75,123.16,
|
64.42,64.46,64.51,68.35,72.20,70.22,68.24,69.79,71.35,87.49,103.64,108.68,113.72,114.12,114.53,109.54,104.55,113.59,122.63,128.52,134.41,134.02,133.63,131.02,128.41,128.08,127.75,123.16,
|
||||||
118.57,117.89,117.22,115.72,114.22,111.60,108.99,109.84,110.68,108.57,106.45,105.71,104.98,102.49,100.00,97.78,95.55,94.82,94.08,90.47,86.87,86.94,87.01,86.45,85.88,84.57,83.27,80.83,78.40,78.21,
|
118.57,117.89,117.22,115.72,114.22,111.60,108.99,109.84,110.68,108.57,106.45,105.71,104.98,102.49,100.00,97.78,95.55,94.82,94.08,90.47,86.87,86.94,87.01,86.45,85.88,84.57,83.27,80.83,78.40,78.21,
|
||||||
@ -1229,8 +1249,10 @@ void ColorTemp::temp2mulxyz (double tem, double gree, Glib::ustring method ,doub
|
|||||||
double m1, m2;
|
double m1, m2;
|
||||||
if (tem<=7000)
|
if (tem<=7000)
|
||||||
x_D = -4.6070e9/(tem*tem*tem) + 2.9678e6/(tem*tem) + 0.09911e3/tem + 0.244063;
|
x_D = -4.6070e9/(tem*tem*tem) + 2.9678e6/(tem*tem) + 0.09911e3/tem + 0.244063;
|
||||||
else
|
else if (tem <=25000)
|
||||||
x_D = -2.0064e9/(tem*tem*tem) + 1.9018e6/(tem*tem) + 0.24748e3/tem + 0.237040;
|
x_D = -2.0064e9/(tem*tem*tem) + 1.9018e6/(tem*tem) + 0.24748e3/tem + 0.237040;
|
||||||
|
else if (tem >25000)
|
||||||
|
x_D = -2.0064e9/(tem*tem*tem) + 1.9018e6/(tem*tem) + 0.24748e3/tem + 0.237040 - ((tem-25000)/25000)*0.025;//Jacques empirical adjustemnt for very high temp (underwater !)
|
||||||
|
|
||||||
y_D = -3.0*x_D*x_D + 2.87*x_D - 0.275;
|
y_D = -3.0*x_D*x_D + 2.87*x_D - 0.275;
|
||||||
//calculate D -daylight in function of s0, s1, s2 and temp ==> x_D y_D
|
//calculate D -daylight in function of s0, s1, s2 and temp ==> x_D y_D
|
||||||
@ -1253,9 +1275,12 @@ void ColorTemp::temp2mulxyz (double tem, double gree, Glib::ustring method ,doub
|
|||||||
//printf("Xxyz=%f Zxyz=%f\n",Xxyz,Zxyz);
|
//printf("Xxyz=%f Zxyz=%f\n",Xxyz,Zxyz);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColorTemp::temp2mul (double temp, double green, double& rmul, double& gmul, double& bmul) {
|
void ColorTemp::temp2mul (double temp, double green, double equal, double& rmul, double& gmul, double& bmul) {
|
||||||
|
|
||||||
|
clip (temp, green, equal);
|
||||||
|
|
||||||
|
//printf("temp=%d green=%.3f equal=%.3f\n", (int)temp, (float) green, (float) equal);
|
||||||
|
|
||||||
clip (temp, green);
|
|
||||||
//variables for CRI and display Lab, and palette
|
//variables for CRI and display Lab, and palette
|
||||||
bool CRI_type=false;
|
bool CRI_type=false;
|
||||||
double xD, yD, x_D, y_D, interm;
|
double xD, yD, x_D, y_D, interm;
|
||||||
@ -1281,10 +1306,6 @@ void ColorTemp::temp2mul (double temp, double green, double& rmul, double& gmul,
|
|||||||
double Lbb[50],abb[50],bbb[50];
|
double Lbb[50],abb[50],bbb[50];
|
||||||
double Lpal[50],apal[50],bpal[50];
|
double Lpal[50],apal[50],bpal[50];
|
||||||
|
|
||||||
float DeltaE[50], DeltaEs[8];
|
|
||||||
float quadCRI=0.0f,quadCRIs=0.0f;
|
|
||||||
float CRI_RT=0.0, CRI[50];
|
|
||||||
float CRI_RTs=0.0, CRIs[8];
|
|
||||||
int palet=-1;
|
int palet=-1;
|
||||||
bool palette=true;
|
bool palette=true;
|
||||||
// double tempalet; // correlated temperature
|
// double tempalet; // correlated temperature
|
||||||
@ -1330,10 +1351,12 @@ void ColorTemp::temp2mul (double temp, double green, double& rmul, double& gmul,
|
|||||||
palet=29;
|
palet=29;
|
||||||
if (temp<=7000)
|
if (temp<=7000)
|
||||||
x_D = -4.6070e9/(temp*temp*temp) + 2.9678e6/(temp*temp) + 0.09911e3/temp + 0.244063;
|
x_D = -4.6070e9/(temp*temp*temp) + 2.9678e6/(temp*temp) + 0.09911e3/temp + 0.244063;
|
||||||
else
|
else if (temp <=25000)
|
||||||
x_D = -2.0064e9/(temp*temp*temp) + 1.9018e6/(temp*temp) + 0.24748e3/temp + 0.237040;
|
x_D = -2.0064e9/(temp*temp*temp) + 1.9018e6/(temp*temp) + 0.24748e3/temp + 0.237040;
|
||||||
|
else if (temp >25000) // above 25000 it's unknown..then I have modified to adjust for underwater
|
||||||
|
x_D = -2.0064e9/(temp*temp*temp) + 1.9018e6/(temp*temp) + 0.24748e3/temp + 0.237040 - ((temp-25000)/25000)*0.025;//Jacques empirical adjustemnt for very high temp (underwater !)
|
||||||
|
|
||||||
y_D = -3.0*x_D*x_D + 2.87*x_D - 0.275;
|
y_D = (-3.0*x_D*x_D + 2.87*x_D - 0.275);//modify blue / red action
|
||||||
//calculate D -daylight in function of s0, s1, s2 and temp ==> x_D y_D
|
//calculate D -daylight in function of s0, s1, s2 and temp ==> x_D y_D
|
||||||
//S(lamda)=So(lambda)+m1*s1(lambda)+m2*s2(lambda)
|
//S(lamda)=So(lambda)+m1*s1(lambda)+m2*s2(lambda)
|
||||||
interm=(0.0241+0.2562*x_D-0.734*y_D);
|
interm=(0.0241+0.2562*x_D-0.734*y_D);
|
||||||
@ -1345,6 +1368,11 @@ void ColorTemp::temp2mul (double temp, double green, double& rmul, double& gmul,
|
|||||||
}
|
}
|
||||||
|
|
||||||
xD=x; yD=y;
|
xD=x; yD=y;
|
||||||
|
float adj=1.f;
|
||||||
|
if(equal < 0.9999 || equal > 1.0001 ){
|
||||||
|
adj=(100.f+( 1000.f-(1000.f*(float)equal) )/20.f)/100.f;
|
||||||
|
}
|
||||||
|
//printf("adj=%f\n",adj);
|
||||||
double Xwb = xD/yD;
|
double Xwb = xD/yD;
|
||||||
double Ywb = 1.0;
|
double Ywb = 1.0;
|
||||||
double Zwb = (1.0-xD-yD)/yD;
|
double Zwb = (1.0-xD-yD)/yD;
|
||||||
@ -1365,12 +1393,12 @@ void ColorTemp::temp2mul (double temp, double green, double& rmul, double& gmul,
|
|||||||
bmul = sRGB_xyz[2][0]*X + sRGB_xyz[2][1]*Y + sRGB_xyz[2][2]*Z;
|
bmul = sRGB_xyz[2][0]*X + sRGB_xyz[2][1]*Y + sRGB_xyz[2][2]*Z;
|
||||||
} else {*/
|
} else {*/
|
||||||
//recalculate channels multipliers with new values of XYZ tue to whitebalance
|
//recalculate channels multipliers with new values of XYZ tue to whitebalance
|
||||||
rmul = sRGBd65_xyz[0][0]*Xwb + sRGBd65_xyz[0][1]*Ywb + sRGBd65_xyz[0][2]*Zwb;
|
rmul = sRGBd65_xyz[0][0]*Xwb*adj + sRGBd65_xyz[0][1]*Ywb + sRGBd65_xyz[0][2]*Zwb/adj; // Jacques' empirical modification 5/2013
|
||||||
gmul = sRGBd65_xyz[1][0]*Xwb + sRGBd65_xyz[1][1]*Ywb + sRGBd65_xyz[1][2]*Zwb;
|
gmul = sRGBd65_xyz[1][0]*Xwb + sRGBd65_xyz[1][1]*Ywb + sRGBd65_xyz[1][2]*Zwb;
|
||||||
bmul = sRGBd65_xyz[2][0]*Xwb + sRGBd65_xyz[2][1]*Ywb + sRGBd65_xyz[2][2]*Zwb;
|
bmul = sRGBd65_xyz[2][0]*Xwb*adj + sRGBd65_xyz[2][1]*Ywb + sRGBd65_xyz[2][2]*Zwb/adj;
|
||||||
//};
|
//};
|
||||||
gmul /= green;
|
gmul /= green;
|
||||||
|
//printf("rmul=%f gmul=%f bmul=%f\n",rmul, gmul, bmul);
|
||||||
double max = rmul;
|
double max = rmul;
|
||||||
if (gmul>max) max = gmul;
|
if (gmul>max) max = gmul;
|
||||||
if (bmul>max) max = bmul;
|
if (bmul>max) max = bmul;
|
||||||
@ -1526,6 +1554,11 @@ void ColorTemp::temp2mul (double temp, double green, double& rmul, double& gmul,
|
|||||||
else {CRI_type=false;}
|
else {CRI_type=false;}
|
||||||
|
|
||||||
if (CRI_type) {
|
if (CRI_type) {
|
||||||
|
float DeltaE[50], DeltaEs[8];
|
||||||
|
float quadCRI=0.0f,quadCRIs=0.0f;
|
||||||
|
float CRI_RT=0.0, CRI[50];
|
||||||
|
float CRI_RTs=0.0, CRIs[8];
|
||||||
|
|
||||||
for(int i=0;i<N_c;i++) {
|
for(int i=0;i<N_c;i++) {
|
||||||
spectrum_to_color_xyz_preset(spec_color[i],spect_illum[illum+3], xx,yy,zz);
|
spectrum_to_color_xyz_preset(spec_color[i],spect_illum[illum+3], xx,yy,zz);
|
||||||
XchkLamp[i]=xx;YchkLamp[i]=yy;ZchkLamp[i]=zz;
|
XchkLamp[i]=xx;YchkLamp[i]=yy;ZchkLamp[i]=zz;
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
#ifndef _COLORTEMP_
|
#ifndef _COLORTEMP_
|
||||||
#define _COLORTEMP_
|
#define _COLORTEMP_
|
||||||
|
#include "procparams.h"
|
||||||
|
|
||||||
#include <gtkmm.h>
|
#include <gtkmm.h>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
@ -28,35 +29,47 @@
|
|||||||
|
|
||||||
|
|
||||||
namespace rtengine {
|
namespace rtengine {
|
||||||
|
using namespace procparams;
|
||||||
|
|
||||||
#define MINTEMP 2000
|
|
||||||
#define MAXTEMP 25000
|
#define MINTEMP 1500
|
||||||
|
#define MAXTEMP 60000
|
||||||
#define MINGREEN 0.02
|
#define MINGREEN 0.02
|
||||||
#define MAXGREEN 5.0
|
#define MAXGREEN 5.0
|
||||||
|
#define MINEQUAL 0.8
|
||||||
|
#define MAXEQUAL 1.5
|
||||||
|
|
||||||
#define INITIALBLACKBODY 4000
|
#define INITIALBLACKBODY 4000
|
||||||
|
|
||||||
|
|
||||||
class ColorTemp {
|
class ColorTemp {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
double temp;
|
double temp;
|
||||||
double green;
|
double green;
|
||||||
|
double equal;
|
||||||
Glib::ustring method;
|
Glib::ustring method;
|
||||||
|
|
||||||
static void clip (double &temp, double &green);
|
static void clip (double &temp, double &green);
|
||||||
|
static void clip (double &temp, double &green, double &equal);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
ColorTemp () : temp(-1.), green(-1.), equal (1.), method("Custom") {}
|
||||||
|
ColorTemp (double e) : temp(-1.), green(-1.), equal (e), method("Custom") {}
|
||||||
|
ColorTemp (double t, double g, double e, Glib::ustring m);
|
||||||
|
ColorTemp (double mulr, double mulg, double mulb, double e);
|
||||||
|
|
||||||
ColorTemp () : temp(-1), green(-1), method("Custom") {}
|
void update (const double rmul, const double gmul, const double bmul, const double equal) { this->equal = equal; mul2temp (rmul, gmul, bmul, this->equal, temp, green); }
|
||||||
ColorTemp (double t, double g, Glib::ustring m);
|
void useDefaults (const double equal) { temp = 6504; green = 1.0; this->equal = equal; } // Values copied from procparams.cc
|
||||||
ColorTemp (double mulr, double mulg, double mulb);
|
|
||||||
|
|
||||||
inline double getTemp () { return temp; }
|
inline double getTemp () { return temp; }
|
||||||
inline double getGreen () { return green; }
|
inline double getGreen () { return green; }
|
||||||
|
inline double getEqual () { return equal; }
|
||||||
|
|
||||||
void getMultipliers (double &mulr, double &mulg, double &mulb) { temp2mul (temp, green, mulr, mulg, mulb); }
|
void getMultipliers (double &mulr, double &mulg, double &mulb) { temp2mul (temp, green, equal, mulr, mulg, mulb); }
|
||||||
|
|
||||||
void mul2temp (double rmul, double gmul, double bmul, double& temp, double& green);
|
void mul2temp (const double rmul, const double gmul, const double bmul, const double equal, double& temp, double& green);
|
||||||
void temp2mul (double temp, double green, double& rmul, double& gmul, double& bmul);
|
void temp2mul (double temp, double green, double equal, double& rmul, double& gmul, double& bmul);
|
||||||
static void temp2mulxyz (double tem, double gree, Glib::ustring method, double &Xxyz, double &Zxyz);
|
static void temp2mulxyz (double tem, double gree, Glib::ustring method, double &Xxyz, double &Zxyz);
|
||||||
|
|
||||||
int XYZtoCorColorTemp(double x0,double y0 ,double z0, double &temp);
|
int XYZtoCorColorTemp(double x0,double y0 ,double z0, double &temp);
|
||||||
|
@ -6880,7 +6880,8 @@ void CLASS adobe_coeff (const char *make, const char *model)
|
|||||||
{ "Panasonic DMC-GH1", 15, 0xf92, /* RT - Colin Walker */
|
{ "Panasonic DMC-GH1", 15, 0xf92, /* RT - Colin Walker */
|
||||||
{ 6360,-1557,-375,-4201,11504,3086,-1378,2518,5843 } },
|
{ 6360,-1557,-375,-4201,11504,3086,-1378,2518,5843 } },
|
||||||
{ "Panasonic DMC-GH2", 15, 0xf95, /* RT - Colin Walker */
|
{ "Panasonic DMC-GH2", 15, 0xf95, /* RT - Colin Walker */
|
||||||
{ 6855,-1765,-456,-4223,11600,2996,-1450,2602,5761 } },
|
// { 6855,-1765,-456,-4223,11600,2996,-1450,2602,5761 } },
|
||||||
|
{ 7780,-2410,-806,-3913,11724,2484,-1018,2390,5298 } },
|
||||||
{ "Panasonic DMC-GH3", 144, 0,
|
{ "Panasonic DMC-GH3", 144, 0,
|
||||||
{ 6559,-1752,-491,-3672,11407,2586,-962,1875,5130 } },
|
{ 6559,-1752,-491,-3672,11407,2586,-962,1875,5130 } },
|
||||||
{ "Panasonic DMC-GX1", 143, 0,
|
{ "Panasonic DMC-GX1", 143, 0,
|
||||||
|
@ -1066,8 +1066,6 @@
|
|||||||
- { 7780,-2410,-806,-3913,11724,2484,-1018,2390,5298 } },
|
- { 7780,-2410,-806,-3913,11724,2484,-1018,2390,5298 } },
|
||||||
+ { "Panasonic DMC-GH1", 15, 0xf92, /* RT - Colin Walker */
|
+ { "Panasonic DMC-GH1", 15, 0xf92, /* RT - Colin Walker */
|
||||||
+ { 6360,-1557,-375,-4201,11504,3086,-1378,2518,5843 } },
|
+ { 6360,-1557,-375,-4201,11504,3086,-1378,2518,5843 } },
|
||||||
+ { "Panasonic DMC-GH2", 15, 0xf95, /* RT - Colin Walker */
|
|
||||||
+ { 6855,-1765,-456,-4223,11600,2996,-1450,2602,5761 } },
|
|
||||||
{ "Panasonic DMC-GH3", 144, 0,
|
{ "Panasonic DMC-GH3", 144, 0,
|
||||||
{ 6559,-1752,-491,-3672,11407,2586,-962,1875,5130 } },
|
{ 6559,-1752,-491,-3672,11407,2586,-962,1875,5130 } },
|
||||||
{ "Panasonic DMC-GX1", 143, 0,
|
{ "Panasonic DMC-GX1", 143, 0,
|
||||||
|
@ -84,7 +84,7 @@ namespace rtengine {
|
|||||||
virtual void getSpotWBData (double &reds, double &greens, double &blues, int &rn, int &gn, int &bn,
|
virtual void getSpotWBData (double &reds, double &greens, double &blues, int &rn, int &gn, int &bn,
|
||||||
std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue,
|
std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue,
|
||||||
int tran) {}
|
int tran) {}
|
||||||
virtual ColorTemp getAutoWB () { return ColorTemp(); }
|
virtual void getAutoWBMultipliers (double &rm, double &gm, double &bm) { rm=1.0; bm=1.0; gm=1.0; }
|
||||||
virtual const char* getType () const { return "unknown"; }
|
virtual const char* getType () const { return "unknown"; }
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -476,7 +476,7 @@ namespace rtengine {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ColorTemp getAutoWB () {
|
void getAutoWBMultipliers (double &rm, double &gm, double &bm) {
|
||||||
|
|
||||||
double avg_r = 0.;
|
double avg_r = 0.;
|
||||||
double avg_g = 0.;
|
double avg_g = 0.;
|
||||||
@ -500,8 +500,9 @@ namespace rtengine {
|
|||||||
avg_b += intpow( (double)b(i, j), p);*/
|
avg_b += intpow( (double)b(i, j), p);*/
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
return ColorTemp (avg_r/double(n), avg_g/double(n), avg_b/double(n));
|
rm = avg_r/double(n);
|
||||||
//return ColorTemp (pow(avg_r/n, 1.0/p), pow(avg_g/n, 1.0/p), pow(avg_b/n, 1.0/p));
|
gm = avg_g/double(n);
|
||||||
|
bm = avg_b/double(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
void transformPixel (int x, int y, int tran, int& tx, int& ty) {
|
void transformPixel (int x, int y, int tran, int& tx, int& ty) {
|
||||||
@ -905,7 +906,7 @@ namespace rtengine {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ColorTemp getAutoWB () {
|
void getAutoWBMultipliers (double &rm, double &gm, double &bm) {
|
||||||
|
|
||||||
double avg_r = 0.;
|
double avg_r = 0.;
|
||||||
double avg_g = 0.;
|
double avg_g = 0.;
|
||||||
@ -929,8 +930,9 @@ namespace rtengine {
|
|||||||
avg_b += intpow( (double)b(i, j), p);*/
|
avg_b += intpow( (double)b(i, j), p);*/
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
return ColorTemp (avg_r/double(n), avg_g/double(n), avg_b/double(n));
|
rm = avg_r/double(n);
|
||||||
//return ColorTemp (pow(avg_r/n, 1.0/p), pow(avg_g/n, 1.0/p), pow(avg_b/n, 1.0/p));
|
gm = avg_g/double(n);
|
||||||
|
bm = avg_b/double(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
void transformPixel (int x, int y, int tran, int& tx, int& ty) {
|
void transformPixel (int x, int y, int tran, int& tx, int& ty) {
|
||||||
|
@ -50,6 +50,7 @@ class ImageSource : public InitialImage {
|
|||||||
int references;
|
int references;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
double redAWBMul, greenAWBMul, blueAWBMul; // local copy of the multipliers, to avoid recomputing the values
|
||||||
cmsHPROFILE embProfile;
|
cmsHPROFILE embProfile;
|
||||||
Glib::ustring fileName;
|
Glib::ustring fileName;
|
||||||
ImageData* idata;
|
ImageData* idata;
|
||||||
@ -57,7 +58,8 @@ class ImageSource : public InitialImage {
|
|||||||
double dirpyrdenoiseExpComp;
|
double dirpyrdenoiseExpComp;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ImageSource () : references (1), embProfile(NULL), idata(NULL), dirpyrdenoiseExpComp(INFINITY) {}
|
ImageSource () : references (1), redAWBMul(-1.), greenAWBMul(-1.), blueAWBMul(-1.),
|
||||||
|
embProfile(NULL), idata(NULL), dirpyrdenoiseExpComp(INFINITY) {}
|
||||||
|
|
||||||
virtual ~ImageSource () {}
|
virtual ~ImageSource () {}
|
||||||
virtual int load (Glib::ustring fname, bool batch = false) =0;
|
virtual int load (Glib::ustring fname, bool batch = false) =0;
|
||||||
@ -75,10 +77,10 @@ class ImageSource : public InitialImage {
|
|||||||
// true is ready to provide the AutoWB, i.e. when the image has been demosaiced for RawImageSource
|
// true is ready to provide the AutoWB, i.e. when the image has been demosaiced for RawImageSource
|
||||||
virtual bool isWBProviderReady () =0;
|
virtual bool isWBProviderReady () =0;
|
||||||
|
|
||||||
virtual void convertColorSpace(Imagefloat* image, ColorManagementParams cmp, RAWParams raw) =0;// DIRTY HACK: this method is derived in rawimagesource and strimagesource, but (...,RAWParams raw) will be used ONLY for raw images
|
virtual void convertColorSpace (Imagefloat* image, ColorManagementParams cmp, RAWParams raw) =0;// DIRTY HACK: this method is derived in rawimagesource and strimagesource, but (...,RAWParams raw) will be used ONLY for raw images
|
||||||
|
virtual void getAutoWBMultipliers (double &rm, double &bm, double &gm) =0;
|
||||||
virtual ColorTemp getWB () =0;
|
virtual ColorTemp getWB () =0;
|
||||||
virtual ColorTemp getAutoWB () =0;
|
virtual ColorTemp getSpotWB (std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue, int tran, double equal) =0;
|
||||||
virtual ColorTemp getSpotWB (std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue, int tran) =0;
|
|
||||||
|
|
||||||
virtual double getDefGain () { return 1.0; }
|
virtual double getDefGain () { return 1.0; }
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ namespace rtengine {
|
|||||||
extern const Settings* settings;
|
extern const Settings* settings;
|
||||||
|
|
||||||
ImProcCoordinator::ImProcCoordinator ()
|
ImProcCoordinator::ImProcCoordinator ()
|
||||||
: workimg(NULL), awbComputed(false), ipf(¶ms, true), scale(10), highDetailPreprocessComputed(false),
|
: workimg(NULL), lastAwbEqual(0.), ipf(¶ms, true), scale(10), highDetailPreprocessComputed(false),
|
||||||
highDetailRawComputed(false), allocated(false),
|
highDetailRawComputed(false), allocated(false),
|
||||||
|
|
||||||
hltonecurve(65536,0),
|
hltonecurve(65536,0),
|
||||||
@ -182,13 +182,23 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall) {
|
|||||||
imgsrc->HLRecovery_Global( params.hlrecovery ); // this handles Color HLRecovery
|
imgsrc->HLRecovery_Global( params.hlrecovery ); // this handles Color HLRecovery
|
||||||
|
|
||||||
if (settings->verbose) printf ("Applying white balance, color correction & sRBG conversion...\n");
|
if (settings->verbose) printf ("Applying white balance, color correction & sRBG conversion...\n");
|
||||||
currWB = ColorTemp (params.wb.temperature, params.wb.green, params.wb.method);
|
currWB = ColorTemp (params.wb.temperature, params.wb.green, params.wb.equal, params.wb.method);
|
||||||
if (params.wb.method=="Camera")
|
if (params.wb.method=="Camera")
|
||||||
currWB = imgsrc->getWB ();
|
currWB = imgsrc->getWB ();
|
||||||
else if (params.wb.method=="Auto") {
|
else if (params.wb.method=="Auto") {
|
||||||
if (!awbComputed) {
|
if (lastAwbEqual != params.wb.equal) {
|
||||||
autoWB = imgsrc->getAutoWB ();
|
double rm, gm, bm;
|
||||||
awbComputed = true;
|
imgsrc->getAutoWBMultipliers(rm, gm, bm);
|
||||||
|
if (rm != -1.) {
|
||||||
|
autoWB.update(rm, bm, gm, params.wb.equal);
|
||||||
|
lastAwbEqual = params.wb.equal;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lastAwbEqual = -1.;
|
||||||
|
autoWB.useDefaults(params.wb.equal);
|
||||||
|
}
|
||||||
|
//double rr,gg,bb;
|
||||||
|
//autoWB.getMultipliers(rr,gg,bb);
|
||||||
}
|
}
|
||||||
currWB = autoWB;
|
currWB = autoWB;
|
||||||
}
|
}
|
||||||
@ -609,20 +619,28 @@ void ImProcCoordinator::progress (Glib::ustring str, int pr) {
|
|||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ImProcCoordinator::getAutoWB (double& temp, double& green) {
|
bool ImProcCoordinator::getAutoWB (double& temp, double& green, double equal) {
|
||||||
|
|
||||||
if (imgsrc && imgsrc->isWBProviderReady()) {
|
if (imgsrc) {
|
||||||
if (!awbComputed) {
|
if (lastAwbEqual != equal) {
|
||||||
minit.lock ();
|
Glib::Mutex::Lock lock(minit); // Also used in crop window
|
||||||
autoWB = imgsrc->getAutoWB ();
|
double rm, gm, bm;
|
||||||
minit.unlock ();
|
imgsrc->getAutoWBMultipliers(rm, gm, bm);
|
||||||
awbComputed = true;
|
if (rm != -1) {
|
||||||
|
autoWB.update(rm, bm, gm, equal);
|
||||||
|
lastAwbEqual = equal;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lastAwbEqual = -1.;
|
||||||
|
autoWB.useDefaults(equal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
temp = autoWB.getTemp ();
|
temp = autoWB.getTemp ();
|
||||||
green = autoWB.getGreen ();
|
green = autoWB.getGreen ();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
//temp = autoWB.getTemp();
|
||||||
temp = -1.0;
|
temp = -1.0;
|
||||||
green = -1.0;
|
green = -1.0;
|
||||||
return false;
|
return false;
|
||||||
@ -652,9 +670,11 @@ void ImProcCoordinator::getSpotWB (int x, int y, int rect, double& temp, double&
|
|||||||
if (params.coarse.rotate==270) tr |= TR_R270;
|
if (params.coarse.rotate==270) tr |= TR_R270;
|
||||||
if (params.coarse.hflip) tr |= TR_HFLIP;
|
if (params.coarse.hflip) tr |= TR_HFLIP;
|
||||||
if (params.coarse.vflip) tr |= TR_VFLIP;
|
if (params.coarse.vflip) tr |= TR_VFLIP;
|
||||||
|
ColorTemp ret = imgsrc->getSpotWB (red, green, blue, tr, params.wb.equal);
|
||||||
ColorTemp ret = imgsrc->getSpotWB (red, green, blue, tr);
|
currWB = ColorTemp (params.wb.temperature, params.wb.green,params.wb.equal, params.wb.method);
|
||||||
currWB = ColorTemp (params.wb.temperature, params.wb.green, params.wb.method);
|
//double rr,gg,bb;
|
||||||
|
//currWB.getMultipliers(rr,gg,bb);
|
||||||
|
|
||||||
mProcessing.unlock ();
|
mProcessing.unlock ();
|
||||||
|
|
||||||
if (ret.getTemp() > 0) {
|
if (ret.getTemp() > 0) {
|
||||||
@ -711,13 +731,21 @@ void ImProcCoordinator::saveInputICCReference (const Glib::ustring& fname) {
|
|||||||
imgsrc->preprocess( ppar.raw, ppar.lensProf, ppar.coarse );
|
imgsrc->preprocess( ppar.raw, ppar.lensProf, ppar.coarse );
|
||||||
imgsrc->demosaic(ppar.raw );
|
imgsrc->demosaic(ppar.raw );
|
||||||
//imgsrc->getImage (imgsrc->getWB(), 0, im, pp, ppar.hlrecovery, ppar.icm, ppar.raw);
|
//imgsrc->getImage (imgsrc->getWB(), 0, im, pp, ppar.hlrecovery, ppar.icm, ppar.raw);
|
||||||
ColorTemp currWB = ColorTemp (params.wb.temperature, params.wb.green, params.wb.method);
|
ColorTemp currWB = ColorTemp (params.wb.temperature, params.wb.green, params.wb.equal, params.wb.method);
|
||||||
if (params.wb.method=="Camera")
|
if (params.wb.method=="Camera")
|
||||||
currWB = imgsrc->getWB ();
|
currWB = imgsrc->getWB ();
|
||||||
else if (params.wb.method=="Auto") {
|
else if (params.wb.method=="Auto") {
|
||||||
if (!awbComputed) {
|
if (lastAwbEqual != params.wb.equal) {
|
||||||
autoWB = imgsrc->getAutoWB ();
|
double rm, gm, bm;
|
||||||
awbComputed = true;
|
imgsrc->getAutoWBMultipliers(rm, gm, bm);
|
||||||
|
if (rm != -1.) {
|
||||||
|
autoWB.update(rm, bm, gm, params.wb.equal);
|
||||||
|
lastAwbEqual = params.wb.equal;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lastAwbEqual = -1.;
|
||||||
|
autoWB.useDefaults(params.wb.equal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
currWB = autoWB;
|
currWB = autoWB;
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ class ImProcCoordinator : public StagedImageProcessor {
|
|||||||
ColorTemp currWB;
|
ColorTemp currWB;
|
||||||
ColorTemp autoWB;
|
ColorTemp autoWB;
|
||||||
|
|
||||||
bool awbComputed;
|
double lastAwbEqual;
|
||||||
|
|
||||||
ImProcFunctions ipf;
|
ImProcFunctions ipf;
|
||||||
|
|
||||||
@ -174,7 +174,7 @@ class ImProcCoordinator : public StagedImageProcessor {
|
|||||||
|
|
||||||
DetailedCrop* createCrop ();
|
DetailedCrop* createCrop ();
|
||||||
|
|
||||||
bool getAutoWB (double& temp, double& green);
|
bool getAutoWB (double& temp, double& green, double equal);
|
||||||
void getCamWB (double& temp, double& green);
|
void getCamWB (double& temp, double& green);
|
||||||
void getSpotWB (int x, int y, int rectSize, double& temp, double& green);
|
void getSpotWB (int x, int y, int rectSize, double& temp, double& green);
|
||||||
void getAutoCrop (double ratio, int &x, int &y, int &w, int &h);
|
void getAutoCrop (double ratio, int &x, int &y, int &w, int &h);
|
||||||
|
@ -3286,7 +3286,7 @@ fclose(f);*/
|
|||||||
if (thumb == NULL)
|
if (thumb == NULL)
|
||||||
return 0.0;
|
return 0.0;
|
||||||
|
|
||||||
Thumbnail* raw = rtengine::Thumbnail::loadFromRaw (fname, ri, w_raw, h_raw, 1, FALSE);
|
Thumbnail* raw = rtengine::Thumbnail::loadFromRaw (fname, ri, w_raw, h_raw, 1, 1.0, FALSE);
|
||||||
if (raw == NULL) {
|
if (raw == NULL) {
|
||||||
delete thumb;
|
delete thumb;
|
||||||
return 0.0;
|
return 0.0;
|
||||||
|
@ -230,7 +230,9 @@ enum ProcEvent {
|
|||||||
EvCATbadpix=204,
|
EvCATbadpix=204,
|
||||||
EvCATAutoAdap=205,
|
EvCATAutoAdap=205,
|
||||||
EvPFCurve=206,
|
EvPFCurve=206,
|
||||||
NUMOFEVENTS=207
|
EvWBequal=207,
|
||||||
|
EvWBequalbo=208,
|
||||||
|
NUMOFEVENTS=209
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -49,38 +49,40 @@ std::vector<WBEntry*> WBParams::wbEntries;
|
|||||||
|
|
||||||
void WBParams::init() {
|
void WBParams::init() {
|
||||||
// Creation of the different methods and its associated temperature value
|
// Creation of the different methods and its associated temperature value
|
||||||
wbEntries.push_back(new WBEntry("Camera" ,WBT_CAMERA, M("TP_WBALANCE_CAMERA"), 0));
|
wbEntries.push_back(new WBEntry("Camera" ,WBT_CAMERA, M("TP_WBALANCE_CAMERA"), 0, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Auto" ,WBT_AUTO, M("TP_WBALANCE_AUTO"), 0));
|
wbEntries.push_back(new WBEntry("Auto" ,WBT_AUTO, M("TP_WBALANCE_AUTO"), 0, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Daylight" ,WBT_DAYLIGHT, M("TP_WBALANCE_DAYLIGHT"), 5300));
|
wbEntries.push_back(new WBEntry("Daylight" ,WBT_DAYLIGHT, M("TP_WBALANCE_DAYLIGHT"), 5300, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Cloudy" ,WBT_CLOUDY, M("TP_WBALANCE_CLOUDY"), 6200));
|
wbEntries.push_back(new WBEntry("Cloudy" ,WBT_CLOUDY, M("TP_WBALANCE_CLOUDY"), 6200, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Shade" ,WBT_SHADE, M("TP_WBALANCE_SHADE"), 7600));
|
wbEntries.push_back(new WBEntry("Shade" ,WBT_SHADE, M("TP_WBALANCE_SHADE"), 7600, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Tungsten" ,WBT_TUNGSTEN, M("TP_WBALANCE_TUNGSTEN"), 2856));
|
wbEntries.push_back(new WBEntry("Water 1" ,WBT_WATER, M("TP_WBALANCE_WATER1"), 35000, 0.3f, 1.1f));
|
||||||
wbEntries.push_back(new WBEntry("Fluo F1" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO1"), 6430));
|
wbEntries.push_back(new WBEntry("Water 2" ,WBT_WATER, M("TP_WBALANCE_WATER2"), 48000, 0.63f, 1.38f));
|
||||||
wbEntries.push_back(new WBEntry("Fluo F2" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO2"), 4230));
|
wbEntries.push_back(new WBEntry("Tungsten" ,WBT_TUNGSTEN, M("TP_WBALANCE_TUNGSTEN"), 2856, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Fluo F3" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO3"), 3450));
|
wbEntries.push_back(new WBEntry("Fluo F1" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO1"), 6430, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Fluo F4" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO4"), 2940));
|
wbEntries.push_back(new WBEntry("Fluo F2" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO2"), 4230, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Fluo F5" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO5"), 6350));
|
wbEntries.push_back(new WBEntry("Fluo F3" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO3"), 3450, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Fluo F6" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO6"), 4150));
|
wbEntries.push_back(new WBEntry("Fluo F4" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO4"), 2940, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Fluo F7" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO7"), 6500));
|
wbEntries.push_back(new WBEntry("Fluo F5" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO5"), 6350, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Fluo F8" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO8"), 5020));
|
wbEntries.push_back(new WBEntry("Fluo F6" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO6"), 4150, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Fluo F9" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO9"), 4330));
|
wbEntries.push_back(new WBEntry("Fluo F7" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO7"), 6500, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Fluo F10" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO10"), 5300));
|
wbEntries.push_back(new WBEntry("Fluo F8" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO8"), 5020, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Fluo F11" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO11"), 4000));
|
wbEntries.push_back(new WBEntry("Fluo F9" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO9"), 4330, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Fluo F12" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO12"), 3000));
|
wbEntries.push_back(new WBEntry("Fluo F10" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO10"), 5300, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("HMI Lamp" ,WBT_LAMP, M("TP_WBALANCE_HMI"), 4800));
|
wbEntries.push_back(new WBEntry("Fluo F11" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO11"), 4000, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("GTI Lamp" ,WBT_LAMP, M("TP_WBALANCE_GTI"), 5000));
|
wbEntries.push_back(new WBEntry("Fluo F12" ,WBT_FLUORESCENT, M("TP_WBALANCE_FLUO12"), 3000, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("JudgeIII Lamp" ,WBT_LAMP, M("TP_WBALANCE_JUDGEIII"), 5100));
|
wbEntries.push_back(new WBEntry("HMI Lamp" ,WBT_LAMP, M("TP_WBALANCE_HMI"), 4800, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Solux Lamp 3500K" ,WBT_LAMP, M("TP_WBALANCE_SOLUX35"), 3480));
|
wbEntries.push_back(new WBEntry("GTI Lamp" ,WBT_LAMP, M("TP_WBALANCE_GTI"), 5000, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Solux Lamp 4100K" ,WBT_LAMP, M("TP_WBALANCE_SOLUX41"), 3930));
|
wbEntries.push_back(new WBEntry("JudgeIII Lamp" ,WBT_LAMP, M("TP_WBALANCE_JUDGEIII"), 5100, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Solux Lamp 4700K" ,WBT_LAMP, M("TP_WBALANCE_SOLUX47"), 4700));
|
wbEntries.push_back(new WBEntry("Solux Lamp 3500K" ,WBT_LAMP, M("TP_WBALANCE_SOLUX35"), 3480, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("NG Solux Lamp 4700K" ,WBT_LAMP, M("TP_WBALANCE_SOLUX47_NG"), 4480));
|
wbEntries.push_back(new WBEntry("Solux Lamp 4100K" ,WBT_LAMP, M("TP_WBALANCE_SOLUX41"), 3930, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("LED LSI Lumelex 2040",WBT_LED, M("TP_WBALANCE_LED_LSI"), 2970));
|
wbEntries.push_back(new WBEntry("Solux Lamp 4700K" ,WBT_LAMP, M("TP_WBALANCE_SOLUX47"), 4700, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("LED CRS SP12 WWMR16" ,WBT_LED, M("TP_WBALANCE_LED_CRS"), 3050));
|
wbEntries.push_back(new WBEntry("NG Solux Lamp 4700K" ,WBT_LAMP, M("TP_WBALANCE_SOLUX47_NG"), 4480, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Flash 5500K" ,WBT_FLASH, M("TP_WBALANCE_FLASH55"), 5500));
|
wbEntries.push_back(new WBEntry("LED LSI Lumelex 2040",WBT_LED, M("TP_WBALANCE_LED_LSI"), 2970, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Flash 6000K" ,WBT_FLASH, M("TP_WBALANCE_FLASH60"), 6000));
|
wbEntries.push_back(new WBEntry("LED CRS SP12 WWMR16" ,WBT_LED, M("TP_WBALANCE_LED_CRS"), 3050, 1.f, 1.f));
|
||||||
wbEntries.push_back(new WBEntry("Flash 6500K" ,WBT_FLASH, M("TP_WBALANCE_FLASH65"), 6500));
|
wbEntries.push_back(new WBEntry("Flash 5500K" ,WBT_FLASH, M("TP_WBALANCE_FLASH55"), 5500, 1.f, 1.f));
|
||||||
|
wbEntries.push_back(new WBEntry("Flash 6000K" ,WBT_FLASH, M("TP_WBALANCE_FLASH60"), 6000, 1.f, 1.f));
|
||||||
|
wbEntries.push_back(new WBEntry("Flash 6500K" ,WBT_FLASH, M("TP_WBALANCE_FLASH65"), 6500, 1.f, 1.f));
|
||||||
// Should remain the last one
|
// Should remain the last one
|
||||||
wbEntries.push_back(new WBEntry("Custom" ,WBT_CUSTOM, M("TP_WBALANCE_CUSTOM"), 0));
|
wbEntries.push_back(new WBEntry("Custom" ,WBT_CUSTOM, M("TP_WBALANCE_CUSTOM"), 0, 1.f, 1.f));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WBParams::cleanup() {
|
void WBParams::cleanup() {
|
||||||
@ -212,7 +214,7 @@ void ProcParams::setDefaults () {
|
|||||||
wb.method = "Camera";
|
wb.method = "Camera";
|
||||||
wb.temperature = 6504;
|
wb.temperature = 6504;
|
||||||
wb.green = 1.0;
|
wb.green = 1.0;
|
||||||
|
wb.equal = 1.0;
|
||||||
colorappearance.enabled = false;
|
colorappearance.enabled = false;
|
||||||
colorappearance.degree = 90;
|
colorappearance.degree = 90;
|
||||||
colorappearance.autodegree = true;
|
colorappearance.autodegree = true;
|
||||||
@ -601,6 +603,7 @@ int ProcParams::save (Glib::ustring fname, Glib::ustring fname2, ParamsEdited* p
|
|||||||
if (!pedited || pedited->wb.method) keyFile.set_string ("White Balance", "Setting", wb.method);
|
if (!pedited || pedited->wb.method) keyFile.set_string ("White Balance", "Setting", wb.method);
|
||||||
if (!pedited || pedited->wb.temperature) keyFile.set_integer ("White Balance", "Temperature", wb.temperature);
|
if (!pedited || pedited->wb.temperature) keyFile.set_integer ("White Balance", "Temperature", wb.temperature);
|
||||||
if (!pedited || pedited->wb.green) keyFile.set_double ("White Balance", "Green", wb.green);
|
if (!pedited || pedited->wb.green) keyFile.set_double ("White Balance", "Green", wb.green);
|
||||||
|
if (!pedited || pedited->wb.equal) keyFile.set_double ("White Balance", "Equal", wb.equal);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// save colorShift
|
// save colorShift
|
||||||
@ -1135,6 +1138,7 @@ if (keyFile.has_group ("White Balance")) {
|
|||||||
if (keyFile.has_key ("White Balance", "Setting")) { wb.method = keyFile.get_string ("White Balance", "Setting"); if (pedited) pedited->wb.method = true; }
|
if (keyFile.has_key ("White Balance", "Setting")) { wb.method = keyFile.get_string ("White Balance", "Setting"); if (pedited) pedited->wb.method = true; }
|
||||||
if (keyFile.has_key ("White Balance", "Temperature")) { wb.temperature = keyFile.get_integer ("White Balance", "Temperature"); if (pedited) pedited->wb.temperature = true; }
|
if (keyFile.has_key ("White Balance", "Temperature")) { wb.temperature = keyFile.get_integer ("White Balance", "Temperature"); if (pedited) pedited->wb.temperature = true; }
|
||||||
if (keyFile.has_key ("White Balance", "Green")) { wb.green = keyFile.get_double ("White Balance", "Green"); if (pedited) pedited->wb.green = true; }
|
if (keyFile.has_key ("White Balance", "Green")) { wb.green = keyFile.get_double ("White Balance", "Green"); if (pedited) pedited->wb.green = true; }
|
||||||
|
if (keyFile.has_key ("White Balance", "Equal")) { wb.equal = keyFile.get_double ("White Balance", "Equal"); if (pedited) pedited->wb.equal = true; }
|
||||||
}
|
}
|
||||||
|
|
||||||
// load colorShift
|
// load colorShift
|
||||||
@ -1572,6 +1576,7 @@ bool ProcParams::operator== (const ProcParams& other) {
|
|||||||
&& wb.method == other.wb.method
|
&& wb.method == other.wb.method
|
||||||
&& wb.green == other.wb.green
|
&& wb.green == other.wb.green
|
||||||
&& wb.temperature == other.wb.temperature
|
&& wb.temperature == other.wb.temperature
|
||||||
|
&& wb.equal == other.wb.equal
|
||||||
//&& colorShift.a == other.colorShift.a
|
//&& colorShift.a == other.colorShift.a
|
||||||
//&& colorShift.b == other.colorShift.b
|
//&& colorShift.b == other.colorShift.b
|
||||||
&& colorappearance.enabled == other.colorappearance.enabled
|
&& colorappearance.enabled == other.colorappearance.enabled
|
||||||
|
@ -315,6 +315,7 @@ enum WBTypes {
|
|||||||
WBT_DAYLIGHT,
|
WBT_DAYLIGHT,
|
||||||
WBT_CLOUDY,
|
WBT_CLOUDY,
|
||||||
WBT_SHADE,
|
WBT_SHADE,
|
||||||
|
WBT_WATER,
|
||||||
WBT_TUNGSTEN,
|
WBT_TUNGSTEN,
|
||||||
WBT_FLUORESCENT,
|
WBT_FLUORESCENT,
|
||||||
WBT_LAMP,
|
WBT_LAMP,
|
||||||
@ -330,8 +331,10 @@ public:
|
|||||||
enum WBTypes type;
|
enum WBTypes type;
|
||||||
Glib::ustring GUILabel;
|
Glib::ustring GUILabel;
|
||||||
int temperature;
|
int temperature;
|
||||||
|
double green;
|
||||||
|
double equal;
|
||||||
|
|
||||||
WBEntry(Glib::ustring p, enum WBTypes t, Glib::ustring l, int temp) : ppLabel(p), type(t), GUILabel(l), temperature(temp) {};
|
WBEntry(Glib::ustring p, enum WBTypes t, Glib::ustring l, int temp, double green, double equal) : ppLabel(p), type(t), GUILabel(l), temperature(temp), green(green), equal(equal) {};
|
||||||
};
|
};
|
||||||
|
|
||||||
class WBParams {
|
class WBParams {
|
||||||
@ -341,6 +344,7 @@ class WBParams {
|
|||||||
Glib::ustring method;
|
Glib::ustring method;
|
||||||
int temperature;
|
int temperature;
|
||||||
double green;
|
double green;
|
||||||
|
double equal;
|
||||||
|
|
||||||
static void init();
|
static void init();
|
||||||
static void cleanup();
|
static void cleanup();
|
||||||
|
@ -891,7 +891,7 @@ int RawImageSource::load (Glib::ustring fname, bool batch) {
|
|||||||
double cam_g = imatrices.rgb_cam[1][0]*camwb_red + imatrices.rgb_cam[1][1]*camwb_green + imatrices.rgb_cam[1][2]*camwb_blue;
|
double cam_g = imatrices.rgb_cam[1][0]*camwb_red + imatrices.rgb_cam[1][1]*camwb_green + imatrices.rgb_cam[1][2]*camwb_blue;
|
||||||
double cam_b = imatrices.rgb_cam[2][0]*camwb_red + imatrices.rgb_cam[2][1]*camwb_green + imatrices.rgb_cam[2][2]*camwb_blue;
|
double cam_b = imatrices.rgb_cam[2][0]*camwb_red + imatrices.rgb_cam[2][1]*camwb_green + imatrices.rgb_cam[2][2]*camwb_blue;
|
||||||
|
|
||||||
wb = ColorTemp (cam_r, cam_g, cam_b);
|
wb = ColorTemp (cam_r, cam_g, cam_b, 1.);
|
||||||
|
|
||||||
ri->set_prefilters();
|
ri->set_prefilters();
|
||||||
|
|
||||||
@ -2265,8 +2265,22 @@ void RawImageSource::getRowStartEnd (int x, int &start, int &end) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
ColorTemp RawImageSource::getAutoWB () {
|
void RawImageSource::getAutoWBMultipliers (double &rm, double &bm, double &gm) {
|
||||||
|
|
||||||
|
if (redAWBMul != -1.) {
|
||||||
|
rm = redAWBMul;
|
||||||
|
gm = greenAWBMul;
|
||||||
|
bm = blueAWBMul;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isWBProviderReady()) {
|
||||||
|
rm = -1.0;
|
||||||
|
gm = -1.0;
|
||||||
|
bm = -1.0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
double avg_r = 0;
|
double avg_r = 0;
|
||||||
double avg_g = 0;
|
double avg_g = 0;
|
||||||
double avg_b = 0;
|
double avg_b = 0;
|
||||||
@ -2369,17 +2383,15 @@ void RawImageSource::getRowStartEnd (int x, int &start, int &end) {
|
|||||||
double greens = avg_g/gn * camwb_green;
|
double greens = avg_g/gn * camwb_green;
|
||||||
double blues = avg_b/bn * camwb_blue;
|
double blues = avg_b/bn * camwb_blue;
|
||||||
|
|
||||||
double rm = imatrices.rgb_cam[0][0]*reds + imatrices.rgb_cam[0][1]*greens + imatrices.rgb_cam[0][2]*blues;
|
redAWBMul = rm = imatrices.rgb_cam[0][0]*reds + imatrices.rgb_cam[0][1]*greens + imatrices.rgb_cam[0][2]*blues;
|
||||||
double gm = imatrices.rgb_cam[1][0]*reds + imatrices.rgb_cam[1][1]*greens + imatrices.rgb_cam[1][2]*blues;
|
greenAWBMul = gm = imatrices.rgb_cam[1][0]*reds + imatrices.rgb_cam[1][1]*greens + imatrices.rgb_cam[1][2]*blues;
|
||||||
double bm = imatrices.rgb_cam[2][0]*reds + imatrices.rgb_cam[2][1]*greens + imatrices.rgb_cam[2][2]*blues;
|
blueAWBMul = bm = imatrices.rgb_cam[2][0]*reds + imatrices.rgb_cam[2][1]*greens + imatrices.rgb_cam[2][2]*blues;
|
||||||
|
|
||||||
return ColorTemp (rm, gm, bm);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
|
||||||
ColorTemp RawImageSource::getSpotWB (std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue, int tran) {
|
ColorTemp RawImageSource::getSpotWB (std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue, int tran, double equal) {
|
||||||
|
|
||||||
int x; int y;
|
int x; int y;
|
||||||
double reds = 0, greens = 0, blues = 0;
|
double reds = 0, greens = 0, blues = 0;
|
||||||
@ -2410,7 +2422,8 @@ void RawImageSource::getRowStartEnd (int x, int &start, int &end) {
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
int d[9][2] = {{0,0}, {-1,-1}, {-1,0}, {-1,1}, {0,-1}, {0,1}, {1,-1}, {1,0}, {1,1}};
|
int d[9][2] = {{0,0}, {-1,-1}, {-1,0}, {-1,1}, {0,-1}, {0,1}, {1,-1}, {1,0}, {1,1}};
|
||||||
int rloc, gloc, bloc, rnbrs, gnbrs, bnbrs;
|
double rloc, gloc, bloc;
|
||||||
|
int rnbrs, gnbrs, bnbrs;
|
||||||
for (size_t i=0; i<red.size(); i++) {
|
for (size_t i=0; i<red.size(); i++) {
|
||||||
transformPosition (red[i].x, red[i].y, tran, x, y);
|
transformPosition (red[i].x, red[i].y, tran, x, y);
|
||||||
rloc=gloc=bloc=rnbrs=gnbrs=bnbrs=0;
|
rloc=gloc=bloc=rnbrs=gnbrs=bnbrs=0;
|
||||||
@ -2431,19 +2444,66 @@ void RawImageSource::getRowStartEnd (int x, int &start, int &end) {
|
|||||||
gnbrs++;
|
gnbrs++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
rloc /= rnbrs; gloc /= gnbrs; bloc /= bnbrs;
|
||||||
|
if (rloc*initialGain<64000. && gloc*initialGain<64000. && bloc*initialGain<64000.) {
|
||||||
|
reds += rloc; greens += gloc; blues += bloc; rn++;
|
||||||
|
}
|
||||||
|
transformPosition (green[i].x, green[i].y, tran, x, y);//these are redundant now ??? if not, repeat for these blocks same as for red[]
|
||||||
|
rloc=gloc=bloc=rnbrs=gnbrs=bnbrs=0;
|
||||||
|
for (int k=0; k<9; k++) {
|
||||||
|
int xv = x + d[k][0];
|
||||||
|
int yv = y + d[k][1];
|
||||||
|
int c = FC(yv,xv);
|
||||||
|
if (c==0 && xv>=0 && yv>=0 && xv<W && yv<H) { //RED
|
||||||
|
rloc += (rawData[yv][xv]);
|
||||||
|
rnbrs++;
|
||||||
|
continue;
|
||||||
|
}else if (c==2 && xv>=0 && yv>=0 && xv<W && yv<H) { //BLUE
|
||||||
|
bloc += (rawData[yv][xv]);
|
||||||
|
bnbrs++;
|
||||||
|
continue;
|
||||||
|
} else { // GREEN
|
||||||
|
gloc += (rawData[yv][xv]);
|
||||||
|
gnbrs++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rloc /= rnbrs; gloc /= gnbrs; bloc /= bnbrs;
|
||||||
|
if (rloc*initialGain<64000. && gloc*initialGain<64000. && bloc*initialGain<64000.) {
|
||||||
|
reds += rloc; greens += gloc; blues += bloc; rn++;
|
||||||
|
}
|
||||||
|
|
||||||
|
transformPosition (blue[i].x, blue[i].y, tran, x, y);
|
||||||
|
rloc=gloc=bloc=rnbrs=gnbrs=bnbrs=0;
|
||||||
|
for (int k=0; k<9; k++) {
|
||||||
|
int xv = x + d[k][0];
|
||||||
|
int yv = y + d[k][1];
|
||||||
|
int c = FC(yv,xv);
|
||||||
|
if (c==0 && xv>=0 && yv>=0 && xv<W && yv<H) { //RED
|
||||||
|
rloc += (rawData[yv][xv]);
|
||||||
|
rnbrs++;
|
||||||
|
continue;
|
||||||
|
} else if (c==2 && xv>=0 && yv>=0 && xv<W && yv<H) { //BLUE
|
||||||
|
bloc += (rawData[yv][xv]);
|
||||||
|
bnbrs++;
|
||||||
|
continue;
|
||||||
|
} else { // GREEN
|
||||||
|
gloc += (rawData[yv][xv]);
|
||||||
|
gnbrs++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
rloc /= rnbrs; gloc /= gnbrs; bloc /= bnbrs;
|
rloc /= rnbrs; gloc /= gnbrs; bloc /= bnbrs;
|
||||||
if (rloc*initialGain<64000 && gloc*initialGain<64000 && bloc*initialGain<64000) {
|
if (rloc*initialGain<64000. && gloc*initialGain<64000. && bloc*initialGain<64000.) {
|
||||||
reds += rloc; greens += gloc; blues += bloc; rn++;
|
reds += rloc; greens += gloc; blues += bloc; rn++;
|
||||||
}
|
}
|
||||||
//transformPosition (green[i].x, green[i].y, tran, x, y);//these are redundant now ??? if not, repeat for these blocks same as for red[]
|
|
||||||
//transformPosition (blue[i].x, blue[i].y, tran, x, y);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (2*rn < red.size()) {
|
if (2*rn < red.size()) {
|
||||||
return ColorTemp ();
|
return ColorTemp (equal);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
reds = reds/rn * camwb_red;
|
reds = reds/rn * camwb_red;
|
||||||
@ -2454,7 +2514,7 @@ void RawImageSource::getRowStartEnd (int x, int &start, int &end) {
|
|||||||
double gm = imatrices.rgb_cam[1][0]*reds + imatrices.rgb_cam[1][1]*greens + imatrices.rgb_cam[1][2]*blues;
|
double gm = imatrices.rgb_cam[1][0]*reds + imatrices.rgb_cam[1][1]*greens + imatrices.rgb_cam[1][2]*blues;
|
||||||
double bm = imatrices.rgb_cam[2][0]*reds + imatrices.rgb_cam[2][1]*greens + imatrices.rgb_cam[2][2]*blues;
|
double bm = imatrices.rgb_cam[2][0]*reds + imatrices.rgb_cam[2][1]*greens + imatrices.rgb_cam[2][2]*blues;
|
||||||
|
|
||||||
return ColorTemp (rm, gm, bm);
|
return ColorTemp (rm, gm, bm, equal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,8 +153,8 @@ class RawImageSource : public ImageSource {
|
|||||||
|
|
||||||
void getImage (ColorTemp ctemp, int tran, Imagefloat* image, PreviewProps pp, HRecParams hrp, ColorManagementParams cmp, RAWParams raw);
|
void getImage (ColorTemp ctemp, int tran, Imagefloat* image, PreviewProps pp, HRecParams hrp, ColorManagementParams cmp, RAWParams raw);
|
||||||
ColorTemp getWB () { return wb; }
|
ColorTemp getWB () { return wb; }
|
||||||
ColorTemp getAutoWB ();
|
void getAutoWBMultipliers (double &rm, double &bm, double &gm);
|
||||||
ColorTemp getSpotWB (std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue, int tran);
|
ColorTemp getSpotWB (std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue, int tran, double equal);
|
||||||
bool isWBProviderReady () { return rawData; }
|
bool isWBProviderReady () { return rawData; }
|
||||||
|
|
||||||
double getDefGain () { return defGain; }
|
double getDefGain () { return defGain; }
|
||||||
|
@ -198,35 +198,37 @@ LUMINANCECURVE, // EvCATDegree
|
|||||||
LUMINANCECURVE, // EvCATMethodsur
|
LUMINANCECURVE, // EvCATMethodsur
|
||||||
LUMINANCECURVE, // EvCATAdapscen
|
LUMINANCECURVE, // EvCATAdapscen
|
||||||
LUMINANCECURVE, // EvCATAdapLum
|
LUMINANCECURVE, // EvCATAdapLum
|
||||||
LUMINANCECURVE, // EvCATMethodWB
|
LUMINANCECURVE, // EvCATMethodWB
|
||||||
LUMINANCECURVE, // EvCATJLight
|
LUMINANCECURVE, // EvCATJLight
|
||||||
LUMINANCECURVE, // EvCATChroma
|
LUMINANCECURVE, // EvCATChroma
|
||||||
LUMINANCECURVE, // EvCATAutoDegree
|
LUMINANCECURVE, // EvCATAutoDegree
|
||||||
LUMINANCECURVE, // EvCATContrast
|
LUMINANCECURVE, // EvCATContrast
|
||||||
LUMINANCECURVE, // EvCATSurr
|
LUMINANCECURVE, // EvCATSurr
|
||||||
LUMINANCECURVE, // EvCATgamut
|
LUMINANCECURVE, // EvCATgamut
|
||||||
LUMINANCECURVE, // EvCATmethodalg
|
LUMINANCECURVE, // EvCATmethodalg
|
||||||
LUMINANCECURVE, // EvCATRstpro
|
LUMINANCECURVE, // EvCATRstpro
|
||||||
LUMINANCECURVE, // EvCATQbright
|
LUMINANCECURVE, // EvCATQbright
|
||||||
LUMINANCECURVE, // EvCATQContrast
|
LUMINANCECURVE, // EvCATQContrast
|
||||||
LUMINANCECURVE, // EvCATSChroma
|
LUMINANCECURVE, // EvCATSChroma
|
||||||
LUMINANCECURVE, // EvCATMchroma
|
LUMINANCECURVE, // EvCATMchroma
|
||||||
LUMINANCECURVE, // EvCAThue
|
LUMINANCECURVE, // EvCAThue
|
||||||
LUMINANCECURVE, // EvCATcurve1
|
LUMINANCECURVE, // EvCATcurve1
|
||||||
LUMINANCECURVE, // EvCATcurve2
|
LUMINANCECURVE, // EvCATcurve2
|
||||||
LUMINANCECURVE, // EvCATcurvemode1
|
LUMINANCECURVE, // EvCATcurvemode1
|
||||||
LUMINANCECURVE, // EvCATcurvemode2
|
LUMINANCECURVE, // EvCATcurvemode2
|
||||||
LUMINANCECURVE, // EvCATcurve3
|
LUMINANCECURVE, // EvCATcurve3
|
||||||
LUMINANCECURVE, // EvCATcurvemode3
|
LUMINANCECURVE, // EvCATcurvemode3
|
||||||
LUMINANCECURVE, // EvCATdatacie
|
LUMINANCECURVE, // EvCATdatacie
|
||||||
LUMINANCECURVE, // EvCATtonecie
|
LUMINANCECURVE, // EvCATtonecie
|
||||||
ALLNORAW, // EvDPDNbluechro
|
ALLNORAW, // EvDPDNbluechro
|
||||||
ALLNORAW, // EvDPDNperform
|
ALLNORAW, // EvDPDNperform
|
||||||
ALLNORAW, //EvDPDNmet
|
ALLNORAW, // EvDPDNmet
|
||||||
DEMOSAIC, // EvDemosaicLMMSEIter
|
DEMOSAIC, // EvDemosaicLMMSEIter
|
||||||
LUMINANCECURVE, // EvCATbadpix
|
LUMINANCECURVE, // EvCATbadpix
|
||||||
LUMINANCECURVE, // EvCATAutoadap
|
LUMINANCECURVE, // EvCATAutoadap
|
||||||
DEFRINGE // EvPFCurve,
|
DEFRINGE, // EvPFCurve,
|
||||||
|
WHITEBALANCE, // EvWBequal,
|
||||||
|
WHITEBALANCE // EvWBequalbo,
|
||||||
|
|
||||||
//LUMINANCECURVE // EvCATsharpcie
|
//LUMINANCECURVE // EvCATsharpcie
|
||||||
|
|
||||||
|
@ -321,7 +321,7 @@ namespace rtengine {
|
|||||||
/** Creates and returns a Crop instance that acts as a window on the image */
|
/** Creates and returns a Crop instance that acts as a window on the image */
|
||||||
virtual DetailedCrop* createCrop () =0;
|
virtual DetailedCrop* createCrop () =0;
|
||||||
|
|
||||||
virtual bool getAutoWB (double& temp, double& green) =0;
|
virtual bool getAutoWB (double& temp, double& green, double equal) =0;
|
||||||
virtual void getCamWB (double& temp, double& green) =0;
|
virtual void getCamWB (double& temp, double& green) =0;
|
||||||
virtual void getSpotWB (int x, int y, int rectSize, double& temp, double& green) =0;
|
virtual void getSpotWB (int x, int y, int rectSize, double& temp, double& green) =0;
|
||||||
virtual void getAutoCrop (double ratio, int &x, int &y, int &w, int &h) =0;
|
virtual void getAutoCrop (double ratio, int &x, int &y, int &w, int &h) =0;
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
namespace rtengine {
|
namespace rtengine {
|
||||||
|
|
||||||
Thumbnail* Thumbnail::loadFromImage (const Glib::ustring& fname, int &w, int &h, int fixwh) {
|
Thumbnail* Thumbnail::loadFromImage (const Glib::ustring& fname, int &w, int &h, int fixwh, double wbEq) {
|
||||||
|
|
||||||
StdImageSource imgSrc;
|
StdImageSource imgSrc;
|
||||||
if (imgSrc.load(fname)) {
|
if (imgSrc.load(fname)) {
|
||||||
@ -51,26 +51,13 @@ Thumbnail* Thumbnail::loadFromImage (const Glib::ustring& fname, int &w, int &h,
|
|||||||
|
|
||||||
Thumbnail* tpp = new Thumbnail ();
|
Thumbnail* tpp = new Thumbnail ();
|
||||||
|
|
||||||
tpp->camwbRed = 1.0;
|
|
||||||
tpp->camwbGreen = 1.0;
|
|
||||||
tpp->camwbBlue = 1.0;
|
|
||||||
|
|
||||||
tpp->embProfileLength = 0;
|
|
||||||
unsigned char* data;
|
unsigned char* data;
|
||||||
img->getEmbeddedProfileData (tpp->embProfileLength, data);
|
img->getEmbeddedProfileData (tpp->embProfileLength, data);
|
||||||
if (data && tpp->embProfileLength) {
|
if (data && tpp->embProfileLength) {
|
||||||
tpp->embProfileData = new unsigned char [tpp->embProfileLength];
|
tpp->embProfileData = new unsigned char [tpp->embProfileLength];
|
||||||
memcpy (tpp->embProfileData, data, tpp->embProfileLength);
|
memcpy (tpp->embProfileData, data, tpp->embProfileLength);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
tpp->embProfileLength = 0;
|
|
||||||
tpp->embProfileData = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
tpp->redMultiplier = 1.0;
|
|
||||||
tpp->greenMultiplier = 1.0;
|
|
||||||
tpp->blueMultiplier = 1.0;
|
|
||||||
|
|
||||||
tpp->scaleForSave = 8192;
|
tpp->scaleForSave = 8192;
|
||||||
tpp->defGain = 1.0;
|
tpp->defGain = 1.0;
|
||||||
tpp->gammaCorrected = false;
|
tpp->gammaCorrected = false;
|
||||||
@ -120,7 +107,13 @@ Thumbnail* Thumbnail::loadFromImage (const Glib::ustring& fname, int &w, int &h,
|
|||||||
|
|
||||||
if (n>0) {
|
if (n>0) {
|
||||||
ColorTemp cTemp;
|
ColorTemp cTemp;
|
||||||
cTemp.mul2temp (avg_r/double(n), avg_g/double(n), avg_b/double(n), tpp->autowbTemp, tpp->autowbGreen);
|
|
||||||
|
tpp->redAWBMul = avg_r/double(n);
|
||||||
|
tpp->greenAWBMul = avg_g/double(n);
|
||||||
|
tpp->blueAWBMul = avg_b/double(n);
|
||||||
|
tpp->wbEqual = wbEq;
|
||||||
|
|
||||||
|
cTemp.mul2temp (tpp->redAWBMul, tpp->greenAWBMul, tpp->blueAWBMul, tpp->wbEqual, tpp->autoWBTemp, tpp->autoWBGreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
tpp->init ();
|
tpp->init ();
|
||||||
@ -174,21 +167,6 @@ Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, RawMetaDataL
|
|||||||
|
|
||||||
Thumbnail* tpp = new Thumbnail ();
|
Thumbnail* tpp = new Thumbnail ();
|
||||||
|
|
||||||
tpp->camwbRed = 1.0;
|
|
||||||
tpp->camwbGreen = 1.0;
|
|
||||||
tpp->camwbBlue = 1.0;
|
|
||||||
|
|
||||||
tpp->embProfileLength = 0;
|
|
||||||
tpp->embProfile = NULL;
|
|
||||||
tpp->embProfileData = NULL;
|
|
||||||
|
|
||||||
tpp->redMultiplier = 1.0;
|
|
||||||
tpp->greenMultiplier = 1.0;
|
|
||||||
tpp->blueMultiplier = 1.0;
|
|
||||||
|
|
||||||
tpp->scaleForSave = 8192;
|
|
||||||
tpp->defGain = 1.0;
|
|
||||||
tpp->gammaCorrected = false;
|
|
||||||
tpp->isRaw = 1;
|
tpp->isRaw = 1;
|
||||||
memset (tpp->colorMatrix, 0, sizeof(tpp->colorMatrix));
|
memset (tpp->colorMatrix, 0, sizeof(tpp->colorMatrix));
|
||||||
tpp->colorMatrix[0][0] = 1.0;
|
tpp->colorMatrix[0][0] = 1.0;
|
||||||
@ -208,9 +186,6 @@ Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, RawMetaDataL
|
|||||||
tpp->thumbImg = resizeTo<Image8>(w, h, TI_Nearest, img);
|
tpp->thumbImg = resizeTo<Image8>(w, h, TI_Nearest, img);
|
||||||
delete img;
|
delete img;
|
||||||
|
|
||||||
tpp->autowbTemp=2700;
|
|
||||||
tpp->autowbGreen=1.0;
|
|
||||||
|
|
||||||
if (rotate && ri->get_rotateDegree() > 0) {
|
if (rotate && ri->get_rotateDegree() > 0) {
|
||||||
// Leaf .mos, Mamiya .mef and Phase One files have thumbnails already rotated.
|
// Leaf .mos, Mamiya .mef and Phase One files have thumbnails already rotated.
|
||||||
if (ri->get_maker() != "Leaf" && ri->get_maker() != "Mamiya" && ri->get_maker() != "Phase One") {
|
if (ri->get_maker() != "Leaf" && ri->get_maker() != "Mamiya" && ri->get_maker() != "Phase One") {
|
||||||
@ -231,7 +206,7 @@ Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, RawMetaDataL
|
|||||||
#define FISBLUE(filter,row,col) \
|
#define FISBLUE(filter,row,col) \
|
||||||
((filter >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==2 || !filter)
|
((filter >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==2 || !filter)
|
||||||
|
|
||||||
Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, RawMetaDataLocation& rml, int &w, int &h, int fixwh, bool rotate)
|
Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, RawMetaDataLocation& rml, int &w, int &h, int fixwh, double wbEq, bool rotate)
|
||||||
{
|
{
|
||||||
RawImage *ri= new RawImage (fname);
|
RawImage *ri= new RawImage (fname);
|
||||||
int r = ri->loadRaw(1,0);
|
int r = ri->loadRaw(1,0);
|
||||||
@ -459,12 +434,13 @@ Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, RawMetaDataLocati
|
|||||||
double greens = avg_g / gn * tpp->camwbGreen;
|
double greens = avg_g / gn * tpp->camwbGreen;
|
||||||
double blues = avg_b / bn * tpp->camwbBlue;
|
double blues = avg_b / bn * tpp->camwbBlue;
|
||||||
|
|
||||||
double rm = ri->get_rgb_cam(0, 0) * reds + ri->get_rgb_cam(0, 1) * greens + ri->get_rgb_cam(0, 2) * blues;
|
tpp->redAWBMul = ri->get_rgb_cam(0, 0) * reds + ri->get_rgb_cam(0, 1) * greens + ri->get_rgb_cam(0, 2) * blues;
|
||||||
double gm = ri->get_rgb_cam(1, 0) * reds + ri->get_rgb_cam(1, 1) * greens + ri->get_rgb_cam(1, 2) * blues;
|
tpp->greenAWBMul = ri->get_rgb_cam(1, 0) * reds + ri->get_rgb_cam(1, 1) * greens + ri->get_rgb_cam(1, 2) * blues;
|
||||||
double bm = ri->get_rgb_cam(2, 0) * reds + ri->get_rgb_cam(2, 1) * greens + ri->get_rgb_cam(2, 2) * blues;
|
tpp->blueAWBMul = ri->get_rgb_cam(2, 0) * reds + ri->get_rgb_cam(2, 1) * greens + ri->get_rgb_cam(2, 2) * blues;
|
||||||
|
tpp->wbEqual = wbEq;
|
||||||
|
|
||||||
ColorTemp cTemp;
|
ColorTemp cTemp;
|
||||||
cTemp.mul2temp(rm, gm, bm, tpp->autowbTemp, tpp->autowbGreen);
|
cTemp.mul2temp(tpp->redAWBMul, tpp->greenAWBMul, tpp->blueAWBMul, tpp->wbEqual, tpp->autoWBTemp, tpp->autoWBGreen);
|
||||||
|
|
||||||
if (rotate && ri->get_rotateDegree() > 0) {
|
if (rotate && ri->get_rotateDegree() > 0) {
|
||||||
tpp->thumbImg->rotate(ri->get_rotateDegree());
|
tpp->thumbImg->rotate(ri->get_rotateDegree());
|
||||||
@ -513,7 +489,15 @@ void Thumbnail::init () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Thumbnail::Thumbnail () :
|
Thumbnail::Thumbnail () :
|
||||||
camProfile(NULL), thumbImg(NULL), embProfileData(NULL), embProfile(NULL) {
|
camProfile(NULL), thumbImg(NULL),
|
||||||
|
camwbRed(1.0), camwbGreen(1.0), camwbBlue(1.0),
|
||||||
|
redAWBMul(-1.0), greenAWBMul(-1.0), blueAWBMul(-1.0),
|
||||||
|
autoWBTemp(2700), autoWBGreen(1.0), wbEqual(-1.0),
|
||||||
|
embProfileLength(0), embProfileData(NULL), embProfile(NULL),
|
||||||
|
redMultiplier(1.0), greenMultiplier(1.0), blueMultiplier(1.0),
|
||||||
|
defGain(1.0),
|
||||||
|
scaleForSave(8192),
|
||||||
|
gammaCorrected(false) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Thumbnail::~Thumbnail () {
|
Thumbnail::~Thumbnail () {
|
||||||
@ -555,17 +539,25 @@ IImage8* Thumbnail::quickProcessImage (const procparams::ProcParams& params, int
|
|||||||
IImage8* Thumbnail::processImage (const procparams::ProcParams& params, int rheight, TypeInterpolation interp, std::string camName,
|
IImage8* Thumbnail::processImage (const procparams::ProcParams& params, int rheight, TypeInterpolation interp, std::string camName,
|
||||||
double focalLen, double focalLen35mm, float focusDist, float shutter, float fnumber, float iso,std::string expcomp_, double& myscale) {
|
double focalLen, double focalLen35mm, float focusDist, float shutter, float fnumber, float iso,std::string expcomp_, double& myscale) {
|
||||||
|
|
||||||
|
// check if the WB's equalizer value has changed
|
||||||
|
if (wbEqual < (params.wb.equal-5e-4) || wbEqual > (params.wb.equal+5e-4)) {
|
||||||
|
wbEqual = params.wb.equal;
|
||||||
|
// recompute the autoWB
|
||||||
|
ColorTemp cTemp;
|
||||||
|
cTemp.mul2temp (redAWBMul, greenAWBMul, blueAWBMul, wbEqual, autoWBTemp, autoWBGreen);
|
||||||
|
}
|
||||||
|
|
||||||
// compute WB multipliers
|
// compute WB multipliers
|
||||||
ColorTemp currWB = ColorTemp (params.wb.temperature, params.wb.green, params.wb.method);
|
ColorTemp currWB = ColorTemp (params.wb.temperature, params.wb.green, params.wb.equal,params.wb.method);
|
||||||
if (params.wb.method=="Camera") {
|
if (params.wb.method=="Camera") {
|
||||||
//recall colorMatrix is rgb_cam
|
//recall colorMatrix is rgb_cam
|
||||||
double cam_r = colorMatrix[0][0]*camwbRed + colorMatrix[0][1]*camwbGreen + colorMatrix[0][2]*camwbBlue;
|
double cam_r = colorMatrix[0][0]*camwbRed + colorMatrix[0][1]*camwbGreen + colorMatrix[0][2]*camwbBlue;
|
||||||
double cam_g = colorMatrix[1][0]*camwbRed + colorMatrix[1][1]*camwbGreen + colorMatrix[1][2]*camwbBlue;
|
double cam_g = colorMatrix[1][0]*camwbRed + colorMatrix[1][1]*camwbGreen + colorMatrix[1][2]*camwbBlue;
|
||||||
double cam_b = colorMatrix[2][0]*camwbRed + colorMatrix[2][1]*camwbGreen + colorMatrix[2][2]*camwbBlue;
|
double cam_b = colorMatrix[2][0]*camwbRed + colorMatrix[2][1]*camwbGreen + colorMatrix[2][2]*camwbBlue;
|
||||||
currWB = ColorTemp (cam_r, cam_g, cam_b);
|
currWB = ColorTemp (cam_r, cam_g, cam_b, params.wb.equal);
|
||||||
}
|
}
|
||||||
else if (params.wb.method=="Auto")
|
else if (params.wb.method=="Auto")
|
||||||
currWB = ColorTemp (autowbTemp, autowbGreen, "Custom");
|
currWB = ColorTemp (autoWBTemp, autoWBGreen, wbEqual, "Custom");
|
||||||
double r, g, b;
|
double r, g, b;
|
||||||
currWB.getMultipliers (r, g, b);
|
currWB.getMultipliers (r, g, b);
|
||||||
//iColorMatrix is cam_rgb
|
//iColorMatrix is cam_rgb
|
||||||
@ -884,15 +876,28 @@ void Thumbnail::getCamWB (double& temp, double& green) {
|
|||||||
double cam_r = colorMatrix[0][0]*camwbRed + colorMatrix[0][1]*camwbGreen + colorMatrix[0][2]*camwbBlue;
|
double cam_r = colorMatrix[0][0]*camwbRed + colorMatrix[0][1]*camwbGreen + colorMatrix[0][2]*camwbBlue;
|
||||||
double cam_g = colorMatrix[1][0]*camwbRed + colorMatrix[1][1]*camwbGreen + colorMatrix[1][2]*camwbBlue;
|
double cam_g = colorMatrix[1][0]*camwbRed + colorMatrix[1][1]*camwbGreen + colorMatrix[1][2]*camwbBlue;
|
||||||
double cam_b = colorMatrix[2][0]*camwbRed + colorMatrix[2][1]*camwbGreen + colorMatrix[2][2]*camwbBlue;
|
double cam_b = colorMatrix[2][0]*camwbRed + colorMatrix[2][1]*camwbGreen + colorMatrix[2][2]*camwbBlue;
|
||||||
ColorTemp currWB = ColorTemp (cam_r, cam_g, cam_b);
|
ColorTemp currWB = ColorTemp (cam_r, cam_g, cam_b, 1.0); // we do not take the equalizer into account here, because we want camera's WB
|
||||||
temp = currWB.getTemp ();
|
temp = currWB.getTemp ();
|
||||||
green = currWB.getGreen ();
|
green = currWB.getGreen ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Thumbnail::getAutoWB (double& temp, double& green) {
|
void Thumbnail::getAutoWB (double& temp, double& green, double equal) {
|
||||||
|
|
||||||
temp = autowbTemp;
|
if (equal != wbEqual) {
|
||||||
green = autowbGreen;
|
// compute the values depending on equal
|
||||||
|
ColorTemp cTemp;
|
||||||
|
wbEqual = equal;
|
||||||
|
// compute autoWBTemp and autoWBGreen
|
||||||
|
cTemp.mul2temp(redAWBMul, greenAWBMul, blueAWBMul, wbEqual, autoWBTemp, autoWBGreen);
|
||||||
|
}
|
||||||
|
temp = autoWBTemp;
|
||||||
|
green = autoWBGreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Thumbnail::getAutoWBMultipliers (double& rm, double& gm, double& bm) {
|
||||||
|
rm = redAWBMul;
|
||||||
|
gm = greenAWBMul;
|
||||||
|
bm = blueAWBMul;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Thumbnail::applyAutoExp (procparams::ProcParams& params) {
|
void Thumbnail::applyAutoExp (procparams::ProcParams& params) {
|
||||||
@ -937,7 +942,7 @@ void Thumbnail::getSpotWB (const procparams::ProcParams& params, int xp, int yp,
|
|||||||
double gm = colorMatrix[1][0]*reds + colorMatrix[1][1]*greens + colorMatrix[1][2]*blues;
|
double gm = colorMatrix[1][0]*reds + colorMatrix[1][1]*greens + colorMatrix[1][2]*blues;
|
||||||
double bm = colorMatrix[2][0]*reds + colorMatrix[2][1]*greens + colorMatrix[2][2]*blues;
|
double bm = colorMatrix[2][0]*reds + colorMatrix[2][1]*greens + colorMatrix[2][2]*blues;
|
||||||
|
|
||||||
ColorTemp ct (rm, gm, bm);
|
ColorTemp ct (rm, gm, bm, params.wb.equal);
|
||||||
rtemp = ct.getTemp ();
|
rtemp = ct.getTemp ();
|
||||||
rgreen = ct.getGreen ();
|
rgreen = ct.getGreen ();
|
||||||
}
|
}
|
||||||
@ -1283,8 +1288,9 @@ bool Thumbnail::readData (const Glib::ustring& fname) {
|
|||||||
if (keyFile.has_key ("LiveThumbData", "CamWBRed")) camwbRed = keyFile.get_double ("LiveThumbData", "CamWBRed");
|
if (keyFile.has_key ("LiveThumbData", "CamWBRed")) camwbRed = keyFile.get_double ("LiveThumbData", "CamWBRed");
|
||||||
if (keyFile.has_key ("LiveThumbData", "CamWBGreen")) camwbGreen = keyFile.get_double ("LiveThumbData", "CamWBGreen");
|
if (keyFile.has_key ("LiveThumbData", "CamWBGreen")) camwbGreen = keyFile.get_double ("LiveThumbData", "CamWBGreen");
|
||||||
if (keyFile.has_key ("LiveThumbData", "CamWBBlue")) camwbBlue = keyFile.get_double ("LiveThumbData", "CamWBBlue");
|
if (keyFile.has_key ("LiveThumbData", "CamWBBlue")) camwbBlue = keyFile.get_double ("LiveThumbData", "CamWBBlue");
|
||||||
if (keyFile.has_key ("LiveThumbData", "AutoWBTemp")) autowbTemp = keyFile.get_double ("LiveThumbData", "AutoWBTemp");
|
if (keyFile.has_key ("LiveThumbData", "RedAWBMul")) redAWBMul = keyFile.get_double ("LiveThumbData", "RedAWBMul");
|
||||||
if (keyFile.has_key ("LiveThumbData", "AutoWBGreen")) autowbGreen = keyFile.get_double ("LiveThumbData", "AutoWBGreen");
|
if (keyFile.has_key ("LiveThumbData", "GreenAWBMul")) greenAWBMul = keyFile.get_double ("LiveThumbData", "GreenAWBMul");
|
||||||
|
if (keyFile.has_key ("LiveThumbData", "BlueAWBMul")) blueAWBMul = keyFile.get_double ("LiveThumbData", "BlueAWBMul");
|
||||||
if (keyFile.has_key ("LiveThumbData", "AEHistCompression")) aeHistCompression = keyFile.get_integer ("LiveThumbData", "AEHistCompression");
|
if (keyFile.has_key ("LiveThumbData", "AEHistCompression")) aeHistCompression = keyFile.get_integer ("LiveThumbData", "AEHistCompression");
|
||||||
if (keyFile.has_key ("LiveThumbData", "RedMultiplier")) redMultiplier = keyFile.get_double ("LiveThumbData", "RedMultiplier");
|
if (keyFile.has_key ("LiveThumbData", "RedMultiplier")) redMultiplier = keyFile.get_double ("LiveThumbData", "RedMultiplier");
|
||||||
if (keyFile.has_key ("LiveThumbData", "GreenMultiplier")) greenMultiplier = keyFile.get_double ("LiveThumbData", "GreenMultiplier");
|
if (keyFile.has_key ("LiveThumbData", "GreenMultiplier")) greenMultiplier = keyFile.get_double ("LiveThumbData", "GreenMultiplier");
|
||||||
@ -1301,12 +1307,11 @@ bool Thumbnail::readData (const Glib::ustring& fname) {
|
|||||||
colorMatrix[i][j] = cm[ix++];
|
colorMatrix[i][j] = cm[ix++];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
catch (Glib::Error &err) {
|
catch (Glib::Error &err) {}
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Thumbnail::writeData (const Glib::ustring& fname) {
|
bool Thumbnail::writeData (const Glib::ustring& fname) {
|
||||||
@ -1323,8 +1328,9 @@ bool Thumbnail::writeData (const Glib::ustring& fname) {
|
|||||||
keyFile.set_double ("LiveThumbData", "CamWBRed", camwbRed);
|
keyFile.set_double ("LiveThumbData", "CamWBRed", camwbRed);
|
||||||
keyFile.set_double ("LiveThumbData", "CamWBGreen", camwbGreen);
|
keyFile.set_double ("LiveThumbData", "CamWBGreen", camwbGreen);
|
||||||
keyFile.set_double ("LiveThumbData", "CamWBBlue", camwbBlue);
|
keyFile.set_double ("LiveThumbData", "CamWBBlue", camwbBlue);
|
||||||
keyFile.set_double ("LiveThumbData", "AutoWBTemp", autowbTemp);
|
keyFile.set_double ("LiveThumbData", "RedAWBMul", redAWBMul);
|
||||||
keyFile.set_double ("LiveThumbData", "AutoWBGreen", autowbGreen);
|
keyFile.set_double ("LiveThumbData", "GreenAWBMul", greenAWBMul);
|
||||||
|
keyFile.set_double ("LiveThumbData", "BlueAWBMul", blueAWBMul);
|
||||||
keyFile.set_integer ("LiveThumbData", "AEHistCompression", aeHistCompression);
|
keyFile.set_integer ("LiveThumbData", "AEHistCompression", aeHistCompression);
|
||||||
keyFile.set_double ("LiveThumbData", "RedMultiplier", redMultiplier);
|
keyFile.set_double ("LiveThumbData", "RedMultiplier", redMultiplier);
|
||||||
keyFile.set_double ("LiveThumbData", "GreenMultiplier", greenMultiplier);
|
keyFile.set_double ("LiveThumbData", "GreenMultiplier", greenMultiplier);
|
||||||
|
@ -46,8 +46,8 @@ namespace rtengine {
|
|||||||
double camwbRed;
|
double camwbRed;
|
||||||
double camwbGreen;
|
double camwbGreen;
|
||||||
double camwbBlue;
|
double camwbBlue;
|
||||||
double autowbTemp;
|
double redAWBMul, greenAWBMul, blueAWBMul; // multipliers for auto WB
|
||||||
double autowbGreen;
|
double autoWBTemp, autoWBGreen, wbEqual; // autoWBTemp and autoWBGreen are updated each time autoWB is requested and if wbEqual has been modified
|
||||||
LUTu aeHistogram;
|
LUTu aeHistogram;
|
||||||
int aeHistCompression;
|
int aeHistCompression;
|
||||||
int embProfileLength;
|
int embProfileLength;
|
||||||
@ -80,11 +80,12 @@ namespace rtengine {
|
|||||||
void getDimensions (int& w, int& h, double& scaleFac);
|
void getDimensions (int& w, int& h, double& scaleFac);
|
||||||
|
|
||||||
static Thumbnail* loadQuickFromRaw (const Glib::ustring& fname, rtengine::RawMetaDataLocation& rml, int &w, int &h, int fixwh, bool rotate);
|
static Thumbnail* loadQuickFromRaw (const Glib::ustring& fname, rtengine::RawMetaDataLocation& rml, int &w, int &h, int fixwh, bool rotate);
|
||||||
static Thumbnail* loadFromRaw (const Glib::ustring& fname, RawMetaDataLocation& rml, int &w, int &h, int fixwh, bool rotate);
|
static Thumbnail* loadFromRaw (const Glib::ustring& fname, RawMetaDataLocation& rml, int &w, int &h, int fixwh, double wbEq, bool rotate);
|
||||||
static Thumbnail* loadFromImage (const Glib::ustring& fname, int &w, int &h, int fixwh);
|
static Thumbnail* loadFromImage (const Glib::ustring& fname, int &w, int &h, int fixwh, double wbEq);
|
||||||
|
|
||||||
void getCamWB (double& temp, double& green);
|
void getCamWB (double& temp, double& green);
|
||||||
void getAutoWB (double& temp, double& green);
|
void getAutoWB (double& temp, double& green, double equal);
|
||||||
|
void getAutoWBMultipliers (double& rm, double& gm, double& bm);
|
||||||
void getSpotWB (const procparams::ProcParams& params, int x, int y, int rect, double& temp, double& green);
|
void getSpotWB (const procparams::ProcParams& params, int x, int y, int rect, double& temp, double& green);
|
||||||
void applyAutoExp (procparams::ProcParams& pparams);
|
void applyAutoExp (procparams::ProcParams& pparams);
|
||||||
|
|
||||||
|
@ -105,11 +105,14 @@ IImage16* processImage (ProcessingJob* pjob, int& errorCode, ProgressListener* p
|
|||||||
imgsrc->HLRecovery_Global( params.hlrecovery );
|
imgsrc->HLRecovery_Global( params.hlrecovery );
|
||||||
if (pl) pl->setProgress (0.40);
|
if (pl) pl->setProgress (0.40);
|
||||||
// set the color temperature
|
// set the color temperature
|
||||||
ColorTemp currWB = ColorTemp (params.wb.temperature, params.wb.green, params.wb.method);
|
ColorTemp currWB = ColorTemp (params.wb.temperature, params.wb.green, params.wb.equal, params.wb.method);
|
||||||
if (params.wb.method=="Camera")
|
if (params.wb.method=="Camera")
|
||||||
currWB = imgsrc->getWB ();
|
currWB = imgsrc->getWB ();
|
||||||
else if (params.wb.method=="Auto")
|
else if (params.wb.method=="Auto") {
|
||||||
currWB = imgsrc->getAutoWB ();
|
double rm, bm, gm;
|
||||||
|
imgsrc->getAutoWBMultipliers(rm, bm, gm);
|
||||||
|
currWB.update(rm, bm, gm, params.wb.equal);
|
||||||
|
}
|
||||||
Imagefloat* baseImg = new Imagefloat (fw, fh);
|
Imagefloat* baseImg = new Imagefloat (fw, fh);
|
||||||
imgsrc->getImage (currWB, tr, baseImg, pp, params.hlrecovery, params.icm, params.raw);
|
imgsrc->getImage (currWB, tr, baseImg, pp, params.hlrecovery, params.icm, params.raw);
|
||||||
if (pl) pl->setProgress (0.45);
|
if (pl) pl->setProgress (0.45);
|
||||||
|
@ -188,7 +188,7 @@ int StdImageSource::load (Glib::ustring fname, bool batch) {
|
|||||||
plistener->setProgress (1.0);
|
plistener->setProgress (1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
wb = ColorTemp (1.0,1.0,1.0);
|
wb = ColorTemp (1.0,1.0,1.0,1.0);
|
||||||
//this is probably a mistake if embedded profile is not D65
|
//this is probably a mistake if embedded profile is not D65
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -292,11 +292,22 @@ void StdImageSource::getAutoExpHistogram (LUTu & histogram, int& histcompr) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ColorTemp StdImageSource::getAutoWB () {
|
void StdImageSource::getAutoWBMultipliers (double &rm, double &bm, double &gm) {
|
||||||
return img->getAutoWB();
|
if (redAWBMul != -1.) {
|
||||||
|
rm = redAWBMul;
|
||||||
|
gm = greenAWBMul;
|
||||||
|
bm = blueAWBMul;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
img->getAutoWBMultipliers(rm, gm, bm);
|
||||||
|
|
||||||
|
redAWBMul = rm;
|
||||||
|
greenAWBMul = gm;
|
||||||
|
blueAWBMul = bm;
|
||||||
}
|
}
|
||||||
|
|
||||||
ColorTemp StdImageSource::getSpotWB (std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D>& blue, int tran) {
|
ColorTemp StdImageSource::getSpotWB (std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D>& blue, int tran, double equal) {
|
||||||
int rn, gn, bn;
|
int rn, gn, bn;
|
||||||
double reds, greens, blues;
|
double reds, greens, blues;
|
||||||
img->getSpotWBData(reds, greens, blues, rn, gn, bn, red, green, blue, tran);
|
img->getSpotWBData(reds, greens, blues, rn, gn, bn, red, green, blue, tran);
|
||||||
@ -305,7 +316,7 @@ ColorTemp StdImageSource::getSpotWB (std::vector<Coord2D> &red, std::vector<Coor
|
|||||||
if( settings->verbose )
|
if( settings->verbose )
|
||||||
printf ("AVG: %g %g %g\n", reds/rn, greens/gn, blues/bn);
|
printf ("AVG: %g %g %g\n", reds/rn, greens/gn, blues/bn);
|
||||||
|
|
||||||
return ColorTemp (reds/rn*img_r, greens/gn*img_g, blues/bn*img_b);
|
return ColorTemp (reds/rn*img_r, greens/gn*img_g, blues/bn*img_b, equal);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -45,8 +45,8 @@ class StdImageSource : public ImageSource {
|
|||||||
int load (Glib::ustring fname, bool batch = false);
|
int load (Glib::ustring fname, bool batch = false);
|
||||||
void getImage (ColorTemp ctemp, int tran, Imagefloat* image, PreviewProps pp, HRecParams hrp, ColorManagementParams cmp, RAWParams raw);
|
void getImage (ColorTemp ctemp, int tran, Imagefloat* image, PreviewProps pp, HRecParams hrp, ColorManagementParams cmp, RAWParams raw);
|
||||||
ColorTemp getWB () { return wb; }
|
ColorTemp getWB () { return wb; }
|
||||||
ColorTemp getAutoWB ();
|
void getAutoWBMultipliers (double &rm, double &bm, double &gm);
|
||||||
ColorTemp getSpotWB (std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue, int tran);
|
ColorTemp getSpotWB (std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue, int tran, double equal);
|
||||||
|
|
||||||
bool isWBProviderReady () { return true; };
|
bool isWBProviderReady () { return true; };
|
||||||
|
|
||||||
|
@ -65,8 +65,9 @@
|
|||||||
#define ADDSET_CAT_CHROMA_M 57
|
#define ADDSET_CAT_CHROMA_M 57
|
||||||
#define ADDSET_CAT_HUE 58
|
#define ADDSET_CAT_HUE 58
|
||||||
#define ADDSET_CAT_BADPIX 59
|
#define ADDSET_CAT_BADPIX 59
|
||||||
|
#define ADDSET_WB_EQUAL 60
|
||||||
|
|
||||||
// When adding items, make sure to update ADDSET_PARAM_NUM
|
// When adding items, make sure to update ADDSET_PARAM_NUM
|
||||||
#define ADDSET_PARAM_NUM 60 // THIS IS USED AS A DELIMITER!!
|
#define ADDSET_PARAM_NUM 61 // THIS IS USED AS A DELIMITER!!
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -126,7 +126,7 @@ void BatchToolPanelCoordinator::initSession () {
|
|||||||
|
|
||||||
toneCurve->setAdjusterBehavior (false, false, false, false, false, false, false, false);
|
toneCurve->setAdjusterBehavior (false, false, false, false, false, false, false, false);
|
||||||
lcurve->setAdjusterBehavior (false, false, false);
|
lcurve->setAdjusterBehavior (false, false, false);
|
||||||
whitebalance->setAdjusterBehavior (false, false);
|
whitebalance->setAdjusterBehavior (false, false, false);
|
||||||
vibrance->setAdjusterBehavior (false, false, false);
|
vibrance->setAdjusterBehavior (false, false, false);
|
||||||
vignetting->setAdjusterBehavior (false, false, false, false);
|
vignetting->setAdjusterBehavior (false, false, false, false);
|
||||||
colorappearance->setAdjusterBehavior (false, false, false, false, false, false, false, false, false, false, false, false, false);
|
colorappearance->setAdjusterBehavior (false, false, false, false, false, false, false, false, false, false, false, false, false);
|
||||||
@ -154,7 +154,7 @@ void BatchToolPanelCoordinator::initSession () {
|
|||||||
|
|
||||||
toneCurve->setAdjusterBehavior (options.baBehav[ADDSET_TC_EXPCOMP], options.baBehav[ADDSET_TC_HLCOMPAMOUNT],options.baBehav[ADDSET_TC_HLCOMPTHRESH], options.baBehav[ADDSET_TC_BRIGHTNESS], options.baBehav[ADDSET_TC_BLACKLEVEL],options.baBehav[ADDSET_TC_SHCOMP], options.baBehav[ADDSET_TC_CONTRAST], options.baBehav[ADDSET_TC_SATURATION]);
|
toneCurve->setAdjusterBehavior (options.baBehav[ADDSET_TC_EXPCOMP], options.baBehav[ADDSET_TC_HLCOMPAMOUNT],options.baBehav[ADDSET_TC_HLCOMPTHRESH], options.baBehav[ADDSET_TC_BRIGHTNESS], options.baBehav[ADDSET_TC_BLACKLEVEL],options.baBehav[ADDSET_TC_SHCOMP], options.baBehav[ADDSET_TC_CONTRAST], options.baBehav[ADDSET_TC_SATURATION]);
|
||||||
lcurve->setAdjusterBehavior (options.baBehav[ADDSET_LC_BRIGHTNESS], options.baBehav[ADDSET_LC_CONTRAST], options.baBehav[ADDSET_LC_CHROMATICITY]);
|
lcurve->setAdjusterBehavior (options.baBehav[ADDSET_LC_BRIGHTNESS], options.baBehav[ADDSET_LC_CONTRAST], options.baBehav[ADDSET_LC_CHROMATICITY]);
|
||||||
whitebalance->setAdjusterBehavior (options.baBehav[ADDSET_WB_TEMPERATURE], options.baBehav[ADDSET_WB_GREEN]);
|
whitebalance->setAdjusterBehavior (options.baBehav[ADDSET_WB_TEMPERATURE], options.baBehav[ADDSET_WB_GREEN], options.baBehav[ADDSET_WB_EQUAL]);
|
||||||
vignetting->setAdjusterBehavior (options.baBehav[ADDSET_VIGN_AMOUNT], options.baBehav[ADDSET_VIGN_RADIUS], options.baBehav[ADDSET_VIGN_STRENGTH], options.baBehav[ADDSET_VIGN_CENTER]);
|
vignetting->setAdjusterBehavior (options.baBehav[ADDSET_VIGN_AMOUNT], options.baBehav[ADDSET_VIGN_RADIUS], options.baBehav[ADDSET_VIGN_STRENGTH], options.baBehav[ADDSET_VIGN_CENTER]);
|
||||||
colorappearance->setAdjusterBehavior (options.baBehav[ADDSET_CAT_DEGREE], options.baBehav[ADDSET_CAT_ADAPTSCENE], options.baBehav[ADDSET_CAT_ADAPTVIEWING],options.baBehav[ADDSET_CAT_BADPIX], options.baBehav[ADDSET_CAT_LIGHT], options.baBehav[ADDSET_CAT_CHROMA],options.baBehav[ADDSET_CAT_CONTRAST],options.baBehav[ADDSET_CAT_RSTPRO],options.baBehav[ADDSET_CAT_BRIGHT],options.baBehav[ADDSET_CAT_CONTRAST_Q],options.baBehav[ADDSET_CAT_CHROMA_S],options.baBehav[ADDSET_CAT_CHROMA_M],options.baBehav[ADDSET_CAT_HUE]);
|
colorappearance->setAdjusterBehavior (options.baBehav[ADDSET_CAT_DEGREE], options.baBehav[ADDSET_CAT_ADAPTSCENE], options.baBehav[ADDSET_CAT_ADAPTVIEWING],options.baBehav[ADDSET_CAT_BADPIX], options.baBehav[ADDSET_CAT_LIGHT], options.baBehav[ADDSET_CAT_CHROMA],options.baBehav[ADDSET_CAT_CONTRAST],options.baBehav[ADDSET_CAT_RSTPRO],options.baBehav[ADDSET_CAT_BRIGHT],options.baBehav[ADDSET_CAT_CONTRAST_Q],options.baBehav[ADDSET_CAT_CHROMA_S],options.baBehav[ADDSET_CAT_CHROMA_M],options.baBehav[ADDSET_CAT_HUE]);
|
||||||
rotate->setAdjusterBehavior (options.baBehav[ADDSET_ROTATE_DEGREE]);
|
rotate->setAdjusterBehavior (options.baBehav[ADDSET_ROTATE_DEGREE]);
|
||||||
@ -201,6 +201,7 @@ void BatchToolPanelCoordinator::initSession () {
|
|||||||
|
|
||||||
if (options.baBehav[ADDSET_WB_TEMPERATURE]) pparams.wb.temperature = 0;
|
if (options.baBehav[ADDSET_WB_TEMPERATURE]) pparams.wb.temperature = 0;
|
||||||
if (options.baBehav[ADDSET_WB_GREEN]) pparams.wb.green = 0;
|
if (options.baBehav[ADDSET_WB_GREEN]) pparams.wb.green = 0;
|
||||||
|
if (options.baBehav[ADDSET_WB_EQUAL]) pparams.wb.equal = 0;
|
||||||
|
|
||||||
if (options.baBehav[ADDSET_VIBRANCE_PASTELS]) pparams.vibrance.pastels = 0;
|
if (options.baBehav[ADDSET_VIBRANCE_PASTELS]) pparams.vibrance.pastels = 0;
|
||||||
if (options.baBehav[ADDSET_VIBRANCE_SATURATED]) pparams.vibrance.saturated = 0;
|
if (options.baBehav[ADDSET_VIBRANCE_SATURATED]) pparams.vibrance.saturated = 0;
|
||||||
@ -314,10 +315,10 @@ void BatchToolPanelCoordinator::panelChanged (rtengine::ProcEvent event, const G
|
|||||||
paramcListeners[i]->procParamsChanged (&pparams, event, descr, &pparamsEdited);
|
paramcListeners[i]->procParamsChanged (&pparams, event, descr, &pparamsEdited);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BatchToolPanelCoordinator::getAutoWB (double& temp, double& green) {
|
void BatchToolPanelCoordinator::getAutoWB (double& temp, double& green, double equal) {
|
||||||
|
|
||||||
if (!selected.empty())
|
if (!selected.empty())
|
||||||
selected[0]->getAutoWB (temp, green);
|
selected[0]->getAutoWB (temp, green, equal);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BatchToolPanelCoordinator::getCamWB (double& temp, double& green) {
|
void BatchToolPanelCoordinator::getCamWB (double& temp, double& green) {
|
||||||
|
@ -60,7 +60,7 @@ class BatchToolPanelCoordinator :
|
|||||||
void profileChange (const rtengine::procparams::PartialProfile* nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited=NULL);
|
void profileChange (const rtengine::procparams::PartialProfile* nparams, rtengine::ProcEvent event, const Glib::ustring& descr, const ParamsEdited* paramsEdited=NULL);
|
||||||
|
|
||||||
// wbprovider interface
|
// wbprovider interface
|
||||||
void getAutoWB (double& temp, double& green);
|
void getAutoWB (double& temp, double& green, double equal);
|
||||||
void getCamWB (double& temp, double& green);
|
void getCamWB (double& temp, double& green);
|
||||||
|
|
||||||
// thumbnaillistener interface
|
// thumbnaillistener interface
|
||||||
|
@ -25,9 +25,12 @@
|
|||||||
|
|
||||||
CacheImageData::CacheImageData ()
|
CacheImageData::CacheImageData ()
|
||||||
: md5(""), supported(false), format(FT_Invalid), rankOld(-1), inTrashOld(false), recentlySaved(false),
|
: md5(""), supported(false), format(FT_Invalid), rankOld(-1), inTrashOld(false), recentlySaved(false),
|
||||||
timeValid(false), exifValid(false), thumbImgType(0) {
|
timeValid(false), exifValid(false), redAWBMul(-1.0), greenAWBMul(-1.0), blueAWBMul(-1.0), thumbImgType(0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Load the General, DateTime, ExifInfo, File info and ExtraRawInfo sections of the image data file
|
||||||
|
*/
|
||||||
int CacheImageData::load (const Glib::ustring& fname) {
|
int CacheImageData::load (const Glib::ustring& fname) {
|
||||||
|
|
||||||
rtengine::SafeKeyFile keyFile;
|
rtengine::SafeKeyFile keyFile;
|
||||||
@ -104,6 +107,9 @@ int CacheImageData::load (const Glib::ustring& fname) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Save the General, DateTime, ExifInfo, File info and ExtraRawInfo sections of the image data file
|
||||||
|
*/
|
||||||
int CacheImageData::save (const Glib::ustring& fname) {
|
int CacheImageData::save (const Glib::ustring& fname) {
|
||||||
|
|
||||||
rtengine::SafeKeyFile keyFile;
|
rtengine::SafeKeyFile keyFile;
|
||||||
|
@ -56,6 +56,11 @@ class CacheImageData {
|
|||||||
Glib::ustring filetype;
|
Glib::ustring filetype;
|
||||||
Glib::ustring expcomp;
|
Glib::ustring expcomp;
|
||||||
|
|
||||||
|
// store a copy of the autoWB's multipliers computed in Thumbnail::_generateThumbnailImage
|
||||||
|
// they are not stored in the cache file by this class, but by rtengine::Thumbnail
|
||||||
|
// -1 = Unknown
|
||||||
|
double redAWBMul, greenAWBMul, blueAWBMul;
|
||||||
|
|
||||||
// additional info on raw images
|
// additional info on raw images
|
||||||
int rotate;
|
int rotate;
|
||||||
int thumbImgType;
|
int thumbImgType;
|
||||||
|
@ -423,6 +423,7 @@ void Options::setDefaults () {
|
|||||||
0, // ADDSET_CAT_JLIGHT
|
0, // ADDSET_CAT_JLIGHT
|
||||||
0, // ADDSET_CAT_CHROMA
|
0, // ADDSET_CAT_CHROMA
|
||||||
0, // ADDSET_CAT_CONTRAST
|
0, // ADDSET_CAT_CONTRAST
|
||||||
|
0, // ADDSET_WB_EQUAL
|
||||||
|
|
||||||
};
|
};
|
||||||
baBehav = std::vector<int> (babehav, babehav+ADDSET_PARAM_NUM);
|
baBehav = std::vector<int> (babehav, babehav+ADDSET_PARAM_NUM);
|
||||||
@ -679,7 +680,6 @@ if (keyFile.has_group ("Color Management")) {
|
|||||||
if (keyFile.has_key ("Color Management", "MonitorProfile")) rtSettings.monitorProfile = keyFile.get_string ("Color Management", "MonitorProfile");
|
if (keyFile.has_key ("Color Management", "MonitorProfile")) rtSettings.monitorProfile = keyFile.get_string ("Color Management", "MonitorProfile");
|
||||||
if (keyFile.has_key ("Color Management", "AutoMonitorProfile")) rtSettings.autoMonitorProfile = keyFile.get_boolean ("Color Management", "AutoMonitorProfile");
|
if (keyFile.has_key ("Color Management", "AutoMonitorProfile")) rtSettings.autoMonitorProfile = keyFile.get_boolean ("Color Management", "AutoMonitorProfile");
|
||||||
if (keyFile.has_key ("Color Management", "Autocielab")) rtSettings.autocielab = keyFile.get_boolean ("Color Management", "Autocielab");
|
if (keyFile.has_key ("Color Management", "Autocielab")) rtSettings.autocielab = keyFile.get_boolean ("Color Management", "Autocielab");
|
||||||
if (keyFile.has_key ("Color Management", "Ciencamfloat")) rtSettings.ciecamfloat = keyFile.get_boolean ("Color Management", "Ciecamfloat");
|
|
||||||
if (keyFile.has_key ("Color Management", "RGBcurvesLumamode_Gamut")) rtSettings.rgbcurveslumamode_gamut = keyFile.get_boolean ("Color Management", "RGBcurvesLumamode_Gamut");
|
if (keyFile.has_key ("Color Management", "RGBcurvesLumamode_Gamut")) rtSettings.rgbcurveslumamode_gamut = keyFile.get_boolean ("Color Management", "RGBcurvesLumamode_Gamut");
|
||||||
|
|
||||||
if (keyFile.has_key ("Color Management", "Intent")) rtSettings.colorimetricIntent = keyFile.get_integer("Color Management", "Intent");
|
if (keyFile.has_key ("Color Management", "Intent")) rtSettings.colorimetricIntent = keyFile.get_integer("Color Management", "Intent");
|
||||||
|
@ -133,6 +133,7 @@ void ParamsEdited::set (bool v) {
|
|||||||
wb.method = v;
|
wb.method = v;
|
||||||
wb.green = v;
|
wb.green = v;
|
||||||
wb.temperature = v;
|
wb.temperature = v;
|
||||||
|
wb.equal = v;
|
||||||
//colorShift.a = v;
|
//colorShift.a = v;
|
||||||
//colorShift.b = v;
|
//colorShift.b = v;
|
||||||
//lumaDenoise.enabled = v;
|
//lumaDenoise.enabled = v;
|
||||||
@ -375,6 +376,7 @@ void ParamsEdited::initFrom (const std::vector<rtengine::procparams::ProcParams>
|
|||||||
//colorBoost.saturationlimit = colorBoost.saturationlimit && p.colorBoost.saturationlimit == other.colorBoost.saturationlimit;
|
//colorBoost.saturationlimit = colorBoost.saturationlimit && p.colorBoost.saturationlimit == other.colorBoost.saturationlimit;
|
||||||
wb.method = wb.method && p.wb.method == other.wb.method;
|
wb.method = wb.method && p.wb.method == other.wb.method;
|
||||||
wb.green = wb.green && p.wb.green == other.wb.green;
|
wb.green = wb.green && p.wb.green == other.wb.green;
|
||||||
|
wb.equal = wb.equal && p.wb.equal == other.wb.equal;
|
||||||
wb.temperature = wb.temperature && p.wb.temperature == other.wb.temperature;
|
wb.temperature = wb.temperature && p.wb.temperature == other.wb.temperature;
|
||||||
//colorShift.a = colorShift.a && p.colorShift.a == other.colorShift.a;
|
//colorShift.a = colorShift.a && p.colorShift.a == other.colorShift.a;
|
||||||
//colorShift.b = colorShift.b && p.colorShift.b == other.colorShift.b;
|
//colorShift.b = colorShift.b && p.colorShift.b == other.colorShift.b;
|
||||||
@ -593,6 +595,7 @@ void ParamsEdited::combine (rtengine::procparams::ProcParams& toEdit, const rten
|
|||||||
//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;
|
||||||
if (wb.method) toEdit.wb.method = mods.wb.method;
|
if (wb.method) toEdit.wb.method = mods.wb.method;
|
||||||
|
if (wb.equal) toEdit.wb.equal = dontforceSet && options.baBehav[ADDSET_WB_EQUAL] ? toEdit.wb.equal + mods.wb.equal : mods.wb.equal;
|
||||||
if (wb.green) toEdit.wb.green = dontforceSet && options.baBehav[ADDSET_WB_GREEN] ? toEdit.wb.green + mods.wb.green : mods.wb.green;
|
if (wb.green) toEdit.wb.green = dontforceSet && options.baBehav[ADDSET_WB_GREEN] ? toEdit.wb.green + mods.wb.green : mods.wb.green;
|
||||||
if (wb.temperature) toEdit.wb.temperature = dontforceSet && options.baBehav[ADDSET_WB_TEMPERATURE] ? toEdit.wb.temperature + mods.wb.temperature : mods.wb.temperature;
|
if (wb.temperature) toEdit.wb.temperature = dontforceSet && options.baBehav[ADDSET_WB_TEMPERATURE] ? toEdit.wb.temperature + mods.wb.temperature : mods.wb.temperature;
|
||||||
//if (colorShift.a) toEdit.colorShift.a = dontforceSet && options.baBehav[ADDSET_CS_BLUEYELLOW] ? toEdit.colorShift.a + mods.colorShift.a : mods.colorShift.a;
|
//if (colorShift.a) toEdit.colorShift.a = dontforceSet && options.baBehav[ADDSET_CS_BLUEYELLOW] ? toEdit.colorShift.a + mods.colorShift.a : mods.colorShift.a;
|
||||||
|
@ -143,6 +143,7 @@ class WBParamsEdited {
|
|||||||
bool method;
|
bool method;
|
||||||
bool temperature;
|
bool temperature;
|
||||||
bool green;
|
bool green;
|
||||||
|
bool equal;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*class ColorShiftParamsEdited {
|
/*class ColorShiftParamsEdited {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#define _PPVERSION_
|
#define _PPVERSION_
|
||||||
|
|
||||||
// This number have to be incremented whenever the PP3 file format is modified
|
// This number have to be incremented whenever the PP3 file format is modified
|
||||||
#define PPVERSION 308
|
#define PPVERSION 309
|
||||||
#define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified
|
#define PPVERSION_AEXP 301 //value of PPVERSION when auto exposure algorithm was modified
|
||||||
|
|
||||||
/* Log of version changes
|
/* Log of version changes
|
||||||
|
@ -201,6 +201,7 @@ Gtk::Widget* Preferences::getBatchProcPanel () {
|
|||||||
mi->set_value (behavColumns.label, M("TP_WBALANCE_LABEL"));
|
mi->set_value (behavColumns.label, M("TP_WBALANCE_LABEL"));
|
||||||
appendBehavList (mi, M("TP_WBALANCE_TEMPERATURE"), ADDSET_WB_TEMPERATURE, true);
|
appendBehavList (mi, M("TP_WBALANCE_TEMPERATURE"), ADDSET_WB_TEMPERATURE, true);
|
||||||
appendBehavList (mi, M("TP_WBALANCE_GREEN"), ADDSET_WB_GREEN, true);
|
appendBehavList (mi, M("TP_WBALANCE_GREEN"), ADDSET_WB_GREEN, true);
|
||||||
|
appendBehavList (mi, M("TP_WBALANCE_EQREDBLUE"), ADDSET_WB_EQUAL, true);
|
||||||
|
|
||||||
mi = behModel->append ();
|
mi = behModel->append ();
|
||||||
mi->set_value (behavColumns.label, M("TP_COLORAPP_LABEL"));
|
mi->set_value (behavColumns.label, M("TP_COLORAPP_LABEL"));
|
||||||
|
@ -72,13 +72,13 @@ Thumbnail::Thumbnail (CacheManager* cm, const Glib::ustring& fname, const std::s
|
|||||||
|
|
||||||
|
|
||||||
cfs.md5 = md5;
|
cfs.md5 = md5;
|
||||||
_generateThumbnailImage ();
|
|
||||||
if (pparams) {
|
if (pparams) {
|
||||||
this->pparams = *pparams;
|
this->pparams = *pparams;
|
||||||
pparamsValid = true;
|
pparamsValid = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
loadProcParams ();
|
loadProcParams ();
|
||||||
|
_generateThumbnailImage ();
|
||||||
cfs.recentlySaved = false;
|
cfs.recentlySaved = false;
|
||||||
|
|
||||||
initial_ = false;
|
initial_ = false;
|
||||||
@ -107,17 +107,17 @@ void Thumbnail::_generateThumbnailImage () {
|
|||||||
cfs.timeValid = false;
|
cfs.timeValid = false;
|
||||||
|
|
||||||
if (ext.lowercase()=="jpg" || ext.lowercase()=="jpeg") {
|
if (ext.lowercase()=="jpg" || ext.lowercase()=="jpeg") {
|
||||||
tpp = rtengine::Thumbnail::loadFromImage (fname, tw, th, 1);
|
tpp = rtengine::Thumbnail::loadFromImage (fname, tw, th, 1, pparams.wb.equal);
|
||||||
if (tpp)
|
if (tpp)
|
||||||
cfs.format = FT_Jpeg;
|
cfs.format = FT_Jpeg;
|
||||||
}
|
}
|
||||||
else if (ext.lowercase()=="png") {
|
else if (ext.lowercase()=="png") {
|
||||||
tpp = rtengine::Thumbnail::loadFromImage (fname, tw, th, 1);
|
tpp = rtengine::Thumbnail::loadFromImage (fname, tw, th, 1, pparams.wb.equal);
|
||||||
if (tpp)
|
if (tpp)
|
||||||
cfs.format = FT_Png;
|
cfs.format = FT_Png;
|
||||||
}
|
}
|
||||||
else if (ext.lowercase()=="tif" || ext.lowercase()=="tiff") {
|
else if (ext.lowercase()=="tif" || ext.lowercase()=="tiff") {
|
||||||
tpp = rtengine::Thumbnail::loadFromImage (fname, tw, th, 1);
|
tpp = rtengine::Thumbnail::loadFromImage (fname, tw, th, 1, pparams.wb.equal);
|
||||||
if (tpp)
|
if (tpp)
|
||||||
cfs.format = FT_Tiff;
|
cfs.format = FT_Tiff;
|
||||||
}
|
}
|
||||||
@ -136,7 +136,7 @@ void Thumbnail::_generateThumbnailImage () {
|
|||||||
if ( tpp == NULL )
|
if ( tpp == NULL )
|
||||||
{
|
{
|
||||||
quick = false;
|
quick = false;
|
||||||
tpp = rtengine::Thumbnail::loadFromRaw (fname, ri, tw, th, 1, TRUE);
|
tpp = rtengine::Thumbnail::loadFromRaw (fname, ri, tw, th, 1, pparams.wb.equal, TRUE);
|
||||||
}
|
}
|
||||||
if (tpp) {
|
if (tpp) {
|
||||||
cfs.format = FT_Raw;
|
cfs.format = FT_Raw;
|
||||||
@ -146,7 +146,8 @@ void Thumbnail::_generateThumbnailImage () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (tpp)
|
if (tpp)
|
||||||
{
|
{
|
||||||
|
tpp->getAutoWBMultipliers(cfs.redAWBMul, cfs.greenAWBMul, cfs.blueAWBMul);
|
||||||
_saveThumbnail ();
|
_saveThumbnail ();
|
||||||
cfs.supported = true;
|
cfs.supported = true;
|
||||||
needsReProcessing = true;
|
needsReProcessing = true;
|
||||||
@ -178,7 +179,7 @@ const ProcParams& Thumbnail::getProcParams () {
|
|||||||
}
|
}
|
||||||
else if (pparams.wb.method=="Auto") {
|
else if (pparams.wb.method=="Auto") {
|
||||||
double ct;
|
double ct;
|
||||||
getAutoWB (ct, pparams.wb.green);
|
getAutoWB (ct, pparams.wb.green, pparams.wb.equal);
|
||||||
pparams.wb.temperature = ct;
|
pparams.wb.temperature = ct;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -558,6 +559,17 @@ const Glib::ustring& Thumbnail::getDateTimeString () {
|
|||||||
return dateTimeString;
|
return dateTimeString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Thumbnail::getAutoWB (double& temp, double& green, double equal) {
|
||||||
|
if (cfs.redAWBMul != -1.0) {
|
||||||
|
rtengine::ColorTemp ct(cfs.redAWBMul, cfs.greenAWBMul, cfs.blueAWBMul, equal);
|
||||||
|
temp = ct.getTemp();
|
||||||
|
green = ct.getGreen();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
temp = green = -1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ThFileType Thumbnail::getType () {
|
ThFileType Thumbnail::getType () {
|
||||||
|
|
||||||
return (ThFileType) cfs.format;
|
return (ThFileType) cfs.format;
|
||||||
@ -615,6 +627,14 @@ int Thumbnail::infoFromImage (const Glib::ustring& fname, rtengine::RawMetaDataL
|
|||||||
return deg;
|
return deg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read all thumbnail's data from the cache; build and save them if doesn't exist - NON PROTECTED
|
||||||
|
* This includes:
|
||||||
|
* - image's bitmap (*.rtti)
|
||||||
|
* - auto exposure's histogram (full thumbnail only)
|
||||||
|
* - embedded profile (full thumbnail only)
|
||||||
|
* - LiveThumbData section of the data file
|
||||||
|
*/
|
||||||
void Thumbnail::_loadThumbnail(bool firstTrial) {
|
void Thumbnail::_loadThumbnail(bool firstTrial) {
|
||||||
|
|
||||||
needsReProcessing = true;
|
needsReProcessing = true;
|
||||||
@ -626,7 +646,10 @@ void Thumbnail::_loadThumbnail(bool firstTrial) {
|
|||||||
|
|
||||||
// load supplementary data
|
// load supplementary data
|
||||||
bool succ = tpp->readData (getCacheFileName ("data")+".txt");
|
bool succ = tpp->readData (getCacheFileName ("data")+".txt");
|
||||||
|
|
||||||
|
if (succ)
|
||||||
|
tpp->getAutoWBMultipliers(cfs.redAWBMul, cfs.greenAWBMul, cfs.blueAWBMul);
|
||||||
|
|
||||||
// thumbnail image
|
// thumbnail image
|
||||||
succ = succ && tpp->readImage (getCacheFileName ("images"));
|
succ = succ && tpp->readImage (getCacheFileName ("images"));
|
||||||
|
|
||||||
@ -656,11 +679,27 @@ void Thumbnail::_loadThumbnail(bool firstTrial) {
|
|||||||
if (!initial_ && tpp) tw = tpp->getImageWidth (getProcParams(), th, imgRatio); // this might return 0 if image was just building
|
if (!initial_ && tpp) tw = tpp->getImageWidth (getProcParams(), th, imgRatio); // this might return 0 if image was just building
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read all thumbnail's data from the cache; build and save them if doesn't exist - MUTEX PROTECTED
|
||||||
|
* This includes:
|
||||||
|
* - image's bitmap (*.rtti)
|
||||||
|
* - auto exposure's histogram (full thumbnail only)
|
||||||
|
* - embedded profile (full thumbnail only)
|
||||||
|
* - LiveThumbData section of the data file
|
||||||
|
*/
|
||||||
void Thumbnail::loadThumbnail (bool firstTrial) {
|
void Thumbnail::loadThumbnail (bool firstTrial) {
|
||||||
Glib::Mutex::Lock lock(mutex);
|
Glib::Mutex::Lock lock(mutex);
|
||||||
_loadThumbnail(firstTrial);
|
_loadThumbnail(firstTrial);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Save thumbnail's data to the cache - NON PROTECTED
|
||||||
|
* This includes:
|
||||||
|
* - image's bitmap (*.rtti)
|
||||||
|
* - auto exposure's histogram (full thumbnail only)
|
||||||
|
* - embedded profile (full thumbnail only)
|
||||||
|
* - LiveThumbData section of the data file
|
||||||
|
*/
|
||||||
void Thumbnail::_saveThumbnail () {
|
void Thumbnail::_saveThumbnail () {
|
||||||
|
|
||||||
if (!tpp)
|
if (!tpp)
|
||||||
@ -686,12 +725,26 @@ void Thumbnail::_saveThumbnail () {
|
|||||||
tpp->writeData (getCacheFileName ("data")+".txt");
|
tpp->writeData (getCacheFileName ("data")+".txt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Save thumbnail's data to the cache - MUTEX PROTECTED
|
||||||
|
* This includes:
|
||||||
|
* - image's bitmap (*.rtti)
|
||||||
|
* - auto exposure's histogram (full thumbnail only)
|
||||||
|
* - embedded profile (full thumbnail only)
|
||||||
|
* - LiveThumbData section of the data file
|
||||||
|
*/
|
||||||
void Thumbnail::saveThumbnail ()
|
void Thumbnail::saveThumbnail ()
|
||||||
{
|
{
|
||||||
Glib::Mutex::Lock lock(mutex);
|
Glib::Mutex::Lock lock(mutex);
|
||||||
_saveThumbnail();
|
_saveThumbnail();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update the cached files
|
||||||
|
* - updatePParams==true (default) : write the procparams file (sidecar or cache, depending on the options)
|
||||||
|
* - updateCacheImageData==true (default) : write the CacheImageData values in the cache folder,
|
||||||
|
* i.e. some General, DateTime, ExifInfo, File info and ExtraRawInfo,
|
||||||
|
*/
|
||||||
void Thumbnail::updateCache (bool updatePParams, bool updateCacheImageData) {
|
void Thumbnail::updateCache (bool updatePParams, bool updateCacheImageData) {
|
||||||
|
|
||||||
if (updatePParams && pparamsValid) {
|
if (updatePParams && pparamsValid) {
|
||||||
|
@ -109,7 +109,7 @@ class Thumbnail {
|
|||||||
const Glib::ustring& getExifString ();
|
const Glib::ustring& getExifString ();
|
||||||
const Glib::ustring& getDateTimeString ();
|
const Glib::ustring& getDateTimeString ();
|
||||||
void getCamWB (double& temp, double& green) { if (tpp) tpp->getCamWB (temp, green); else temp = green = -1.0; }
|
void getCamWB (double& temp, double& green) { if (tpp) tpp->getCamWB (temp, green); else temp = green = -1.0; }
|
||||||
void getAutoWB (double& temp, double& green) { if (tpp) tpp->getAutoWB (temp, green); else temp = green = -1.0; }
|
void getAutoWB (double& temp, double& green, double equal);
|
||||||
void getSpotWB (int x, int y, int rect, double& temp, double& green) { if (tpp) tpp->getSpotWB (getProcParams(), x, y, rect, temp, green); else temp = green = -1.0; }
|
void getSpotWB (int x, int y, int rect, double& temp, double& green) { if (tpp) tpp->getSpotWB (getProcParams(), x, y, rect, temp, green); else temp = green = -1.0; }
|
||||||
void applyAutoExp (rtengine::procparams::ProcParams& pparams) { if (tpp) tpp->applyAutoExp (pparams); }
|
void applyAutoExp (rtengine::procparams::ProcParams& pparams) { if (tpp) tpp->applyAutoExp (pparams); }
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ class ToolPanelCoordinator : public ToolPanelListener,
|
|||||||
virtual ~ToolPanelCoordinator ();
|
virtual ~ToolPanelCoordinator ();
|
||||||
|
|
||||||
bool getChangedState () { return hasChanged; }
|
bool getChangedState () { return hasChanged; }
|
||||||
void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve,LUTu & histCCurve, LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma);
|
void updateCurveBackgroundHistogram (LUTu & histToneCurve, LUTu & histLCurve,LUTu & histCCurve, LUTu & histLCAM, LUTu & histCCAM, LUTu & histRed, LUTu & histGreen, LUTu & histBlue, LUTu & histLuma);
|
||||||
void foldAllButOne (Gtk::Box* parent, FoldableToolPanel* openedSection);
|
void foldAllButOne (Gtk::Box* parent, FoldableToolPanel* openedSection);
|
||||||
|
|
||||||
// multiple listeners can be added that are notified on changes (typical: profile panel and the history)
|
// multiple listeners can be added that are notified on changes (typical: profile panel and the history)
|
||||||
@ -195,16 +195,19 @@ class ToolPanelCoordinator : public ToolPanelListener,
|
|||||||
// to support the GUI:
|
// to support the GUI:
|
||||||
CropGUIListener* getCropGUIListener (); // through the CropGUIListener the editor area can notify the "crop" ToolPanel when the crop selection changes
|
CropGUIListener* getCropGUIListener (); // through the CropGUIListener the editor area can notify the "crop" ToolPanel when the crop selection changes
|
||||||
|
|
||||||
// init the toolpanelcoordinator with an image & close it
|
// init the toolpanelcoordinator with an image & close it
|
||||||
void initImage (rtengine::StagedImageProcessor* ipc_, bool israw);
|
void initImage (rtengine::StagedImageProcessor* ipc_, bool israw);
|
||||||
void closeImage ();
|
void closeImage ();
|
||||||
|
|
||||||
// read/write the "expanded" state of the expanders & read/write the crop panel settings (ratio, guide type, etc.)
|
// read/write the "expanded" state of the expanders & read/write the crop panel settings (ratio, guide type, etc.)
|
||||||
void readOptions ();
|
void readOptions ();
|
||||||
void writeOptions ();
|
void writeOptions ();
|
||||||
|
|
||||||
// wbprovider interface
|
// wbprovider interface
|
||||||
void getAutoWB (double& temp, double& green) { if (ipc) ipc->getAutoWB (temp, green); }
|
void getAutoWB (double& temp, double& green, double equal) {
|
||||||
|
if (ipc)
|
||||||
|
ipc->getAutoWB (temp, green, equal);
|
||||||
|
}
|
||||||
void getCamWB (double& temp, double& green) { if (ipc) ipc->getCamWB (temp, green); }
|
void getCamWB (double& temp, double& green) { if (ipc) ipc->getCamWB (temp, green); }
|
||||||
|
|
||||||
//DFProvider interface
|
//DFProvider interface
|
||||||
|
@ -23,7 +23,8 @@
|
|||||||
class WBProvider {
|
class WBProvider {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual void getAutoWB (double& temp, double& green) {}
|
virtual ~WBProvider() {}
|
||||||
|
virtual void getAutoWB (double& temp, double& green, double equal) {}
|
||||||
virtual void getCamWB (double& temp, double& green) {}
|
virtual void getCamWB (double& temp, double& green) {}
|
||||||
virtual void spotWBRequested (int size) {}
|
virtual void spotWBRequested (int size) {}
|
||||||
};
|
};
|
||||||
|
@ -22,12 +22,12 @@
|
|||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "../rtengine/safegtk.h"
|
#include "../rtengine/safegtk.h"
|
||||||
|
|
||||||
#define MINTEMP 2000 //1200
|
#define MINTEMP 1500 //1200
|
||||||
#define MAXTEMP 25000 //12000
|
#define MAXTEMP 60000 //12000
|
||||||
#define MINGREEN 0.02
|
#define MINGREEN 0.02
|
||||||
#define MAXGREEN 5.0
|
#define MAXGREEN 5.0
|
||||||
|
#define MINEQUAL 0.8
|
||||||
extern Glib::ustring argv0;
|
#define MAXEQUAL 1.5
|
||||||
|
|
||||||
using namespace rtengine;
|
using namespace rtengine;
|
||||||
using namespace rtengine::procparams;
|
using namespace rtengine::procparams;
|
||||||
@ -45,6 +45,8 @@ void WhiteBalance::init () {
|
|||||||
wbPixbufs[WBT_DAYLIGHT] = safe_create_from_file("wb-sun.png");
|
wbPixbufs[WBT_DAYLIGHT] = safe_create_from_file("wb-sun.png");
|
||||||
wbPixbufs[WBT_CLOUDY] = safe_create_from_file("wb-cloudy.png");
|
wbPixbufs[WBT_CLOUDY] = safe_create_from_file("wb-cloudy.png");
|
||||||
wbPixbufs[WBT_SHADE] = safe_create_from_file("wb-shade.png");
|
wbPixbufs[WBT_SHADE] = safe_create_from_file("wb-shade.png");
|
||||||
|
wbPixbufs[WBT_WATER] = safe_create_from_file("wb-water.png");
|
||||||
|
// wbPixbufs[WBT_WATER2] = safe_create_from_file("wb-water.png");
|
||||||
wbPixbufs[WBT_TUNGSTEN] = safe_create_from_file("wb-tungsten.png");
|
wbPixbufs[WBT_TUNGSTEN] = safe_create_from_file("wb-tungsten.png");
|
||||||
wbPixbufs[WBT_FLUORESCENT] = safe_create_from_file("wb-fluorescent.png");
|
wbPixbufs[WBT_FLUORESCENT] = safe_create_from_file("wb-fluorescent.png");
|
||||||
wbPixbufs[WBT_LAMP] = safe_create_from_file("wb-lamp.png");
|
wbPixbufs[WBT_LAMP] = safe_create_from_file("wb-lamp.png");
|
||||||
@ -75,7 +77,6 @@ WhiteBalance::WhiteBalance () : Gtk::VBox(), FoldableToolPanel(this), wbp(NULL),
|
|||||||
// Assign the model to the Combobox
|
// Assign the model to the Combobox
|
||||||
method->set_model(refTreeModel);
|
method->set_model(refTreeModel);
|
||||||
|
|
||||||
custom_green = new double[WBParams::wbEntries.size()];
|
|
||||||
enum WBTypes oldType = WBParams::wbEntries[0]->type;
|
enum WBTypes oldType = WBParams::wbEntries[0]->type;
|
||||||
enum WBTypes currType;
|
enum WBTypes currType;
|
||||||
Gtk::TreeModel::Row row, childrow;
|
Gtk::TreeModel::Row row, childrow;
|
||||||
@ -89,6 +90,13 @@ WhiteBalance::WhiteBalance () : Gtk::VBox(), FoldableToolPanel(this), wbp(NULL),
|
|||||||
row[methodColumns.colLabel] = M("TP_WBALANCE_FLUO_HEADER");
|
row[methodColumns.colLabel] = M("TP_WBALANCE_FLUO_HEADER");
|
||||||
row[methodColumns.colId] = i+100;
|
row[methodColumns.colId] = i+100;
|
||||||
}
|
}
|
||||||
|
if (currType == WBT_WATER) {
|
||||||
|
// Creating the under water subcategory header
|
||||||
|
row = *(refTreeModel->append());
|
||||||
|
row[methodColumns.colIcon] = wbPixbufs[currType];
|
||||||
|
row[methodColumns.colLabel] = M("TP_WBALANCE_WATER_HEADER");
|
||||||
|
row[methodColumns.colId] = i+100;
|
||||||
|
}
|
||||||
if (currType == WBT_LAMP) {
|
if (currType == WBT_LAMP) {
|
||||||
// Creating the Lamp subcategory header
|
// Creating the Lamp subcategory header
|
||||||
row = *(refTreeModel->append());
|
row = *(refTreeModel->append());
|
||||||
@ -113,6 +121,7 @@ WhiteBalance::WhiteBalance () : Gtk::VBox(), FoldableToolPanel(this), wbp(NULL),
|
|||||||
}
|
}
|
||||||
if (currType == WBT_FLUORESCENT
|
if (currType == WBT_FLUORESCENT
|
||||||
|| currType == WBT_LAMP
|
|| currType == WBT_LAMP
|
||||||
|
|| currType == WBT_WATER
|
||||||
|| currType == WBT_FLASH
|
|| currType == WBT_FLASH
|
||||||
|| currType == WBT_LED
|
|| currType == WBT_LED
|
||||||
) {
|
) {
|
||||||
@ -129,7 +138,8 @@ WhiteBalance::WhiteBalance () : Gtk::VBox(), FoldableToolPanel(this), wbp(NULL),
|
|||||||
}
|
}
|
||||||
oldType = currType;
|
oldType = currType;
|
||||||
|
|
||||||
custom_green[i] = 1.0;
|
custom_green = 1.0;
|
||||||
|
custom_equal = 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Add the model columns to the Combo (which is a kind of view),
|
//Add the model columns to the Combo (which is a kind of view),
|
||||||
@ -173,29 +183,30 @@ WhiteBalance::WhiteBalance () : Gtk::VBox(), FoldableToolPanel(this), wbp(NULL),
|
|||||||
|
|
||||||
temp = Gtk::manage (new Adjuster (M("TP_WBALANCE_TEMPERATURE"), MINTEMP, MAXTEMP, 5, 4750));
|
temp = Gtk::manage (new Adjuster (M("TP_WBALANCE_TEMPERATURE"), MINTEMP, MAXTEMP, 5, 4750));
|
||||||
green = Gtk::manage (new Adjuster (M("TP_WBALANCE_GREEN"), MINGREEN, MAXGREEN, 0.001, 1.0));
|
green = Gtk::manage (new Adjuster (M("TP_WBALANCE_GREEN"), MINGREEN, MAXGREEN, 0.001, 1.0));
|
||||||
|
equal = Gtk::manage (new Adjuster (M("TP_WBALANCE_EQBLUERED"), MINEQUAL, MAXEQUAL, 0.001, 1.0));
|
||||||
|
equal->set_tooltip_markup (M("TP_WBALANCE_EQBLUERED_TOOLTIP"));
|
||||||
temp->show ();
|
temp->show ();
|
||||||
green->show ();
|
green->show ();
|
||||||
|
equal->show ();
|
||||||
|
|
||||||
pack_start (*temp);
|
pack_start (*temp);
|
||||||
pack_start (*green);
|
pack_start (*green);
|
||||||
|
pack_start (*equal);
|
||||||
|
|
||||||
temp->setAdjusterListener (this);
|
temp->setAdjusterListener (this);
|
||||||
green->setAdjusterListener (this);
|
green->setAdjusterListener (this);
|
||||||
|
equal->setAdjusterListener (this);
|
||||||
|
|
||||||
spotbutton->signal_pressed().connect( sigc::mem_fun(*this, &WhiteBalance::spotPressed) );
|
spotbutton->signal_pressed().connect( sigc::mem_fun(*this, &WhiteBalance::spotPressed) );
|
||||||
methconn = method->signal_changed().connect( sigc::mem_fun(*this, &WhiteBalance::optChanged) );
|
methconn = method->signal_changed().connect( sigc::mem_fun(*this, &WhiteBalance::optChanged) );
|
||||||
spotsize->signal_changed().connect( sigc::mem_fun(*this, &WhiteBalance::spotSizeChanged) );
|
spotsize->signal_changed().connect( sigc::mem_fun(*this, &WhiteBalance::spotSizeChanged) );
|
||||||
}
|
}
|
||||||
|
|
||||||
WhiteBalance::~WhiteBalance () {
|
|
||||||
delete[] custom_green;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WhiteBalance::adjusterChanged (Adjuster* a, double newval) {
|
void WhiteBalance::adjusterChanged (Adjuster* a, double newval) {
|
||||||
|
|
||||||
int tVal = (int)temp->getValue();
|
int tVal = (int)temp->getValue();
|
||||||
double gVal = green->getValue();
|
double gVal = green->getValue();
|
||||||
|
double eVal = equal->getValue();
|
||||||
Gtk::TreeModel::Row row = getActiveMethod();
|
Gtk::TreeModel::Row row = getActiveMethod();
|
||||||
if (row == refTreeModel->children().end()) return;
|
if (row == refTreeModel->children().end()) return;
|
||||||
|
|
||||||
@ -203,25 +214,42 @@ void WhiteBalance::adjusterChanged (Adjuster* a, double newval) {
|
|||||||
WBEntry* ppMethod = findWBEntry (row[methodColumns.colLabel], WBLT_GUI);
|
WBEntry* ppMethod = findWBEntry (row[methodColumns.colLabel], WBLT_GUI);
|
||||||
WBEntry* wbCustom = findWBEntry ("Custom", WBLT_PP);
|
WBEntry* wbCustom = findWBEntry ("Custom", WBLT_PP);
|
||||||
|
|
||||||
if (!ppMethod || ppMethod->ppLabel != wbCustom->ppLabel) {
|
if (!ppMethod || (ppMethod->ppLabel!=wbCustom->ppLabel && !(a==equal && ppMethod->type==WBT_AUTO)) ) {
|
||||||
if (!ppMethod || a==temp || (ppMethod->type==WBT_CAMERA || ppMethod->type==WBT_AUTO) ) {
|
methconn.block(true);
|
||||||
methconn.block(true);
|
opt = setActiveMethod(wbCustom->GUILabel);
|
||||||
opt = setActiveMethod(wbCustom->GUILabel);
|
cache_customWB (tVal, gVal);
|
||||||
methconn.block(false);
|
cache_customEqual(eVal);
|
||||||
}
|
methconn.block(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
//cache custom WB setting to allow its recall
|
//cache custom WB setting to allow its recall
|
||||||
if (a==temp)
|
if (a==temp)
|
||||||
cache_customTemp (tVal);
|
cache_customTemp (tVal);
|
||||||
else
|
else if (a==green)
|
||||||
cache_customGreen (gVal);
|
cache_customGreen (gVal);
|
||||||
|
else if (a==equal) {
|
||||||
|
cache_customEqual (eVal);
|
||||||
|
// Recomputing AutoWB if it's the current method
|
||||||
|
if (wbp && ppMethod->type==WBT_AUTO) {
|
||||||
|
double ctemp=-1.0; double cgreen=-1.0;
|
||||||
|
wbp->getAutoWB (ctemp, cgreen, eVal);
|
||||||
|
|
||||||
|
if (ctemp != -1.0) {
|
||||||
|
// Set the automatics temperature value only if in SET mode
|
||||||
|
if (temp->getEditedState() && !temp->getAddMode() ) temp->setValue (ctemp);
|
||||||
|
// Set the automatics green value only if in SET mode
|
||||||
|
if (green->getEditedState() && !green->getAddMode()) green->setValue (cgreen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (listener) {
|
if (listener) {
|
||||||
if (a==temp)
|
if (a==temp)
|
||||||
listener->panelChanged (EvWBTemp, Glib::ustring::format ((int)a->getValue()));
|
listener->panelChanged (EvWBTemp, Glib::ustring::format ((int)a->getValue()));
|
||||||
else if (a==green)
|
else if (a==green)
|
||||||
listener->panelChanged (EvWBGreen, Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(3), a->getValue()));
|
listener->panelChanged (EvWBGreen, Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(3), a->getValue()));
|
||||||
|
else if (a==equal)
|
||||||
|
listener->panelChanged (EvWBequal, Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(3), a->getValue()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,6 +272,7 @@ void WhiteBalance::optChanged () {
|
|||||||
if (row[methodColumns.colLabel] == M("GENERAL_UNCHANGED")) {
|
if (row[methodColumns.colLabel] == M("GENERAL_UNCHANGED")) {
|
||||||
temp->setEditedState (UnEdited);
|
temp->setEditedState (UnEdited);
|
||||||
green->setEditedState (UnEdited);
|
green->setEditedState (UnEdited);
|
||||||
|
equal->setEditedState (UnEdited);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int methodId = findWBEntryId (row[methodColumns.colLabel], WBLT_GUI);
|
int methodId = findWBEntryId (row[methodColumns.colLabel], WBLT_GUI);
|
||||||
@ -256,23 +285,28 @@ void WhiteBalance::optChanged () {
|
|||||||
wbp->getCamWB (ctemp, cgreen);
|
wbp->getCamWB (ctemp, cgreen);
|
||||||
temp->setValue (temp->getAddMode() ? 0.0 : (int)ctemp);
|
temp->setValue (temp->getAddMode() ? 0.0 : (int)ctemp);
|
||||||
green->setValue (green->getAddMode() ? 0.0 : cgreen);
|
green->setValue (green->getAddMode() ? 0.0 : cgreen);
|
||||||
|
equal->setValue (equal->getAddMode() ? 0.0 : 1.0);
|
||||||
if (batchMode) {
|
if (batchMode) {
|
||||||
temp->setEditedState (UnEdited);
|
temp->setEditedState (UnEdited);
|
||||||
green->setEditedState (UnEdited);
|
green->setEditedState (UnEdited);
|
||||||
|
equal->setEditedState (UnEdited);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WBT_AUTO:
|
case WBT_AUTO:
|
||||||
if (wbp) {
|
if (wbp) {
|
||||||
double ctemp, cgreen;
|
|
||||||
wbp->getAutoWB (ctemp, cgreen);
|
|
||||||
if (ctemp != -1.0) {
|
|
||||||
temp->setValue (temp->getAddMode() ? 0.0 : (int)ctemp);
|
|
||||||
green->setValue (green->getAddMode() ? 0.0 : cgreen);
|
|
||||||
}
|
|
||||||
if (batchMode) {
|
if (batchMode) {
|
||||||
temp->setEditedState (UnEdited);
|
temp->setEditedState (UnEdited);
|
||||||
green->setEditedState (UnEdited);
|
green->setEditedState (UnEdited);
|
||||||
|
// equal remain as is
|
||||||
|
}
|
||||||
|
if (!batchMode || equal->getEditedState()) {
|
||||||
|
double ctemp, cgreen;
|
||||||
|
wbp->getAutoWB (ctemp, cgreen, equal->getValue());
|
||||||
|
if (ctemp != -1.0) {
|
||||||
|
temp->setValue (temp->getAddMode() ? 0.0 : (int)ctemp);
|
||||||
|
green->setValue (green->getAddMode() ? 0.0 : cgreen);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -280,10 +314,12 @@ void WhiteBalance::optChanged () {
|
|||||||
if (custom_temp>0){
|
if (custom_temp>0){
|
||||||
temp->setValue (temp->getAddMode() ? 0.0 : custom_temp);
|
temp->setValue (temp->getAddMode() ? 0.0 : custom_temp);
|
||||||
}
|
}
|
||||||
green->setValue (green->getAddMode() ? 0.0 : custom_green[methodId]);
|
green->setValue (green->getAddMode() ? 0.0 : custom_green);
|
||||||
|
equal->setValue (equal->getAddMode() ? 0.0 : custom_equal);
|
||||||
if (batchMode) {
|
if (batchMode) {
|
||||||
temp->setEditedState (Edited);
|
temp->setEditedState (Edited);
|
||||||
green->setEditedState (Edited);
|
green->setEditedState (Edited);
|
||||||
|
equal->setEditedState (Edited);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
/* All other solution are the default cases
|
/* All other solution are the default cases
|
||||||
@ -297,11 +333,13 @@ void WhiteBalance::optChanged () {
|
|||||||
case WBT_LED:*/
|
case WBT_LED:*/
|
||||||
default:
|
default:
|
||||||
// recall custom WB settings if it exists, set to 1.0 otherwise
|
// recall custom WB settings if it exists, set to 1.0 otherwise
|
||||||
temp->setValue (temp->getAddMode() ? 0.0 : (double)(currMethod->temperature));
|
temp->setValue ( temp->getAddMode() ? 0.0 : (double)(currMethod->temperature));
|
||||||
green->setValue (green->getAddMode() ? 0.0 : custom_green[methodId]);
|
green->setValue (green->getAddMode() ? 0.0 : (double)(currMethod->green));
|
||||||
|
equal->setValue (equal->getAddMode() ? 0.0 : (double)(currMethod->equal));
|
||||||
if (batchMode) {
|
if (batchMode) {
|
||||||
temp->setEditedState (Edited);
|
temp->setEditedState (Edited);
|
||||||
green->setEditedState (Edited);
|
green->setEditedState (Edited);
|
||||||
|
equal->setEditedState (Edited);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -326,13 +364,16 @@ void WhiteBalance::spotSizeChanged () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
||||||
|
disableListener ();
|
||||||
|
|
||||||
methconn.block (true);
|
methconn.block (true);
|
||||||
|
equal->setValue (pp->wb.equal);
|
||||||
|
|
||||||
if (pedited) {
|
if (pedited) {
|
||||||
// By default, temperature and green are said "UnEdited", but it may change later
|
// By default, temperature and green are said "UnEdited", but it may change later
|
||||||
temp->setEditedState (UnEdited);
|
temp->setEditedState (UnEdited);
|
||||||
green->setEditedState (UnEdited);
|
green->setEditedState (UnEdited);
|
||||||
|
equal->setEditedState (pedited->wb.equal ? Edited : UnEdited);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pedited && !pedited->wb.method) {
|
if (pedited && !pedited->wb.method) {
|
||||||
@ -350,12 +391,12 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
case WBT_CUSTOM:
|
case WBT_CUSTOM:
|
||||||
temp->setValue (pp->wb.temperature);
|
temp->setValue (pp->wb.temperature);
|
||||||
green->setValue (pp->wb.green);
|
green->setValue (pp->wb.green);
|
||||||
if (pedited) {
|
equal->setValue (pp->wb.equal);
|
||||||
|
if (pedited) {
|
||||||
// The user may have changed the temperature and green value
|
// The user may have changed the temperature and green value
|
||||||
temp->setEditedState (pedited->wb.temperature ? Edited : UnEdited);
|
temp->setEditedState (pedited->wb.temperature ? Edited : UnEdited);
|
||||||
green->setEditedState (pedited->wb.green ? Edited : UnEdited);
|
green->setEditedState (pedited->wb.green ? Edited : UnEdited);
|
||||||
}
|
}
|
||||||
//cache_customWB (pp->wb.temperature, pp->wb.green);
|
|
||||||
break;
|
break;
|
||||||
case WBT_CAMERA:
|
case WBT_CAMERA:
|
||||||
if (wbp) {
|
if (wbp) {
|
||||||
@ -366,23 +407,34 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
temp->setValue (temp->getAddMode() ? 0.0 : ctemp);
|
temp->setValue (temp->getAddMode() ? 0.0 : ctemp);
|
||||||
// Set the camera's green value, or 0.0 if in ADD mode
|
// Set the camera's green value, or 0.0 if in ADD mode
|
||||||
green->setValue (green->getAddMode() ? 0.0 : cgreen);
|
green->setValue (green->getAddMode() ? 0.0 : cgreen);
|
||||||
|
equal->setValue (equal->getAddMode() ? 0.0 : 1.);
|
||||||
//cache_customWB ((int)ctemp, cgreen); // this will be used to set initial Custom WB setting
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WBT_AUTO:
|
case WBT_AUTO:
|
||||||
|
// the equalizer's value is restored for the AutoWB
|
||||||
|
equal->setValue (equal->getAddMode() ? 0.0 : pp->wb.equal);
|
||||||
|
|
||||||
|
// set default values first if in ADD mode, otherwise keep the current ones
|
||||||
|
if (temp->getAddMode() ) temp->setValue (0.0);
|
||||||
|
if (green->getAddMode()) green->setValue (0.0);
|
||||||
|
|
||||||
|
// then check for the correct ones, if possible
|
||||||
if (wbp) {
|
if (wbp) {
|
||||||
double ctemp; double cgreen;
|
double ctemp=-1.0; double cgreen=-1.0;
|
||||||
wbp->getAutoWB (ctemp, cgreen);
|
wbp->getAutoWB (ctemp, cgreen, pp->wb.equal);
|
||||||
|
|
||||||
if (ctemp != -1.0) {
|
if (ctemp != -1.0) {
|
||||||
// Set the automatics temperature value, or 0.0 if in ADD mode
|
// Set the automatics temperature if in SET mode
|
||||||
temp->setValue (temp->getAddMode() ? 0.0 : ctemp);
|
if (!pedited || (pedited->wb.temperature && !temp->getAddMode()) ) {
|
||||||
// Set the automatics green value, or 0.0 if in ADD mode
|
temp->setValue (ctemp);
|
||||||
green->setValue (green->getAddMode() ? 0.0 : cgreen);
|
if (pedited) temp->setEditedState (Edited);
|
||||||
|
}
|
||||||
|
// Set the automatics green value if in SET mode
|
||||||
|
if (!pedited || (pedited->wb.green && !green->getAddMode())) {
|
||||||
|
green->setValue (cgreen);
|
||||||
|
if (pedited) green->setEditedState (Edited);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//cache_customWB ((int)ctemp, cgreen); // this will be used to set initial Custom WB setting
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
@ -401,16 +453,19 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited) {
|
|||||||
temp->setValue(temp->getAddMode() ? 0.0 : (double)wbValues->temperature);
|
temp->setValue(temp->getAddMode() ? 0.0 : (double)wbValues->temperature);
|
||||||
// Set the stored temperature, or 0.0 if in ADD mode
|
// Set the stored temperature, or 0.0 if in ADD mode
|
||||||
green->setValue(green->getAddMode() ? 0.0 : pp->wb.green);
|
green->setValue(green->getAddMode() ? 0.0 : pp->wb.green);
|
||||||
|
equal->setValue(equal->getAddMode() ? 0.0 : pp->wb.equal);
|
||||||
|
|
||||||
// The user may have changed the green value even for predefined WB values
|
// The user may have changed the green value even for predefined WB values
|
||||||
if (pedited) {
|
if (pedited) {
|
||||||
green->setEditedState (pedited->wb.green ? Edited : UnEdited);
|
green->setEditedState (pedited->wb.green ? Edited : UnEdited);
|
||||||
|
equal->setEditedState (pedited->wb.equal ? Edited : UnEdited);
|
||||||
}
|
}
|
||||||
//cache_customGreen (pp->wb.green);
|
//cache_customGreen (pp->wb.green);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
methconn.block (false);
|
methconn.block (false);
|
||||||
|
enableListener ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WhiteBalance::write (ProcParams* pp, ParamsEdited* pedited) {
|
void WhiteBalance::write (ProcParams* pp, ParamsEdited* pedited) {
|
||||||
@ -420,6 +475,7 @@ void WhiteBalance::write (ProcParams* pp, ParamsEdited* pedited) {
|
|||||||
if (pedited) {
|
if (pedited) {
|
||||||
pedited->wb.temperature = temp->getEditedState ();
|
pedited->wb.temperature = temp->getEditedState ();
|
||||||
pedited->wb.green = green->getEditedState ();
|
pedited->wb.green = green->getEditedState ();
|
||||||
|
pedited->wb.equal = equal->getEditedState ();
|
||||||
pedited->wb.method = row[methodColumns.colLabel]!=M("GENERAL_UNCHANGED");
|
pedited->wb.method = row[methodColumns.colLabel]!=M("GENERAL_UNCHANGED");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -429,10 +485,11 @@ void WhiteBalance::write (ProcParams* pp, ParamsEdited* pedited) {
|
|||||||
pp->wb.method = ppMethod->ppLabel;
|
pp->wb.method = ppMethod->ppLabel;
|
||||||
pp->wb.temperature = temp->getIntValue ();
|
pp->wb.temperature = temp->getIntValue ();
|
||||||
pp->wb.green = green->getValue ();
|
pp->wb.green = green->getValue ();
|
||||||
|
pp->wb.equal = equal->getValue ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WhiteBalance::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) {
|
void WhiteBalance::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) {
|
||||||
|
equal->setDefault (defParams->wb.equal);
|
||||||
|
|
||||||
if (wbp && defParams->wb.method == "Camera") {
|
if (wbp && defParams->wb.method == "Camera") {
|
||||||
double ctemp; double cgreen;
|
double ctemp; double cgreen;
|
||||||
@ -444,7 +501,7 @@ void WhiteBalance::setDefaults (const ProcParams* defParams, const ParamsEdited*
|
|||||||
// this setDefaults method is called too early ; the wbp has been set,
|
// this setDefaults method is called too early ; the wbp has been set,
|
||||||
// but wbp is not ready to provide!
|
// but wbp is not ready to provide!
|
||||||
double ctemp; double cgreen;
|
double ctemp; double cgreen;
|
||||||
wbp->getAutoWB (ctemp, cgreen);
|
wbp->getAutoWB (ctemp, cgreen, defParams->wb.equal);
|
||||||
if (ctemp != -1.0) {
|
if (ctemp != -1.0) {
|
||||||
temp->setDefault (temp->getAddMode() ? 0 : (int)ctemp);
|
temp->setDefault (temp->getAddMode() ? 0 : (int)ctemp);
|
||||||
green->setDefault (green->getAddMode() ? 0 : cgreen);
|
green->setDefault (green->getAddMode() ? 0 : cgreen);
|
||||||
@ -462,10 +519,12 @@ void WhiteBalance::setDefaults (const ProcParams* defParams, const ParamsEdited*
|
|||||||
if (pedited) {
|
if (pedited) {
|
||||||
temp->setDefaultEditedState (pedited->wb.temperature ? Edited : UnEdited);
|
temp->setDefaultEditedState (pedited->wb.temperature ? Edited : UnEdited);
|
||||||
green->setDefaultEditedState (pedited->wb.green ? Edited : UnEdited);
|
green->setDefaultEditedState (pedited->wb.green ? Edited : UnEdited);
|
||||||
|
equal->setDefaultEditedState (pedited->wb.equal ? Edited : UnEdited);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
temp->setDefaultEditedState (Irrelevant);
|
temp->setDefaultEditedState (Irrelevant);
|
||||||
green->setDefaultEditedState (Irrelevant);
|
green->setDefaultEditedState (Irrelevant);
|
||||||
|
equal->setDefaultEditedState (Irrelevant);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -474,6 +533,7 @@ void WhiteBalance::setBatchMode (bool batchMode) {
|
|||||||
ToolPanel::setBatchMode (batchMode);
|
ToolPanel::setBatchMode (batchMode);
|
||||||
temp->showEditedCB ();
|
temp->showEditedCB ();
|
||||||
green->showEditedCB ();
|
green->showEditedCB ();
|
||||||
|
equal->showEditedCB ();
|
||||||
Gtk::TreeModel::Row row = *(refTreeModel->append());
|
Gtk::TreeModel::Row row = *(refTreeModel->append());
|
||||||
row[methodColumns.colId] = WBParams::wbEntries.size();
|
row[methodColumns.colId] = WBParams::wbEntries.size();
|
||||||
row[methodColumns.colLabel] = M("GENERAL_UNCHANGED");
|
row[methodColumns.colLabel] = M("GENERAL_UNCHANGED");
|
||||||
@ -493,6 +553,7 @@ void WhiteBalance::setWB (int vtemp, double vgreen) {
|
|||||||
green->setValue (vgreen);
|
green->setValue (vgreen);
|
||||||
opt = setActiveMethod(wbValues->GUILabel);
|
opt = setActiveMethod(wbValues->GUILabel);
|
||||||
cache_customWB (vtemp,vgreen); // sequence in which this call is made is important; must be before "method->set_active (2);"
|
cache_customWB (vtemp,vgreen); // sequence in which this call is made is important; must be before "method->set_active (2);"
|
||||||
|
cache_customEqual(equal->getValue());
|
||||||
temp->setEditedState (Edited);
|
temp->setEditedState (Edited);
|
||||||
green->setEditedState (Edited);
|
green->setEditedState (Edited);
|
||||||
methconn.block(false);
|
methconn.block(false);
|
||||||
@ -501,16 +562,18 @@ void WhiteBalance::setWB (int vtemp, double vgreen) {
|
|||||||
listener->panelChanged (EvWBTemp, Glib::ustring::compose("%1, %2", (int)temp->getValue(), Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(3), green->getValue())));
|
listener->panelChanged (EvWBTemp, Glib::ustring::compose("%1, %2", (int)temp->getValue(), Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(3), green->getValue())));
|
||||||
}
|
}
|
||||||
|
|
||||||
void WhiteBalance::setAdjusterBehavior (bool tempadd, bool greenadd) {
|
void WhiteBalance::setAdjusterBehavior (bool tempadd, bool greenadd, bool equaladd) {
|
||||||
|
|
||||||
temp->setAddMode(tempadd);
|
temp->setAddMode(tempadd);
|
||||||
green->setAddMode(greenadd);
|
green->setAddMode(greenadd);
|
||||||
|
equal->setAddMode(equaladd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WhiteBalance::trimValues (rtengine::procparams::ProcParams* pp) {
|
void WhiteBalance::trimValues (rtengine::procparams::ProcParams* pp) {
|
||||||
|
|
||||||
temp->trimValue(pp->wb.temperature);
|
temp->trimValue(pp->wb.temperature);
|
||||||
green->trimValue(pp->wb.green);
|
green->trimValue(pp->wb.green);
|
||||||
|
equal->trimValue(pp->wb.equal);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void WhiteBalance::cache_customTemp(int temp) {
|
inline void WhiteBalance::cache_customTemp(int temp) {
|
||||||
@ -518,11 +581,10 @@ inline void WhiteBalance::cache_customTemp(int temp) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void WhiteBalance::cache_customGreen(double green) {
|
void WhiteBalance::cache_customGreen(double green) {
|
||||||
Gtk::TreeModel::Row row = getActiveMethod();
|
custom_green = green;
|
||||||
if (row == refTreeModel->children().end()) return;
|
}
|
||||||
|
void WhiteBalance::cache_customEqual(double equal) {
|
||||||
custom_green[row[methodColumns.colId]] = green;
|
custom_equal = equal;
|
||||||
//printf("WhiteBalance::cache_customWB(%d, %f): the \"green\" value of \"%s\" has been set to: %f\n", temp, green, row[methodColumns.colLabel], custom_green[row[methodColumns.colId]]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WhiteBalance::cache_customWB(int temp, double green) {
|
void WhiteBalance::cache_customWB(int temp, double green) {
|
||||||
|
@ -55,18 +55,23 @@ class WhiteBalance : public Gtk::VBox, public AdjusterListener, public FoldableT
|
|||||||
MyComboBoxText* spotsize;
|
MyComboBoxText* spotsize;
|
||||||
Adjuster* temp;
|
Adjuster* temp;
|
||||||
Adjuster* green;
|
Adjuster* green;
|
||||||
|
Adjuster* equal;
|
||||||
|
|
||||||
Gtk::Button* spotbutton;
|
Gtk::Button* spotbutton;
|
||||||
int opt;
|
int opt;
|
||||||
double nextTemp;
|
double nextTemp;
|
||||||
double nextGreen;
|
double nextGreen;
|
||||||
WBProvider *wbp;
|
WBProvider *wbp; // pointer to a ToolPanelCoordinator object, or its subclass BatchToolPanelCoordinator
|
||||||
SpotWBListener* wblistener;
|
SpotWBListener* wblistener;
|
||||||
sigc::connection methconn;
|
sigc::connection methconn;
|
||||||
int custom_temp;
|
int custom_temp;
|
||||||
double* custom_green;
|
double custom_green;
|
||||||
|
double custom_equal;
|
||||||
void cache_customWB (int temp, double green); //cache custom WB setting to allow its recall
|
void cache_customWB (int temp, double green); //cache custom WB setting to allow its recall
|
||||||
void cache_customTemp (int temp); //cache Temperature only to allow its recall
|
void cache_customTemp (int temp); //cache Temperature only to allow its recall
|
||||||
void cache_customGreen (double green); //cache Green only to allow its recall
|
void cache_customGreen (double green); //cache Green only to allow its recall
|
||||||
|
void cache_customEqual (double equal); //cache Equal only to allow its recall
|
||||||
|
|
||||||
int setActiveMethod (Glib::ustring label);
|
int setActiveMethod (Glib::ustring label);
|
||||||
int _setActiveMethod (Glib::ustring &label, Gtk::TreeModel::Children &children);
|
int _setActiveMethod (Glib::ustring &label, Gtk::TreeModel::Children &children);
|
||||||
|
|
||||||
@ -77,7 +82,7 @@ class WhiteBalance : public Gtk::VBox, public AdjusterListener, public FoldableT
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
WhiteBalance ();
|
WhiteBalance ();
|
||||||
~WhiteBalance ();
|
~WhiteBalance () {};
|
||||||
|
|
||||||
static void init ();
|
static void init ();
|
||||||
static void cleanup ();
|
static void cleanup ();
|
||||||
@ -86,7 +91,6 @@ class WhiteBalance : public Gtk::VBox, public AdjusterListener, public FoldableT
|
|||||||
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited=NULL);
|
void setDefaults (const rtengine::procparams::ProcParams* defParams, const ParamsEdited* pedited=NULL);
|
||||||
void setBatchMode (bool batchMode);
|
void setBatchMode (bool batchMode);
|
||||||
|
|
||||||
|
|
||||||
void optChanged ();
|
void optChanged ();
|
||||||
void spotPressed ();
|
void spotPressed ();
|
||||||
void spotSizeChanged ();
|
void spotSizeChanged ();
|
||||||
@ -96,7 +100,7 @@ class WhiteBalance : public Gtk::VBox, public AdjusterListener, public FoldableT
|
|||||||
void setSpotWBListener (SpotWBListener* l) { wblistener = l; }
|
void setSpotWBListener (SpotWBListener* l) { wblistener = l; }
|
||||||
void setWB (int temp, double green);
|
void setWB (int temp, double green);
|
||||||
|
|
||||||
void setAdjusterBehavior (bool tempadd, bool greenadd);
|
void setAdjusterBehavior (bool tempadd, bool greenadd, bool equaladd);
|
||||||
void trimValues (rtengine::procparams::ProcParams* pp);
|
void trimValues (rtengine::procparams::ProcParams* pp);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
1
tools/source_icons/scalable/wb-water.file
Normal file
1
tools/source_icons/scalable/wb-water.file
Normal file
@ -0,0 +1 @@
|
|||||||
|
wb-water.png,w22,actions
|
642
tools/source_icons/scalable/wb-water.svg
Normal file
642
tools/source_icons/scalable/wb-water.svg
Normal file
@ -0,0 +1,642 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="1000"
|
||||||
|
height="1000"
|
||||||
|
id="svg2"
|
||||||
|
sodipodi:version="0.32"
|
||||||
|
inkscape:version="0.48.3.1 r9886"
|
||||||
|
sodipodi:docname="wb-water.svg"
|
||||||
|
inkscape:export-filename="/home/philippe/devel/rawtherapee/icons/NewIcons/undo.png"
|
||||||
|
inkscape:export-xdpi="1.98"
|
||||||
|
inkscape:export-ydpi="1.98"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="spiro"
|
||||||
|
id="path-effect3985"
|
||||||
|
is_visible="true" />
|
||||||
|
<inkscape:path-effect
|
||||||
|
effect="spiro"
|
||||||
|
id="path-effect3004"
|
||||||
|
is_visible="true" />
|
||||||
|
<inkscape:perspective
|
||||||
|
sodipodi:type="inkscape:persp3d"
|
||||||
|
inkscape:vp_x="0 : 36 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_z="72 : 36 : 1"
|
||||||
|
inkscape:persp3d-origin="36 : 24 : 1"
|
||||||
|
id="perspective21" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3614"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3636"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3658"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3680"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3680-0"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3680-8"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3720"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3742"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3742-2"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3742-26"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3742-0"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3742-1"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3836"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2861"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2871"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2906"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2883"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2953"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2896"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2918"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2940"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2962"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2988"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3015"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3037"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3059"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2898"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3891"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3925"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3947"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3969"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3999"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4021"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4043"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4065"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4087"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4109"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4145"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4167"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4196"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4234"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4315"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4349"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4377"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4428"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4450"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4489"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4511"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4542"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4567"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective6780"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<linearGradient
|
||||||
|
y2="24.514456"
|
||||||
|
x2="253.59492"
|
||||||
|
y1="24.514456"
|
||||||
|
x1="-213.56367"
|
||||||
|
gradientTransform="matrix(0,1,-1,0,44.530081,4.498828)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient8562"
|
||||||
|
xlink:href="#linearGradient3641"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient3641">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop3643" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop3645" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
y2="24.514456"
|
||||||
|
x2="253.59492"
|
||||||
|
y1="24.514456"
|
||||||
|
x1="-213.56367"
|
||||||
|
gradientTransform="matrix(0,1,-1,0,44.530081,4.498828)"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient6791"
|
||||||
|
xlink:href="#linearGradient3641"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective6824"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3641"
|
||||||
|
id="linearGradient7354"
|
||||||
|
x1="-1.8872025"
|
||||||
|
y1="-163.78828"
|
||||||
|
x2="323.8822"
|
||||||
|
y2="-163.78828"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="translate(-294.13778,123.54099)" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2897"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2971"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3048"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3829"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3641-8"
|
||||||
|
id="linearGradient6901"
|
||||||
|
x1="-203.3125"
|
||||||
|
y1="30.71875"
|
||||||
|
x2="263.34375"
|
||||||
|
y2="30.71875"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="linearGradient3641-8">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop3643-7" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:0;"
|
||||||
|
offset="1"
|
||||||
|
id="stop3645-1" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
y2="30.71875"
|
||||||
|
x2="263.34375"
|
||||||
|
y1="30.71875"
|
||||||
|
x1="-203.3125"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient3843"
|
||||||
|
xlink:href="#linearGradient3641-8"
|
||||||
|
inkscape:collect="always" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3641-8"
|
||||||
|
id="linearGradient3875"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="-203.3125"
|
||||||
|
y1="30.71875"
|
||||||
|
x2="263.34375"
|
||||||
|
y2="30.71875"
|
||||||
|
gradientTransform="translate(-708.90407,-377.00114)" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective3890"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective4696"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3641"
|
||||||
|
id="linearGradient4760"
|
||||||
|
x1="-1013.6239"
|
||||||
|
y1="-111.86127"
|
||||||
|
x2="-820.68811"
|
||||||
|
y2="-111.86127"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3641"
|
||||||
|
id="linearGradient4774"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="-1013.6239"
|
||||||
|
y1="-111.86127"
|
||||||
|
x2="-820.68811"
|
||||||
|
y2="-111.86127" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective2828"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<inkscape:perspective
|
||||||
|
id="perspective5789"
|
||||||
|
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
||||||
|
inkscape:vp_z="1 : 0.5 : 1"
|
||||||
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
|
inkscape:vp_x="0 : 0.5 : 1"
|
||||||
|
sodipodi:type="inkscape:persp3d" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3641"
|
||||||
|
id="linearGradient6343"
|
||||||
|
x1="-234.53125"
|
||||||
|
y1="-27.459608"
|
||||||
|
x2="294.99518"
|
||||||
|
y2="-27.459608"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3641"
|
||||||
|
id="linearGradient10531"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="-234.53125"
|
||||||
|
y1="-27.459608"
|
||||||
|
x2="294.99518"
|
||||||
|
y2="-27.459608" />
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient3641"
|
||||||
|
id="linearGradient10536"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="-1013.6239"
|
||||||
|
y1="-111.86127"
|
||||||
|
x2="-820.68811"
|
||||||
|
y2="-111.86127" />
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.16"
|
||||||
|
inkscape:cx="628.96572"
|
||||||
|
inkscape:cy="798.91319"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1018"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
showgrid="true"
|
||||||
|
showborder="true"
|
||||||
|
inkscape:showpageshadow="true"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer4"
|
||||||
|
inkscape:label="Fond"
|
||||||
|
style="display:inline" />
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(464.16179,464.03236)"
|
||||||
|
style="opacity:1;display:inline">
|
||||||
|
<path
|
||||||
|
style="opacity:0.7;fill:#2a7fff;fill-opacity:1;stroke:none"
|
||||||
|
d="M 262.15941,239.59156 C 162.24771,155.40271 92.003396,186.80714 0,254.0625 L 0,1000 l 1000,0 0,-709.8125 C 878.52924,337.68769 909.97864,210.8708 789.9662,200.12051 708.67062,192.83834 635.54791,259.33371 483.90589,314.0108 311.12683,376.3092 345.17325,309.54173 262.15941,239.59156 z M 128.46875,474.96875 c 76.97828,18.9384 127.65131,90.27078 195.81135,166.58987 78.0589,-94.59916 186.09972,-139.4563 283.25355,-140.25593 101.30694,-0.83383 227.51155,23.2664 308.2476,145.59667 C 839.46802,751.25673 734.85686,795.58412 607.53365,795.12531 414.20986,789.35412 384.96423,722.90024 324.68681,653.34932 255.77208,736.85174 214.50963,796.10596 128.46875,824.78694 c 18.349,-52.19426 39.18463,-95.64245 50.65362,-170.12298 -12.47738,-87.26225 -37.44233,-127.50097 -50.65362,-179.69521 z m 196.21806,178.38057 c 1.62981,-1.97479 3.18176,-3.91399 4.84352,-5.91589 -1.77793,-1.96978 -3.49624,-3.91087 -5.25023,-5.87481 -1.60877,1.94967 -3.2236,3.8828 -4.80654,5.87481 1.75768,1.96947 3.50953,3.95005 5.21325,5.91589 z"
|
||||||
|
transform="translate(-464.16179,-464.03236)"
|
||||||
|
id="path5961"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="sccccsssccsccccccccccc" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 22 KiB |
Loading…
x
Reference in New Issue
Block a user