Merge with 'Beep6581/dev'

This commit is contained in:
Pandagrapher 2022-08-27 11:49:02 +02:00
commit 2cd6ba96ca
80 changed files with 14984 additions and 2826 deletions

View File

@ -76,6 +76,8 @@ jobs:
- name: Include Lensfun - name: Include Lensfun
run: | run: |
echo "Patching lensfun-update-data script."
sudo sed -i 's/HTTPError\(, ValueError\)/URLError\1/' $(which lensfun-update-data)
echo "Updating Lensfun database." echo "Updating Lensfun database."
lensfun-update-data lensfun-update-data
echo "Creating Lensfun directory in the build directory." echo "Creating Lensfun directory in the build directory."
@ -87,7 +89,7 @@ jobs:
id: appimage-tools-cache id: appimage-tools-cache
uses: actions/cache@v2 uses: actions/cache@v2
with: with:
key: appimage-tools key: appimage-tools-1
path: | path: |
./build/linuxdeploy-x86_64.AppImage ./build/linuxdeploy-x86_64.AppImage
./build/linuxdeploy-plugin-gtk.sh ./build/linuxdeploy-plugin-gtk.sh
@ -99,7 +101,9 @@ jobs:
echo "Downloading linuxdeploy." echo "Downloading linuxdeploy."
curl --location 'https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage' > linuxdeploy-x86_64.AppImage curl --location 'https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage' > linuxdeploy-x86_64.AppImage
echo "Downloading GTK plugin for linuxdeploy." echo "Downloading GTK plugin for linuxdeploy."
curl --location 'https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh' > linuxdeploy-plugin-gtk.sh curl --location 'https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh' \
| sed 's/^\(export GTK_THEME\)/#\1/' \
> linuxdeploy-plugin-gtk.sh
echo "Setting execute bit on all AppImage tools." echo "Setting execute bit on all AppImage tools."
chmod u+x linuxdeploy-* chmod u+x linuxdeploy-*

View File

@ -14,7 +14,7 @@ on:
- created - created
jobs: jobs:
build: build:
runs-on: macos-latest runs-on: macos-10.15
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Install dependencies - name: Install dependencies
@ -52,8 +52,8 @@ jobs:
-DPROC_LABEL="generic processor" \ -DPROC_LABEL="generic processor" \
-DWITH_LTO="OFF" \ -DWITH_LTO="OFF" \
-DLENSFUNDBDIR="/Applications/RawTherapee.app/Contents/Resources/share/lensfun" \ -DLENSFUNDBDIR="/Applications/RawTherapee.app/Contents/Resources/share/lensfun" \
-DCMAKE_C_COMPILER=/usr/local/opt/llvm/bin/clang \ -DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=/usr/local/opt/llvm/bin/clang++ \ -DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_C_FLAGS="-arch x86_64 -Wno-pass-failed -Wno-deprecated-register -Wno-unused-command-line-argument" \ -DCMAKE_C_FLAGS="-arch x86_64 -Wno-pass-failed -Wno-deprecated-register -Wno-unused-command-line-argument" \
-DCMAKE_CXX_FLAGS="-arch x86_64 -Wno-pass-failed -Wno-deprecated-register -Wno-unused-command-line-argument" \ -DCMAKE_CXX_FLAGS="-arch x86_64 -Wno-pass-failed -Wno-deprecated-register -Wno-unused-command-line-argument" \
-DOpenMP_C_FLAGS="${C_FLAGS}" \ -DOpenMP_C_FLAGS="${C_FLAGS}" \

View File

@ -82,6 +82,8 @@ jobs:
- name: Include Lensfun - name: Include Lensfun
run: | run: |
echo "Patching lensfun-update-data script."
sed -i 's/HTTPError\(, ValueError\)/URLError\1/' $(which lensfun-update-data)
echo "Updating Lensfun database." echo "Updating Lensfun database."
lensfun-update-data lensfun-update-data
echo "Creating Lensfun directory in the build directory." echo "Creating Lensfun directory in the build directory."
@ -115,7 +117,7 @@ jobs:
"libdeflate.dll" \ "libdeflate.dll" \
"libepoxy-0.dll" \ "libepoxy-0.dll" \
"libexpat-1.dll" \ "libexpat-1.dll" \
"libffi-7.dll" \ libffi-*.dll \
"libfftw3f-3.dll" \ "libfftw3f-3.dll" \
"libfontconfig-1.dll" \ "libfontconfig-1.dll" \
"libfreetype-6.dll" \ "libfreetype-6.dll" \

View File

@ -63,6 +63,7 @@ Other contributors (profiles, ideas, mockups, testing, forum activity, translati
Lebarhon Lebarhon
Karl Loncarek Karl Loncarek
Patrick Lopatto Patrick Lopatto
Francisco Lorés
Jie Luo Jie Luo
Paul Matthijsse Paul Matthijsse
Wim ter Meer Wim ter Meer

View File

@ -80,6 +80,24 @@ set(CACHE_NAME_SUFFIX
# being bundled. However, file access can be restricted for some folder. # being bundled. However, file access can be restricted for some folder.
option(OSX_DEV_BUILD "Generate macOS development builds" OFF) option(OSX_DEV_BUILD "Generate macOS development builds" OFF)
# On macOS, optionally generate the final zip artifact file without version in the name for nightly upload purposes.
option(OSX_NIGHTLY "Generate a generically-named zip" OFF)
# Generate a universal macOS build
option(OSX_UNIVERSAL "Generate a universal app" OFF)
# On macOS: merge the app via a specific url to generate a universal bundle with both x86_64 and arm64
if(OSX_UNIVERSAL)
if(NOT "${OSX_UNIVERSAL_URL}")
if(CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")
set(OSX_UNIVERSAL_URL "https://kd6kxr.keybase.pub/RawTherapee_macOS_x86_64_latest.zip" CACHE STRING "URL of x86_64 app for lipo")
else()
set(OSX_UNIVERSAL_URL "https://kd6kxr.keybase.pub/RawTherapee_macOS_arm64_latest.zip" CACHE STRING "URL of arm64 app for lipo")
endif()
endif()
endif()
# By default we don't use a specific processor target, so PROC_TARGET_NUMBER is # By default we don't use a specific processor target, so PROC_TARGET_NUMBER is
# set to 0. Specify other values to optimize for specific processor architecture # set to 0. Specify other values to optimize for specific processor architecture
# as listed in ProcessorTargets.cmake: # as listed in ProcessorTargets.cmake:
@ -721,7 +739,7 @@ add_custom_target(
# End generating AboutThisBuild.txt # End generating AboutThisBuild.txt
install(FILES AUTHORS.txt DESTINATION "${CREDITSDIR}") install(FILES AUTHORS.txt DESTINATION "${CREDITSDIR}")
install(FILES LICENSE.txt DESTINATION "${LICENCEDIR}") install(FILES LICENSE DESTINATION "${LICENCEDIR}")
install(FILES "${CMAKE_BINARY_DIR}/AboutThisBuild.txt" install(FILES "${CMAKE_BINARY_DIR}/AboutThisBuild.txt"
DESTINATION "${CREDITSDIR}") DESTINATION "${CREDITSDIR}")
install( install(

View File

@ -1,20 +1,3 @@
RawTherapee - A powerful, cross-platform raw image processing program.
Copyright (C) 2004-2012 Gabor Horvath <hgabor@rawtherapee.com>
Copyright (C) 2010-2021 RawTherapee development team.
RawTherapee is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
RawTherapee is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007 Version 3, 29 June 2007

View File

@ -38,5 +38,8 @@ set(PROC_TARGET_8_FLAGS "-march=athlon64" CACHE STRING "Processor-8 flags")
set(PROC_TARGET_9_LABEL phenomX4 CACHE STRING "Processor-9 label - use it to provide a phenomX4 optimized build, if you have this processor") set(PROC_TARGET_9_LABEL phenomX4 CACHE STRING "Processor-9 label - use it to provide a phenomX4 optimized build, if you have this processor")
set(PROC_TARGET_9_FLAGS "-march=amdfam10" CACHE STRING "Processor-9 flags") set(PROC_TARGET_9_FLAGS "-march=amdfam10" CACHE STRING "Processor-9 flags")
set(PROC_TARGET_10_LABEL sandybridge-ivybridge CACHE STRING "Processor set-10 label")
set(PROC_TARGET_10_FLAGS "-march=sandybridge -mtune=ivybridge" CACHE STRING "Processors set-10 flags")
#set(PROC_TARGET__LABEL procLabel CACHE STRING "Processor- label") #set(PROC_TARGET__LABEL procLabel CACHE STRING "Processor- label")
#set(PROC_TARGET__FLAGS "procFlags" CACHE STRING "Processor- flags") #set(PROC_TARGET__FLAGS "procFlags" CACHE STRING "Processor- flags")

View File

@ -106,9 +106,9 @@ if(WIN32)
elseif(BIT_DEPTH EQUAL 8) elseif(BIT_DEPTH EQUAL 8)
set(BUILD_BIT_DEPTH 64) set(BUILD_BIT_DEPTH 64)
# Restricting the 64 bits builds to 64 bits systems only # Restricting the 64 bits builds to 64 bits systems only
set(ARCHITECTURE_ALLOWED "x64 ia64") set(ARCHITECTURE_ALLOWED "x64 ia64 arm64")
# installing in 64 bits mode for all 64 bits processors, even for itanium architecture # installing in 64 bits mode for all 64 bits processors, even for itanium architecture
set(INSTALL_MODE "x64 ia64") set(INSTALL_MODE "x64 ia64 arm64")
endif() endif()
# set part of the output archive name # set part of the output archive name
set(SYSTEM_NAME "WinVista") set(SYSTEM_NAME "WinVista")

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -162,7 +162,6 @@ HISTOGRAM_TOOLTIP_BAR;Mostra/amaga la barra indicadora RGB\nClic botó dret a la
HISTOGRAM_TOOLTIP_G;Mostra/amaga l'histograma VERD HISTOGRAM_TOOLTIP_G;Mostra/amaga l'histograma VERD
HISTOGRAM_TOOLTIP_L;Mostra/amaga l'histograma de luminància CIELAB HISTOGRAM_TOOLTIP_L;Mostra/amaga l'histograma de luminància CIELAB
HISTOGRAM_TOOLTIP_R;Mostra/amaga l'histograma VERMELL HISTOGRAM_TOOLTIP_R;Mostra/amaga l'histograma VERMELL
HISTOGRAM_TOOLTIP_RAW;Mostra/Amaga l'histograma RAW
HISTORY_CHANGED;Canviat HISTORY_CHANGED;Canviat
HISTORY_CUSTOMCURVE;Corba particular HISTORY_CUSTOMCURVE;Corba particular
HISTORY_FROMCLIPBOARD;Del portapapers HISTORY_FROMCLIPBOARD;Del portapapers

File diff suppressed because it is too large Load Diff

View File

@ -291,7 +291,6 @@ HISTOGRAM_TOOLTIP_G;Skrýt/Zobrazit histogram zelené.
HISTOGRAM_TOOLTIP_L;Skrýt/Zobrazit CIELab histogram jasu. HISTOGRAM_TOOLTIP_L;Skrýt/Zobrazit CIELab histogram jasu.
HISTOGRAM_TOOLTIP_MODE;Přepíná mezi lineárním, log-lineárním a log-log škálováním histogramu. HISTOGRAM_TOOLTIP_MODE;Přepíná mezi lineárním, log-lineárním a log-log škálováním histogramu.
HISTOGRAM_TOOLTIP_R;Skrýt/Zobrazit histogram červené. HISTOGRAM_TOOLTIP_R;Skrýt/Zobrazit histogram červené.
HISTOGRAM_TOOLTIP_RAW;Skrýt/Zobrazit raw histogram.
HISTORY_CHANGED;Změněno HISTORY_CHANGED;Změněno
HISTORY_CUSTOMCURVE;Vlastní křivka HISTORY_CUSTOMCURVE;Vlastní křivka
HISTORY_FROMCLIPBOARD;Ze schránky HISTORY_FROMCLIPBOARD;Ze schránky

4177
rtdata/languages/Dansk Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -362,7 +362,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!HISTOGRAM_TOOLTIP_L;Show/Hide CIELab luminance histogram. !HISTOGRAM_TOOLTIP_L;Show/Hide CIELab luminance histogram.
!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram.
!HISTOGRAM_TOOLTIP_R;Show/Hide red histogram. !HISTOGRAM_TOOLTIP_R;Show/Hide red histogram.
!HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram.
!HISTORY_CHANGED;Changed !HISTORY_CHANGED;Changed
!HISTORY_CUSTOMCURVE;Custom curve !HISTORY_CUSTOMCURVE;Custom curve
!HISTORY_FROMCLIPBOARD;From clipboard !HISTORY_FROMCLIPBOARD;From clipboard

View File

@ -248,7 +248,6 @@
!HISTOGRAM_TOOLTIP_L;Show/Hide CIELab luminance histogram. !HISTOGRAM_TOOLTIP_L;Show/Hide CIELab luminance histogram.
!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. !HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram.
!HISTOGRAM_TOOLTIP_R;Show/Hide red histogram. !HISTOGRAM_TOOLTIP_R;Show/Hide red histogram.
!HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram.
!HISTORY_CHANGED;Changed !HISTORY_CHANGED;Changed
!HISTORY_CUSTOMCURVE;Custom curve !HISTORY_CUSTOMCURVE;Custom curve
!HISTORY_FROMCLIPBOARD;From clipboard !HISTORY_FROMCLIPBOARD;From clipboard

File diff suppressed because it is too large Load Diff

View File

@ -297,7 +297,6 @@ HISTOGRAM_TOOLTIP_G;Mostrar/Ocultar Histograma Verde
HISTOGRAM_TOOLTIP_L;Mostrar/Ocultar Histograma de Luminancia CIELAB HISTOGRAM_TOOLTIP_L;Mostrar/Ocultar Histograma de Luminancia CIELAB
HISTOGRAM_TOOLTIP_MODE;Alterne entre la escala lineal, log-linear y log-log del histograma. HISTOGRAM_TOOLTIP_MODE;Alterne entre la escala lineal, log-linear y log-log del histograma.
HISTOGRAM_TOOLTIP_R;Mostrar/Ocultar Histograma Rojo HISTOGRAM_TOOLTIP_R;Mostrar/Ocultar Histograma Rojo
HISTOGRAM_TOOLTIP_RAW;Mostrar/ocultar Histograma Raw
HISTORY_CHANGED;Cambiado HISTORY_CHANGED;Cambiado
HISTORY_CUSTOMCURVE;Curva a medida HISTORY_CUSTOMCURVE;Curva a medida
HISTORY_FROMCLIPBOARD;Desde el portapapeles HISTORY_FROMCLIPBOARD;Desde el portapapeles

View File

@ -236,7 +236,6 @@ HISTOGRAM_TOOLTIP_G;Montrer/cacher l'histogramme VERT
HISTOGRAM_TOOLTIP_L;Montrer/cacher l'histogramme Luminance CIELAB HISTOGRAM_TOOLTIP_L;Montrer/cacher l'histogramme Luminance CIELAB
HISTOGRAM_TOOLTIP_MODE;Bascule entre une échelle linéaire, linéaire-log et log-log de l'histogramme. HISTOGRAM_TOOLTIP_MODE;Bascule entre une échelle linéaire, linéaire-log et log-log de l'histogramme.
HISTOGRAM_TOOLTIP_R;Montrer/cacher l'histogramme ROUGE HISTOGRAM_TOOLTIP_R;Montrer/cacher l'histogramme ROUGE
HISTOGRAM_TOOLTIP_RAW;Montrer/Cacher l'histogramme des données RAW
HISTORY_CHANGED;Changé HISTORY_CHANGED;Changé
HISTORY_CUSTOMCURVE;Courbe personnelle HISTORY_CUSTOMCURVE;Courbe personnelle
HISTORY_FROMCLIPBOARD;Du presse-papier HISTORY_FROMCLIPBOARD;Du presse-papier
@ -1404,7 +1403,7 @@ 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 CIE-CAM 2002 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 visionnage
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 celui de Lab et RVB TP_COLORAPP_LIGHT_TOOLTIP;Luminosité dans CIECAM02 est différent de celui de Lab et RVB
@ -1434,6 +1433,7 @@ TP_COLORAPP_TONECIE;Compression Tonale utilisant CIECAM02
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_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_VIEWING_ABSOLUTELUMINANCE_TOOLTIP;Luminance absolue de l'environnement de visionnage\n(souvent 16cd/m²) TP_COLORAPP_VIEWING_ABSOLUTELUMINANCE_TOOLTIP;Luminance absolue de l'environnement de visionnage\n(souvent 16cd/m²)
TP_COLORAPP_YBOUT_TOOLTIP;Yb est la luminance relative de l'arrière plan, exprimée e % de gris. Un gris à 18% correspond à une luminance exprimée en CIE L de 50%.\nCette donnée prend en compte la luminance moyenne de l'image. TP_COLORAPP_YBOUT_TOOLTIP;Yb est la luminance relative de l'arrière plan, exprimée e % de gris. Un gris à 18% correspond à une luminance exprimée en CIE L de 50%.\nCette donnée prend en compte la luminance moyenne de l'image.
TP_COLORAPP_YBSCEN_TOOLTIP;Yb est la luminance relative du fond, exprimée en % de gris. 18 % de gris correspondent à une luminance de fond de 50 % exprimée en CIE L.\nLes données sont basées sur la luminance moyenne de l'image
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_COLORTONING_AB;o C/L TP_COLORTONING_AB;o C/L
@ -1807,6 +1807,15 @@ TP_LOCALLAB_BUTTON_DEL;Effacer
TP_LOCALLAB_BUTTON_DUPL;Dupliquer TP_LOCALLAB_BUTTON_DUPL;Dupliquer
TP_LOCALLAB_BUTTON_REN;Renommer TP_LOCALLAB_BUTTON_REN;Renommer
TP_LOCALLAB_BUTTON_VIS;Montrer/Cacher TP_LOCALLAB_BUTTON_VIS;Montrer/Cacher
TP_LOCALLAB_BWFORCE;Utilise Black Ev & White Ev
TP_LOCALLAB_CAM16_FRA;Cam16 Adjustements Image
TP_LOCALLAB_CAM16PQREMAP;HDR PQ (Pic Luminance)
TP_LOCALLAB_CAM16PQREMAP_TOOLTIP;PQ (Perceptual Quantizer) adapté au CAM16. Vous permet de modifier la fonction PQ interne (généralement 10 000 cd/m2 - 100 cd/m2 par défaut - désactivée pour 100 cd/m2).\nPeut être utilisé pour s'adapter à différents appareils et images.
TP_LOCALLAB_CAMMODE;CAM modèle
TP_LOCALLAB_CAMMODE_ALL;CAM 16 + Jz Cz Hz
TP_LOCALLAB_CAMMODE_CAM16;CAM 16
TP_LOCALLAB_CAMMODE_ZCAM;ZCAM only
TP_LOCALLAB_CAMMODE_JZ;Jz Cz Hz
TP_LOCALLAB_CBDL;Contr. par niveaux détail TP_LOCALLAB_CBDL;Contr. par niveaux détail
TP_LOCALLAB_CBDLCLARI_TOOLTIP;Ajuste les tons moyens et les réhausse. TP_LOCALLAB_CBDLCLARI_TOOLTIP;Ajuste les tons moyens et les réhausse.
TP_LOCALLAB_CBDL_ADJ_TOOLTIP;Agit comme un outil ondelettes.\nLe premier niveau (0) agit sur des détails de 2x2.\nLe dernier niveau (5) agit sur des détails de 64x64. TP_LOCALLAB_CBDL_ADJ_TOOLTIP;Agit comme un outil ondelettes.\nLe premier niveau (0) agit sur des détails de 2x2.\nLe dernier niveau (5) agit sur des détails de 64x64.
@ -1824,10 +1833,29 @@ TP_LOCALLAB_CHROMALEV;Niveaux de Chroma
TP_LOCALLAB_CHROMASKCOL;Chroma TP_LOCALLAB_CHROMASKCOL;Chroma
TP_LOCALLAB_CHROMASK_TOOLTIP;Vous pouvez utiliser ce curseur pour désaturer l'arrière plan (inverse masque - courbe proche de 0).\nEgalement pour atténier ou accroître l'action du masque sur la chroma TP_LOCALLAB_CHROMASK_TOOLTIP;Vous pouvez utiliser ce curseur pour désaturer l'arrière plan (inverse masque - courbe proche de 0).\nEgalement pour atténier ou accroître l'action du masque sur la chroma
TP_LOCALLAB_CHRRT;Chroma TP_LOCALLAB_CHRRT;Chroma
TP_LOCALLAB_CIE_TOOLNAME;Apparance de couleurs (Cam16 & JzCzHz)
TP_LOCALLAB_CIE;Apparance de couleurs(Cam16 & JzCzHz)
TP_LOCALLAB_CIEC;Utilise les paramètres de CIECAM
TP_LOCALLAB_CIECAMLOG_TOOLTIP;Ce module est basé sur le modèle d'apparence des couleurs CIECAM qui a été conçu pour mieux simuler la façon dont la vision humaine perçoit les couleurs dans différentes conditions d'éclairage. le moment de la prise de vue.\nLe deuxième processus Ciecam "Réglages d'image" est simplifié et n'utilise que 3 variables (contraste local, contraste J, saturation s).\nLe troisième processus Ciecam "Conditions de visualisation" adapte la sortie aux conditions de visualisation souhaitées ( moniteur, téléviseur, projecteur, imprimante, etc.) afin que l'aspect chromatique et le contraste soient préservés dans l'environnement d'affichage.
TP_LOCALLAB_CIEMODE;Change position outils
TP_LOCALLAB_CIEMODE_COM;Défaut
TP_LOCALLAB_CIEMODE_DR;Dynamic Range
TP_LOCALLAB_CIEMODE_TM;Tone-Mapping
TP_LOCALLAB_CIEMODE_WAV;Ondelettes
TP_LOCALLAB_CIEMODE_LOG;Log Encoding
!TP_LOCALLAB_CIEMODE_TOOLTIP;In Default mode, Ciecam is added at the end of the process. "Mask and modifications" and "Recovery based on luminance mask" are available for"Cam16 and JzCzHz" at your disposal .\nYou can also integrate Ciecam into other tools if you wish (TM, Wavelet, Dynamic Range, Log Encoding). The results for these tools will be different to those without Ciecam. In this mode, you can also use "Mask and modifications" and "Recovery based on luminance mask"
TP_LOCALLAB_CIEMODE_TOOLTIP;En Mode par défaut, Ciecam est ajouté en fin de processus. "Masque et modifications" et "Recovery based on luminance mask" sont disponibles pour "Cam16 et JzCzHz" à votre disposition.\nVous pouvez également intégrer Ciecam dans d'autres outils si vous le souhaitez (TM, Wavelet, Dynamic Range, Log Encoding). Les résultats pour ces outils seront différents de ceux sans Ciecam. Dans ce mode, vous pouvez également utiliser "Masque et modifications" et "Récupération basée sur le masque de luminance"
TP_LOCALLAB_CIETOOLEXP;Courbes
TP_LOCALLAB_CIECOLORFRA;Couleur
TP_LOCALLAB_CIECONTFRA;Contraste
TP_LOCALLAB_CIELIGHTFRA;Eclaicir
TP_LOCALLAB_CIELIGHTCONTFRA;Eclaircir & Contraste
TP_LOCALLAB_CIRCRADIUS;Taille Spot TP_LOCALLAB_CIRCRADIUS;Taille Spot
TP_LOCALLAB_CIRCRAD_TOOLTIP;Contient les références du RT-spot, utile pour la détection de forme (couleur, luma, chroma, Sobel).\nLes faibles valeurs peuvent être utiles pour les feuillages.\nLes valeurs élevées peuvent être utile pour la peau TP_LOCALLAB_CIRCRAD_TOOLTIP;Contient les références du RT-spot, utile pour la détection de forme (couleur, luma, chroma, Sobel).\nLes faibles valeurs peuvent être utiles pour les feuillages.\nLes valeurs élevées peuvent être utile pour la peau
TP_LOCALLAB_CLARICRES;Fusion Chroma TP_LOCALLAB_CLARICRES;Fusion Chroma
TP_LOCALLAB_CLARIFRA;Clarté & Masque netteté/Fusion & adoucir TP_LOCALLAB_CLARIFRA;Clarté & Masque netteté/Fusion & adoucir
TP_LOCALLAB_CLARIJZ_TOOLTIP;En dessous ou égal à 4, 'Masque netteté' est actif.\nAu dessus du niveau ondelettes 5 'Clarté' est actif.
TP_LOCALLAB_CLARISOFTJZ_TOOLTIP;Le curseur « Rayon adoucir » (algorithme de filtre guidé) réduit les halos et les irrégularités pour les ondelettes de clarté, de masque net et de contraste local Jz.
TP_LOCALLAB_CLARILRES;Fusion Luma TP_LOCALLAB_CLARILRES;Fusion Luma
TP_LOCALLAB_CLARISOFT;Rayon adoucir TP_LOCALLAB_CLARISOFT;Rayon adoucir
TP_LOCALLAB_CLARISOFT_TOOLTIP;Actif pour Clarté et Masque de netteté si différent de zéro.\n\nActif pour toutes les pyramides ondelettes.\nInactif si rayon = 0 TP_LOCALLAB_CLARISOFT_TOOLTIP;Actif pour Clarté et Masque de netteté si différent de zéro.\n\nActif pour toutes les pyramides ondelettes.\nInactif si rayon = 0
@ -2010,6 +2038,84 @@ TP_LOCALLAB_INVERS_TOOLTIP;Si sélectionné (inverse) moins de possibilités.\n\
TP_LOCALLAB_INVBL_TOOLTIP;Alternative\nPremier Spot:\n image entière - delimiteurs en dehors de la prévisualisation\n RT-spot forme sélection : rectangle. Transition 100\n\nDeuxième spot : Spot Exclusion TP_LOCALLAB_INVBL_TOOLTIP;Alternative\nPremier Spot:\n image entière - delimiteurs en dehors de la prévisualisation\n RT-spot forme sélection : rectangle. Transition 100\n\nDeuxième spot : Spot Exclusion
TP_LOCALLAB_INVMASK;Algorithme inverse TP_LOCALLAB_INVMASK;Algorithme inverse
TP_LOCALLAB_ISOGR;Plus gros (ISO) TP_LOCALLAB_ISOGR;Plus gros (ISO)
TP_LOCALLAB_JAB;Utilise Black Ev & White Ev
TP_LOCALLAB_JABADAP_TOOLTIP;Perceptual Uniform adaptation.\nAjuste automatiquement la relation entre Jz et la saturation en tenant compte de la "luminance absolue".
TP_LOCALLAB_JZ100;Jz référence 100cd/m2
TP_LOCALLAB_JZCLARILRES;Fusion luma Jz
TP_LOCALLAB_JZCLARICRES;Fusion chroma Cz
TP_LOCALLAB_JZFORCE;Force max Jz à 1
TP_LOCALLAB_JZFORCE_TOOLTIP;Vous permet de forcer la valeur Jz maximale à 1 pour une meilleure réponse du curseur et de la courbe
TP_LOCALLAB_JZFRA;Jz Cz Hz Ajustements Image
TP_LOCALLAB_JZMODECAM_TOOLTIP;Jz (uniquement en mode 'Avancé'). Opérationnel uniquement si le périphérique de sortie (moniteur) est HDR (luminance crête supérieure à 100 cd/m2 - idéalement entre 4000 et 10000 cd/m2. Luminance du point noir inférieure à 0,005 cd/m2). Cela suppose a) que l'ICC-PCS pour l'écran utilise Jzazbz (ou XYZ), b) fonctionne en précision réelle, c) que le moniteur soit calibré (si possible avec un gamut DCI-P3 ou Rec-2020), d) que le gamma habituel (sRGB ou BT709) est remplacé par une fonction Perceptual Quantiser (PQ).
TP_LOCALLAB_JZPQFRA;Jz remappage
TP_LOCALLAB_JZPQFRA_TOOLTIP;Permet d'adapter l'algorithme Jz à un environnement SDR ou aux caractéristiques (performances) d'un environnement HDR comme suit :\n a) pour des valeurs de luminance comprises entre 0 et 100 cd/m2, le système se comporte comme s'il était dans un environnement SDR .\n b) pour des valeurs de luminance comprises entre 100 et 10000 cd/m2, vous pouvez adapter l'algorithme aux caractéristiques HDR de l'image et du moniteur.\n\nSi "PQ - Peak luminance" est réglé sur 10000, "Jz remappping" se comporte de la même manière que l'algorithme original de Jzazbz.
TP_LOCALLAB_JZPQREMAP;PQ - Pic luminance
TP_LOCALLAB_JZPQREMAP_TOOLTIP;PQ (Perceptual Quantizer) - vous permet de modifier la fonction PQ interne (généralement 10000 cd/m2 - par défaut 120 cd/m2).\nPeut être utilisé pour s'adapter à différentes images, processus et appareils.
TP_LOCALLAB_JZ100_TOOLTIP;Ajuste automatiquement le niveau de référence Jz 100 cd/m2 (signal d'image).\nModifie le niveau de saturation et l'action de "l'adaptation PU" (adaptation uniforme perceptuelle).
TP_LOCALLAB_JZADAP;PU adaptation
TP_LOCALLAB_JZFRA;Jz Cz Hz Adjustments Images
TP_LOCALLAB_JZLIGHT;Brightness
TP_LOCALLAB_JZCONT;Contraste
TP_LOCALLAB_JZCH;Chroma
TP_LOCALLAB_JZCHROM;Chroma
TP_LOCALLAB_JZHFRA;Courbes Hz
TP_LOCALLAB_JZHJZFRA;Courbe Jz(Hz)
TP_LOCALLAB_JZHUECIE;Rotation de teinte
TP_LOCALLAB_JZLOGWB_TOOLTIP;Si Auto est activé, il calculera et ajustera les niveaux Ev et la 'luminance moyenne Yb%' pour la zone du spot. Les valeurs résultantes seront utilisées par toutes les opérations Jz, y compris "Log Encoding Jz".\nCalcule également la luminance absolue au moment de la prise de vue.
TP_LOCALLAB_JZLOGWBS_TOOLTIP;Les réglages Black Ev et White Ev peuvent être différents selon que l'encodage Log ou Sigmoid est utilisé.\nPour Sigmoid, un changement (augmentation dans la plupart des cas) de White Ev peut être nécessaire pour obtenir un meilleur rendu des hautes lumières, du contraste et de la saturation.
TP_LOCALLAB_JZSAT;Saturation
TP_LOCALLAB_JZSHFRA;Ombres/Lumières Jz
TP_LOCALLAB_JZSOFTCIE;Rayon adoucir (GuidedFilter)
TP_LOCALLAB_JZTARGET_EV;Luminance moyenne (Yb%)
TP_LOCALLAB_JZSTRSOFTCIE;GuidedFilter Force
TP_LOCALLAB_JZQTOJ;Luminance relative
TP_LOCALLAB_JZQTOJ_TOOLTIP;Vous permet d'utiliser "Luminance relative" au lieu de "Luminance absolue" - Brightness devient Lightness.\nLes changements affectent : le curseur Luminosité, le curseur Contraste et la courbe Jz(Jz).
TP_LOCALLAB_JZTHRHCIE;Seuik Chroma pour Jz(Hz)
TP_LOCALLAB_JZWAVEXP;Ondelettes Jz
TP_LOCALLAB_JZLOG;Log encoding Jz
TP_LOCALLAB_LOG;Log Encoding
TP_LOCALLAB_LOG1FRA;CAM16 Adjustment Images
TP_LOCALLAB_LOG2FRA;Conditions de visionnage
TP_LOCALLAB_LOGAUTO;Automatique
TP_LOCALLAB_LOGAUTOGRAY_TOOLTIP;Calcule automatiquement la « luminance moyenne » pour les conditions de la scène lorsque le bouton « Automatique » dans les niveaux d'exposition relatifs est enfoncé.
TP_LOCALLAB_LOGAUTOGRAYJZ_TOOLTIP;Calcule automatiquement la « luminance moyenne » pour les conditions de la scène.
TP_LOCALLAB_LOGAUTO_TOOLTIP;Appuyez sur ce bouton pour calculer la plage dynamique et la « Luminance moyenne » pour les conditions de la scène si la « Luminance moyenne automatique (Yb %) » est cochée).\nCalcule également la luminance absolue au moment de la prise de vue.\nAppuyez à nouveau sur le bouton pour ajuster les valeurs calculées automatiquement.
TP_LOCALLAB_LOGBASE_TOOLTIP;Default = 2.\nValues less than 2 reduce the action of the algorithm making the shadows darker and the highlights brighter.\nWith values greater than 2, the shadows are grayer and the highlights become more washed out.
TP_LOCALLAB_LOGBLACKWHEV_TOOLTIP;Valeurs estimées du dynamic range entre Black Ev et White Ev
TP_LOCALLAB_LOGCATAD_TOOLTIP;L'adaptation chromatique permet d'interpréter une couleur en fonction de son environnement spatio-temporel.\nUtile lorsque la balance des blancs s'écarte sensiblement de la référence D50.\nAdapte les couleurs à l'illuminant du périphérique de sortie.
TP_LOCALLAB_LOGCOLORFL;Colorfulness (M)
TP_LOCALLAB_LOGCIE;Log encoding au lieu de Sigmoid
TP_LOCALLAB_LOGCIE_TOOLTIP;Vous permet d'utiliser Black Ev, White Ev, Scene Mean luminance (Yb%) et Viewing Mean luminance (Yb%) pour le mappage des tons à l'aide de l'encodage Log Q.
TP_LOCALLAB_LOGCONQL;Contraste (Q)
TP_LOCALLAB_LOGCONTL;Contraste (J)
TP_LOCALLAB_LOGCOLORF_TOOLTIP;Quantité de teinte perçue par rapport au gris.\nIndicateur qu'un stimulus apparaît plus ou moins coloré.
TP_LOCALLAB_LOGCONTL_TOOLTIP;Le contraste (J) dans CIECAM16 prend en compte l'augmentation de la coloration perçue avec la luminance
TP_LOCALLAB_LOGCONTQ_TOOLTIP;Le contraste (Q) dans CIECAM16 prend en compte l'augmentation de la coloration perçue avec la luminosité (brightness).
TP_LOCALLAB_LOGCONTHRES;Contrast seuil (J & Q)
TP_LOCALLAB_LOGCONTTHRES_TOOLTIP;Ajuste la plage de contraste des tons moyens (J et Q).\nLes valeurs positives réduisent progressivement l'effet des curseurs Contraste (J et Q). Les valeurs négatives augmentent progressivement l'effet des curseurs Contraste.
TP_LOCALLAB_LOGCONTL_TOOLTIP;Contrast (J) in CIECAM16 takes into account the increase in perceived coloration with luminance.
TP_LOCALLAB_LOGCONTQ_TOOLTIP;Contrast (Q) in CIECAM16 takes into account the increase in perceived coloration with brightness.
TP_LOCALLAB_LOGCONTTHRES_TOOLTIP;Adjusts the mid-tone contrast range (J & Q).\nPositive values progressively reduce the effect of the Contrast sliders (J & Q). Negative values progressively increase the effect of the Contrast sliders.
TP_LOCALLAB_LOGDETAIL_TOOLTIP;Agit principalement sur les hautes frequences.
TP_LOCALLAB_LOGENCOD_TOOLTIP;Tone Mapping with Logarithmic encoding (ACES).\nUtile pour les images sous-exposées ou les images avec une plage dynamique élevée.\n\nProcessus en deux étapes : 1) Calcul de la plage dynamique 2) Réglage manuel
TP_LOCALLAB_LOGEXP;Tous les outils
TP_LOCALLAB_LOGFRA;Scene Conditions
TP_LOCALLAB_LOGFRAME_TOOLTIP;Vous permet de calculer et d'ajuster les niveaux Ev et la 'luminance moyenne Yb%' (point gris source) pour la zone du spot. Les valeurs résultantes seront utilisées par toutes les opérations Lab et la plupart des opérations RVB du pipeline.\nCalcule également la luminance absolue au moment de la prise de vue.
TP_LOCALLAB_LOGIMAGE_TOOLTIP;Prend en compte les variables Ciecam correspondantes : c'est-à-dire le contraste (J) et la saturation (s), ainsi que le contraste (Q), la luminosité (Q), la luminosité (J) et la couleur (M) (en mode avancé)
TP_LOCALLAB_LOGLIGHTL;Lightness (J)
TP_LOCALLAB_LOGLIGHTL_TOOLTIP;Proche de lightness (L*a*b*). Prend en compte l'augmentation de la coloration perçue
TP_LOCALLAB_LOGLIGHTQ;Brightness (Q)
TP_LOCALLAB_LOGLIGHTQ_TOOLTIP;Quantité de lumière perçue émanant d'un stimulus.\nIndicateur qu'un stimulus semble être plus ou moins brillant, clair.
TP_LOCALLAB_LOGLIN;Logarithm mode
TP_LOCALLAB_LOGPFRA;Niveaux Exposition relatifs
TP_LOCALLAB_LOGREPART;Force Globale
TP_LOCALLAB_LOGREPART_TOOLTIP;Vous permet d'ajuster la force relative de l'image encodée en journal par rapport à l'image d'origine.\nN'affecte pas le composant Ciecam.
TP_LOCALLAB_LOGSATURL_TOOLTIP;La saturation(s) dans CIECAM16 correspond à la couleur d'un stimulus par rapport à sa propre luminosité.\nAgit principalement sur les tons moyens et sur les hautes lumières.
TP_LOCALLAB_LOGSCENE_TOOLTIP;Correspond aux conditions de prise de vue.
TP_LOCALLAB_LOGSURSOUR_TOOLTIP;Modifie les tonalités et les couleurs pour prendre en compte les conditions de la scène.\n\n<b>Moyen</b> : conditions d'éclairage moyennes (standard). L'image ne changera pas.\n\n<b>Dim</b> : conditions de luminosité. L'image deviendra légèrement plus lumineuse.\n\n<b>Sombre</b> : conditions sombres. L'image deviendra plus lumineuse.
TP_LOCALLAB_LOGVIEWING_TOOLTIP;Correspond au support sur lequel sera visualisée l'image finale (moniteur, TV, projecteur, imprimante...), ainsi qu'aux conditions environnantes.
TP_LOCALLAB_JZLOGYBOUT_TOOLTIP;Yb est la luminance relative du fond, exprimée en pourcentage de gris. 18 % de gris correspond à une luminance d'arrière-plan de 50 % lorsqu'elle est exprimée en CIE L.\nLes données sont basées sur la luminance moyenne de l'image.\nLorsqu'elle est utilisée avec Log Encoding, la luminance moyenne est utilisée pour déterminer la quantité de gain nécessaire à appliquer au signal avant le codage logarithmique. Des valeurs inférieures de luminance moyenne se traduiront par un gain accru.
TP_LOCALLAB_LOG_TOOLNAME;Log Encoding
TP_LOCALLAB_LABBLURM;Masque Flouter TP_LOCALLAB_LABBLURM;Masque Flouter
TP_LOCALLAB_LABEL;Ajustements Locaux TP_LOCALLAB_LABEL;Ajustements Locaux
TP_LOCALLAB_LABGRID;Grille correction couleurs TP_LOCALLAB_LABGRID;Grille correction couleurs
@ -2045,7 +2151,7 @@ TP_LOCALLAB_LOC_CONTRASTPYR2;Pyramide 2:
TP_LOCALLAB_LOC_CONTRASTPYR2LAB; Contr. par niveaux/TM/Cont.Dir. TP_LOCALLAB_LOC_CONTRASTPYR2LAB; Contr. par niveaux/TM/Cont.Dir.
TP_LOCALLAB_LOC_CONTRASTPYRLAB; Filtre Gradué/Netteté bords/Flou TP_LOCALLAB_LOC_CONTRASTPYRLAB; Filtre Gradué/Netteté bords/Flou
TP_LOCALLAB_LOC_RESIDPYR;Image Residuelle TP_LOCALLAB_LOC_RESIDPYR;Image Residuelle
TP_LOCALLAB_LOG;Codage log TP_LOCALLAB_LOG;Codage logbwforce
TP_LOCALLAB_LOG1FRA;Ajustements Image TP_LOCALLAB_LOG1FRA;Ajustements Image
TP_LOCALLAB_LOG2FRA;Conditions de visionnage TP_LOCALLAB_LOG2FRA;Conditions de visionnage
TP_LOCALLAB_LOGAUTO;Automatique TP_LOCALLAB_LOGAUTO;Automatique
@ -2280,6 +2386,7 @@ TP_LOCALLAB_REWEI;Repondération iterations
TP_LOCALLAB_RGB;RGB Courbe de tonalité TP_LOCALLAB_RGB;RGB Courbe de tonalité
TP_LOCALLAB_ROW_NVIS;Pas visible TP_LOCALLAB_ROW_NVIS;Pas visible
TP_LOCALLAB_ROW_VIS;Visible TP_LOCALLAB_ROW_VIS;Visible
TP_LOCALLAB_RSTPROTECT_TOOLTIP;La protection des rouges et des tons chair affecte les curseurs Saturation, Chroma et Colorfulness.
TP_LOCALLAB_SATUR;Saturation TP_LOCALLAB_SATUR;Saturation
TP_LOCALLAB_SAVREST;Sauve - Récupère Image Courante TP_LOCALLAB_SAVREST;Sauve - Récupère Image Courante
TP_LOCALLAB_SCALEGR;Echelle TP_LOCALLAB_SCALEGR;Echelle
@ -2354,6 +2461,13 @@ TP_LOCALLAB_SHRESFRA;Ombres/Lumières
TP_LOCALLAB_SHTRC_TOOLTIP;Modifie les tons de l'image en agissant sur la TRC (Tone Response Curve).\nGamma agit principalement sur les tons lumineux.\nSlope (pente) agit principalement sur les tons sombres. TP_LOCALLAB_SHTRC_TOOLTIP;Modifie les tons de l'image en agissant sur la TRC (Tone Response Curve).\nGamma agit principalement sur les tons lumineux.\nSlope (pente) agit principalement sur les tons sombres.
TP_LOCALLAB_SH_TOOLNAME;Ombres/lumières & Egaliseur tonal - 5 TP_LOCALLAB_SH_TOOLNAME;Ombres/lumières & Egaliseur tonal - 5
TP_LOCALLAB_SIGMAWAV;Atténuation Réponse TP_LOCALLAB_SIGMAWAV;Atténuation Réponse
TP_LOCALLAB_SIGFRA;Sigmoid Q & Log encoding Q
TP_LOCALLAB_SIGJZFRA;Sigmoid Jz
TP_LOCALLAB_SIGMOIDLAMBDA;Contraste
TP_LOCALLAB_SIGMOIDTH;Seuil (Gray point)
TP_LOCALLAB_SIGMOIDBL;Mélange
TP_LOCALLAB_SIGMOIDQJ;Utilise Black Ev & White Ev
TP_LOCALLAB_SIGMOID_TOOLTIP;Permet de simuler une apparence de Tone-mapping en utilisant à la fois la fonction 'Ciecam' (ou 'Jz') et 'Sigmoïde'.\nTrois curseurs : a) Le contraste agit sur la forme de la courbe sigmoïde et par conséquent sur la force ; b) Seuil (Point gris) distribue l'action en fonction de la luminance ; c)Blend agit sur l'aspect final de l'image, le contraste et la luminance.
TP_LOCALLAB_SIM;Simple TP_LOCALLAB_SIM;Simple
TP_LOCALLAB_SLOMASKCOL;Pente (slope) TP_LOCALLAB_SLOMASKCOL;Pente (slope)
TP_LOCALLAB_SLOMASK_TOOLTIP;Gamma et Pente (Slope) autorise une transformation du masque en douceur et sans artefacts en modifiant progressivement "L" pour éviter les discontinuité. TP_LOCALLAB_SLOMASK_TOOLTIP;Gamma et Pente (Slope) autorise une transformation du masque en douceur et sans artefacts en modifiant progressivement "L" pour éviter les discontinuité.
@ -2449,7 +2563,7 @@ TP_LOCALLAB_WAT_BLURLC_TOOLTIP;Par défaut les 3 dimensions de L*a*b* luminance
TP_LOCALLAB_WAT_THRESHOLDWAV_TOOLTIP;Etendue des niveaux dondelettes utilisée dans lensemble du module “wavelets” TP_LOCALLAB_WAT_THRESHOLDWAV_TOOLTIP;Etendue des niveaux dondelettes utilisée dans lensemble du module “wavelets”
TP_LOCALLAB_WAT_EXPRESID_TOOLTIP;Image résiduelle, a le même comportement que l'image principale TP_LOCALLAB_WAT_EXPRESID_TOOLTIP;Image résiduelle, a le même comportement que l'image principale
TP_LOCALLAB_WAT_CLARIL_TOOLTIP;"Fusion luma" est utilisée pour selectionner l'intensité de l'effet désiré sur la luminance. TP_LOCALLAB_WAT_CLARIL_TOOLTIP;"Fusion luma" est utilisée pour selectionner l'intensité de l'effet désiré sur la luminance.
TP_LOCALLAB_WAT_CLARIC_TOOLTIP;"Fusion chroma" est utilisée pour selectionner l'intensité de l'effet désiré sur la luminance. TP_LOCALLAB_WAT_CLARIC_TOOLTIP;"Fusion chroma" est utilisée pour selectionner l'intensité de l'effet désiré sur la chrominance.
TP_LOCALLAB_WAT_ORIGLC_TOOLTIP;"Fusion seulement avec image originale", empêche les actions "Wavelet Pyramid" d'interférer avec "Claté" and "Masque netteté" TP_LOCALLAB_WAT_ORIGLC_TOOLTIP;"Fusion seulement avec image originale", empêche les actions "Wavelet Pyramid" d'interférer avec "Claté" and "Masque netteté"
TP_LOCALLAB_WAT_STRWAV_TOOLTIP;Permet au contraste local de varier en fonction d'un gradient et d'un angle. La variation du signal de la luminance signal est prise en compte et non pas la luminance. TP_LOCALLAB_WAT_STRWAV_TOOLTIP;Permet au contraste local de varier en fonction d'un gradient et d'un angle. La variation du signal de la luminance signal est prise en compte et non pas la luminance.
TP_LOCALLAB_WAT_CONTOFFSET_TOOLTIP;Décalage modifie la balance entre faible contraste et contraste élévé.\nLes hautes valeurs amplifient les changements de contraste pour les détails à contraste élévé, alors que les faibles valeurs vont amplifier les détails à contraste faible .\nEn selectionant des valeurs faibles vous pouvez ainsi sélectionner les zones de contrastes qui seront accentuées. TP_LOCALLAB_WAT_CONTOFFSET_TOOLTIP;Décalage modifie la balance entre faible contraste et contraste élévé.\nLes hautes valeurs amplifient les changements de contraste pour les détails à contraste élévé, alors que les faibles valeurs vont amplifier les détails à contraste faible .\nEn selectionant des valeurs faibles vous pouvez ainsi sélectionner les zones de contrastes qui seront accentuées.
@ -2505,6 +2619,30 @@ TP_PCVIGNETTE_STRENGTH_TOOLTIP;Force du filtre en EV (maximum dans les coins)
TP_PERSPECTIVE_HORIZONTAL;Horizontale TP_PERSPECTIVE_HORIZONTAL;Horizontale
TP_PERSPECTIVE_LABEL;Perspective TP_PERSPECTIVE_LABEL;Perspective
TP_PERSPECTIVE_VERTICAL;Verticale TP_PERSPECTIVE_VERTICAL;Verticale
TP_PERSPECTIVE_CONTROL_LINE_APPLY_INVALID_TOOLTIP;Au moins deux lignes de contrôle horizontales ou deux verticales requises.
TP_PERSPECTIVE_CAMERA_CROP_FACTOR;Facteur de réduction (crop)
TP_PERSPECTIVE_CAMERA_FOCAL_LENGTH;Longueur focale
TP_PERSPECTIVE_CAMERA_FRAME;Correction
TP_PERSPECTIVE_CAMERA_PITCH;Vertical
TP_PERSPECTIVE_CAMERA_ROLL;Rotation
TP_PERSPECTIVE_CAMERA_SHIFT_HORIZONTAL;Décalage Horizontal
TP_PERSPECTIVE_CAMERA_SHIFT_VERTICAL;Décalage Vertical
TP_PERSPECTIVE_CAMERA_YAW;Horizontal
TP_PERSPECTIVE_CONTROL_LINES;Lignes de contrôle
TP_PERSPECTIVE_CONTROL_LINES_TOOLTIP;<b>Ctrl</b>+<b>faire glisser</b> : dessiner une nouvelle ligne\n<b>Clic droit</b> : supprimer la ligne
TP_PERSPECTIVE_HORIZONTAL;Horizontal
TP_PERSPECTIVE_LABEL;Perspective
TP_PERSPECTIVE_METHOD;Méthode
TP_PERSPECTIVE_METHOD_CAMERA_BASED;Basé sur Camera
TP_PERSPECTIVE_METHOD_SIMPLE;Simple
TP_PERSPECTIVE_POST_CORRECTION_ADJUSTMENT_FRAME;Ajustement post-correction
TP_PERSPECTIVE_PROJECTION_PITCH;Vertical
TP_PERSPECTIVE_PROJECTION_ROTATE;Rotation
TP_PERSPECTIVE_PROJECTION_SHIFT_HORIZONTAL;Décalage Horizontal
TP_PERSPECTIVE_PROJECTION_SHIFT_VERTICAL;Décalage Vertical
TP_PERSPECTIVE_PROJECTION_YAW;Horizontal
TP_PERSPECTIVE_RECOVERY_FRAME;Récupération
TP_PERSPECTIVE_VERTICAL;Vertical
TP_PFCURVE_CURVEEDITOR_CH;Teinte TP_PFCURVE_CURVEEDITOR_CH;Teinte
TP_PFCURVE_CURVEEDITOR_CH_TOOLTIP;Contrôle la force du défrangeage en fonction de la couleur. En haut = action maxi, en bas = pas d'action sur la couleur. TP_PFCURVE_CURVEEDITOR_CH_TOOLTIP;Contrôle la force du défrangeage en fonction de la couleur. En haut = action maxi, en bas = pas d'action sur la couleur.
TP_PREPROCESS_DEADPIXFILT;Filtrer les pixels morts TP_PREPROCESS_DEADPIXFILT;Filtrer les pixels morts
@ -3019,8 +3157,11 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: <b>-</b>
!GENERAL_HELP;Help !GENERAL_HELP;Help
!HISTORY_MSG_494;Capture Sharpening !HISTORY_MSG_494;Capture Sharpening
!HISTORY_MSG_DEHAZE_LUMINANCE;Dehaze - Luminance only !HISTORY_MSG_DEHAZE_LUMINANCE;Dehaze - Luminance only
!HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negatif
!HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values HISTORY_MSG_FILMNEGATIVE_VALUES;Film negatif valeurs
HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Réference Sortie
HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negativf Espace couleur
HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Référence entrée
!HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold
!HISTORY_MSG_PDSHARPEN_AUTO_RADIUS;CS - Auto radius !HISTORY_MSG_PDSHARPEN_AUTO_RADIUS;CS - Auto radius
!HISTORY_MSG_PDSHARPEN_CHECKITER;CS - Auto limit iterations !HISTORY_MSG_PDSHARPEN_CHECKITER;CS - Auto limit iterations
@ -3030,7 +3171,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: <b>-</b>
!HISTORY_MSG_PDSHARPEN_RADIUS_BOOST;CS - Corner radius boost !HISTORY_MSG_PDSHARPEN_RADIUS_BOOST;CS - Corner radius boost
!HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_TRANS_METHOD;Geometry - Method
!MAIN_FRAME_PLACES_DEL;Remove !MAIN_FRAME_PLACES_DEL;Remove
!PARTIALPASTE_FILMNEGATIVE;Film Negative !PARTIALPASTE_FILMNEGATIVE;Film Negatif
!PROGRESSBAR_DECODING;Decoding... !PROGRESSBAR_DECODING;Decoding...
!PROGRESSBAR_GREENEQUIL;Green equilibration... !PROGRESSBAR_GREENEQUIL;Green equilibration...
!PROGRESSBAR_HLREC;Highlight reconstruction... !PROGRESSBAR_HLREC;Highlight reconstruction...
@ -3040,12 +3181,23 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: <b>-</b>
!QUEUE_LOCATION_TITLE;Output Location !QUEUE_LOCATION_TITLE;Output Location
!TP_CROP_PPI;PPI !TP_CROP_PPI;PPI
!TP_DEHAZE_LUMINANCE;Luminance only !TP_DEHAZE_LUMINANCE;Luminance only
!TP_FILMNEGATIVE_BLUE;Blue ratio TP_FILMNEGATIVE_BLUE;Ratio bleu
!TP_FILMNEGATIVE_GREEN;Reference exponent (contrast) TP_FILMNEGATIVE_BLUEBALANCE;Froid/Chaud
!TP_FILMNEGATIVE_GUESS_TOOLTIP;Automatically set the red and blue ratios by picking two patches which had a neutral hue (no color) in the original scene. The patches should differ in brightness. Set the white balance afterwards. TP_FILMNEGATIVE_COLORSPACE;Inversion espace couleur:
!TP_FILMNEGATIVE_LABEL;Film Negative TP_FILMNEGATIVE_COLORSPACE_INPUT;Espace couleur -entrée
!TP_FILMNEGATIVE_PICK;Pick neutral spots TP_FILMNEGATIVE_COLORSPACE_TOOLTIP;Sélectionnez l'espace colorimétrique utilisé pour effectuer l'inversion négative :\n<b>Espace colorimétrique d'entrée</b> : effectuez l'inversion avant l'application du profil d'entrée, comme dans les versions précédentes de RT.\n<b>Espace colorimétrique de travail< /b> : effectue l'inversion après le profil d'entrée, en utilisant le profil de travail actuellement sélectionné.
!TP_FILMNEGATIVE_RED;Red ratio TP_FILMNEGATIVE_COLORSPACE_WORKING;Espace couleur de travail
TP_FILMNEGATIVE_REF_LABEL;Entrée RGB: %1
TP_FILMNEGATIVE_REF_PICK;Choisissez le point de la balance des blancs
TP_FILMNEGATIVE_REF_TOOLTIP;Choisissez un patch gris pour équilibrer les blancs de la sortie, image positive.
TP_FILMNEGATIVE_GREEN;Exposant de référence
TP_FILMNEGATIVE_GREENBALANCE;Magenta/Vert
!TP_FILMNEGATIVE_GUESS_TOOLTIP;Automatically set the red and blue ratios by picking two patches which had a neutral hue (no color) in the original scene. The patches should differ in brightness.
TP_FILMNEGATIVE_LABEL;Film Negatif
TP_FILMNEGATIVE_OUT_LEVEL;Niveau de sortie
TP_FILMNEGATIVE_PICK;Choix des endroits neutres
TP_FILMNEGATIVE_RED;Ratio Rouge
TP_FILMNEGATIVE_GUESS_TOOLTIP;Définissez automatiquement les ratios rouge et bleu en choisissant deux patchs qui avaient une teinte neutre (pas de couleur) dans la scène d'origine. Les patchs doivent différer en luminosité.
!TP_LENSGEOM_LIN;Linear !TP_LENSGEOM_LIN;Linear
!TP_LENSGEOM_LOG;Logarithmic !TP_LENSGEOM_LOG;Logarithmic
!TP_LENSPROFILE_CORRECTION_AUTOMATCH;Automatically selected !TP_LENSPROFILE_CORRECTION_AUTOMATCH;Automatically selected

View File

@ -191,7 +191,6 @@ HISTOGRAM_TOOLTIP_CHRO;Mostra/Nascondi l'istogramma di cromaticità.
HISTOGRAM_TOOLTIP_G;Mostra/Nascondi l'istogramma del Verde. HISTOGRAM_TOOLTIP_G;Mostra/Nascondi l'istogramma del Verde.
HISTOGRAM_TOOLTIP_L;Mostra/Nascondi l'istogramma di Luminanza CIELAB. HISTOGRAM_TOOLTIP_L;Mostra/Nascondi l'istogramma di Luminanza CIELAB.
HISTOGRAM_TOOLTIP_R;Mostra/Nascondi l'istogramma del Rosso. HISTOGRAM_TOOLTIP_R;Mostra/Nascondi l'istogramma del Rosso.
HISTOGRAM_TOOLTIP_RAW;Mostra/Nascondi l'istogramma del raw.
HISTORY_CHANGED;Modificato HISTORY_CHANGED;Modificato
HISTORY_CUSTOMCURVE;Curva personalizzata HISTORY_CUSTOMCURVE;Curva personalizzata
HISTORY_FROMCLIPBOARD;Dagli appunti HISTORY_FROMCLIPBOARD;Dagli appunti

File diff suppressed because it is too large Load Diff

View File

@ -156,7 +156,6 @@ HISTOGRAM_TOOLTIP_BAR;RGB jelzősáv megjelenítése/elrejtése.\nKattints jobb
HISTOGRAM_TOOLTIP_G;Zöld csatorna hisztogrammja (mutat/elrejt) HISTOGRAM_TOOLTIP_G;Zöld csatorna hisztogrammja (mutat/elrejt)
HISTOGRAM_TOOLTIP_L;CIELAB Luminancia hisztogramm (mutat/elrejt) HISTOGRAM_TOOLTIP_L;CIELAB Luminancia hisztogramm (mutat/elrejt)
HISTOGRAM_TOOLTIP_R;Piros csatorna hisztogrammja (mutat/elrejt) HISTOGRAM_TOOLTIP_R;Piros csatorna hisztogrammja (mutat/elrejt)
HISTOGRAM_TOOLTIP_RAW;Raw hisztogram megjelenítése/elrejtése
HISTORY_CHANGED;Változott HISTORY_CHANGED;Változott
HISTORY_CUSTOMCURVE;Saját görbe HISTORY_CUSTOMCURVE;Saját görbe
HISTORY_FROMCLIPBOARD;Vágólapról HISTORY_FROMCLIPBOARD;Vágólapról

View File

@ -235,7 +235,6 @@ HISTOGRAM_TOOLTIP_CHRO;Toon/Verberg Chromaticiteit histogram
HISTOGRAM_TOOLTIP_G;Toon/verberg groen histogram HISTOGRAM_TOOLTIP_G;Toon/verberg groen histogram
HISTOGRAM_TOOLTIP_L;Toon/verberg CIELAB-luminantiehistogram HISTOGRAM_TOOLTIP_L;Toon/verberg CIELAB-luminantiehistogram
HISTOGRAM_TOOLTIP_R;Toon/verberg rood histogram HISTOGRAM_TOOLTIP_R;Toon/verberg rood histogram
HISTOGRAM_TOOLTIP_RAW;Toon/verberg RAW-histogram
HISTORY_CHANGED;Veranderd HISTORY_CHANGED;Veranderd
HISTORY_CUSTOMCURVE;Handmatig HISTORY_CUSTOMCURVE;Handmatig
HISTORY_FROMCLIPBOARD;Van klembord HISTORY_FROMCLIPBOARD;Van klembord

View File

@ -238,7 +238,6 @@ HISTOGRAM_TOOLTIP_CHRO;Pokaż/Ukryj histogram chromatyczności.
HISTOGRAM_TOOLTIP_G;Pokaż/Ukryj histogram zieleni. HISTOGRAM_TOOLTIP_G;Pokaż/Ukryj histogram zieleni.
HISTOGRAM_TOOLTIP_L;Pokaż/Ukryj histogram luminancji CIELab. HISTOGRAM_TOOLTIP_L;Pokaż/Ukryj histogram luminancji CIELab.
HISTOGRAM_TOOLTIP_R;Pokaż/Ukryj histogram czerwieni. HISTOGRAM_TOOLTIP_R;Pokaż/Ukryj histogram czerwieni.
HISTOGRAM_TOOLTIP_RAW;Pokaż/Ukryj histogram raw.
HISTORY_CHANGED;Zmieniono HISTORY_CHANGED;Zmieniono
HISTORY_CUSTOMCURVE;Krzywa własna HISTORY_CUSTOMCURVE;Krzywa własna
HISTORY_FROMCLIPBOARD;Ze schowka HISTORY_FROMCLIPBOARD;Ze schowka

View File

@ -237,7 +237,6 @@ HISTOGRAM_TOOLTIP_G;Mostrar histograma verde.
HISTOGRAM_TOOLTIP_L;Mostrar histograma de luminância CIELab. HISTOGRAM_TOOLTIP_L;Mostrar histograma de luminância CIELab.
HISTOGRAM_TOOLTIP_MODE;Alternar entre redimensionar linear, log-linear e log-log do histograma. HISTOGRAM_TOOLTIP_MODE;Alternar entre redimensionar linear, log-linear e log-log do histograma.
HISTOGRAM_TOOLTIP_R;Mostrar histograma vermelho. HISTOGRAM_TOOLTIP_R;Mostrar histograma vermelho.
HISTOGRAM_TOOLTIP_RAW;Mostrar histograma raw.
HISTORY_CHANGED;Alterado HISTORY_CHANGED;Alterado
HISTORY_CUSTOMCURVE;Curva personalizada HISTORY_CUSTOMCURVE;Curva personalizada
HISTORY_FROMCLIPBOARD;Da área de transferência HISTORY_FROMCLIPBOARD;Da área de transferência

View File

@ -244,7 +244,6 @@ HISTOGRAM_TOOLTIP_G;Mostrar/Ocultar histograma verde.
HISTOGRAM_TOOLTIP_L;Mostrar/Ocultar histograma de luminância CIELab. HISTOGRAM_TOOLTIP_L;Mostrar/Ocultar histograma de luminância CIELab.
HISTOGRAM_TOOLTIP_MODE;Alternar entre o modo de escala linear, log-linear e log-log para o histograma. HISTOGRAM_TOOLTIP_MODE;Alternar entre o modo de escala linear, log-linear e log-log para o histograma.
HISTOGRAM_TOOLTIP_R;Mostrar/Ocultar histograma vermelho. HISTOGRAM_TOOLTIP_R;Mostrar/Ocultar histograma vermelho.
HISTOGRAM_TOOLTIP_RAW;Mostrar/Ocultar histograma raw.
HISTORY_CHANGED;Alterado HISTORY_CHANGED;Alterado
HISTORY_CUSTOMCURVE;Curva personalizada HISTORY_CUSTOMCURVE;Curva personalizada
HISTORY_FROMCLIPBOARD;Da área de transferência HISTORY_FROMCLIPBOARD;Da área de transferência

View File

@ -225,7 +225,6 @@ HISTOGRAM_TOOLTIP_CHRO;Показать/скрыть хроматическую
HISTOGRAM_TOOLTIP_G;Показать/скрыть зелёный канал гистограммы HISTOGRAM_TOOLTIP_G;Показать/скрыть зелёный канал гистограммы
HISTOGRAM_TOOLTIP_L;Показать/скрыть CIELAB гистограмму HISTOGRAM_TOOLTIP_L;Показать/скрыть CIELAB гистограмму
HISTOGRAM_TOOLTIP_R;Показать/скрыть красный канал гистограммы HISTOGRAM_TOOLTIP_R;Показать/скрыть красный канал гистограммы
HISTOGRAM_TOOLTIP_RAW;Показать/скрыть Raw гистограмму
HISTORY_CHANGED;Изменено HISTORY_CHANGED;Изменено
HISTORY_CUSTOMCURVE;Пользовательская кривая HISTORY_CUSTOMCURVE;Пользовательская кривая
HISTORY_FROMCLIPBOARD;Из буфера обмена HISTORY_FROMCLIPBOARD;Из буфера обмена

View File

@ -171,7 +171,6 @@ HISTOGRAM_TOOLTIP_CHRO;Прикажи/сакриј хистограм хроми
HISTOGRAM_TOOLTIP_G;Приказује зелени хистограм HISTOGRAM_TOOLTIP_G;Приказује зелени хистограм
HISTOGRAM_TOOLTIP_L;Приказује ЦиеЛаб хитограм HISTOGRAM_TOOLTIP_L;Приказује ЦиеЛаб хитограм
HISTOGRAM_TOOLTIP_R;Приказује црвени хистограм HISTOGRAM_TOOLTIP_R;Приказује црвени хистограм
HISTOGRAM_TOOLTIP_RAW;Приказује/скрива RAW хистограм
HISTORY_CHANGED;Измењено HISTORY_CHANGED;Измењено
HISTORY_CUSTOMCURVE;Произвољна крива HISTORY_CUSTOMCURVE;Произвољна крива
HISTORY_FROMCLIPBOARD;Из оставе HISTORY_FROMCLIPBOARD;Из оставе

View File

@ -247,7 +247,6 @@ HISTOGRAM_TOOLTIP_G;Prikaži/Skrij histogram za zeleno.
HISTOGRAM_TOOLTIP_L;Prikaži/Skrij histogram CIELab svetlosti. HISTOGRAM_TOOLTIP_L;Prikaži/Skrij histogram CIELab svetlosti.
HISTOGRAM_TOOLTIP_MODE;Preklopi med linearno, log-linearno in log-log merilom histograma. HISTOGRAM_TOOLTIP_MODE;Preklopi med linearno, log-linearno in log-log merilom histograma.
HISTOGRAM_TOOLTIP_R;Prikaži/Skrij histogram za rdečo. HISTOGRAM_TOOLTIP_R;Prikaži/Skrij histogram za rdečo.
HISTOGRAM_TOOLTIP_RAW;Prikaži/Skrij surovi histogram.
HISTORY_CHANGED;Spremenjeno HISTORY_CHANGED;Spremenjeno
HISTORY_CUSTOMCURVE;Prilagojena krivulja HISTORY_CUSTOMCURVE;Prilagojena krivulja
HISTORY_FROMCLIPBOARD;Iz odložišča HISTORY_FROMCLIPBOARD;Iz odložišča

View File

@ -204,7 +204,6 @@ HISTOGRAM_TOOLTIP_CHRO;Visa/Dölj kromananshistogrammet
HISTOGRAM_TOOLTIP_G;Visa/dölj grönt histogram HISTOGRAM_TOOLTIP_G;Visa/dölj grönt histogram
HISTOGRAM_TOOLTIP_L;Visa/dölj CIELAB histogram för luminans HISTOGRAM_TOOLTIP_L;Visa/dölj CIELAB histogram för luminans
HISTOGRAM_TOOLTIP_R;Visa/dölj rött histogram HISTOGRAM_TOOLTIP_R;Visa/dölj rött histogram
HISTOGRAM_TOOLTIP_RAW;Visa/dölj råbildens histogram
HISTORY_CHANGED;Ändrad HISTORY_CHANGED;Ändrad
HISTORY_CUSTOMCURVE;Egen kurva HISTORY_CUSTOMCURVE;Egen kurva
HISTORY_FROMCLIPBOARD;Från klippbordet HISTORY_FROMCLIPBOARD;Från klippbordet

View File

@ -251,7 +251,6 @@ HISTOGRAM_TOOLTIP_G;Show/Hide green histogram.
HISTOGRAM_TOOLTIP_L;Show/Hide CIELab luminance histogram. HISTOGRAM_TOOLTIP_L;Show/Hide CIELab luminance histogram.
HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram.
HISTOGRAM_TOOLTIP_R;Show/Hide red histogram. HISTOGRAM_TOOLTIP_R;Show/Hide red histogram.
HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram.
HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Toggle visibility of the scope option buttons. HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Toggle visibility of the scope option buttons.
HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Adjust scope brightness. HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Adjust scope brightness.
HISTOGRAM_TOOLTIP_TYPE_HISTOGRAM;Histogram HISTOGRAM_TOOLTIP_TYPE_HISTOGRAM;Histogram
@ -265,7 +264,6 @@ HISTORY_CUSTOMCURVE;Custom curve
HISTORY_FROMCLIPBOARD;From clipboard HISTORY_FROMCLIPBOARD;From clipboard
HISTORY_LABEL;History HISTORY_LABEL;History
HISTORY_MSG_1;Photo loaded HISTORY_MSG_1;Photo loaded
HISTORY_MSG_2;PP3 loaded
HISTORY_MSG_3;PP3 changed HISTORY_MSG_3;PP3 changed
HISTORY_MSG_4;History browsing HISTORY_MSG_4;History browsing
HISTORY_MSG_5;Exposure - Lightness HISTORY_MSG_5;Exposure - Lightness
@ -279,9 +277,6 @@ HISTORY_MSG_12;Exposure - Auto levels
HISTORY_MSG_13;Exposure - Clip HISTORY_MSG_13;Exposure - Clip
HISTORY_MSG_14;L*a*b* - Lightness HISTORY_MSG_14;L*a*b* - Lightness
HISTORY_MSG_15;L*a*b* - Contrast HISTORY_MSG_15;L*a*b* - Contrast
HISTORY_MSG_16;-
HISTORY_MSG_17;-
HISTORY_MSG_18;-
HISTORY_MSG_19;L*a*b* - L* curve HISTORY_MSG_19;L*a*b* - L* curve
HISTORY_MSG_20;Sharpening HISTORY_MSG_20;Sharpening
HISTORY_MSG_21;USM - Radius HISTORY_MSG_21;USM - Radius
@ -307,10 +302,6 @@ HISTORY_MSG_40;WB - Tint
HISTORY_MSG_41;Exposure - Tone curve 1 mode HISTORY_MSG_41;Exposure - Tone curve 1 mode
HISTORY_MSG_42;Exposure - Tone curve 2 HISTORY_MSG_42;Exposure - Tone curve 2
HISTORY_MSG_43;Exposure - Tone curve 2 mode HISTORY_MSG_43;Exposure - Tone curve 2 mode
HISTORY_MSG_44;Lum. denoising radius
HISTORY_MSG_45;Lum. denoising edge tolerance
HISTORY_MSG_46;Color denoising
HISTORY_MSG_47;Blend ICC highlights with matrix
HISTORY_MSG_48;DCP - Tone curve HISTORY_MSG_48;DCP - Tone curve
HISTORY_MSG_49;DCP illuminant HISTORY_MSG_49;DCP illuminant
HISTORY_MSG_50;Shadows/Highlights HISTORY_MSG_50;Shadows/Highlights
@ -318,7 +309,6 @@ HISTORY_MSG_51;S/H - Highlights
HISTORY_MSG_52;S/H - Shadows HISTORY_MSG_52;S/H - Shadows
HISTORY_MSG_53;S/H - Highlights tonal width HISTORY_MSG_53;S/H - Highlights tonal width
HISTORY_MSG_54;S/H - Shadows tonal width HISTORY_MSG_54;S/H - Shadows tonal width
HISTORY_MSG_55;S/H - Local contrast
HISTORY_MSG_56;S/H - Radius HISTORY_MSG_56;S/H - Radius
HISTORY_MSG_57;Coarse rotation HISTORY_MSG_57;Coarse rotation
HISTORY_MSG_58;Horizontal flipping HISTORY_MSG_58;Horizontal flipping
@ -330,7 +320,6 @@ HISTORY_MSG_63;Snapshot selected
HISTORY_MSG_64;Crop HISTORY_MSG_64;Crop
HISTORY_MSG_65;CA correction HISTORY_MSG_65;CA correction
HISTORY_MSG_66;Exposure - Highlight reconstruction HISTORY_MSG_66;Exposure - Highlight reconstruction
HISTORY_MSG_67;Exposure - HLR amount
HISTORY_MSG_68;Exposure - HLR method HISTORY_MSG_68;Exposure - HLR method
HISTORY_MSG_69;Working color space HISTORY_MSG_69;Working color space
HISTORY_MSG_70;Output color space HISTORY_MSG_70;Output color space
@ -341,12 +330,10 @@ HISTORY_MSG_74;Resize - Scale
HISTORY_MSG_75;Resize - Method HISTORY_MSG_75;Resize - Method
HISTORY_MSG_76;Exif metadata HISTORY_MSG_76;Exif metadata
HISTORY_MSG_77;IPTC metadata HISTORY_MSG_77;IPTC metadata
HISTORY_MSG_78;-
HISTORY_MSG_79;Resize - Width HISTORY_MSG_79;Resize - Width
HISTORY_MSG_80;Resize - Height HISTORY_MSG_80;Resize - Height
HISTORY_MSG_81;Resize HISTORY_MSG_81;Resize
HISTORY_MSG_82;Profile changed HISTORY_MSG_82;Profile changed
HISTORY_MSG_83;S/H - Sharp mask
HISTORY_MSG_84;Perspective correction HISTORY_MSG_84;Perspective correction
HISTORY_MSG_85;Lens Correction - LCP file HISTORY_MSG_85;Lens Correction - LCP file
HISTORY_MSG_86;RGB Curves - Luminosity mode HISTORY_MSG_86;RGB Curves - Luminosity mode
@ -393,12 +380,6 @@ HISTORY_MSG_127;Flat-Field - Auto-selection
HISTORY_MSG_128;Flat-Field - Blur radius HISTORY_MSG_128;Flat-Field - Blur radius
HISTORY_MSG_129;Flat-Field - Blur type HISTORY_MSG_129;Flat-Field - Blur type
HISTORY_MSG_130;Auto distortion correction HISTORY_MSG_130;Auto distortion correction
HISTORY_MSG_131;NR - Luma
HISTORY_MSG_132;NR - Chroma
HISTORY_MSG_133;Output gamma
HISTORY_MSG_134;Free gamma
HISTORY_MSG_135;Free gamma
HISTORY_MSG_136;Free gamma slope
HISTORY_MSG_137;Black level - Green 1 HISTORY_MSG_137;Black level - Green 1
HISTORY_MSG_138;Black level - Red HISTORY_MSG_138;Black level - Red
HISTORY_MSG_139;Black level - Blue HISTORY_MSG_139;Black level - Blue
@ -511,7 +492,6 @@ HISTORY_MSG_246;L*a*b* - CL curve
HISTORY_MSG_247;L*a*b* - LH curve HISTORY_MSG_247;L*a*b* - LH curve
HISTORY_MSG_248;L*a*b* - HH curve HISTORY_MSG_248;L*a*b* - HH curve
HISTORY_MSG_249;CbDL - Threshold HISTORY_MSG_249;CbDL - Threshold
HISTORY_MSG_250;NR - Enhanced
HISTORY_MSG_251;B&amp;W - Algorithm HISTORY_MSG_251;B&amp;W - Algorithm
HISTORY_MSG_252;CbDL - Skin tar/prot HISTORY_MSG_252;CbDL - Skin tar/prot
HISTORY_MSG_253;CbDL - Reduce artifacts HISTORY_MSG_253;CbDL - Reduce artifacts
@ -535,8 +515,6 @@ HISTORY_MSG_270;CT - High - Green
HISTORY_MSG_271;CT - High - Blue HISTORY_MSG_271;CT - High - Blue
HISTORY_MSG_272;CT - Balance HISTORY_MSG_272;CT - Balance
HISTORY_MSG_273;CT - Color Balance SMH HISTORY_MSG_273;CT - Color Balance SMH
HISTORY_MSG_274;CT - Sat. Shadows
HISTORY_MSG_275;CT - Sat. Highlights
HISTORY_MSG_276;CT - Opacity HISTORY_MSG_276;CT - Opacity
HISTORY_MSG_277;--unused-- HISTORY_MSG_277;--unused--
HISTORY_MSG_278;CT - Preserve luminance HISTORY_MSG_278;CT - Preserve luminance
@ -561,7 +539,6 @@ HISTORY_MSG_296;NR - Luminance curve
HISTORY_MSG_297;NR - Mode HISTORY_MSG_297;NR - Mode
HISTORY_MSG_298;Dead pixel filter HISTORY_MSG_298;Dead pixel filter
HISTORY_MSG_299;NR - Chrominance curve HISTORY_MSG_299;NR - Chrominance curve
HISTORY_MSG_300;-
HISTORY_MSG_301;NR - Luma control HISTORY_MSG_301;NR - Luma control
HISTORY_MSG_302;NR - Chroma method HISTORY_MSG_302;NR - Chroma method
HISTORY_MSG_303;NR - Chroma method HISTORY_MSG_303;NR - Chroma method
@ -670,7 +647,6 @@ HISTORY_MSG_405;W - Denoise - Level 4
HISTORY_MSG_406;W - ES - Neighboring pixels HISTORY_MSG_406;W - ES - Neighboring pixels
HISTORY_MSG_407;Retinex - Method HISTORY_MSG_407;Retinex - Method
HISTORY_MSG_408;Retinex - Radius HISTORY_MSG_408;Retinex - Radius
HISTORY_MSG_409;Retinex - Contrast
HISTORY_MSG_410;Retinex - Offset HISTORY_MSG_410;Retinex - Offset
HISTORY_MSG_411;Retinex - Strength HISTORY_MSG_411;Retinex - Strength
HISTORY_MSG_412;Retinex - Gaussian gradient HISTORY_MSG_412;Retinex - Gaussian gradient
@ -686,7 +662,7 @@ HISTORY_MSG_421;Retinex - Gamma
HISTORY_MSG_422;Retinex - Gamma HISTORY_MSG_422;Retinex - Gamma
HISTORY_MSG_423;Retinex - Gamma slope HISTORY_MSG_423;Retinex - Gamma slope
HISTORY_MSG_424;Retinex - HL threshold HISTORY_MSG_424;Retinex - HL threshold
HISTORY_MSG_425;Retinex - Log base HISTORY_MSG_425;--unused--
HISTORY_MSG_426;Retinex - Hue equalizer HISTORY_MSG_426;Retinex - Hue equalizer
HISTORY_MSG_427;Output rendering intent HISTORY_MSG_427;Output rendering intent
HISTORY_MSG_428;Monitor rendering intent HISTORY_MSG_428;Monitor rendering intent
@ -707,34 +683,33 @@ HISTORY_MSG_442;Retinex - Scale
HISTORY_MSG_443;Output black point compensation HISTORY_MSG_443;Output black point compensation
HISTORY_MSG_444;WB - Temp bias HISTORY_MSG_444;WB - Temp bias
HISTORY_MSG_445;Raw Sub-Image HISTORY_MSG_445;Raw Sub-Image
HISTORY_MSG_446;EvPixelShiftMotion HISTORY_MSG_446;--unused--
HISTORY_MSG_447;EvPixelShiftMotionCorrection HISTORY_MSG_447;--unused--
HISTORY_MSG_448;EvPixelShiftStddevFactorGreen HISTORY_MSG_448;--unused--
HISTORY_MSG_449;PS ISO adaption HISTORY_MSG_449;PS ISO adaption
HISTORY_MSG_450;EvPixelShiftNreadIso HISTORY_MSG_450;--unused--
HISTORY_MSG_451;EvPixelShiftPrnu HISTORY_MSG_451;--unused--
HISTORY_MSG_452;PS Show motion HISTORY_MSG_452;PS Show motion
HISTORY_MSG_453;PS Show mask only HISTORY_MSG_453;PS Show mask only
HISTORY_MSG_454;EvPixelShiftAutomatic HISTORY_MSG_454;--unused--
HISTORY_MSG_455;EvPixelShiftNonGreenHorizontal HISTORY_MSG_455;--unused--
HISTORY_MSG_456;EvPixelShiftNonGreenVertical HISTORY_MSG_456;--unused--
HISTORY_MSG_457;PS Check red/blue HISTORY_MSG_457;PS Check red/blue
HISTORY_MSG_458;EvPixelShiftStddevFactorRed HISTORY_MSG_458;--unused--
HISTORY_MSG_459;EvPixelShiftStddevFactorBlue HISTORY_MSG_459;--unused--
HISTORY_MSG_460;EvPixelShiftGreenAmaze HISTORY_MSG_460;--unused--
HISTORY_MSG_461;EvPixelShiftNonGreenAmaze HISTORY_MSG_461;--unused--
HISTORY_MSG_462;PS Check green HISTORY_MSG_462;PS Check green
HISTORY_MSG_463;EvPixelShiftRedBlueWeight HISTORY_MSG_463;--unused--
HISTORY_MSG_464;PS Blur motion mask HISTORY_MSG_464;PS Blur motion mask
HISTORY_MSG_465;PS Blur radius HISTORY_MSG_465;PS Blur radius
HISTORY_MSG_466;EvPixelShiftSum HISTORY_MSG_466;--unused--
HISTORY_MSG_467;EvPixelShiftExp0 HISTORY_MSG_467;--unused--
HISTORY_MSG_468;PS Fill holes HISTORY_MSG_468;PS Fill holes
HISTORY_MSG_469;PS Median HISTORY_MSG_469;PS Median
HISTORY_MSG_470;EvPixelShiftMedian3 HISTORY_MSG_470;--unused--
HISTORY_MSG_471;PS Motion correction HISTORY_MSG_471;PS Motion correction
HISTORY_MSG_472;PS Smooth transitions HISTORY_MSG_472;PS Smooth transitions
HISTORY_MSG_473;PS Use lmmse
HISTORY_MSG_474;PS Equalize HISTORY_MSG_474;PS Equalize
HISTORY_MSG_475;PS Equalize channel HISTORY_MSG_475;PS Equalize channel
HISTORY_MSG_476;CAM02/16 - Temp out HISTORY_MSG_476;CAM02/16 - Temp out
@ -840,7 +815,7 @@ HISTORY_MSG_576;Local - cbdl mult
HISTORY_MSG_577;Local - cbdl chroma HISTORY_MSG_577;Local - cbdl chroma
HISTORY_MSG_578;Local - cbdl threshold HISTORY_MSG_578;Local - cbdl threshold
HISTORY_MSG_579;Local - cbdl scope HISTORY_MSG_579;Local - cbdl scope
HISTORY_MSG_580;Local - Denoise HISTORY_MSG_580;--unused--
HISTORY_MSG_581;Local - deNoise lum f 1 HISTORY_MSG_581;Local - deNoise lum f 1
HISTORY_MSG_582;Local - deNoise lum c HISTORY_MSG_582;Local - deNoise lum c
HISTORY_MSG_583;Local - deNoise lum detail HISTORY_MSG_583;Local - deNoise lum detail
@ -923,7 +898,7 @@ HISTORY_MSG_660;Local - cbdl clarity
HISTORY_MSG_661;Local - cbdl contrast residual HISTORY_MSG_661;Local - cbdl contrast residual
HISTORY_MSG_662;Local - deNoise lum f 0 HISTORY_MSG_662;Local - deNoise lum f 0
HISTORY_MSG_663;Local - deNoise lum f 2 HISTORY_MSG_663;Local - deNoise lum f 2
HISTORY_MSG_664;Local - cbdl Blur HISTORY_MSG_664;--unused--
HISTORY_MSG_665;Local - cbdl mask Blend HISTORY_MSG_665;Local - cbdl mask Blend
HISTORY_MSG_666;Local - cbdl mask radius HISTORY_MSG_666;Local - cbdl mask radius
HISTORY_MSG_667;Local - cbdl mask chroma HISTORY_MSG_667;Local - cbdl mask chroma
@ -1171,7 +1146,7 @@ HISTORY_MSG_920;Local - Wavelet sigma LC
HISTORY_MSG_921;Local - Wavelet Graduated sigma LC2 HISTORY_MSG_921;Local - Wavelet Graduated sigma LC2
HISTORY_MSG_922;Local - changes In Black and White HISTORY_MSG_922;Local - changes In Black and White
HISTORY_MSG_923;Local - Tool complexity mode HISTORY_MSG_923;Local - Tool complexity mode
HISTORY_MSG_924;Local - Tool complexity mode HISTORY_MSG_924;--unused--
HISTORY_MSG_925;Local - Scope color tools HISTORY_MSG_925;Local - Scope color tools
HISTORY_MSG_926;Local - Show mask type HISTORY_MSG_926;Local - Show mask type
HISTORY_MSG_927;Local - Shadow HISTORY_MSG_927;Local - Shadow
@ -1348,7 +1323,6 @@ HISTORY_MSG_1095;Local - Jz highligths thr
HISTORY_MSG_1096;Local - Jz shadows HISTORY_MSG_1096;Local - Jz shadows
HISTORY_MSG_1097;Local - Jz shadows thr HISTORY_MSG_1097;Local - Jz shadows thr
HISTORY_MSG_1098;Local - Jz radius SH HISTORY_MSG_1098;Local - Jz radius SH
//HISTORY_MSG_1099;Local - Hz(Hz) Curve
HISTORY_MSG_1099;Local - Cz(Hz) Curve HISTORY_MSG_1099;Local - Cz(Hz) Curve
HISTORY_MSG_1100;Local - Jz reference 100 HISTORY_MSG_1100;Local - Jz reference 100
HISTORY_MSG_1101;Local - Jz PQ remap HISTORY_MSG_1101;Local - Jz PQ remap
@ -1519,7 +1493,6 @@ HISTORY_MSG_WAVCHROMFI;Chroma fine
HISTORY_MSG_WAVCHR;Blur levels - blur chroma HISTORY_MSG_WAVCHR;Blur levels - blur chroma
HISTORY_MSG_WAVCLARI;Clarity HISTORY_MSG_WAVCLARI;Clarity
HISTORY_MSG_WAVDENLH;Level 5 HISTORY_MSG_WAVDENLH;Level 5
HISTORY_MSG_WAVDENMET;Local equalizer
HISTORY_MSG_WAVDENOISE;Local contrast HISTORY_MSG_WAVDENOISE;Local contrast
HISTORY_MSG_WAVDENOISEH;High levels Local contrast HISTORY_MSG_WAVDENOISEH;High levels Local contrast
HISTORY_MSG_WAVDETEND;Details soft HISTORY_MSG_WAVDETEND;Details soft
@ -1780,7 +1753,6 @@ PARTIALPASTE_LENSPROFILE;Profiled lens correction
PARTIALPASTE_LOCALCONTRAST;Local contrast PARTIALPASTE_LOCALCONTRAST;Local contrast
PARTIALPASTE_LOCALLAB;Local Adjustments PARTIALPASTE_LOCALLAB;Local Adjustments
PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings
PARTIALPASTE_LOCGROUP;Local
PARTIALPASTE_METADATA;Metadata mode PARTIALPASTE_METADATA;Metadata mode
PARTIALPASTE_METAGROUP;Metadata settings PARTIALPASTE_METAGROUP;Metadata settings
PARTIALPASTE_PCVIGNETTE;Vignette filter PARTIALPASTE_PCVIGNETTE;Vignette filter
@ -2535,13 +2507,11 @@ TP_ICM_APPLYHUESATMAP;Base table
TP_ICM_APPLYHUESATMAP_TOOLTIP;Employ the embedded DCP base table (HueSatMap). The setting is only available if the selected DCP has one. TP_ICM_APPLYHUESATMAP_TOOLTIP;Employ the embedded DCP base table (HueSatMap). The setting is only available if the selected DCP has one.
TP_ICM_APPLYLOOKTABLE;Look table TP_ICM_APPLYLOOKTABLE;Look table
TP_ICM_APPLYLOOKTABLE_TOOLTIP;Employ the embedded DCP look table. The setting is only available if the selected DCP has one. TP_ICM_APPLYLOOKTABLE_TOOLTIP;Employ the embedded DCP look table. The setting is only available if the selected DCP has one.
TP_ICM_BLUFRAME;Blue Primaries
TP_ICM_BPC;Black Point Compensation TP_ICM_BPC;Black Point Compensation
TP_ICM_DCPILLUMINANT;Illuminant TP_ICM_DCPILLUMINANT;Illuminant
TP_ICM_DCPILLUMINANT_INTERPOLATED;Interpolated TP_ICM_DCPILLUMINANT_INTERPOLATED;Interpolated
TP_ICM_DCPILLUMINANT_TOOLTIP;Select which embedded DCP illuminant to employ. Default is "interpolated" which is a mix between the two based on white balance. The setting is only available if a dual-illuminant DCP with interpolation support is selected. TP_ICM_DCPILLUMINANT_TOOLTIP;Select which embedded DCP illuminant to employ. Default is "interpolated" which is a mix between the two based on white balance. The setting is only available if a dual-illuminant DCP with interpolation support is selected.
TP_ICM_FBW;Black-and-White TP_ICM_FBW;Black-and-White
TP_ICM_GREFRAME;Green Primaries
TP_ICM_ILLUMPRIM_TOOLTIP;Choose the illuminant closest to the shooting conditions.\nChanges can only be made when the Destination primaries selection is set to Custom (sliders). TP_ICM_ILLUMPRIM_TOOLTIP;Choose the illuminant closest to the shooting conditions.\nChanges can only be made when the Destination primaries selection is set to Custom (sliders).
TP_ICM_INPUTCAMERA;Camera standard TP_ICM_INPUTCAMERA;Camera standard
TP_ICM_INPUTCAMERAICC;Auto-matched camera profile TP_ICM_INPUTCAMERAICC;Auto-matched camera profile
@ -2679,7 +2649,6 @@ TP_LOCALCONTRAST_RADIUS;Radius
TP_LOCALLAB_ACTIV;Luminance only TP_LOCALLAB_ACTIV;Luminance only
TP_LOCALLAB_ACTIVSPOT;Enable Spot TP_LOCALLAB_ACTIVSPOT;Enable Spot
TP_LOCALLAB_ADJ;Equalizer Color TP_LOCALLAB_ADJ;Equalizer Color
TP_LOCALLAB_ALL;All rubrics
TP_LOCALLAB_AMOUNT;Amount TP_LOCALLAB_AMOUNT;Amount
TP_LOCALLAB_ARTIF;Shape detection TP_LOCALLAB_ARTIF;Shape detection
TP_LOCALLAB_ARTIF_TOOLTIP;ΔE scope threshold increases the range of deltaE scope. High values are for very wide gamut images.\nIncreasing deltaE decay can improve shape detection, but can also reduce the scope. TP_LOCALLAB_ARTIF_TOOLTIP;ΔE scope threshold increases the range of deltaE scope. High values are for very wide gamut images.\nIncreasing deltaE decay can improve shape detection, but can also reduce the scope.
@ -2712,18 +2681,15 @@ TP_LOCALLAB_BLMED;Median
TP_LOCALLAB_BLMETHOD_TOOLTIP;Normal: direct blur and noise with all settings.\nInverse: blur and noise with all settings. Warning, some settings may give curious results. TP_LOCALLAB_BLMETHOD_TOOLTIP;Normal: direct blur and noise with all settings.\nInverse: blur and noise with all settings. Warning, some settings may give curious results.
TP_LOCALLAB_BLNOI_EXP;Blur & Noise TP_LOCALLAB_BLNOI_EXP;Blur & Noise
TP_LOCALLAB_BLNORM;Normal TP_LOCALLAB_BLNORM;Normal
TP_LOCALLAB_BLSYM;Symmetric
TP_LOCALLAB_BLUFR;Blur/Grain & Denoise TP_LOCALLAB_BLUFR;Blur/Grain & Denoise
TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and Normal or Inverse in checkbox).\n-Isolate the foreground by using one or more Excluding RT-spot(s) and increase the scope.\n\nThis module (including the median and Guided filter) can be used in addition to the main-menu noise reduction TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and Normal or Inverse in checkbox).\n-Isolate the foreground by using one or more Excluding RT-spot(s) and increase the scope.\n\nThis module (including the median and Guided filter) can be used in addition to the main-menu noise reduction
TP_LOCALLAB_BLUR;Gaussian Blur - Noise - Grain TP_LOCALLAB_BLUR;Gaussian Blur - Noise - Grain
TP_LOCALLAB_BLURCBDL;Blur levels 0-1-2-3-4
TP_LOCALLAB_BLURCOL;Radius TP_LOCALLAB_BLURCOL;Radius
TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account.
TP_LOCALLAB_BLURDE;Blur shape detection TP_LOCALLAB_BLURDE;Blur shape detection
TP_LOCALLAB_BLURLC;Luminance only TP_LOCALLAB_BLURLC;Luminance only
TP_LOCALLAB_BLURLEVELFRA;Blur levels TP_LOCALLAB_BLURLEVELFRA;Blur levels
TP_LOCALLAB_BLURMASK_TOOLTIP;Uses a large-radius blur to create a mask that allows you to vary the contrast of the image and/or darken/lighten parts of it. TP_LOCALLAB_BLURMASK_TOOLTIP;Uses a large-radius blur to create a mask that allows you to vary the contrast of the image and/or darken/lighten parts of it.
TP_LOCALLAB_BLURRESIDFRA;Blur Residual
TP_LOCALLAB_BLURRMASK_TOOLTIP;Allows you to vary the "radius" of the Gaussian blur (0 to 1000) TP_LOCALLAB_BLURRMASK_TOOLTIP;Allows you to vary the "radius" of the Gaussian blur (0 to 1000)
TP_LOCALLAB_BLUR_TOOLNAME;Blur/Grain & Denoise TP_LOCALLAB_BLUR_TOOLNAME;Blur/Grain & Denoise
TP_LOCALLAB_BLWH;All changes forced in Black-and-White TP_LOCALLAB_BLWH;All changes forced in Black-and-White
@ -2800,16 +2766,10 @@ TP_LOCALLAB_COLOR_TOOLNAME;Color & Light
TP_LOCALLAB_COL_NAME;Name TP_LOCALLAB_COL_NAME;Name
TP_LOCALLAB_COL_VIS;Status TP_LOCALLAB_COL_VIS;Status
TP_LOCALLAB_COMPFRA;Directional contrast TP_LOCALLAB_COMPFRA;Directional contrast
TP_LOCALLAB_COMPFRAME_TOOLTIP;Allows you to create special effects. You can reduce artifacts with 'Clarity and Sharp mask - Blend and Soften Images.\nUses a lot of resources.
TP_LOCALLAB_COMPLEX_METHOD;Software Complexity
TP_LOCALLAB_COMPLEX_TOOLTIP; Allow user to select Local adjustments complexity.
TP_LOCALLAB_COMPREFRA;Wavelet level tone mapping TP_LOCALLAB_COMPREFRA;Wavelet level tone mapping
TP_LOCALLAB_COMPRESS_TOOLTIP;If necessary, use the module 'Clarity and Sharp mask and Blend and Soften Images' by adjusting 'Soft radius' to reduce artifacts.
TP_LOCALLAB_CONTCOL;Contrast threshold TP_LOCALLAB_CONTCOL;Contrast threshold
TP_LOCALLAB_CONTFRA;Contrast by level TP_LOCALLAB_CONTFRA;Contrast by level
TP_LOCALLAB_CONTL;Contrast (J)
TP_LOCALLAB_CONTRAST;Contrast TP_LOCALLAB_CONTRAST;Contrast
TP_LOCALLAB_CONTRASTCURVMASK1_TOOLTIP;Allows you to freely modify the contrast of the mask (gamma and slope), instead of using a continuous and progressive curve. However it can create artifacts that have to be dealt with using the Smooth radius or Laplacian threshold sliders.
TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP;Allows you to freely change the contrast of the mask.\n Has a similar function to the Gamma and Slope sliders.\n It allows you to target certain parts of the image (usually the lightest parts of the mask by using the curve to exclude the darker parts).May create artifacts. TP_LOCALLAB_CONTRASTCURVMASK_TOOLTIP;Allows you to freely change the contrast of the mask.\n Has a similar function to the Gamma and Slope sliders.\n It allows you to target certain parts of the image (usually the lightest parts of the mask by using the curve to exclude the darker parts).May create artifacts.
TP_LOCALLAB_CONTRESID;Contrast TP_LOCALLAB_CONTRESID;Contrast
TP_LOCALLAB_CONTTHMASK_TOOLTIP;Allows you to determine which parts of the image will be impacted based on the texture. TP_LOCALLAB_CONTTHMASK_TOOLTIP;Allows you to determine which parts of the image will be impacted based on the texture.
@ -2825,10 +2785,6 @@ TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the Curve type
TP_LOCALLAB_CURVEEDITOR_TONES_LABEL;Tone curve TP_LOCALLAB_CURVEEDITOR_TONES_LABEL;Tone curve
TP_LOCALLAB_CURVEEDITOR_TONES_TOOLTIP;L=f(L), can be used with L(H) in Color and Light TP_LOCALLAB_CURVEEDITOR_TONES_TOOLTIP;L=f(L), can be used with L(H) in Color and Light
TP_LOCALLAB_CURVEMETHOD_TOOLTIP;'Normal', the curve L=f(L) uses the same algorithm as the lightness slider. TP_LOCALLAB_CURVEMETHOD_TOOLTIP;'Normal', the curve L=f(L) uses the same algorithm as the lightness slider.
TP_LOCALLAB_CURVENCONTRAST;Super+Contrast threshold (experimental)
TP_LOCALLAB_CURVENH;Super
TP_LOCALLAB_CURVENHSU;Combined HueChroma (experimental)
TP_LOCALLAB_CURVENSOB2;Combined HueChroma + Contrast threshold (experimental)
TP_LOCALLAB_CURVNONE;Disable curves TP_LOCALLAB_CURVNONE;Disable curves
TP_LOCALLAB_CURVES_CIE;Tone curve TP_LOCALLAB_CURVES_CIE;Tone curve
TP_LOCALLAB_DARKRETI;Darkness TP_LOCALLAB_DARKRETI;Darkness
@ -2850,7 +2806,6 @@ TP_LOCALLAB_DENOILUMDETAIL_TOOLTIP;Allows you to recover luminance detail by pro
TP_LOCALLAB_DENOIMASK;Denoise chroma mask TP_LOCALLAB_DENOIMASK;Denoise chroma mask
TP_LOCALLAB_DENOIMASK_TOOLTIP;For all tools, allows you to control the chromatic noise level of the mask.\nUseful for better control of chrominance and to avoid artifacts when using the LC(h) curve. TP_LOCALLAB_DENOIMASK_TOOLTIP;For all tools, allows you to control the chromatic noise level of the mask.\nUseful for better control of chrominance and to avoid artifacts when using the LC(h) curve.
TP_LOCALLAB_DENOIQUA_TOOLTIP;Conservative mode preserves low frequency detail. Aggressive mode removes low frequency detail.\nConservative and Aggressive modes use wavelets and DCT and can be used in conjunction with Non-local Means Luminance. TP_LOCALLAB_DENOIQUA_TOOLTIP;Conservative mode preserves low frequency detail. Aggressive mode removes low frequency detail.\nConservative and Aggressive modes use wavelets and DCT and can be used in conjunction with Non-local Means Luminance.
TP_LOCALLAB_DENOIS;Denoise
TP_LOCALLAB_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. TP_LOCALLAB_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas.
TP_LOCALLAB_DENOI_EXP;Denoise TP_LOCALLAB_DENOI_EXP;Denoise
TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (deltaE).\nMinimum RT-spot size: 128x128 TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (deltaE).\nMinimum RT-spot size: 128x128
@ -2910,23 +2865,19 @@ TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE
TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools
TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high Transition decay and Scope values to simulate smaller RT-Spots. TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high Transition decay and Scope values to simulate smaller RT-Spots.
TP_LOCALLAB_EXPTOOL;Exposure Tools TP_LOCALLAB_EXPTOOL;Exposure Tools
TP_LOCALLAB_EXPTRC;Tone Response Curve - TRC
TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure
TP_LOCALLAB_FATAMOUNT;Amount TP_LOCALLAB_FATAMOUNT;Amount
TP_LOCALLAB_FATANCHOR;Anchor TP_LOCALLAB_FATANCHOR;Anchor
TP_LOCALLAB_FATANCHORA;Offset
TP_LOCALLAB_FATDETAIL;Detail TP_LOCALLAB_FATDETAIL;Detail
TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ
TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal uses the Fattal Tone-mapping algorithm. TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal uses the Fattal Tone-mapping algorithm.
TP_LOCALLAB_FATLEVEL;Sigma TP_LOCALLAB_FATLEVEL;Sigma
TP_LOCALLAB_FATRES;Amount Residual Image
TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ TP_LOCALLAB_FATSHFRA;Dynamic Range Compression Mask ƒ
TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasnt been activated. TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasnt been activated.
TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters) TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters)
TP_LOCALLAB_FFTCOL_MASK;FFTW ƒ TP_LOCALLAB_FFTCOL_MASK;FFTW ƒ
TP_LOCALLAB_FFTMASK_TOOLTIP;Use a Fourier transform for better quality (increased processing time and memory requirements) TP_LOCALLAB_FFTMASK_TOOLTIP;Use a Fourier transform for better quality (increased processing time and memory requirements)
TP_LOCALLAB_FFTW;ƒ - Use Fast Fourier Transform TP_LOCALLAB_FFTW;ƒ - Use Fast Fourier Transform
TP_LOCALLAB_FFTW2;ƒ - Use Fast Fourier Transform (TIF, JPG,..)
TP_LOCALLAB_FFTWBLUR;ƒ - Always Use Fast Fourier Transform TP_LOCALLAB_FFTWBLUR;ƒ - Always Use Fast Fourier Transform
TP_LOCALLAB_FULLIMAGE;Black-Ev and White-Ev for whole image TP_LOCALLAB_FULLIMAGE;Black-Ev and White-Ev for whole image
TP_LOCALLAB_FULLIMAGELOG_TOOLTIP;Calculates the Ev levels for the whole image. TP_LOCALLAB_FULLIMAGELOG_TOOLTIP;Calculates the Ev levels for the whole image.
@ -2952,7 +2903,6 @@ TP_LOCALLAB_GRADSTRHUE;Hue gradient strength
TP_LOCALLAB_GRADSTRHUE2;Hue gradient strength TP_LOCALLAB_GRADSTRHUE2;Hue gradient strength
TP_LOCALLAB_GRADSTRHUE_TOOLTIP;Adjusts hue gradient strength TP_LOCALLAB_GRADSTRHUE_TOOLTIP;Adjusts hue gradient strength
TP_LOCALLAB_GRADSTRLUM;Luma gradient strength TP_LOCALLAB_GRADSTRLUM;Luma gradient strength
TP_LOCALLAB_GRADSTR_TOOLTIP;Filter strength in stops
TP_LOCALLAB_GRAINFRA;Film Grain 1:1 TP_LOCALLAB_GRAINFRA;Film Grain 1:1
TP_LOCALLAB_GRAINFRA2;Coarseness TP_LOCALLAB_GRAINFRA2;Coarseness
TP_LOCALLAB_GRAIN_TOOLTIP;Adds film-like grain to the image TP_LOCALLAB_GRAIN_TOOLTIP;Adds film-like grain to the image
@ -2970,7 +2920,6 @@ TP_LOCALLAB_GUIDSTRBL_TOOLTIP;Intensity of the guided filter
TP_LOCALLAB_HHMASK_TOOLTIP;Fine hue adjustments for example for the skin. TP_LOCALLAB_HHMASK_TOOLTIP;Fine hue adjustments for example for the skin.
TP_LOCALLAB_HIGHMASKCOL;Highlights TP_LOCALLAB_HIGHMASKCOL;Highlights
TP_LOCALLAB_HLH;H TP_LOCALLAB_HLH;H
TP_LOCALLAB_HLHZ;Hz
TP_LOCALLAB_HUECIE;Hue TP_LOCALLAB_HUECIE;Hue
TP_LOCALLAB_IND;Independent (mouse) TP_LOCALLAB_IND;Independent (mouse)
TP_LOCALLAB_INDSL;Independent (mouse + sliders) TP_LOCALLAB_INDSL;Independent (mouse + sliders)
@ -3055,6 +3004,7 @@ TP_LOCALLAB_LOG1FRA;CAM16 Image Adjustments
TP_LOCALLAB_LOG2FRA;Viewing Conditions TP_LOCALLAB_LOG2FRA;Viewing Conditions
TP_LOCALLAB_LOGAUTO;Automatic TP_LOCALLAB_LOGAUTO;Automatic
TP_LOCALLAB_LOGAUTOGRAY_TOOLTIP;Automatically calculates the 'Mean luminance' for the scene conditions when the Automatic button in Relative Exposure Levels is pressed. TP_LOCALLAB_LOGAUTOGRAY_TOOLTIP;Automatically calculates the 'Mean luminance' for the scene conditions when the Automatic button in Relative Exposure Levels is pressed.
TP_LOCALLAB_LOGAUTOGRAYJZ_TOOLTIP;Automatically calculates the 'Mean luminance' for the scene conditions.
TP_LOCALLAB_LOGAUTO_TOOLTIP;Pressing this button will calculate the dynamic range and 'Mean luminance' for the scene conditions if the "Auto mean luminance (Yb%)” is checked).\nAlso calculates the absolute luminance at the time of shooting.\nPress the button again to adjust the automatically calculated values. TP_LOCALLAB_LOGAUTO_TOOLTIP;Pressing this button will calculate the dynamic range and 'Mean luminance' for the scene conditions if the "Auto mean luminance (Yb%)” is checked).\nAlso calculates the absolute luminance at the time of shooting.\nPress the button again to adjust the automatically calculated values.
TP_LOCALLAB_LOGBASE_TOOLTIP;Default = 2.\nValues less than 2 reduce the action of the algorithm making the shadows darker and the highlights brighter.\nWith values greater than 2, the shadows are grayer and the highlights become more washed out. TP_LOCALLAB_LOGBASE_TOOLTIP;Default = 2.\nValues less than 2 reduce the action of the algorithm making the shadows darker and the highlights brighter.\nWith values greater than 2, the shadows are grayer and the highlights become more washed out.
TP_LOCALLAB_LOGBLACKWHEV_TOOLTIP;Estimated values of dynamic range i.e. Black Ev and White Ev TP_LOCALLAB_LOGBLACKWHEV_TOOLTIP;Estimated values of dynamic range i.e. Black Ev and White Ev
@ -3085,9 +3035,7 @@ TP_LOCALLAB_LOGREPART;Overall strength
TP_LOCALLAB_LOGREPART_TOOLTIP;Allows you to adjust the relative strength of the log-encoded image with respect to the original image.\nDoes not affect the Ciecam component. TP_LOCALLAB_LOGREPART_TOOLTIP;Allows you to adjust the relative strength of the log-encoded image with respect to the original image.\nDoes not affect the Ciecam component.
TP_LOCALLAB_LOGSATURL_TOOLTIP;Saturation (s) in CIECAM16 corresponds to the color of a stimulus in relation to its own brightness.\nActs mainly on medium tones and on the highlights. TP_LOCALLAB_LOGSATURL_TOOLTIP;Saturation (s) in CIECAM16 corresponds to the color of a stimulus in relation to its own brightness.\nActs mainly on medium tones and on the highlights.
TP_LOCALLAB_LOGSCENE_TOOLTIP;Corresponds to the shooting conditions. TP_LOCALLAB_LOGSCENE_TOOLTIP;Corresponds to the shooting conditions.
TP_LOCALLAB_LOGSRCGREY_TOOLTIP;Estimated gray point value of the image.
TP_LOCALLAB_LOGSURSOUR_TOOLTIP;Changes tones and colors to take into account the Scene conditions.\n\n<b>Average</b>: Average light conditions (standard). The image will not change.\n\n<b>Dim</b>: Dim conditions. The image will become slightly brighter.\n\n<b>Dark</b>: Dark conditions. The image will become more bright. TP_LOCALLAB_LOGSURSOUR_TOOLTIP;Changes tones and colors to take into account the Scene conditions.\n\n<b>Average</b>: Average light conditions (standard). The image will not change.\n\n<b>Dim</b>: Dim conditions. The image will become slightly brighter.\n\n<b>Dark</b>: Dark conditions. The image will become more bright.
TP_LOCALLAB_LOGTARGGREY_TOOLTIP;You can adjust this value to suit.
TP_LOCALLAB_LOGVIEWING_TOOLTIP;Corresponds to the medium on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as the surrounding conditions.. TP_LOCALLAB_LOGVIEWING_TOOLTIP;Corresponds to the medium on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as the surrounding conditions..
TP_LOCALLAB_LOG_TOOLNAME;Log Encoding TP_LOCALLAB_LOG_TOOLNAME;Log Encoding
TP_LOCALLAB_LUM;LL - CC TP_LOCALLAB_LUM;LL - CC
@ -3096,7 +3044,6 @@ TP_LOCALLAB_LUMASK;Background color/luma mask
TP_LOCALLAB_LUMASK_TOOLTIP;Adjusts the shade of gray or color of the mask background in Show Mask (Mask and modifications) TP_LOCALLAB_LUMASK_TOOLTIP;Adjusts the shade of gray or color of the mask background in Show Mask (Mask and modifications)
TP_LOCALLAB_LUMAWHITESEST;Lightest TP_LOCALLAB_LUMAWHITESEST;Lightest
TP_LOCALLAB_LUMFRA;L*a*b* standard TP_LOCALLAB_LUMFRA;L*a*b* standard
TP_LOCALLAB_LUMONLY;Luminance only
TP_LOCALLAB_MASFRAME;Mask and Merge TP_LOCALLAB_MASFRAME;Mask and Merge
TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the deltaE image to avoid modifying the selection area when the following Mask Tools are used: Gamma, Slope, Chroma, Contrast curve, Local contrast (by wavelet level), Blur Mask and Structure Mask (if enabled ).\nDisabled when Inverse mode is used. TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the deltaE image to avoid modifying the selection area when the following Mask Tools are used: Gamma, Slope, Chroma, Contrast curve, Local contrast (by wavelet level), Blur Mask and Structure Mask (if enabled ).\nDisabled when Inverse mode is used.
TP_LOCALLAB_MASK;Curves TP_LOCALLAB_MASK;Curves
@ -3155,7 +3102,6 @@ TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications)
TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications)
TP_LOCALLAB_MASKRECOTHRES;Recovery threshold TP_LOCALLAB_MASKRECOTHRES;Recovery threshold
TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments.
TP_LOCALLAB_MED;Medium
TP_LOCALLAB_MEDIAN;Median Low TP_LOCALLAB_MEDIAN;Median Low
TP_LOCALLAB_MEDIANITER_TOOLTIP;The number of successive iterations carried out by the median filter. TP_LOCALLAB_MEDIANITER_TOOLTIP;The number of successive iterations carried out by the median filter.
TP_LOCALLAB_MEDIAN_TOOLTIP;You can choose a median value in the range 3x3 to 9x9 pixels. Higher values increase noise reduction and blur. TP_LOCALLAB_MEDIAN_TOOLTIP;You can choose a median value in the range 3x3 to 9x9 pixels. Higher values increase noise reduction and blur.
@ -3169,16 +3115,8 @@ TP_LOCALLAB_MERFOU;Multiply
TP_LOCALLAB_MERGE1COLFRA;Merge with Original/Previous/Background TP_LOCALLAB_MERGE1COLFRA;Merge with Original/Previous/Background
TP_LOCALLAB_MERGECOLFRA;Mask: LCh & Structure TP_LOCALLAB_MERGECOLFRA;Mask: LCh & Structure
TP_LOCALLAB_MERGECOLFRMASK_TOOLTIP;Allows you to create masks based on the 3 LCh curves and/or a structure-detection algorithm TP_LOCALLAB_MERGECOLFRMASK_TOOLTIP;Allows you to create masks based on the 3 LCh curves and/or a structure-detection algorithm
TP_LOCALLAB_MERGEFIV;Previous Spot(Mask 7) + Mask LCh
TP_LOCALLAB_MERGEFOU;Previous Spot(Mask 7)
TP_LOCALLAB_MERGEMER_TOOLTIP;Takes ΔE into account when merging files (equivalent of scope in this case) TP_LOCALLAB_MERGEMER_TOOLTIP;Takes ΔE into account when merging files (equivalent of scope in this case)
TP_LOCALLAB_MERGENONE;None
TP_LOCALLAB_MERGEONE;Short Curves 'L' Mask
TP_LOCALLAB_MERGEOPA_TOOLTIP;Opacity = % of current spot to be merged with original or previous Spot.\nContrast threshold : adjusts result as a function of contrast in original image. TP_LOCALLAB_MERGEOPA_TOOLTIP;Opacity = % of current spot to be merged with original or previous Spot.\nContrast threshold : adjusts result as a function of contrast in original image.
TP_LOCALLAB_MERGETHR;Original + Mask LCh
TP_LOCALLAB_MERGETWO;Original
TP_LOCALLAB_MERGETYPE;Merge image and mask
TP_LOCALLAB_MERGETYPE_TOOLTIP;None, use all mask in LCh mode.\nShort curves 'L' mask, use a short circuit for mask 2, 3, 4, 6, 7.\nOriginal mask 8, blend current image with original
TP_LOCALLAB_MERHEI;Overlay TP_LOCALLAB_MERHEI;Overlay
TP_LOCALLAB_MERHUE;Hue TP_LOCALLAB_MERHUE;Hue
TP_LOCALLAB_MERLUCOL;Luminance TP_LOCALLAB_MERLUCOL;Luminance
@ -3224,7 +3162,6 @@ TP_LOCALLAB_NOISECHROCOARSE;Coarse chroma (Wav)
TP_LOCALLAB_NOISECHROC_TOOLTIP;If superior to zero, high quality algorithm is enabled.\nCoarse is for slider >=0.02 TP_LOCALLAB_NOISECHROC_TOOLTIP;If superior to zero, high quality algorithm is enabled.\nCoarse is for slider >=0.02
TP_LOCALLAB_NOISECHRODETAIL;Chroma detail recovery TP_LOCALLAB_NOISECHRODETAIL;Chroma detail recovery
TP_LOCALLAB_NOISECHROFINE;Fine chroma (Wav) TP_LOCALLAB_NOISECHROFINE;Fine chroma (Wav)
TP_LOCALLAB_NOISEDETAIL_TOOLTIP;Disabled if slider = 100
TP_LOCALLAB_NOISEGAM;Gamma TP_LOCALLAB_NOISEGAM;Gamma
TP_LOCALLAB_NOISEGAM_TOOLTIP;If gamma = 1 Luminance "Lab" is used. If gamma = 3.0 Luminance "linear" is used.\nLower values preserve details and texture, higher values increase denoise. TP_LOCALLAB_NOISEGAM_TOOLTIP;If gamma = 1 Luminance "Lab" is used. If gamma = 3.0 Luminance "linear" is used.\nLower values preserve details and texture, higher values increase denoise.
TP_LOCALLAB_NOISELEQUAL;Equalizer white-black TP_LOCALLAB_NOISELEQUAL;Equalizer white-black
@ -3264,7 +3201,6 @@ TP_LOCALLAB_RECT;Rectangle
TP_LOCALLAB_RECOTHRES02_TOOLTIP;If the “Recovery threshold” value is greater than 1, the mask in Mask and Modifications takes into account any previous modifications made to the image but not those made with the current tool (e.g. Color and Light, Wavelet, Cam16, etc.)\nIf the value of the “Recovery threshold” is less than 1, the mask in Mask and Modifications does not take into account any previous modifications to the image.\n\nIn both cases, the “Recovery threshold” acts on the masked image as modified by the current tool (Color and Light, Wavelet, Cam16, etc.). TP_LOCALLAB_RECOTHRES02_TOOLTIP;If the “Recovery threshold” value is greater than 1, the mask in Mask and Modifications takes into account any previous modifications made to the image but not those made with the current tool (e.g. Color and Light, Wavelet, Cam16, etc.)\nIf the value of the “Recovery threshold” is less than 1, the mask in Mask and Modifications does not take into account any previous modifications to the image.\n\nIn both cases, the “Recovery threshold” acts on the masked image as modified by the current tool (Color and Light, Wavelet, Cam16, etc.).
TP_LOCALLAB_RECURS;Recursive references TP_LOCALLAB_RECURS;Recursive references
TP_LOCALLAB_RECURS_TOOLTIP;Forces the algorithm to recalculate the references after each tool is applied.\nAlso useful for working with masks. TP_LOCALLAB_RECURS_TOOLTIP;Forces the algorithm to recalculate the references after each tool is applied.\nAlso useful for working with masks.
TP_LOCALLAB_REFLABEL;Ref. (0..1) Chroma=%1 Luma=%2 Hue=%3
TP_LOCALLAB_REN_DIALOG_LAB;Enter the new Control Spot name TP_LOCALLAB_REN_DIALOG_LAB;Enter the new Control Spot name
TP_LOCALLAB_REN_DIALOG_NAME;Renaming Control Spot TP_LOCALLAB_REN_DIALOG_NAME;Renaming Control Spot
TP_LOCALLAB_REPARW_TOOLTIP;Allows you to adjust the relative strength of the local contrast and wavelet image with respect to the original image. TP_LOCALLAB_REPARW_TOOLTIP;Allows you to adjust the relative strength of the local contrast and wavelet image with respect to the original image.
@ -3288,7 +3224,6 @@ TP_LOCALLAB_RETIFRA;Retinex
TP_LOCALLAB_RETIFRAME_TOOLTIP;Retinex can be useful for processing images: \nthat are blurred, foggy or hazy (in addition to Dehaze).\nthat contain large differences in luminance.\nIt can also be used for special effects (tone mapping). TP_LOCALLAB_RETIFRAME_TOOLTIP;Retinex can be useful for processing images: \nthat are blurred, foggy or hazy (in addition to Dehaze).\nthat contain large differences in luminance.\nIt can also be used for special effects (tone mapping).
TP_LOCALLAB_RETIM;Original Retinex TP_LOCALLAB_RETIM;Original Retinex
TP_LOCALLAB_RETITOOLFRA;Retinex Tools TP_LOCALLAB_RETITOOLFRA;Retinex Tools
TP_LOCALLAB_RETI_FFTW_TOOLTIP;FFT improve quality and allow big radius, but increases the treatment time.\nThe treatment time depends on the surface to be treated\nThe treatment time depends on the value of scale (be careful of high values).\nTo be used preferably for large radius.\n\nDimensions can be reduced by a few pixels to optimize FFTW.\nThis optimization can reduce the treatment time by a factor of 1.5 to 10.\nOptimization not used in Preview
TP_LOCALLAB_RETI_LIGHTDARK_TOOLTIP;Has no effect when the value of "Lightness = 1" or "Darkness =2".\nFor other values, the last step of a "Multiple scale Retinex" algorithm (similar to "local contrast") is applied. These 2 cursors, associated with "Strength" allow you to make adjustments upstream of local contrast TP_LOCALLAB_RETI_LIGHTDARK_TOOLTIP;Has no effect when the value of "Lightness = 1" or "Darkness =2".\nFor other values, the last step of a "Multiple scale Retinex" algorithm (similar to "local contrast") is applied. These 2 cursors, associated with "Strength" allow you to make adjustments upstream of local contrast
TP_LOCALLAB_RETI_LIMDOFFS_TOOLTIP;Adjusts the internal parameters to optimize the response.\nPreferable to keep the "Restored data" values close to Min=0 and Max=32768 (log mode), but other values are possible. TP_LOCALLAB_RETI_LIMDOFFS_TOOLTIP;Adjusts the internal parameters to optimize the response.\nPreferable to keep the "Restored data" values close to Min=0 and Max=32768 (log mode), but other values are possible.
TP_LOCALLAB_RETI_LOGLIN_TOOLTIP;Logarithm mode introduces more contrast but will also generate more halos. TP_LOCALLAB_RETI_LOGLIN_TOOLTIP;Logarithm mode introduces more contrast but will also generate more halos.
@ -3303,7 +3238,6 @@ TP_LOCALLAB_ROW_VIS;Visible
TP_LOCALLAB_RSTPROTECT_TOOLTIP;Red and skin-tone protection affects the Saturation, Chroma and Colorfulness sliders. TP_LOCALLAB_RSTPROTECT_TOOLTIP;Red and skin-tone protection affects the Saturation, Chroma and Colorfulness sliders.
TP_LOCALLAB_SATUR;Saturation TP_LOCALLAB_SATUR;Saturation
TP_LOCALLAB_SATURV;Saturation (s) TP_LOCALLAB_SATURV;Saturation (s)
TP_LOCALLAB_SAVREST;Save - Restore Current Image
TP_LOCALLAB_SCALEGR;Scale TP_LOCALLAB_SCALEGR;Scale
TP_LOCALLAB_SCALERETI;Scale TP_LOCALLAB_SCALERETI;Scale
TP_LOCALLAB_SCALTM;Scale TP_LOCALLAB_SCALTM;Scale
@ -3377,7 +3311,6 @@ TP_LOCALLAB_SIGMOIDTH;Threshold (Gray point)
TP_LOCALLAB_SIGMOIDBL;Blend TP_LOCALLAB_SIGMOIDBL;Blend
TP_LOCALLAB_SIGMOIDQJ;Uses Black Ev & White Ev TP_LOCALLAB_SIGMOIDQJ;Uses Black Ev & White Ev
TP_LOCALLAB_SIGMOID_TOOLTIP;Allows you to simulate a Tone-mapping appearance using both the'Ciecam' (or 'Jz') and 'Sigmoid' function.\nThree sliders: a) Contrast acts on the shape of the sigmoid curve and consequently on the strength; b) Threshold (Gray point) distributes the action according to the luminance; c)Blend acts on the final aspect of the image, contrast and luminance. TP_LOCALLAB_SIGMOID_TOOLTIP;Allows you to simulate a Tone-mapping appearance using both the'Ciecam' (or 'Jz') and 'Sigmoid' function.\nThree sliders: a) Contrast acts on the shape of the sigmoid curve and consequently on the strength; b) Threshold (Gray point) distributes the action according to the luminance; c)Blend acts on the final aspect of the image, contrast and luminance.
TP_LOCALLAB_SIM;Simple
TP_LOCALLAB_SLOMASKCOL;Slope TP_LOCALLAB_SLOMASKCOL;Slope
TP_LOCALLAB_SLOMASK_TOOLTIP;Adjusting Gamma and Slope can provide a soft and artifact-free transformation of the mask by progressively modifying L to avoid any discontinuities. TP_LOCALLAB_SLOMASK_TOOLTIP;Adjusting Gamma and Slope can provide a soft and artifact-free transformation of the mask by progressively modifying L to avoid any discontinuities.
TP_LOCALLAB_SLOSH;Slope TP_LOCALLAB_SLOSH;Slope
@ -3387,7 +3320,6 @@ TP_LOCALLAB_SOFTMETHOD_TOOLTIP;Apply a Soft-light blend (identical to the global
TP_LOCALLAB_SOFTRADIUSCOL;Soft radius TP_LOCALLAB_SOFTRADIUSCOL;Soft radius
TP_LOCALLAB_SOFTRADIUSCOL_TOOLTIP;Applies a guided filter to the output image to reduce possible artifacts. TP_LOCALLAB_SOFTRADIUSCOL_TOOLTIP;Applies a guided filter to the output image to reduce possible artifacts.
TP_LOCALLAB_SOFTRETI;Reduce ΔE artifacts TP_LOCALLAB_SOFTRETI;Reduce ΔE artifacts
TP_LOCALLAB_SOFTRETI_TOOLTIP;Take into account deltaE to improve Transmission map
TP_LOCALLAB_SOFT_TOOLNAME;Soft Light & Original Retinex TP_LOCALLAB_SOFT_TOOLNAME;Soft Light & Original Retinex
TP_LOCALLAB_SOURCE_ABS;Absolute luminance TP_LOCALLAB_SOURCE_ABS;Absolute luminance
TP_LOCALLAB_SOURCE_GRAY;Mean luminance (Yb%) TP_LOCALLAB_SOURCE_GRAY;Mean luminance (Yb%)
@ -3404,7 +3336,6 @@ TP_LOCALLAB_STRENGR;Strength
TP_LOCALLAB_STRENGRID_TOOLTIP;You can adjust the desired effect with "strength", but you can also use the "scope" function which allows you to delimit the action (e.g. to isolate a particular color). TP_LOCALLAB_STRENGRID_TOOLTIP;You can adjust the desired effect with "strength", but you can also use the "scope" function which allows you to delimit the action (e.g. to isolate a particular color).
TP_LOCALLAB_STRENGTH;Noise TP_LOCALLAB_STRENGTH;Noise
TP_LOCALLAB_STRGRID;Strength TP_LOCALLAB_STRGRID;Strength
TP_LOCALLAB_STRRETI_TOOLTIP;if Strength Retinex < 0.2 only Dehaze is enabled.\nif Strength Retinex >= 0.1 Dehaze is in luminance mode.
TP_LOCALLAB_STRUC;Structure TP_LOCALLAB_STRUC;Structure
TP_LOCALLAB_STRUCCOL;Spot structure TP_LOCALLAB_STRUCCOL;Spot structure
TP_LOCALLAB_STRUCCOL1;Spot structure TP_LOCALLAB_STRUCCOL1;Spot structure
@ -3422,7 +3353,6 @@ TP_LOCALLAB_THRESDELTAE;ΔE scope threshold
TP_LOCALLAB_THRESRETI;Threshold TP_LOCALLAB_THRESRETI;Threshold
TP_LOCALLAB_THRESWAV;Balance threshold TP_LOCALLAB_THRESWAV;Balance threshold
TP_LOCALLAB_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sig=%4 TP_LOCALLAB_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sig=%4
TP_LOCALLAB_TLABEL2;TM Effective Tm=%1 TM=%2
TP_LOCALLAB_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nTm=Min TM=Max of Transmission Map.\nYou can normalize the results with the threshold slider. TP_LOCALLAB_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nTm=Min TM=Max of Transmission Map.\nYou can normalize the results with the threshold slider.
TP_LOCALLAB_TM;Tone Mapping TP_LOCALLAB_TM;Tone Mapping
TP_LOCALLAB_TM_MASK;Use transmission map TP_LOCALLAB_TM_MASK;Use transmission map
@ -3453,7 +3383,6 @@ TP_LOCALLAB_VIBRANCE;Vibrance & Warm/Cool
TP_LOCALLAB_VIBRA_TOOLTIP;Adjusts vibrance (essentially the same as the global adjustment).\nCarries out the equivalent of a white-balance adjustment using a CIECAM algorithm. TP_LOCALLAB_VIBRA_TOOLTIP;Adjusts vibrance (essentially the same as the global adjustment).\nCarries out the equivalent of a white-balance adjustment using a CIECAM algorithm.
TP_LOCALLAB_VIB_TOOLNAME;Vibrance & Warm/Cool TP_LOCALLAB_VIB_TOOLNAME;Vibrance & Warm/Cool
TP_LOCALLAB_VIS_TOOLTIP;<b>Click</b> to show/hide selected Control Spot.\n<b>Ctrl</b>+<b>click</b> to show/hide all Control Spot. TP_LOCALLAB_VIS_TOOLTIP;<b>Click</b> to show/hide selected Control Spot.\n<b>Ctrl</b>+<b>click</b> to show/hide all Control Spot.
TP_LOCALLAB_WAMASKCOL;Mask Wavelet level
TP_LOCALLAB_WARM;Warm/Cool & Color artifacts TP_LOCALLAB_WARM;Warm/Cool & Color artifacts
TP_LOCALLAB_WARM_TOOLTIP;This slider uses the CIECAM algorithm and acts as a White Balance control to make the color temperature of the selected area warmer or cooler.\nIt can also reduce color artifacts in some cases. TP_LOCALLAB_WARM_TOOLTIP;This slider uses the CIECAM algorithm and acts as a White Balance control to make the color temperature of the selected area warmer or cooler.\nIt can also reduce color artifacts in some cases.
TP_LOCALLAB_WASDEN_TOOLTIP;Luminance noise reduction: the left-hand side of the curve including the dark-gray/light-gray boundary corresponds to the first 3 levels 0, 1, 2 (fine detail). The right hand side of the curve corresponds to the coarser details (level 3, 4, 5, 6). TP_LOCALLAB_WASDEN_TOOLTIP;Luminance noise reduction: the left-hand side of the curve including the dark-gray/light-gray boundary corresponds to the first 3 levels 0, 1, 2 (fine detail). The right hand side of the curve corresponds to the coarser details (level 3, 4, 5, 6).
@ -3498,14 +3427,10 @@ TP_LOCALLAB_WAVEDG;Local contrast
TP_LOCALLAB_WAVEEDG_TOOLTIP;Improves sharpness by targeting the action of local contrast on the edges. It has the same functions as the corresponding module in Wavelet Levels and uses the same settings. TP_LOCALLAB_WAVEEDG_TOOLTIP;Improves sharpness by targeting the action of local contrast on the edges. It has the same functions as the corresponding module in Wavelet Levels and uses the same settings.
TP_LOCALLAB_WAVEMASK_LEVEL_TOOLTIP;Range of wavelet levels used in Local contrast (by wavelet level). TP_LOCALLAB_WAVEMASK_LEVEL_TOOLTIP;Range of wavelet levels used in Local contrast (by wavelet level).
TP_LOCALLAB_WAVGRAD_TOOLTIP;Allows the local contrast to be varied according to a chosen gradient and angle. The variation of the luminance signal is taken into account and not the luminance. TP_LOCALLAB_WAVGRAD_TOOLTIP;Allows the local contrast to be varied according to a chosen gradient and angle. The variation of the luminance signal is taken into account and not the luminance.
TP_LOCALLAB_WAVHIGH;Wavelet high
TP_LOCALLAB_WAVHUE_TOOLTIP;Allows you to reduce or increase the denoise based on hue. TP_LOCALLAB_WAVHUE_TOOLTIP;Allows you to reduce or increase the denoise based on hue.
TP_LOCALLAB_WAVLEV;Blur by level TP_LOCALLAB_WAVLEV;Blur by level
TP_LOCALLAB_WAVLOW;Wavelet low
TP_LOCALLAB_WAVMASK;Local contrast TP_LOCALLAB_WAVMASK;Local contrast
TP_LOCALLAB_WAVMASK_TOOLTIP;Uses wavelets to modify the local contrast of the mask and reinforce or reduce the structure (skin, buildings...) TP_LOCALLAB_WAVMASK_TOOLTIP;Uses wavelets to modify the local contrast of the mask and reinforce or reduce the structure (skin, buildings...)
//TP_LOCALLAB_WAVMED;Ψ Wavelet normal
TP_LOCALLAB_WAVMED;Wavelet normal
TP_LOCALLAB_WEDIANHI;Median Hi TP_LOCALLAB_WEDIANHI;Median Hi
TP_LOCALLAB_WHITE_EV;White Ev TP_LOCALLAB_WHITE_EV;White Ev
TP_LOCALLAB_ZCAMFRA;ZCAM Image Adjustments TP_LOCALLAB_ZCAMFRA;ZCAM Image Adjustments
@ -3913,7 +3838,6 @@ TP_WAVELET_CONTEDIT;'After' contrast curve
TP_WAVELET_CONTFRAME;Contrast - Compression TP_WAVELET_CONTFRAME;Contrast - Compression
TP_WAVELET_CONTR;Gamut TP_WAVELET_CONTR;Gamut
TP_WAVELET_CONTRA;Contrast TP_WAVELET_CONTRA;Contrast
TP_WAVELET_CONTRASTEDIT;Finer - Coarser levels
TP_WAVELET_CONTRAST_MINUS;Contrast - TP_WAVELET_CONTRAST_MINUS;Contrast -
TP_WAVELET_CONTRAST_PLUS;Contrast + TP_WAVELET_CONTRAST_PLUS;Contrast +
TP_WAVELET_CONTRA_TOOLTIP;Changes the residual image contrast. TP_WAVELET_CONTRA_TOOLTIP;Changes the residual image contrast.
@ -3936,14 +3860,7 @@ TP_WAVELET_DAUB14;D14 - high
TP_WAVELET_DAUBLOCAL;Wavelet Edge performance TP_WAVELET_DAUBLOCAL;Wavelet Edge performance
TP_WAVELET_DAUB_TOOLTIP;Changes Daubechies coefficients:\nD4 = Standard,\nD14 = Often best performance, 10% more time-intensive.\n\nAffects edge detection as well as the general quality of the first levels. However the quality is not strictly related to this coefficient and can vary depending on image and use. TP_WAVELET_DAUB_TOOLTIP;Changes Daubechies coefficients:\nD4 = Standard,\nD14 = Often best performance, 10% more time-intensive.\n\nAffects edge detection as well as the general quality of the first levels. However the quality is not strictly related to this coefficient and can vary depending on image and use.
TP_WAVELET_DEN5THR;Guided threshold TP_WAVELET_DEN5THR;Guided threshold
TP_WAVELET_DEN12LOW;1 2 Low
TP_WAVELET_DEN12PLUS;1 2 High
TP_WAVELET_DEN14LOW;1 4 Low
TP_WAVELET_DEN14PLUS;1 4 High
TP_WAVELET_DENCONTRAST;Local contrast Equalizer
TP_WAVELET_DENCURV;Curve TP_WAVELET_DENCURV;Curve
TP_WAVELET_DENEQUAL;1 2 3 4 Equal
TP_WAVELET_DENH;Threshold
TP_WAVELET_DENL;Correction structure TP_WAVELET_DENL;Correction structure
TP_WAVELET_DENLH;Guided threshold levels 1-4 TP_WAVELET_DENLH;Guided threshold levels 1-4
TP_WAVELET_DENLOCAL_TOOLTIP;Use a curve in order to guide the denoising according to the local contrast.\nThe areas are denoised, the structures are maintained TP_WAVELET_DENLOCAL_TOOLTIP;Use a curve in order to guide the denoising according to the local contrast.\nThe areas are denoised, the structures are maintained
@ -3986,7 +3903,6 @@ TP_WAVELET_EDTYPE;Local contrast method
TP_WAVELET_EDVAL;Strength TP_WAVELET_EDVAL;Strength
TP_WAVELET_FINAL;Final Touchup TP_WAVELET_FINAL;Final Touchup
TP_WAVELET_FINCFRAME;Final local contrast TP_WAVELET_FINCFRAME;Final local contrast
TP_WAVELET_FINCOAR_TOOLTIP;The left (positive) part of the curve acts on the finer levels (increase).\nThe 2 points on the abscissa represent the respective action limits of finer and coarser levels 5 and 6 (default).\nThe right (negative) part of the curve acts on the coarser levels (increase).\nAvoid moving the left part of the curve with negative values. Avoid moving the right part of the curve with positives values
TP_WAVELET_FINEST;Finest TP_WAVELET_FINEST;Finest
TP_WAVELET_FINTHR_TOOLTIP;Uses local contrast to reduce or increase the action of the guided filter TP_WAVELET_FINTHR_TOOLTIP;Uses local contrast to reduce or increase the action of the guided filter
TP_WAVELET_GUIDFRAME;Final smoothing (guided filter) TP_WAVELET_GUIDFRAME;Final smoothing (guided filter)
@ -4055,7 +3971,6 @@ TP_WAVELET_PASTEL;Pastel chroma
TP_WAVELET_PROC;Process TP_WAVELET_PROC;Process
TP_WAVELET_PROTAB;Protection TP_WAVELET_PROTAB;Protection
TP_WAVELET_QUAAGRES;Aggressive TP_WAVELET_QUAAGRES;Aggressive
TP_WAVELET_QUANONE;Off
TP_WAVELET_QUACONSER;Conservative TP_WAVELET_QUACONSER;Conservative
TP_WAVELET_RADIUS;Radius shadows - highlight TP_WAVELET_RADIUS;Radius shadows - highlight
TP_WAVELET_RANGEAB;Range a and b % TP_WAVELET_RANGEAB;Range a and b %
@ -4094,7 +4009,6 @@ TP_WAVELET_THRESHOLD;Finer levels
TP_WAVELET_THRESHOLD2;Coarser levels TP_WAVELET_THRESHOLD2;Coarser levels
TP_WAVELET_THRESHOLD2_TOOLTIP;Only levels from the chosen value to the selected number of wavelet levels will be affected by the Shadow luminance range. TP_WAVELET_THRESHOLD2_TOOLTIP;Only levels from the chosen value to the selected number of wavelet levels will be affected by the Shadow luminance range.
TP_WAVELET_THRESHOLD_TOOLTIP;Only levels below and including the chosen value will be affected by the Highlight luminance range. TP_WAVELET_THRESHOLD_TOOLTIP;Only levels below and including the chosen value will be affected by the Highlight luminance range.
TP_WAVELET_THRESWAV;Balance threshold
TP_WAVELET_THRH;Highlights threshold TP_WAVELET_THRH;Highlights threshold
TP_WAVELET_TILESBIG;Tiles TP_WAVELET_TILESBIG;Tiles
TP_WAVELET_TILESFULL;Full image TP_WAVELET_TILESFULL;Full image
@ -4110,7 +4024,6 @@ TP_WAVELET_TON;Toning
TP_WAVELET_TONFRAME;Excluded colors TP_WAVELET_TONFRAME;Excluded colors
TP_WAVELET_USH;None TP_WAVELET_USH;None
TP_WAVELET_USHARP;Clarity method TP_WAVELET_USHARP;Clarity method
TP_WAVELET_USHARP_TOOLTIP;Origin : the source file is the file before Wavelet.\nWavelet : the source file is the file including wavelet threatment
TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, you can choose any level (in Settings) from 1 to 4 for processing.\nIf you select Clarity, you can choose any level (in Settings) between 5 and Extra. TP_WAVELET_USH_TOOLTIP;If you select Sharp-mask, you can choose any level (in Settings) from 1 to 4 for processing.\nIf you select Clarity, you can choose any level (in Settings) between 5 and Extra.
TP_WAVELET_WAVLOWTHR;Low contrast threshold TP_WAVELET_WAVLOWTHR;Low contrast threshold
TP_WAVELET_WAVOFFSET;Offset TP_WAVELET_WAVOFFSET;Offset
@ -4175,7 +4088,3 @@ ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: <b>f</b>
ZOOMPANEL_ZOOMFITSCREEN;Fit whole image to screen\nShortcut: <b>Alt</b>-<b>f</b> ZOOMPANEL_ZOOMFITSCREEN;Fit whole image to screen\nShortcut: <b>Alt</b>-<b>f</b>
ZOOMPANEL_ZOOMIN;Zoom In\nShortcut: <b>+</b> ZOOMPANEL_ZOOMIN;Zoom In\nShortcut: <b>+</b>
ZOOMPANEL_ZOOMOUT;Zoom Out\nShortcut: <b>-</b> ZOOMPANEL_ZOOMOUT;Zoom Out\nShortcut: <b>-</b>
//TP_LOCALLAB_CIECAMLOG_TOOLTIP;This module is based on the CIECAM color appearance model which was designed to better simulate how human vision perceives colors under different lighting conditions.\nOnly the third Ciecam process (Viewing conditions - Target) is taken into account, as well as part of the second (contrast J, saturation s) , as well as some data from the first process (Scene conditions - Source) which is used for the Log encoding.\nIt also adapts the output to the intended viewing conditions (monitor, TV, projector, printer, etc.) so that the chromatic and contrast appearance is preserved across the display environment.
//TP_WAVELET_DENH;Low levels (1234)- Finest details
//TP_WAVELET_DENL;High levels - Coarsest details
//TP_WAVELET_DENLH;Guided threshold for detail levels 1-4

View File

@ -1208,12 +1208,17 @@ Camera constants:
"ranges" : { "white" : 16367 } // Typically 16383 without LENR, with LENR safest value is 15800 for ISO 25600 "ranges" : { "white" : 16367 } // Typically 16383 without LENR, with LENR safest value is 15800 for ISO 25600
}, },
{ // Quality C
"make_model": "Canon EOS R3",
"dcraw_matrix" : [9423,-2839,-1195,-4532,12377,2415,-483,1374,5276]
},
{ // Quality C { // Quality C
"make_model": "Canon EOS R5", "make_model": "Canon EOS R5",
"dcraw_matrix" : [9766, -2953, -1254, -4276, 12116, 2433, -437, 1336, 5131], "dcraw_matrix" : [9766, -2953, -1254, -4276, 12116, 2433, -437, 1336, 5131],
"raw_crop" : [ 128, 96, 8224, 5490 ], "raw_crop" : [ 128, 96, 8224, 5490 ],
"masked_areas" : [ 94, 20, 5578, 122 ], "masked_areas" : [ 94, 20, 5578, 122 ],
"ranges" : { "white" : 16382 } "ranges" : { "white" : 16382 }
}, },
{ // Quality C { // Quality C
@ -1224,6 +1229,16 @@ Camera constants:
"ranges" : { "white" : 16382 } "ranges" : { "white" : 16382 }
}, },
{ // Quality C
"make_model": "Canon EOS R7",
"dcraw_matrix" : [10424, -3138, -1300, -4221, 11938, 2584, -547, 1658, 6183]
},
{ // Quality C
"make_model": "Canon EOS R10",
"dcraw_matrix" : [9269, -2012, -1107, -3990, 11762, 2527, -569, 2093, 4913]
},
{ // Quality C, CHDK DNGs, raw frame correction { // Quality C, CHDK DNGs, raw frame correction
"make_model": "Canon PowerShot A3100 IS", "make_model": "Canon PowerShot A3100 IS",
"raw_crop": [ 24, 12, 4032, 3024 ] // full size 4036X3026 "raw_crop": [ 24, 12, 4032, 3024 ] // full size 4036X3026
@ -1702,7 +1717,7 @@ Camera constants:
{ // Quality A, samples provided by dimonoid (#5842) { // Quality A, samples provided by dimonoid (#5842)
"make_model": "NIKON COOLPIX P1000", "make_model": "NIKON COOLPIX P1000",
"dcraw_matrix": [ 14294, -6116, -1333, -1628, 10219, 1637, -14, 1158, 5022 ], // ColorMatrix2 from Adobe DNG Converter 11.4 "dcraw_matrix": [ 14294, -6116, -1333, -1628, 10219, 1637, -14, 1158, 5022 ], // ColorMatrix2 from Adobe DNG Converter 11.4
"ranges": { "ranges": {
"black": 200, "black": 200,
"white": [ 4000, 4050, 3950 ] // Typical values without LENR: 4009, 4093, 3963 "white": [ 4000, 4050, 3950 ] // Typical values without LENR: 4009, 4093, 3963
} // No significant influence of ISO } // No significant influence of ISO

View File

@ -738,7 +738,7 @@ void Ciecam02::jzczhzxyz (double &x, double &y, double &z, double jz, double az,
Lp = Iz + 0.138605043271539 * az + 0.0580473161561189 * bz; Lp = Iz + 0.138605043271539 * az + 0.0580473161561189 * bz;
Mp = Iz - 0.138605043271539 * az - 0.0580473161561189 * bz; Mp = Iz - 0.138605043271539 * az - 0.0580473161561189 * bz;
Sp = Iz - 0.0960192420263189 * az - 0.811891896056039 * bz; Sp = Iz - 0.0960192420263189 * az - 0.811891896056039 * bz;
//I change optionnaly 10000 for pl function of la(absolute luminance) default 10000 //I change optionally 10000 for pl function of la(absolute luminance) default 10000
tmp = pow(Lp, Jzazbz_pi); tmp = pow(Lp, Jzazbz_pi);
if(std::isnan(tmp)) {//to avoid crash if(std::isnan(tmp)) {//to avoid crash

View File

@ -3544,14 +3544,14 @@ double ColorTemp::daylight_spect(double wavelength, double m1, double m2)
53.30, 56.10, 58.90, 60.40, 61.90 53.30, 56.10, 58.90, 60.40, 61.90
}; };
//s1 //s1
static const double s1[97] = {41.60, 39.80, 38.00, 40.70, 43.40, 40.95, 38.50, 36.75, 35.00, 39.20, 43.40, 44.85, 46.30, 45.10, 43.90, 40.50, 37.10, 36.90, 36.70, 36.30, 35.90, 34.25, 32.60, 30.25, 27.90, 26.10, 24.30, 22.20, 20.10, 18.15, 16.20, 14.70, static const double s1[97] = {41.60, 39.80, 38.00, 40.20, 42.40, 40.45, 38.50, 36.75, 35.00, 39.20, 43.40, 44.85, 46.30, 45.10, 43.90, 40.50, 37.10, 36.90, 36.70, 36.30, 35.90, 34.25, 32.60, 30.25, 27.90, 26.10, 24.30, 22.20, 20.10, 18.15, 16.20, 14.70,
13.20, 10.90, 8.60, 7.35, 6.10, 5.15, 4.20, 3.05, 1.90, 0.95, 0.00, -0.80, -1.60, -2.55, -3.50, -3.50, -3.50, -4.65, -5.80, -6.50, -7.20, -7.90, -8.60, -9.05, -9.50, -10.20, -10.90, -10.80, -10.70, -11.35, -12.00, -13.00, -14.00, 13.20, 10.90, 8.60, 7.35, 6.10, 5.15, 4.20, 3.05, 1.90, 0.95, 0.00, -0.80, -1.60, -2.55, -3.50, -3.50, -3.50, -4.65, -5.80, -6.50, -7.20, -7.90, -8.60, -9.05, -9.50, -10.20, -10.90, -10.80, -10.70, -11.35, -12.00, -13.00, -14.00,
-13.80, -13.60, -12.80, -12.00, -12.65, -13.30, -13.10, -12.90, -11.75, -10.60, -11.10, -11.60, -11.90, -12.20, -11.20, -10.20, -9.00, -7.80, -9.50, -11.20, -10.80, -10.50, -10.60, -10.15, -9.70, -9.00, -8.30, -13.80, -13.60, -12.80, -12.00, -12.65, -13.30, -13.10, -12.90, -11.75, -10.60, -11.10, -11.60, -11.90, -12.20, -11.20, -10.20, -9.00, -7.80, -9.50, -11.20, -10.80, -10.40, -10.50, -10.60, -10.15, -9.70, -9.00, -8.30,
-8.80, -9.30, -9.55, -9.80 -8.80, -9.30, -9.55, -9.80
}; };
//s2 //s2
static const double s2[97] = {6.70, 6.00, 5.30, 5.70, 6.10, 4.55, 3.00, 2.10, 1.20, 0.05, -1.10, -0.80, -0.50, -0.60, -0.70, -0.95, -1.20, -1.90, -2.60, -2.75, -2.90, -2.85, -2.80, -2.70, -2.60, -2.60, -2.60, -2.20, -1.80, -1.65, -1.50, -1.40, -1.30, static const double s2[97] = {6.70, 6.00, 5.30, 5.70, 6.10, 4.55, 3.00, 2.10, 1.20, 0.05, -1.10, -0.80, -0.50, -0.60, -0.70, -0.95, -1.20, -1.90, -2.60, -2.75, -2.90, -2.85, -2.80, -2.70, -2.60, -2.60, -2.60, -2.20, -1.80, -1.65, -1.50, -1.40, -1.30,
-1.25, -1.20, -1.10, -1.00, -0.75, -0.50, -0.40, -0.30, -0.15, 0.00, 0.10, 0.20, 0.35, 0.50, 1.30, 2.10, 2.65, 3.65, 4.10, 4.40, 4.70, 4.90, 5.10, 5.90, 6.70, 7.00, 7.30, 7.95, 8.60, 9.20, 9.80, 10.00, 10.20, 9.25, 8.30, 8.95, -1.25, -1.20, -1.10, -1.00, -0.75, -0.50, -0.40, -0.30, -0.15, 0.00, 0.10, 0.20, 0.35, 0.50, 1.30, 2.10, 2.65, 3.20, 3.65, 4.10, 4.40, 4.70, 4.90, 5.10, 5.90, 6.70, 7.00, 7.30, 7.95, 8.60, 9.20, 9.80, 10.00, 10.20, 9.25, 8.30, 8.95,
9.60, 9.05, 8.50, 7.75, 7.00, 7.30, 7.60, 7.80, 8.00, 7.35, 6.70, 5.95, 5.20, 6.30, 7.40, 7.10, 6.80, 6.90, 7.00, 6.70, 6.40, 5.95, 5.50, 5.80, 6.10, 6.30, 6.50 9.60, 9.05, 8.50, 7.75, 7.00, 7.30, 7.60, 7.80, 8.00, 7.35, 6.70, 5.95, 5.20, 6.30, 7.40, 7.10, 6.80, 6.90, 7.00, 6.70, 6.40, 5.95, 5.50, 5.80, 6.10, 6.30, 6.50
}; };

View File

@ -6091,13 +6091,26 @@ get2_256:
offsetChannelBlackLevel2 = save1 + (0x157 << 1); offsetChannelBlackLevel2 = save1 + (0x157 << 1);
offsetWhiteLevels = save1 + (0x32a << 1); offsetWhiteLevels = save1 + (0x32a << 1);
break; break;
case 3973: // R3; ColorDataSubVer: 34
case 3778: // R7, R10; ColorDataSubVer: 48
// imCanon.ColorDataVer = 11;
imCanon.ColorDataSubVer = get2();
fseek(ifp, save1 + ((0x0069+0x0064) << 1), SEEK_SET);
FORC4 cam_mul[c ^ (c >> 1)] = (float)get2();
offsetChannelBlackLevel2 = save1 + ((0x0069+0x0102) << 1);
offsetChannelBlackLevel = save1 + ((0x0069+0x0213) << 1);
offsetWhiteLevels = save1 + ((0x0069+0x0217) << 1);
break;
} }
if (offsetChannelBlackLevel) if (offsetChannelBlackLevel)
{ {
fseek(ifp, offsetChannelBlackLevel, SEEK_SET); fseek(ifp, offsetChannelBlackLevel, SEEK_SET);
FORC4 FORC4
bls += (cblack/*imCanon.ChannelBlackLevel*/[c ^ (c >> 1)] = get2()); bls += (RT_canon_levels_data.cblack/*imCanon.ChannelBlackLevel*/[c ^ (c >> 1)] = get2());
RT_canon_levels_data.black_ok = true;
imCanon.AverageBlackLevel = bls / 4; imCanon.AverageBlackLevel = bls / 4;
// RT_blacklevel_from_constant = ThreeValBool::F; // RT_blacklevel_from_constant = ThreeValBool::F;
} }
@ -6109,7 +6122,8 @@ get2_256:
imCanon.SpecularWhiteLevel = get2(); imCanon.SpecularWhiteLevel = get2();
// FORC4 // FORC4
// imgdata.color.linear_max[c] = imCanon.SpecularWhiteLevel; // imgdata.color.linear_max[c] = imCanon.SpecularWhiteLevel;
maximum = imCanon.SpecularWhiteLevel; RT_canon_levels_data.white = imCanon.SpecularWhiteLevel;
RT_canon_levels_data.white_ok = true;
// RT_whitelevel_from_constant = ThreeValBool::F; // RT_whitelevel_from_constant = ThreeValBool::F;
} }
@ -6117,7 +6131,8 @@ get2_256:
{ {
fseek(ifp, offsetChannelBlackLevel2, SEEK_SET); fseek(ifp, offsetChannelBlackLevel2, SEEK_SET);
FORC4 FORC4
bls += (cblack/*imCanon.ChannelBlackLevel*/[c ^ (c >> 1)] = get2()); bls += (RT_canon_levels_data.cblack/*imCanon.ChannelBlackLevel*/[c ^ (c >> 1)] = get2());
RT_canon_levels_data.black_ok = true;
imCanon.AverageBlackLevel = bls / 4; imCanon.AverageBlackLevel = bls / 4;
// RT_blacklevel_from_constant = ThreeValBool::F; // RT_blacklevel_from_constant = ThreeValBool::F;
} }
@ -9852,7 +9867,8 @@ void CLASS identify()
filters = 0; filters = 0;
tiff_samples = colors = 3; tiff_samples = colors = 3;
load_raw = &CLASS canon_sraw_load_raw; load_raw = &CLASS canon_sraw_load_raw;
FORC4 cblack[c] = 0; // ALB //FORC4 cblack[c] = 0; // ALB
RT_canon_levels_data.black_ok = RT_canon_levels_data.white_ok = false;
} else if (!strcmp(model,"PowerShot 600")) { } else if (!strcmp(model,"PowerShot 600")) {
height = 613; height = 613;
width = 854; width = 854;
@ -10518,6 +10534,14 @@ bw: colors = 1;
} }
} }
dng_skip: dng_skip:
if (!dng_version && is_raw) {
if (RT_canon_levels_data.black_ok) {
FORC4 cblack[c] = RT_canon_levels_data.cblack[c];
}
if (RT_canon_levels_data.white_ok) {
maximum = RT_canon_levels_data.white;
}
}
if ((use_camera_matrix & (use_camera_wb || dng_version)) if ((use_camera_matrix & (use_camera_wb || dng_version))
&& cmatrix[0][0] > 0.125 && cmatrix[0][0] > 0.125
&& strncmp(RT_software.c_str(), "Adobe DNG Converter", 19) != 0 && strncmp(RT_software.c_str(), "Adobe DNG Converter", 19) != 0

View File

@ -193,8 +193,17 @@ public:
int crx_track_selected; int crx_track_selected;
short CR3_CTMDtag; short CR3_CTMDtag;
}; };
struct CanonLevelsData {
unsigned cblack[4];
unsigned white;
bool black_ok;
bool white_ok;
CanonLevelsData(): cblack{0}, white{0}, black_ok(false), white_ok(false) {}
};
protected: protected:
CanonCR3Data RT_canon_CR3_data; CanonCR3Data RT_canon_CR3_data;
CanonLevelsData RT_canon_levels_data;
float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4]; float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4];

View File

@ -17,28 +17,82 @@
* along with RawTherapee. If not, see <https://www.gnu.org/licenses/>. * along with RawTherapee. If not, see <https://www.gnu.org/licenses/>.
*/ */
#include <sstream> #include <cmath>
#include <iostream>
#include <cstdio> #include <cstdio>
#include <iostream>
#include <list>
#include <map>
#include <sstream>
#include <giomm.h> #include <giomm.h>
#include <glibmm/ustring.h> #include <glibmm/ustring.h>
#include "dfmanager.h" #include "dfmanager.h"
#include "../rtgui/options.h"
#include "rawimage.h"
#include "imagedata.h" #include "imagedata.h"
#include "jaggedarray.h"
#include "noncopyable.h"
#include "pixelsmap.h"
#include "rawimage.h"
#include "utils.h" #include "utils.h"
namespace rtengine #include "../rtgui/options.h"
namespace
{ {
// *********************** class dfInfo ************************************** std::string toUppercase(const std::string& string)
{
return Glib::ustring(string).uppercase();
}
class dfInfo final
{
public:
Glib::ustring pathname; // filename of dark frame
std::list<Glib::ustring> pathNames; // other similar dark frames, used for average
std::string maker; // manufacturer
std::string model; // model
int iso; // ISO (gain)
double shutter; // shutter or exposure time in sec
time_t timestamp; // seconds since 1 Jan 1970
dfInfo(const Glib::ustring &name, const std::string &mak, const std::string &mod, int iso, double shut, time_t t)
: pathname(name), maker(mak), model(mod), iso(iso), shutter(shut), timestamp(t), ri(nullptr) {}
dfInfo(const dfInfo &o)
: pathname(o.pathname), maker(o.maker), model(o.model), iso(o.iso), shutter(o.shutter), timestamp(o.timestamp), ri(nullptr) {}
~dfInfo();
dfInfo &operator =(const dfInfo &o);
// Calculate virtual distance between two shots; different model return infinite
double distance(const std::string &mak, const std::string &mod, int iso, double shutter) const;
static std::string key(const std::string &mak, const std::string &mod, int iso, double shut);
std::string key() const
{
return key(maker, model, iso, shutter);
}
const rtengine::RawImage* getRawImage();
const std::vector<rtengine::badPix>& getHotPixels();
private:
rtengine::RawImage* ri; // Dark Frame raw data
std::vector<rtengine::badPix> badPixels; // Extracted hot pixels
void updateBadPixelList(const rtengine::RawImage* df);
void updateRawImage();
};
dfInfo::~dfInfo() dfInfo::~dfInfo()
{ {
delete ri; delete ri;
} }
inline dfInfo& dfInfo::operator =(const dfInfo &o) inline dfInfo& dfInfo::operator = (const dfInfo &o)
{ {
if (this != &o) { if (this != &o) {
pathname = o.pathname; pathname = o.pathname;
@ -48,7 +102,7 @@ inline dfInfo& dfInfo::operator =(const dfInfo &o)
shutter = o.shutter; shutter = o.shutter;
timestamp = o.timestamp; timestamp = o.timestamp;
if( ri ) { if (ri) {
delete ri; delete ri;
ri = nullptr; ri = nullptr;
} }
@ -57,38 +111,13 @@ inline dfInfo& dfInfo::operator =(const dfInfo &o)
return *this; return *this;
} }
bool dfInfo::operator <(const dfInfo &e2) const std::string dfInfo::key(const std::string &mak, const std::string &mod, int iso, double shut)
{
if( this->maker.compare( e2.maker) >= 0 ) {
return false;
}
if( this->model.compare( e2.model) >= 0 ) {
return false;
}
if( this->iso >= e2.iso ) {
return false;
}
if( this->shutter >= e2.shutter ) {
return false;
}
if( this->timestamp >= e2.timestamp ) {
return false;
}
return true;
}
std::string dfInfo::key(const std::string &mak, const std::string &mod, int iso, double shut )
{ {
std::ostringstream s; std::ostringstream s;
s << mak << " " << mod << " "; s << mak << " " << mod << " ";
s.width(5); s.width(5);
s << iso << "ISO "; s << iso << "ISO ";
s.precision( 2 ); s.precision(2);
s.width(4); s.width(4);
s << shut << "s"; s << shut << "s";
return s.str(); return s.str();
@ -96,115 +125,106 @@ std::string dfInfo::key(const std::string &mak, const std::string &mod, int iso,
double dfInfo::distance(const std::string &mak, const std::string &mod, int iso, double shutter) const double dfInfo::distance(const std::string &mak, const std::string &mod, int iso, double shutter) const
{ {
if( this->maker.compare( mak) != 0 ) { if (this->maker.compare(mak) != 0) {
return INFINITY; return INFINITY;
} }
if( this->model.compare( mod) != 0 ) { if (this->model.compare(mod) != 0) {
return INFINITY; return INFINITY;
} }
double dISO = (log(this->iso / 100.) - log(iso / 100.)) / log(2); const double dISO = (log(this->iso / 100.) - log(iso / 100.)) / log(2);
double dShutter = (log(this->shutter) - log(shutter)) / log(2); const double dShutter = (log(this->shutter) - log(shutter)) / log(2);
return sqrt( dISO * dISO + dShutter * dShutter); return std::sqrt(dISO * dISO + dShutter * dShutter);
} }
RawImage* dfInfo::getRawImage() const rtengine::RawImage* dfInfo::getRawImage()
{ {
if(ri) { if (ri) {
return ri; return ri;
} }
updateRawImage(); updateRawImage();
updateBadPixelList( ri ); updateBadPixelList(ri);
return ri; return ri;
} }
std::vector<badPix>& dfInfo::getHotPixels() const std::vector<rtengine::badPix>& dfInfo::getHotPixels()
{ {
if( !ri ) { if (!ri) {
updateRawImage(); updateRawImage();
updateBadPixelList( ri ); updateBadPixelList(ri);
} }
return badPixels; return badPixels;
} }
/* updateRawImage() load into ri the actual pixel data from pathname if there is a single shot /* updateRawImage() load into ri the actual pixel data from pathname if there is a single shot
* otherwise load each file from the pathNames list and extract a template from the media; * otherwise load each file from the pathNames list and extract a template from the media;
* the first file is used also for reading all information other than pixels * the first file is used also for reading all information other than pixels
*/ */
void dfInfo::updateRawImage() void dfInfo::updateRawImage()
{ {
typedef unsigned int acc_t;
if( !pathNames.empty() ) { if (!pathNames.empty()) {
std::list<Glib::ustring>::iterator iName = pathNames.begin(); std::list<Glib::ustring>::const_iterator iName = pathNames.begin();
ri = new RawImage(*iName); // First file used also for extra pixels information (width,height, shutter, filters etc.. ) ri = new rtengine::RawImage(*iName); // First file used also for extra pixels information (width,height, shutter, filters etc.. )
if( ri->loadRaw(true)) { if (ri->loadRaw(true)) {
delete ri; delete ri;
ri = nullptr; ri = nullptr;
} else { } else {
int H = ri->get_height(); const int H = ri->get_height();
int W = ri->get_width(); const int W = ri->get_width();
ri->compress_image(0); ri->compress_image(0);
int rSize = W * ((ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS) ? 1 : 3); const int rSize = W * ((ri->getSensorType() == rtengine::ST_BAYER || ri->getSensorType() == rtengine::ST_FUJI_XTRANS) ? 1 : 3);
acc_t **acc = new acc_t*[H]; rtengine::JaggedArray<float> acc(W, H);
for( int row = 0; row < H; row++) {
acc[row] = new acc_t[rSize ];
}
// copy first image into accumulators // copy first image into accumulators
for (int row = 0; row < H; row++) for (int row = 0; row < H; row++) {
for (int col = 0; col < rSize; col++) { for (int col = 0; col < rSize; col++) {
acc[row][col] = ri->data[row][col]; acc[row][col] = ri->data[row][col];
} }
}
int nFiles = 1; // First file data already loaded int nFiles = 1; // First file data already loaded
for( ++iName; iName != pathNames.end(); ++iName) { for (++iName; iName != pathNames.end(); ++iName) {
RawImage* temp = new RawImage(*iName); rtengine::RawImage temp(*iName);
if( !temp->loadRaw(true)) { if (!temp.loadRaw(true)) {
temp->compress_image(0); //\ TODO would be better working on original, because is temporary temp.compress_image(0); //\ TODO would be better working on original, because is temporary
nFiles++; nFiles++;
if( ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS ) { if (ri->getSensorType() == rtengine::ST_BAYER || ri->getSensorType() == rtengine::ST_FUJI_XTRANS) {
for( int row = 0; row < H; row++) { for (int row = 0; row < H; row++) {
for( int col = 0; col < W; col++) { for (int col = 0; col < W; col++) {
acc[row][col] += temp->data[row][col]; acc[row][col] += temp.data[row][col];
} }
} }
} else { } else {
for( int row = 0; row < H; row++) { for (int row = 0; row < H; row++) {
for( int col = 0; col < W; col++) { for (int col = 0; col < W; col++) {
acc[row][3 * col + 0] += temp->data[row][3 * col + 0]; acc[row][3 * col + 0] += temp.data[row][3 * col + 0];
acc[row][3 * col + 1] += temp->data[row][3 * col + 1]; acc[row][3 * col + 1] += temp.data[row][3 * col + 1];
acc[row][3 * col + 2] += temp->data[row][3 * col + 2]; acc[row][3 * col + 2] += temp.data[row][3 * col + 2];
} }
} }
} }
} }
delete temp;
} }
const float factor = 1.f / nFiles;
for (int row = 0; row < H; row++) { for (int row = 0; row < H; row++) {
for (int col = 0; col < rSize; col++) { for (int col = 0; col < rSize; col++) {
ri->data[row][col] = acc[row][col] / nFiles; ri->data[row][col] = acc[row][col] * factor;
} }
delete [] acc[row];
} }
delete [] acc;
} }
} else { } else {
ri = new RawImage(pathname); ri = new rtengine::RawImage(pathname);
if( ri->loadRaw(true)) { if (ri->loadRaw(true)) {
delete ri; delete ri;
ri = nullptr; ri = nullptr;
} else { } else {
@ -213,35 +233,36 @@ void dfInfo::updateRawImage()
} }
} }
void dfInfo::updateBadPixelList( RawImage *df ) void dfInfo::updateBadPixelList(const rtengine::RawImage *df)
{ {
if(!df) { if (!df) {
return; return;
} }
const float threshold = 10.f / 8.f; constexpr float threshold = 10.f / 8.f;
if( df->getSensorType() == ST_BAYER || df->getSensorType() == ST_FUJI_XTRANS ) { if (df->getSensorType() == rtengine::ST_BAYER || df->getSensorType() == rtengine::ST_FUJI_XTRANS) {
std::vector<badPix> badPixelsTemp; std::vector<rtengine::badPix> badPixelsTemp;
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp parallel #pragma omp parallel
#endif #endif
{ {
std::vector<badPix> badPixelsThread; std::vector<rtengine::badPix> badPixelsThread;
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp for nowait #pragma omp for nowait
#endif #endif
for( int row = 2; row < df->get_height() - 2; row++) for (int row = 2; row < df->get_height() - 2; ++row) {
for( int col = 2; col < df->get_width() - 2; col++) { for (int col = 2; col < df->get_width() - 2; ++col) {
float m = (df->data[row - 2][col - 2] + df->data[row - 2][col] + df->data[row - 2][col + 2] + const float m = df->data[row - 2][col - 2] + df->data[row - 2][col] + df->data[row - 2][col + 2] +
df->data[row][col - 2] + df->data[row][col + 2] + df->data[row][col - 2] + df->data[row][col + 2] +
df->data[row + 2][col - 2] + df->data[row + 2][col] + df->data[row + 2][col + 2]); df->data[row + 2][col - 2] + df->data[row + 2][col] + df->data[row + 2][col + 2];
if( df->data[row][col] > m * threshold ) { if (df->data[row][col] > m * threshold) {
badPixelsThread.emplace_back(col, row); badPixelsThread.emplace_back(col, row);
} }
} }
}
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp critical #pragma omp critical
@ -250,48 +271,78 @@ void dfInfo::updateBadPixelList( RawImage *df )
} }
badPixels.insert(badPixels.end(), badPixelsTemp.begin(), badPixelsTemp.end()); badPixels.insert(badPixels.end(), badPixelsTemp.begin(), badPixelsTemp.end());
} else { } else {
for( int row = 1; row < df->get_height() - 1; row++) for (int row = 1; row < df->get_height() - 1; ++row) {
for( int col = 1; col < df->get_width() - 1; col++) { for (int col = 1; col < df->get_width() - 1; ++col) {
float m[3]; float m[3];
for( int c = 0; c < 3; c++) { for (int c = 0; c < 3; c++) {
m[c] = (df->data[row - 1][3 * (col - 1) + c] + df->data[row - 1][3 * col + c] + df->data[row - 1][3 * (col + 1) + c] + m[c] = df->data[row - 1][3 * (col - 1) + c] + df->data[row - 1][3 * col + c] + df->data[row - 1][3 * (col + 1) + c] +
df->data[row] [3 * (col - 1) + c] + df->data[row] [3 * col + c] + df->data[row] [3 * (col - 1) + c] + df->data[row] [3 * col + c] +
df->data[row + 1][3 * (col - 1) + c] + df->data[row + 1][3 * col + c] + df->data[row + 1][3 * (col + 1) + c]); df->data[row + 1][3 * (col - 1) + c] + df->data[row + 1][3 * col + c] + df->data[row + 1][3 * (col + 1) + c];
} }
if( df->data[row][3 * col] > m[0]*threshold || df->data[row][3 * col + 1] > m[1]*threshold || df->data[row][3 * col + 2] > m[2]*threshold) { if (df->data[row][3 * col] > m[0]*threshold || df->data[row][3 * col + 1] > m[1]*threshold || df->data[row][3 * col + 2] > m[2]*threshold) {
badPixels.emplace_back(col, row); badPixels.emplace_back(col, row);
} }
} }
}
} }
if( settings->verbose ) { if (rtengine::settings->verbose) {
std::cout << "Extracted " << badPixels.size() << " pixels from darkframe:" << df->get_filename().c_str() << std::endl; std::cout << "Extracted " << badPixels.size() << " pixels from darkframe:" << df->get_filename().c_str() << std::endl;
} }
} }
// ************************* class DFManager ********************************* }
void DFManager::init(const Glib::ustring& pathname) class rtengine::DFManager::Implementation final :
public NonCopyable
{
public:
void init(const Glib::ustring& pathname);
Glib::ustring getPathname() const
{
return currentPath;
};
void getStat(int& totFiles, int& totTemplates) const;
const RawImage* searchDarkFrame(const std::string& mak, const std::string& mod, int iso, double shut, time_t t);
const RawImage* searchDarkFrame(const Glib::ustring& filename);
const std::vector<badPix>* getHotPixels(const std::string& mak, const std::string& mod, int iso, double shut, time_t t);
const std::vector<badPix>* getHotPixels(const Glib::ustring& filename);
const std::vector<badPix>* getBadPixels(const std::string& mak, const std::string& mod, const std::string& serial) const;
private:
typedef std::multimap<std::string, dfInfo> dfList_t;
typedef std::map<std::string, std::vector<badPix> > bpList_t;
dfList_t dfList;
bpList_t bpList;
bool initialized;
Glib::ustring currentPath;
dfInfo* addFileInfo(const Glib::ustring &filename, bool pool = true);
dfInfo* find(const std::string &mak, const std::string &mod, int isospeed, double shut, time_t t);
int scanBadPixelsFile(const Glib::ustring &filename);
};
void rtengine::DFManager::Implementation::init(const Glib::ustring& pathname)
{ {
if (pathname.empty()) { if (pathname.empty()) {
return; return;
} }
std::vector<Glib::ustring> names; std::vector<Glib::ustring> names;
auto dir = Gio::File::create_for_path (pathname); const auto dir = Gio::File::create_for_path(pathname);
if (!dir || !dir->query_exists()) { if (!dir || !dir->query_exists()) {
return; return;
} }
try { try {
auto enumerator = dir->enumerate_children ("standard::name"); const auto enumerator = dir->enumerate_children("standard::name");
while (auto file = enumerator->next_file ()) { while (const auto file = enumerator->next_file()) {
names.emplace_back (Glib::build_filename (pathname, file->get_name ())); names.emplace_back(Glib::build_filename(pathname, file->get_name()));
} }
} catch (Glib::Exception&) {} } catch (Glib::Exception&) {}
@ -299,40 +350,40 @@ void DFManager::init(const Glib::ustring& pathname)
dfList.clear(); dfList.clear();
bpList.clear(); bpList.clear();
for (size_t i = 0; i < names.size(); i++) { for (const auto &name : names) {
size_t lastdot = names[i].find_last_of ('.'); const auto lastdot = name.find_last_of('.');
if (lastdot != Glib::ustring::npos && names[i].substr(lastdot) == ".badpixels" ) { if (lastdot != Glib::ustring::npos && name.substr(lastdot) == ".badpixels") {
int n = scanBadPixelsFile( names[i] ); const int n = scanBadPixelsFile(name);
if( n > 0 && settings->verbose) { if (n > 0 && settings->verbose) {
printf("Loaded %s: %d pixels\n", names[i].c_str(), n); printf("Loaded %s: %d pixels\n", name.c_str(), n);
} }
continue; continue;
} }
try { try {
addFileInfo(names[i]); addFileInfo(name);
} catch( std::exception& e ) {} } catch(std::exception& e) {}
} }
// Where multiple shots exist for same group, move filename to list // Where multiple shots exist for same group, move filename to list
for( dfList_t::iterator iter = dfList.begin(); iter != dfList.end(); ++iter ) { for (auto &df : dfList) {
dfInfo &i = iter->second; dfInfo &i = df.second;
if( !i.pathNames.empty() && !i.pathname.empty() ) { if (!i.pathNames.empty() && !i.pathname.empty()) {
i.pathNames.push_back( i.pathname ); i.pathNames.push_back(i.pathname);
i.pathname.clear(); i.pathname.clear();
} }
if( settings->verbose ) { if (settings->verbose) {
if( !i.pathname.empty() ) { if (!i.pathname.empty()) {
printf( "%s: %s\n", i.key().c_str(), i.pathname.c_str()); printf("%s: %s\n", i.key().c_str(), i.pathname.c_str());
} else { } else {
printf( "%s: MEAN of \n ", i.key().c_str()); printf("%s: MEAN of \n ", i.key().c_str());
for(std::list<Glib::ustring>::iterator path = i.pathNames.begin(); path != i.pathNames.end(); ++path) { for (std::list<Glib::ustring>::iterator path = i.pathNames.begin(); path != i.pathNames.end(); ++path) {
printf("%s, ", path->c_str()); printf("%s, ", path->c_str());
} }
@ -345,9 +396,140 @@ void DFManager::init(const Glib::ustring& pathname)
return; return;
} }
dfInfo* DFManager::addFileInfo (const Glib::ustring& filename, bool pool) void rtengine::DFManager::Implementation::getStat(int& totFiles, int& totTemplates) const
{ {
auto ext = getFileExtension(filename); totFiles = 0;
totTemplates = 0;
for (const auto &df : dfList) {
const dfInfo &i = df.second;
if (i.pathname.empty()) {
totTemplates++;
totFiles += i.pathNames.size();
} else {
totFiles++;
}
}
}
/* The search for the best match is twofold:
* if perfect matches for iso and shutter are found, then the list is scanned for lesser distance in time
* otherwise if no match is found, the whole list is searched for lesser distance in iso and shutter
*/
const rtengine::RawImage* rtengine::DFManager::Implementation::searchDarkFrame(const std::string& mak, const std::string& mod, int iso, double shut, time_t t)
{
dfInfo* df = find(toUppercase(mak), toUppercase(mod), iso, shut, t);
if (df) {
return df->getRawImage();
} else {
return nullptr;
}
}
const rtengine::RawImage* rtengine::DFManager::Implementation::searchDarkFrame(const Glib::ustring& filename)
{
for (auto& df : dfList) {
if (df.second.pathname.compare(filename) == 0) {
return df.second.getRawImage();
}
}
dfInfo *df = addFileInfo(filename, false);
if (df) {
return df->getRawImage();
}
return nullptr;
}
const std::vector<rtengine::badPix>* rtengine::DFManager::Implementation::getHotPixels(const Glib::ustring& filename)
{
for (auto& df : dfList) {
if (df.second.pathname.compare(filename) == 0) {
return &df.second.getHotPixels();
}
}
return nullptr;
}
const std::vector<rtengine::badPix>* rtengine::DFManager::Implementation::getHotPixels(const std::string& mak, const std::string& mod, int iso, double shut, time_t t)
{
dfInfo* df = find(toUppercase(mak), toUppercase(mod), iso, shut, t);
if (df) {
if (settings->verbose) {
if (!df->pathname.empty()) {
printf("Searched hotpixels from %s\n", df->pathname.c_str());
} else {
if (!df->pathNames.empty()) {
printf("Searched hotpixels from template (first %s)\n", df->pathNames.begin()->c_str());
}
}
}
return &df->getHotPixels();
} else {
return nullptr;
}
}
const std::vector<rtengine::badPix>* rtengine::DFManager::Implementation::getBadPixels(const std::string& mak, const std::string& mod, const std::string& serial) const
{
bpList_t::const_iterator iter;
bool found = false;
if (!serial.empty()) {
// search with serial number first
std::ostringstream s;
s << mak << " " << mod << " " << serial;
iter = bpList.find(s.str());
if (iter != bpList.end()) {
found = true;
}
if (settings->verbose) {
if (found) {
printf("%s.badpixels found\n", s.str().c_str());
} else {
printf("%s.badpixels not found\n", s.str().c_str());
}
}
}
if (!found) {
// search without serial number
std::ostringstream s;
s << mak << " " << mod;
iter = bpList.find(s.str());
if (iter != bpList.end()) {
found = true;
}
if (settings->verbose) {
if (found) {
printf("%s.badpixels found\n", s.str().c_str());
} else {
printf("%s.badpixels not found\n", s.str().c_str());
}
}
}
if (!found) {
return nullptr;
} else {
return &(iter->second);
}
}
dfInfo* rtengine::DFManager::Implementation::addFileInfo(const Glib::ustring& filename, bool pool)
{
const auto ext = getFileExtension(filename);
if (ext.empty() || !options.is_extention_enabled(ext)) { if (ext.empty() || !options.is_extention_enabled(ext)) {
return nullptr; return nullptr;
@ -376,37 +558,34 @@ dfInfo* DFManager::addFileInfo (const Glib::ustring& filename, bool pool)
} }
RawImage ri(filename); RawImage ri(filename);
int res = ri.loadRaw(false); // Read information about shot
if (res != 0) { if (ri.loadRaw(false) != 0) { // Read information about shot
return nullptr; return nullptr;
} }
dfList_t::iterator iter; if (!pool) {
const dfInfo n(filename, "", "", 0, 0, 0);
if(!pool) { auto iter = dfList.emplace("", n);
dfInfo n(filename, "", "", 0, 0, 0);
iter = dfList.emplace("", n);
return &(iter->second); return &(iter->second);
} }
FramesData idata(filename, std::unique_ptr<RawMetaDataLocation>(new RawMetaDataLocation(ri.get_exifBase(), ri.get_ciffBase(), ri.get_ciffLen())), true); FramesData idata(filename, std::unique_ptr<RawMetaDataLocation>(new RawMetaDataLocation(ri.get_exifBase(), ri.get_ciffBase(), ri.get_ciffLen())), true);
/* Files are added in the map, divided by same maker/model,ISO and shutter*/ /* Files are added in the map, divided by same maker/model,ISO and shutter*/
std::string key(dfInfo::key(((Glib::ustring)idata.getMake()).uppercase(), ((Glib::ustring)idata.getModel()).uppercase(), idata.getISOSpeed(), idata.getShutterSpeed())); std::string key(dfInfo::key(toUppercase(idata.getMake()), toUppercase(idata.getModel()), idata.getISOSpeed(), idata.getShutterSpeed()));
iter = dfList.find(key); auto iter = dfList.find(key);
if(iter == dfList.end()) { if (iter == dfList.end()) {
dfInfo n(filename, ((Glib::ustring)idata.getMake()).uppercase(), ((Glib::ustring)idata.getModel()).uppercase(), idata.getISOSpeed(), idata.getShutterSpeed(), idata.getDateTimeAsTS()); dfInfo n(filename, toUppercase(idata.getMake()), toUppercase(idata.getModel()), idata.getISOSpeed(), idata.getShutterSpeed(), idata.getDateTimeAsTS());
iter = dfList.emplace(key, n); iter = dfList.emplace(key, n);
} else { } else {
while(iter != dfList.end() && iter->second.key() == key && ABS(iter->second.timestamp - idata.getDateTimeAsTS()) > 60 * 60 * 6) { // 6 hour difference while(iter != dfList.end() && iter->second.key() == key && ABS(iter->second.timestamp - idata.getDateTimeAsTS()) > 60 * 60 * 6) { // 6 hour difference
++iter; ++iter;
} }
if(iter != dfList.end()) { if (iter != dfList.end()) {
iter->second.pathNames.push_back(filename); iter->second.pathNames.push_back(filename);
} else { } else {
dfInfo n(filename, ((Glib::ustring)idata.getMake()).uppercase(), ((Glib::ustring)idata.getModel()).uppercase(), idata.getISOSpeed(), idata.getShutterSpeed(), idata.getDateTimeAsTS()); dfInfo n(filename, toUppercase(idata.getMake()), toUppercase(idata.getModel()), idata.getISOSpeed(), idata.getShutterSpeed(), idata.getDateTimeAsTS());
iter = dfList.emplace(key, n); iter = dfList.emplace(key, n);
} }
} }
@ -418,44 +597,23 @@ dfInfo* DFManager::addFileInfo (const Glib::ustring& filename, bool pool)
return nullptr; return nullptr;
} }
void DFManager::getStat( int &totFiles, int &totTemplates) dfInfo* rtengine::DFManager::Implementation::find(const std::string& mak, const std::string& mod, int isospeed, double shut, time_t t)
{ {
totFiles = 0; if (dfList.empty()) {
totTemplates = 0;
for( dfList_t::iterator iter = dfList.begin(); iter != dfList.end(); ++iter ) {
dfInfo &i = iter->second;
if( i.pathname.empty() ) {
totTemplates++;
totFiles += i.pathNames.size();
} else {
totFiles++;
}
}
}
/* The search for the best match is twofold:
* if perfect matches for iso and shutter are found, then the list is scanned for lesser distance in time
* otherwise if no match is found, the whole list is searched for lesser distance in iso and shutter
*/
dfInfo* DFManager::find( const std::string &mak, const std::string &mod, int isospeed, double shut, time_t t )
{
if( dfList.empty() ) {
return nullptr; return nullptr;
} }
std::string key( dfInfo::key(mak, mod, isospeed, shut) ); const std::string key(dfInfo::key(mak, mod, isospeed, shut));
dfList_t::iterator iter = dfList.find( key ); dfList_t::iterator iter = dfList.find(key);
if( iter != dfList.end() ) { if (iter != dfList.end()) {
dfList_t::iterator bestMatch = iter; dfList_t::iterator bestMatch = iter;
time_t bestDeltaTime = ABS(iter->second.timestamp - t); time_t bestDeltaTime = ABS(iter->second.timestamp - t);
for(++iter; iter != dfList.end() && !key.compare( iter->second.key() ); ++iter ) { for (++iter; iter != dfList.end() && !key.compare(iter->second.key()); ++iter) {
time_t d = ABS(iter->second.timestamp - t ); const time_t d = ABS(iter->second.timestamp - t);
if( d < bestDeltaTime ) { if (d < bestDeltaTime) {
bestMatch = iter; bestMatch = iter;
bestDeltaTime = d; bestDeltaTime = d;
} }
@ -465,12 +623,12 @@ dfInfo* DFManager::find( const std::string &mak, const std::string &mod, int iso
} else { } else {
iter = dfList.begin(); iter = dfList.begin();
dfList_t::iterator bestMatch = iter; dfList_t::iterator bestMatch = iter;
double bestD = iter->second.distance( mak, mod, isospeed, shut ); double bestD = iter->second.distance(mak, mod, isospeed, shut);
for( ++iter; iter != dfList.end(); ++iter ) { for (++iter; iter != dfList.end(); ++iter) {
double d = iter->second.distance( mak, mod, isospeed, shut ); const double d = iter->second.distance(mak, mod, isospeed, shut);
if( d < bestD ) { if (d < bestD) {
bestD = d; bestD = d;
bestMatch = iter; bestMatch = iter;
} }
@ -480,170 +638,107 @@ dfInfo* DFManager::find( const std::string &mak, const std::string &mod, int iso
} }
} }
RawImage* DFManager::searchDarkFrame( const std::string &mak, const std::string &mod, int iso, double shut, time_t t ) int rtengine::DFManager::Implementation::scanBadPixelsFile(const Glib::ustring& filename)
{
dfInfo *df = find( ((Glib::ustring)mak).uppercase(), ((Glib::ustring)mod).uppercase(), iso, shut, t );
if( df ) {
return df->getRawImage();
} else {
return nullptr;
}
}
RawImage* DFManager::searchDarkFrame( const Glib::ustring filename )
{
for ( dfList_t::iterator iter = dfList.begin(); iter != dfList.end(); ++iter ) {
if( iter->second.pathname.compare( filename ) == 0 ) {
return iter->second.getRawImage();
}
}
dfInfo *df = addFileInfo( filename, false );
if(df) {
return df->getRawImage();
}
return nullptr;
}
std::vector<badPix> *DFManager::getHotPixels ( const Glib::ustring filename )
{
for ( dfList_t::iterator iter = dfList.begin(); iter != dfList.end(); ++iter ) {
if( iter->second.pathname.compare( filename ) == 0 ) {
return &iter->second.getHotPixels();
}
}
return nullptr;
}
std::vector<badPix> *DFManager::getHotPixels ( const std::string &mak, const std::string &mod, int iso, double shut, time_t t )
{
dfInfo *df = find( ((Glib::ustring)mak).uppercase(), ((Glib::ustring)mod).uppercase(), iso, shut, t );
if( df ) {
if( settings->verbose ) {
if( !df->pathname.empty() ) {
printf( "Searched hotpixels from %s\n", df->pathname.c_str());
} else {
if( !df->pathNames.empty() ) {
printf( "Searched hotpixels from template (first %s)\n", df->pathNames.begin()->c_str());
}
}
}
return &df->getHotPixels();
} else {
return nullptr;
}
}
int DFManager::scanBadPixelsFile( Glib::ustring filename )
{ {
FILE *file = ::fopen( filename.c_str(), "r" ); FILE *file = ::fopen( filename.c_str(), "r" );
if( !file ) { if (!file) {
return false; return 0;
} }
size_t lastdot = filename.find_last_of ('.'); const auto lastdot = filename.find_last_of('.');
size_t dirpos1 = filename.find_last_of ('/'); auto dirpos1 = filename.find_last_of('/');
size_t dirpos2 = filename.find_last_of ('\\'); auto dirpos2 = filename.find_last_of('\\');
if( dirpos1 == Glib::ustring::npos && dirpos2 == Glib::ustring::npos ) { if (dirpos1 == Glib::ustring::npos && dirpos2 == Glib::ustring::npos) {
dirpos1 = 0; dirpos1 = 0;
} else if( dirpos1 != Glib::ustring::npos && dirpos2 != Glib::ustring::npos ) { } else if (dirpos1 != Glib::ustring::npos && dirpos2 != Glib::ustring::npos) {
dirpos1 = (dirpos1 > dirpos2 ? dirpos1 : dirpos2); dirpos1 = (dirpos1 > dirpos2 ? dirpos1 : dirpos2);
} else if( dirpos1 == Glib::ustring::npos ) { } else if (dirpos1 == Glib::ustring::npos) {
dirpos1 = dirpos2; dirpos1 = dirpos2;
} }
std::string makmodel(filename, dirpos1 + 1, lastdot - (dirpos1 + 1) ); const std::string makmodel(filename, dirpos1 + 1, lastdot - (dirpos1 + 1));
std::vector<badPix> bp; std::vector<badPix> bp;
char line[256]; char line[256];
if(fgets(line, sizeof(line), file )) { if (fgets(line, sizeof(line), file)) {
int x, y; int x, y;
int offset = 0; int offset = 0;
int numparms = sscanf(line, "%d %d", &x, &y); int numparms = sscanf(line, "%d %d", &x, &y);
if( numparms == 1 ) { // only one number in first line means, that this is the offset. if (numparms == 1) { // only one number in first line means, that this is the offset.
offset = x; offset = x;
} else if(numparms == 2) { } else if (numparms == 2) {
bp.emplace_back(x + offset, y + offset); bp.emplace_back(x + offset, y + offset);
} }
while( fgets(line, sizeof(line), file ) ) { while(fgets(line, sizeof(line), file)) {
if( sscanf(line, "%d %d", &x, &y) == 2 ) { if (sscanf(line, "%d %d", &x, &y) == 2) {
bp.emplace_back(x + offset, y + offset); bp.emplace_back(x + offset, y + offset);
} }
} }
} }
int numPixels = bp.size(); const int numPixels = bp.size();
if( numPixels > 0 ) { if (numPixels > 0) {
bpList[ makmodel ] = bp; bpList[makmodel] = bp;
} }
fclose(file); fclose(file);
return numPixels; return numPixels;
} }
std::vector<badPix> *DFManager::getBadPixels ( const std::string &mak, const std::string &mod, const std::string &serial) rtengine::DFManager& rtengine::DFManager::getInstance()
{ {
bpList_t::iterator iter; static DFManager instance;
bool found = false; return instance;
if( !serial.empty() ) {
// search with serial number first
std::ostringstream s;
s << mak << " " << mod << " " << serial;
iter = bpList.find( s.str() );
if( iter != bpList.end() ) {
found = true;
}
if( settings->verbose ) {
if(found) {
printf("%s.badpixels found\n", s.str().c_str());
} else {
printf("%s.badpixels not found\n", s.str().c_str());
}
}
}
if(!found) {
// search without serial number
std::ostringstream s;
s << mak << " " << mod;
iter = bpList.find( s.str() );
if( iter != bpList.end() ) {
found = true;
}
if( settings->verbose ) {
if(found) {
printf("%s.badpixels found\n", s.str().c_str());
} else {
printf("%s.badpixels not found\n", s.str().c_str());
}
}
}
if(!found) {
return nullptr;
} else {
return &(iter->second);
}
} }
// Global variable void rtengine::DFManager::init(const Glib::ustring& pathname)
DFManager dfm; {
implementation->init(pathname);
} }
Glib::ustring rtengine::DFManager::getPathname() const
{
return implementation->getPathname();
}
void rtengine::DFManager::getStat(int& totFiles, int& totTemplates) const
{
implementation->getStat(totFiles, totTemplates);
}
const rtengine::RawImage* rtengine::DFManager::searchDarkFrame(const std::string& mak, const std::string& mod, int iso, double shut, time_t t)
{
return implementation->searchDarkFrame(mak, mod, iso, shut, t);
}
const rtengine::RawImage* rtengine::DFManager::searchDarkFrame(const Glib::ustring& filename)
{
return implementation->searchDarkFrame(filename);
}
const std::vector<rtengine::badPix>* rtengine::DFManager::getHotPixels(const std::string& mak, const std::string& mod, int iso, double shut, time_t t)
{
return implementation->getHotPixels(mak, mod, iso, shut, t);
}
const std::vector<rtengine::badPix>* rtengine::DFManager::getHotPixels(const Glib::ustring& filename)
{
return implementation->getHotPixels(filename);
}
const std::vector<rtengine::badPix>* rtengine::DFManager::getBadPixels(const std::string& mak, const std::string& mod, const std::string& serial) const
{
return implementation->getBadPixels(mak, mod, serial);
}
rtengine::DFManager::DFManager() :
implementation(new Implementation)
{
}
rtengine::DFManager::~DFManager() = default;

View File

@ -18,89 +18,40 @@
*/ */
#pragma once #pragma once
#include <cmath> #include <memory>
#include <list>
#include <map>
#include <string> #include <string>
#include <vector>
#include <glibmm/ustring.h> #include <glibmm/ustring.h>
#include "pixelsmap.h"
namespace rtengine namespace rtengine
{ {
struct badPix;
class RawImage; class RawImage;
class dfInfo final
{
public:
Glib::ustring pathname; // filename of dark frame
std::list<Glib::ustring> pathNames; // other similar dark frames, used for average
std::string maker; ///< manufacturer
std::string model; ///< model
int iso; ///< ISO (gain)
double shutter; ///< shutter or exposure time in sec
time_t timestamp; ///< seconds since 1 Jan 1970
dfInfo(const Glib::ustring &name, const std::string &mak, const std::string &mod, int iso, double shut, time_t t)
: pathname(name), maker(mak), model(mod), iso(iso), shutter(shut), timestamp(t), ri(nullptr) {}
dfInfo( const dfInfo &o)
: pathname(o.pathname), maker(o.maker), model(o.model), iso(o.iso), shutter(o.shutter), timestamp(o.timestamp), ri(nullptr) {}
~dfInfo();
dfInfo &operator =(const dfInfo &o);
bool operator <(const dfInfo &e2) const;
// Calculate virtual distance between two shots; different model return infinite
double distance(const std::string &mak, const std::string &mod, int iso, double shutter) const;
static std::string key(const std::string &mak, const std::string &mod, int iso, double shut );
std::string key()
{
return key( maker, model, iso, shutter);
}
RawImage *getRawImage();
std::vector<badPix> &getHotPixels();
protected:
RawImage *ri; ///< Dark Frame raw data
std::vector<badPix> badPixels; ///< Extracted hot pixels
void updateBadPixelList( RawImage *df );
void updateRawImage();
};
class DFManager final class DFManager final
{ {
public: public:
void init(const Glib::ustring &pathname); static DFManager& getInstance();
Glib::ustring getPathname()
{
return currentPath;
};
void getStat( int &totFiles, int &totTemplate);
RawImage *searchDarkFrame( const std::string &mak, const std::string &mod, int iso, double shut, time_t t );
RawImage *searchDarkFrame( const Glib::ustring filename );
std::vector<badPix> *getHotPixels ( const std::string &mak, const std::string &mod, int iso, double shut, time_t t );
std::vector<badPix> *getHotPixels ( const Glib::ustring filename );
std::vector<badPix> *getBadPixels ( const std::string &mak, const std::string &mod, const std::string &serial);
protected: void init(const Glib::ustring& pathname);
typedef std::multimap<std::string, dfInfo> dfList_t; Glib::ustring getPathname() const;
typedef std::map<std::string, std::vector<badPix> > bpList_t; void getStat(int& totFiles, int& totTemplates) const;
dfList_t dfList; const RawImage* searchDarkFrame(const std::string& mak, const std::string& mod, int iso, double shut, time_t t);
bpList_t bpList; const RawImage* searchDarkFrame(const Glib::ustring& filename);
bool initialized; const std::vector<badPix>* getHotPixels(const std::string& mak, const std::string& mod, int iso, double shut, time_t t);
Glib::ustring currentPath; const std::vector<badPix>* getHotPixels(const Glib::ustring& filename);
dfInfo *addFileInfo(const Glib::ustring &filename, bool pool = true ); const std::vector<badPix>* getBadPixels(const std::string& mak, const std::string& mod, const std::string& serial) const;
dfInfo *find( const std::string &mak, const std::string &mod, int isospeed, double shut, time_t t );
int scanBadPixelsFile( Glib::ustring filename ); private:
DFManager();
~DFManager();
class Implementation;
const std::unique_ptr<Implementation> implementation;
}; };
extern DFManager dfm;
} }

View File

@ -92,7 +92,7 @@ int init (const Settings* s, const Glib::ustring& baseDir, const Glib::ustring&
#pragma omp section #pragma omp section
#endif #endif
{ {
dfm.init(s->darkFramesPath); DFManager::getInstance().init(s->darkFramesPath);
} }
#ifdef _OPENMP #ifdef _OPENMP
#pragma omp section #pragma omp section

View File

@ -617,6 +617,7 @@ struct local_params {
float laplacexp; float laplacexp;
float balanexp; float balanexp;
float linear; float linear;
int fullim;
int expmet; int expmet;
int softmet; int softmet;
int blurmet; int blurmet;
@ -895,7 +896,15 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
lp.laplacexp = locallab.spots.at(sp).laplacexp; lp.laplacexp = locallab.spots.at(sp).laplacexp;
lp.balanexp = locallab.spots.at(sp).balanexp; lp.balanexp = locallab.spots.at(sp).balanexp;
lp.linear = locallab.spots.at(sp).linear; lp.linear = locallab.spots.at(sp).linear;
if (locallab.spots.at(sp).spotMethod == "norm") {
lp.fullim = 0;
} else if(locallab.spots.at(sp).spotMethod == "exc"){
lp.fullim = 1;
} else if (locallab.spots.at(sp).spotMethod == "full"){
lp.fullim = 2;
}
// printf("Lpfullim=%i\n", lp.fullim);
lp.fftColorMask = locallab.spots.at(sp).fftColorMask; lp.fftColorMask = locallab.spots.at(sp).fftColorMask;
lp.prevdE = prevDeltaE; lp.prevdE = prevDeltaE;
lp.showmaskcolmet = llColorMask; lp.showmaskcolmet = llColorMask;
@ -3316,7 +3325,7 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L
} }
} }
} }
//others "Lab" threatment...to adapt //others "Lab" treatment...to adapt
if(wavcurvejz || mjjz != 0.f || lp.mCjz != 0.f) {//local contrast wavelet and clarity if(wavcurvejz || mjjz != 0.f || lp.mCjz != 0.f) {//local contrast wavelet and clarity
#ifdef _OPENMP #ifdef _OPENMP
@ -3680,7 +3689,7 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L
if(mocam == 0 || mocam == 1 || call == 1 || call == 2 || call == 10) {//call=2 vibrance warm-cool - call = 10 take into account "mean luminance Yb for Jz if(mocam == 0 || mocam == 1 || call == 1 || call == 2 || call == 10) {//call=2 vibrance warm-cool - call = 10 take into account "mean luminance Yb for Jz
//begin ciecam //begin ciecam
if (settings->verbose && (mocam == 0 || mocam == 1 || call == 1)) {//display only if choice cam16 if (settings->verbose && (mocam == 0 || mocam == 1 || call == 1)) {//display only if choice cam16
//informations on Cam16 scene conditions - allows user to see choices's incidences //information on Cam16 scene conditions - allows user to see choices's incidences
float maxicam = -1000.f; float maxicam = -1000.f;
float maxicamq = -1000.f; float maxicamq = -1000.f;
float maxisat = -1000.f; float maxisat = -1000.f;
@ -8089,7 +8098,8 @@ void ImProcFunctions::InverseColorLight_Local(bool tonequ, bool tonecurv, int sp
void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transformed, int cx, int cy, int oW, int oH, int sk, double & huerefblur, double & chromarefblur, double & lumarefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref, float & avg, const LocwavCurve & locwavCurveden, bool locwavdenutili) void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transformed, int cx, int cy, int oW, int oH, int sk, double & huerefblur, double & chromarefblur, double & lumarefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref, float & avg, const LocwavCurve & locwavCurveden, bool locwavdenutili)
{ {
if (params->locallab.enabled) { if (params->locallab.enabled) {
//always calculate hueref, chromaref, lumaref before others operations use in normal mode for all modules exceprt denoise // always calculate hueref, chromaref, lumaref before others operations
// use in normal mode for all modules except denoise
struct local_params lp; struct local_params lp;
calcLocalParams(sp, oW, oH, params->locallab, lp, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, locwavCurveden, locwavdenutili); calcLocalParams(sp, oW, oH, params->locallab, lp, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, locwavCurveden, locwavdenutili);
int begy = lp.yc - lp.lyT; int begy = lp.yc - lp.lyT;
@ -8317,10 +8327,20 @@ const int fftw_size[] = {18144, 18000, 17920, 17836, 17820, 17640, 17600, 17550,
int N_fftwsize = sizeof(fftw_size) / sizeof(fftw_size[0]); int N_fftwsize = sizeof(fftw_size) / sizeof(fftw_size[0]);
void optfft(int N_fftwsize, int &bfh, int &bfw, int &bfhr, int &bfwr, struct local_params& lp, int H, int W, int &xstart, int &ystart, int &xend, int &yend, int cx, int cy) void optfft(int N_fftwsize, int &bfh, int &bfw, int &bfhr, int &bfwr, struct local_params& lp, int H, int W, int &xstart, int &ystart, int &xend, int &yend, int cx, int cy, int fulima)
{ {
int ftsizeH = 1; int ftsizeH = 1;
int ftsizeW = 1; int ftsizeW = 1;
int deltaw = 150;
int deltah = 150;
if(W < 4000) {
deltaw = 80;
}
if(H < 4000) {
deltah = 80;
}
for (int ft = 0; ft < N_fftwsize; ft++) { //find best values for (int ft = 0; ft < N_fftwsize; ft++) { //find best values
if (fftw_size[ft] <= bfh) { if (fftw_size[ft] <= bfh) {
@ -8335,6 +8355,31 @@ void optfft(int N_fftwsize, int &bfh, int &bfw, int &bfhr, int &bfwr, struct loc
break; break;
} }
} }
if(fulima == 2) {// if full image, the ftsizeH and ftsizeW is a bit larger (about 10 to 200 pixels) than the image dimensions so that it is fully processed (consumes a bit more resources)
for (int ftfu = 0; ftfu < N_fftwsize; ftfu++) { //find best values
if (fftw_size[ftfu] <= (H + deltah)) {
ftsizeH = fftw_size[ftfu];
break;
}
}
for (int ftfu = 0; ftfu < N_fftwsize; ftfu++) { //find best values
if (fftw_size[ftfu] <= (W + deltaw)) {
ftsizeW = fftw_size[ftfu];
break;
}
}
}
if (settings->verbose) {
if(fulima == 2) {
printf("Full image: ftsizeWF=%i ftsizeH=%i\n", ftsizeW, ftsizeH);
} else {
printf("ftsizeW=%i ftsizeH=%i\n", ftsizeW, ftsizeH);
}
}
//optimize with size fftw //optimize with size fftw
bool reduW = false; bool reduW = false;
@ -8373,7 +8418,6 @@ void optfft(int N_fftwsize, int &bfh, int &bfw, int &bfhr, int &bfwr, struct loc
reduW = true; reduW = true;
exec = false; exec = false;
} }
//new values optimized //new values optimized
ystart = rtengine::max(static_cast<int>(lp.yc - lp.lyT) - cy, 0); ystart = rtengine::max(static_cast<int>(lp.yc - lp.lyT) - cy, 0);
yend = rtengine::min(static_cast<int>(lp.yc + lp.ly) - cy, H); yend = rtengine::min(static_cast<int>(lp.yc + lp.ly) - cy, H);
@ -8552,7 +8596,7 @@ void ImProcFunctions::transit_shapedetect2(int sp, float meantm, float stdtm, in
int bfhr = bfh; int bfhr = bfh;
int bfwr = bfw; int bfwr = bfw;
if (lp.blurcolmask >= 0.25f && lp.fftColorMask && call == 2) { if (lp.blurcolmask >= 0.25f && lp.fftColorMask && call == 2) {
optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy); optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy, lp.fullim);
} }
bfh = bfhr; bfh = bfhr;
@ -10495,7 +10539,7 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float
} }
//gamma and slope residual image - be carefull memory //gamma and slope residual image - be careful memory
bool tonecur = false; bool tonecur = false;
const Glib::ustring profile = params->icm.workingProfile; const Glib::ustring profile = params->icm.workingProfile;
bool isworking = (profile == "sRGB" || profile == "Adobe RGB" || profile == "ProPhoto" || profile == "WideGamut" || profile == "BruceRGB" || profile == "Beta RGB" || profile == "BestRGB" || profile == "Rec2020" || profile == "ACESp0" || profile == "ACESp1"); bool isworking = (profile == "sRGB" || profile == "Adobe RGB" || profile == "ProPhoto" || profile == "WideGamut" || profile == "BruceRGB" || profile == "Beta RGB" || profile == "BestRGB" || profile == "Rec2020" || profile == "ACESp0" || profile == "ACESp1");
@ -10542,7 +10586,7 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float
cmsHTRANSFORM dummy = nullptr; cmsHTRANSFORM dummy = nullptr;
int ill =0; int ill =0;
workingtrc(tmpImage, tmpImage, W_Level, H_Level, -5, prof, 2.4, 12.92310, ill, 0, dummy, true, false, false); workingtrc(tmpImage, tmpImage, W_Level, H_Level, -5, prof, 2.4, 12.92310, ill, 0, dummy, true, false, false);
workingtrc(tmpImage, tmpImage, W_Level, H_Level, 1, prof, lp.residgam, lp.residslop, ill, 0, dummy, false, true, true);//be carefull no gamut control workingtrc(tmpImage, tmpImage, W_Level, H_Level, 1, prof, lp.residgam, lp.residslop, ill, 0, dummy, false, true, true);//be careful no gamut control
rgb2lab(*tmpImage, *labresid, params->icm.workingProfile); rgb2lab(*tmpImage, *labresid, params->icm.workingProfile);
delete tmpImage; delete tmpImage;
@ -10925,7 +10969,7 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
float gamma = lp.noisegam; float gamma = lp.noisegam;
rtengine::GammaValues g_a; //gamma parameters rtengine::GammaValues g_a; //gamma parameters
double pwr = 1.0 / (double) lp.noisegam;//default 3.0 - gamma Lab double pwr = 1.0 / (double) lp.noisegam;//default 3.0 - gamma Lab
double ts = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab double ts = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope
if(gamma > 1.f) { if(gamma > 1.f) {
@ -11640,7 +11684,7 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
float gamma = lp.noisegam; float gamma = lp.noisegam;
rtengine::GammaValues g_a; //gamma parameters rtengine::GammaValues g_a; //gamma parameters
double pwr = 1.0 / (double) lp.noisegam;//default 3.0 - gamma Lab double pwr = 1.0 / (double) lp.noisegam;//default 3.0 - gamma Lab
double ts = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab double ts = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope
if(gamma > 1.f) { if(gamma > 1.f) {
#ifdef _OPENMP #ifdef _OPENMP
@ -13660,7 +13704,7 @@ void ImProcFunctions::Lab_Local(
if (bfw >= mSP && bfh >= mSP) { if (bfw >= mSP && bfh >= mSP) {
if (lp.blurmet == 0 && (fft || lp.rad > 30.0)) { if (lp.blurmet == 0 && (fft || lp.rad > 30.0)) {
optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy); optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy, lp.fullim);
} }
const std::unique_ptr<LabImage> bufgbi(new LabImage(TW, TH)); const std::unique_ptr<LabImage> bufgbi(new LabImage(TW, TH));
@ -14977,7 +15021,7 @@ void ImProcFunctions::Lab_Local(
if (bfw >= mSP && bfh > mSP) { if (bfw >= mSP && bfh > mSP) {
if (lp.ftwreti) { if (lp.ftwreti) {
optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy); optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy, lp.fullim);
} }
array2D<float> buflight(bfw, bfh); array2D<float> buflight(bfw, bfh);
@ -15732,7 +15776,7 @@ void ImProcFunctions::Lab_Local(
float gamma1 = params->locallab.spots.at(sp).vibgam; float gamma1 = params->locallab.spots.at(sp).vibgam;
rtengine::GammaValues g_a; //gamma parameters rtengine::GammaValues g_a; //gamma parameters
double pwr1 = 1.0 / (double) gamma1;//default 3.0 - gamma Lab double pwr1 = 1.0 / (double) gamma1;//default 3.0 - gamma Lab
double ts1 = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab double ts1 = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
rtengine::Color::calcGamma(pwr1, ts1, g_a); // call to calcGamma with selected gamma and slope rtengine::Color::calcGamma(pwr1, ts1, g_a); // call to calcGamma with selected gamma and slope
if(gamma1 != 1.f) { if(gamma1 != 1.f) {
#ifdef _OPENMP #ifdef _OPENMP
@ -15757,7 +15801,7 @@ void ImProcFunctions::Lab_Local(
// float gamma = params->locallab.spots.at(sp).vibgam; // float gamma = params->locallab.spots.at(sp).vibgam;
// rtengine::GammaValues g_a; //gamma parameters // rtengine::GammaValues g_a; //gamma parameters
// double pwr = 1.0 / (double) gamma;//default 3.0 - gamma Lab // double pwr = 1.0 / (double) gamma;//default 3.0 - gamma Lab
// double ts = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab // double ts = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
// rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope // rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope
if(gamma1 != 1.f) { if(gamma1 != 1.f) {
@ -16141,7 +16185,7 @@ void ImProcFunctions::Lab_Local(
if (bfw >= mSP && bfh >= mSP) { if (bfw >= mSP && bfh >= mSP) {
if (lp.softmet == 1) { if (lp.softmet == 1) {
optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy); optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy, lp.fullim);
} }
const std::unique_ptr<LabImage> bufexporig(new LabImage(bfw, bfh)); const std::unique_ptr<LabImage> bufexporig(new LabImage(bfw, bfh));
@ -16267,7 +16311,7 @@ void ImProcFunctions::Lab_Local(
if (bfw >= mSPwav && bfh >= mSPwav) {//avoid too small spot for wavelet if (bfw >= mSPwav && bfh >= mSPwav) {//avoid too small spot for wavelet
if (lp.ftwlc) { if (lp.ftwlc) {
optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy); optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy, lp.fullim);
} }
std::unique_ptr<LabImage> bufmaskblurlc; std::unique_ptr<LabImage> bufmaskblurlc;
@ -16483,7 +16527,7 @@ void ImProcFunctions::Lab_Local(
float gamma = lp.gamlc; float gamma = lp.gamlc;
rtengine::GammaValues g_a; //gamma parameters rtengine::GammaValues g_a; //gamma parameters
double pwr = 1.0 / (double) lp.gamlc;//default 3.0 - gamma Lab double pwr = 1.0 / (double) lp.gamlc;//default 3.0 - gamma Lab
double ts = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab double ts = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope
if(gamma != 1.f) { if(gamma != 1.f) {
@ -16782,7 +16826,7 @@ void ImProcFunctions::Lab_Local(
float gamma1 = params->locallab.spots.at(sp).shargam; float gamma1 = params->locallab.spots.at(sp).shargam;
rtengine::GammaValues g_a; //gamma parameters rtengine::GammaValues g_a; //gamma parameters
double pwr1 = 1.0 / (double) gamma1;//default 3.0 - gamma Lab double pwr1 = 1.0 / (double) gamma1;//default 3.0 - gamma Lab
double ts1 = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab double ts1 = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
rtengine::Color::calcGamma(pwr1, ts1, g_a); // call to calcGamma with selected gamma and slope rtengine::Color::calcGamma(pwr1, ts1, g_a); // call to calcGamma with selected gamma and slope
if(gamma1 != 1.f) { if(gamma1 != 1.f) {
#ifdef _OPENMP #ifdef _OPENMP
@ -16808,7 +16852,7 @@ void ImProcFunctions::Lab_Local(
/* /*
float gamma = params->locallab.spots.at(sp).shargam; float gamma = params->locallab.spots.at(sp).shargam;
double pwr = 1.0 / (double) gamma;//default 3.0 - gamma Lab double pwr = 1.0 / (double) gamma;//default 3.0 - gamma Lab
double ts = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab double ts = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope
*/ */
if(gamma1 != 1.f) { if(gamma1 != 1.f) {
@ -16837,7 +16881,7 @@ void ImProcFunctions::Lab_Local(
float gamma1 = params->locallab.spots.at(sp).shargam; float gamma1 = params->locallab.spots.at(sp).shargam;
rtengine::GammaValues g_a; //gamma parameters rtengine::GammaValues g_a; //gamma parameters
double pwr1 = 1.0 / (double) gamma1;//default 3.0 - gamma Lab double pwr1 = 1.0 / (double) gamma1;//default 3.0 - gamma Lab
double ts1 = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab double ts1 = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
rtengine::Color::calcGamma(pwr1, ts1, g_a); // call to calcGamma with selected gamma and slope rtengine::Color::calcGamma(pwr1, ts1, g_a); // call to calcGamma with selected gamma and slope
if(gamma1 != 1.f) { if(gamma1 != 1.f) {
#ifdef _OPENMP #ifdef _OPENMP
@ -16861,7 +16905,7 @@ void ImProcFunctions::Lab_Local(
/* /*
float gamma = params->locallab.spots.at(sp).shargam; float gamma = params->locallab.spots.at(sp).shargam;
double pwr = 1.0 / (double) gamma;//default 3.0 - gamma Lab double pwr = 1.0 / (double) gamma;//default 3.0 - gamma Lab
double ts = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab double ts = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope
*/ */
if(gamma1 != 1.f) { if(gamma1 != 1.f) {
@ -16903,7 +16947,7 @@ void ImProcFunctions::Lab_Local(
float gamma1 = params->locallab.spots.at(sp).shargam; float gamma1 = params->locallab.spots.at(sp).shargam;
rtengine::GammaValues g_a; //gamma parameters rtengine::GammaValues g_a; //gamma parameters
double pwr1 = 1.0 / (double) gamma1;//default 3.0 - gamma Lab double pwr1 = 1.0 / (double) gamma1;//default 3.0 - gamma Lab
double ts1 = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab double ts1 = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
rtengine::Color::calcGamma(pwr1, ts1, g_a); // call to calcGamma with selected gamma and slope rtengine::Color::calcGamma(pwr1, ts1, g_a); // call to calcGamma with selected gamma and slope
if(gamma1 != 1.f) { if(gamma1 != 1.f) {
#ifdef _OPENMP #ifdef _OPENMP
@ -16928,7 +16972,7 @@ void ImProcFunctions::Lab_Local(
/* /*
float gamma = params->locallab.spots.at(sp).shargam; float gamma = params->locallab.spots.at(sp).shargam;
double pwr = 1.0 / (double) gamma;//default 3.0 - gamma Lab double pwr = 1.0 / (double) gamma;//default 3.0 - gamma Lab
double ts = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab double ts = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope
*/ */
if(gamma1 != 1.f) { if(gamma1 != 1.f) {
@ -16983,7 +17027,7 @@ void ImProcFunctions::Lab_Local(
if (bfw >= mSP && bfh >= mSP) { if (bfw >= mSP && bfh >= mSP) {
if (lp.expmet == 1 || lp.expmet == 0) { if (lp.expmet == 1 || lp.expmet == 0) {
optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy); optfft(N_fftwsize, bfh, bfw, bfhr, bfwr, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy, lp.fullim);
} }
const std::unique_ptr<LabImage> bufexporig(new LabImage(bfw, bfh)); const std::unique_ptr<LabImage> bufexporig(new LabImage(bfw, bfh));
@ -17014,7 +17058,7 @@ void ImProcFunctions::Lab_Local(
float gamma1 = lp.gamex; float gamma1 = lp.gamex;
rtengine::GammaValues g_a; //gamma parameters rtengine::GammaValues g_a; //gamma parameters
double pwr1 = 1.0 / (double) lp.gamex;//default 3.0 - gamma Lab double pwr1 = 1.0 / (double) lp.gamex;//default 3.0 - gamma Lab
double ts1 = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab double ts1 = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
rtengine::Color::calcGamma(pwr1, ts1, g_a); // call to calcGamma with selected gamma and slope rtengine::Color::calcGamma(pwr1, ts1, g_a); // call to calcGamma with selected gamma and slope
if(gamma1 != 1.f) { if(gamma1 != 1.f) {
@ -17334,7 +17378,7 @@ void ImProcFunctions::Lab_Local(
float gamma = lp.gamex; float gamma = lp.gamex;
rtengine::GammaValues g_a; //gamma parameters rtengine::GammaValues g_a; //gamma parameters
double pwr = 1.0 / (double) lp.gamex;//default 3.0 - gamma Lab double pwr = 1.0 / (double) lp.gamex;//default 3.0 - gamma Lab
double ts = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab double ts = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope
*/ */
if(gamma1 != 1.f) { if(gamma1 != 1.f) {
@ -17513,7 +17557,7 @@ void ImProcFunctions::Lab_Local(
if (bfw >= mSP && bfh >= mSP) { if (bfw >= mSP && bfh >= mSP) {
if (lp.blurcolmask >= 0.25f && lp.fftColorMask && call == 2) { if (lp.blurcolmask >= 0.25f && lp.fftColorMask && call == 2) {
optfft(N_fftwsize, bfh, bfw, bfh, bfw, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy); optfft(N_fftwsize, bfh, bfw, bfh, bfw, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy, lp.fullim);
} }
std::unique_ptr<LabImage> bufcolorig; std::unique_ptr<LabImage> bufcolorig;
@ -17573,7 +17617,7 @@ void ImProcFunctions::Lab_Local(
float gamma1 = lp.gamc; float gamma1 = lp.gamc;
rtengine::GammaValues g_a; //gamma parameters rtengine::GammaValues g_a; //gamma parameters
double pwr1 = 1.0 / (double) lp.gamc;//default 3.0 - gamma Lab double pwr1 = 1.0 / (double) lp.gamc;//default 3.0 - gamma Lab
double ts1 = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab double ts1 = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
rtengine::Color::calcGamma(pwr1, ts1, g_a); // call to calcGamma with selected gamma and slope rtengine::Color::calcGamma(pwr1, ts1, g_a); // call to calcGamma with selected gamma and slope
if(gamma1 != 1.f) { if(gamma1 != 1.f) {
@ -18601,7 +18645,7 @@ void ImProcFunctions::Lab_Local(
float gamma = lp.gamc; float gamma = lp.gamc;
rtengine::GammaValues g_a; //gamma parameters rtengine::GammaValues g_a; //gamma parameters
double pwr = 1.0 / (double) lp.gamc;//default 3.0 - gamma Lab double pwr = 1.0 / (double) lp.gamc;//default 3.0 - gamma Lab
double ts = 9.03296;//always the same 'slope' in the extrem shadows - slope Lab double ts = 9.03296;//always the same 'slope' in the extreme shadows - slope Lab
rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope rtengine::Color::calcGamma(pwr, ts, g_a); // call to calcGamma with selected gamma and slope
*/ */
if(gamma1 != 1.f) { if(gamma1 != 1.f) {
@ -18783,7 +18827,7 @@ void ImProcFunctions::Lab_Local(
if (bfw >= mSP && bfh >= mSP) { if (bfw >= mSP && bfh >= mSP) {
if (lp.blurma >= 0.25f && lp.fftma && call == 2) { if (lp.blurma >= 0.25f && lp.fftma && call == 2) {
optfft(N_fftwsize, bfh, bfw, bfh, bfw, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy); optfft(N_fftwsize, bfh, bfw, bfh, bfw, lp, original->H, original->W, xstart, ystart, xend, yend, cx, cy, lp.fullim);
} }
array2D<float> blechro(bfw, bfh); array2D<float> blechro(bfw, bfh);
array2D<float> ble(bfw, bfh); array2D<float> ble(bfw, bfh);

View File

@ -301,17 +301,18 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const
} }
if (params->wavelet.denmethod == "equ") { cp.denmet = 4;
cp.denmet = 0; //if (params->wavelet.denmethod == "equ") {
} else if (params->wavelet.denmethod == "high") { // cp.denmet = 0;
cp.denmet = 1; //} else if (params->wavelet.denmethod == "high") {
} else if (params->wavelet.denmethod == "low") { // cp.denmet = 1;
cp.denmet = 2; //} else if (params->wavelet.denmethod == "low") {
} else if (params->wavelet.denmethod == "12high") { // cp.denmet = 2;
cp.denmet = 3; //} else if (params->wavelet.denmethod == "12high") {
} else if (params->wavelet.denmethod == "12low") { // cp.denmet = 3;
cp.denmet = 4; //} else if (params->wavelet.denmethod == "12low") {
} // cp.denmet = 4;
//}
if (params->wavelet.mixmethod == "nois") { if (params->wavelet.mixmethod == "nois") {
cp.mixmet = 0; cp.mixmet = 0;
@ -658,7 +659,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const
maxlevelcrop = 10; maxlevelcrop = 10;
} }
// adap maximum level wavelet to size of crop // adapt maximum level wavelet to size of crop
if (minwin * skip < 1024) { if (minwin * skip < 1024) {
maxlevelcrop = 9; //sampling wavelet 512 maxlevelcrop = 9; //sampling wavelet 512
} }
@ -694,7 +695,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const
levwav = rtengine::min(maxlevelcrop, levwav); levwav = rtengine::min(maxlevelcrop, levwav);
// I suppress this fonctionality ==> crash for level < 3 // I suppress this functionality ==> crash for level < 3
if (levwav < 1) { if (levwav < 1) {
return; // nothing to do return; // nothing to do
} }

View File

@ -21,10 +21,14 @@
namespace rtengine namespace rtengine
{ {
// Aligned so the first entry starts on line 30 // Aligned so the first entry starts on line 30
enum ProcEventCode { enum ProcEventCode {
EvPhotoLoaded = 0, EvPhotoLoaded = 0,
EvProfileLoaded = 1, obsolete_1 = 1,
EvProfileChanged = 2, EvProfileChanged = 2,
EvHistoryBrowsed = 3, EvHistoryBrowsed = 3,
EvBrightness = 4, EvBrightness = 4,
@ -38,9 +42,9 @@ enum ProcEventCode {
EvClip = 12, EvClip = 12,
EvLBrightness = 13, EvLBrightness = 13,
EvLContrast = 14, EvLContrast = 14,
EvLBlack = 15, obsolete_15 = 15, // obsolete
EvLHLCompr = 16, obsolete_16 = 16, // obsolete
EvLSHCompr = 17, obsolete_17 = 17, // obsolete
EvLLCurve = 18, EvLLCurve = 18,
EvShrEnabled = 19, EvShrEnabled = 19,
EvShrRadius = 20, EvShrRadius = 20,
@ -77,7 +81,7 @@ enum ProcEventCode {
EvSHShadows = 51, EvSHShadows = 51,
EvSHHLTonalW = 52, EvSHHLTonalW = 52,
EvSHSHTonalW = 53, EvSHSHTonalW = 53,
EvSHLContrast = 54, obsolete_54 = 54, // obsolete
EvSHRadius = 55, EvSHRadius = 55,
EvCTRotate = 56, EvCTRotate = 56,
EvCTHFlip = 57, EvCTHFlip = 57,
@ -89,7 +93,7 @@ enum ProcEventCode {
EvCrop = 63, EvCrop = 63,
EvCACorr = 64, EvCACorr = 64,
EvHREnabled = 65, EvHREnabled = 65,
obsolete_66 = 66, //obsolete obsolete_66 = 66, // obsolete
EvHRMethod = 67, EvHRMethod = 67,
EvWProfile = 68, EvWProfile = 68,
EvOProfile = 69, EvOProfile = 69,
@ -100,12 +104,12 @@ enum ProcEventCode {
EvResizeMethod = 74, EvResizeMethod = 74,
EvExif = 75, EvExif = 75,
EvIPTC = 76, EvIPTC = 76,
EvResizeSpec = 77, obsolete_77 = 77, // obsolete
EvResizeWidth = 78, EvResizeWidth = 78,
EvResizeHeight = 79, EvResizeHeight = 79,
EvResizeEnabled = 80, EvResizeEnabled = 80,
EvProfileChangeNotification = 81, EvProfileChangeNotification = 81,
EvSHHighQuality = 82, obsolete_82 = 82, // obsolete
EvPerspCorr = 83, EvPerspCorr = 83,
EvLCPFile = 84, EvLCPFile = 84,
EvRGBrCurveLumamode = 85, EvRGBrCurveLumamode = 85,
@ -153,12 +157,12 @@ enum ProcEventCode {
EvFlatFieldBlurRadius = 127, EvFlatFieldBlurRadius = 127,
EvFlatFieldBlurType = 128, EvFlatFieldBlurType = 128,
EvAutoDIST = 129, EvAutoDIST = 129,
EvDPDNLumCurve = 130, obsolete_130 = 130, // obsolete
EvDPDNChromCurve = 131, obsolete_131 = 131, // obsolete
EvGAMMA = 132, obsolete_132 = 132, // obsolete
EvGAMPOS = 133, obsolete_133 = 133, // obsolete
EvGAMFREE = 134, obsolete_134 = 134, // obsolete
EvSLPOS = 135, obsolete_135 = 135, // obsolete
EvPreProcessExpBlackzero = 136, EvPreProcessExpBlackzero = 136,
EvPreProcessExpBlackone = 137, EvPreProcessExpBlackone = 137,
EvPreProcessExpBlacktwo = 138, EvPreProcessExpBlacktwo = 138,
@ -231,7 +235,7 @@ enum ProcEventCode {
EvCATAutoAdap = 205, EvCATAutoAdap = 205,
EvPFCurve = 206, EvPFCurve = 206,
EvWBequal = 207, EvWBequal = 207,
EvWBequalbo = 208, obsolete_208 = 208,
EvGradientDegree = 209, EvGradientDegree = 209,
EvGradientEnabled = 210, EvGradientEnabled = 210,
EvPCVignetteStrength = 211, EvPCVignetteStrength = 211,
@ -272,7 +276,7 @@ enum ProcEventCode {
EvLLHCurve = 246, EvLLHCurve = 246,
EvLHHCurve = 247, EvLHHCurve = 247,
EvDirPyrEqualizerThreshold = 248, EvDirPyrEqualizerThreshold = 248,
EvDPDNenhance = 249, obsolete_249 = 249,
EvBWMethodalg = 250, EvBWMethodalg = 250,
EvDirPyrEqualizerSkin = 251, EvDirPyrEqualizerSkin = 251,
EvDirPyrEqlgamutlab = 252, EvDirPyrEqlgamutlab = 252,
@ -296,8 +300,8 @@ enum ProcEventCode {
EvColorToningbluehigh = 270, EvColorToningbluehigh = 270,
EvColorToningbalance = 271, EvColorToningbalance = 271,
EvColorToningNeutral = 272, EvColorToningNeutral = 272,
EvColorToningsatlow = 273, obsolete_273 = 273,
EvColorToningsathigh = 274, obsolete_274 = 274,
EvColorToningTwocolor = 275, EvColorToningTwocolor = 275,
EvColorToningNeutralcur = 276, EvColorToningNeutralcur = 276,
EvColorToningLumamode = 277, EvColorToningLumamode = 277,
@ -322,7 +326,7 @@ enum ProcEventCode {
EvDPDNsmet = 296, EvDPDNsmet = 296,
EvPreProcessDeadPixel = 297, EvPreProcessDeadPixel = 297,
EvDPDNCCCurve = 298, EvDPDNCCCurve = 298,
EvDPDNautochroma = 299, obsolete_299 = 299,
EvDPDNLmet = 300, EvDPDNLmet = 300,
EvDPDNCmet = 301, EvDPDNCmet = 301,
EvDPDNC2met = 302, EvDPDNC2met = 302,
@ -431,7 +435,7 @@ enum ProcEventCode {
EvWavNPmet = 405, EvWavNPmet = 405,
EvretinexMethod = 406, EvretinexMethod = 406,
EvLneigh = 407, EvLneigh = 407,
EvLgain = 408, obsolete_408 = 408,
EvLoffs = 409, EvLoffs = 409,
EvLstr = 410, EvLstr = 410,
EvLscal = 411, EvLscal = 411,
@ -495,7 +499,7 @@ enum ProcEventCode {
// EvPixelShiftMedian3 = 469, // EvPixelShiftMedian3 = 469,
EvPixelShiftMotionMethod = 470, EvPixelShiftMotionMethod = 470,
EvPixelShiftSmooth = 471, EvPixelShiftSmooth = 471,
EvPixelShiftLmmse = 472, obsolete_472 = 472,
EvPixelShiftEqualBright = 473, EvPixelShiftEqualBright = 473,
EvPixelShiftEqualBrightChannel = 474, EvPixelShiftEqualBrightChannel = 474,
EvCATtempout = 475, EvCATtempout = 475,
@ -626,7 +630,7 @@ enum ProcEventCode {
Evlocallabstreng = 600, Evlocallabstreng = 600,
Evlocallabsensisf = 601, Evlocallabsensisf = 601,
Evlocallabsharblur = 602, Evlocallabsharblur = 602,
EvLocenalabregion = 603, obsolete_603 = 603,
EvlocallabshowmaskMethod = 604, EvlocallabshowmaskMethod = 604,
EvLocallabSpotSelectedWithMask = 605, EvLocallabSpotSelectedWithMask = 605,
EvlocallabCCmaskshape = 606, EvlocallabCCmaskshape = 606,
@ -870,7 +874,7 @@ enum ProcEventCode {
EvLocenalog = 844, EvLocenalog = 844,
EvLocallabAuto = 845, EvLocallabAuto = 845,
EvlocallabsourceGray = 846, EvlocallabsourceGray = 846,
EvlocallabsourceGrayAuto = 847, obsolete_847 = 847,
EvlocallabAutogray = 848, EvlocallabAutogray = 848,
EvlocallabblackEv = 849, EvlocallabblackEv = 849,
EvlocallabwhiteEv = 850, EvlocallabwhiteEv = 850,
@ -889,7 +893,7 @@ enum ProcEventCode {
Evlocallabsigmadc = 863, Evlocallabsigmadc = 863,
Evlocallabdeltad = 864, Evlocallabdeltad = 864,
EvlocallabwavCurvecomp = 865, EvlocallabwavCurvecomp = 865,
Evlocallabfatres = 866, //Evlocallabfatres = 866,
EvLocallabSpotbalanh = 867, EvLocallabSpotbalanh = 867,
EvlocallabwavCurveden = 868, EvlocallabwavCurveden = 868,
EvlocallabHHmasklcshape = 869, EvlocallabHHmasklcshape = 869,
@ -918,7 +922,7 @@ enum ProcEventCode {
Evlocallabanglog = 892, Evlocallabanglog = 892,
EvLocallabSpotcolorde = 893, EvLocallabSpotcolorde = 893,
// EvlocallabshowmasksharMethod = 894, // EvlocallabshowmasksharMethod = 894,
Evlocallabshowreset = 895, //Evlocallabshowreset = 895,
Evlocallabstrengthw = 896, Evlocallabstrengthw = 896,
Evlocallabradiusw = 897, Evlocallabradiusw = 897,
Evlocallabdetailw = 898, Evlocallabdetailw = 898,
@ -998,7 +1002,7 @@ enum ProcEventCode {
EvLocallabchromaskL = 972, EvLocallabchromaskL = 972,
EvlocallabLmaskshapeL = 973, EvlocallabLmaskshapeL = 973,
Evlocallablightl = 974, Evlocallablightl = 974,
EvlocallabLshapeL = 975, //EvlocallabLshapeL = 975,
Evlocallabcontq = 976, Evlocallabcontq = 976,
Evlocallabsursour = 977, Evlocallabsursour = 977,
Evlocallablightq = 978, Evlocallablightq = 978,
@ -1121,7 +1125,6 @@ enum ProcEventCode {
Evlocallabshjzcie = 1095, Evlocallabshjzcie = 1095,
Evlocallabshthjzcie = 1096, Evlocallabshthjzcie = 1096,
Evlocallabradjzcie = 1097, Evlocallabradjzcie = 1097,
// EvlocallabHHshapejz = 1098,
EvlocallabCHshapejz = 1098, EvlocallabCHshapejz = 1098,
Evlocallabjz100 = 1099, Evlocallabjz100 = 1099,
Evlocallabpqremap = 1100, Evlocallabpqremap = 1100,
@ -1136,14 +1139,6 @@ enum ProcEventCode {
Evlocallabshapecz = 1109, Evlocallabshapecz = 1109,
Evlocallabshapeczjz = 1110, Evlocallabshapeczjz = 1110,
Evlocallabforcejz = 1111, Evlocallabforcejz = 1111,
//Evlocallablightlzcam = 1113,
//Evlocallablightqzcam = 1114,
//Evlocallabcontlzcam = 1115,
//Evlocallabcontqzcam = 1116,
//Evlocallabcontthreszcam = 1117,
//Evlocallabcolorflzcam = 1118,
//Evlocallabsaturzcam = 1119,
//Evlocallabchromzcam = 1120,
Evlocallabpqremapcam16 = 1112, Evlocallabpqremapcam16 = 1112,
EvLocallabEnacieMask = 1113, EvLocallabEnacieMask = 1113,
EvlocallabCCmaskcieshape = 1114, EvlocallabCCmaskcieshape = 1114,

View File

@ -2420,41 +2420,41 @@ WaveletParams::WaveletParams() :
0.35, 0.35,
0.35 0.35
}, },
opacityCurveSH{ //opacityCurveSH{
static_cast<double>(FCT_MinMaxCPoints), // static_cast<double>(FCT_MinMaxCPoints),
0., // 0.,
1., // 1.,
0.35, // 0.35,
0.35, // 0.35,
0.15, // 0.15,
0.9, // 0.9,
0.35, // 0.35,
0.35, // 0.35,
0.4, // 0.4,
0.8, // 0.8,
0.35, // 0.35,
0.35, // 0.35,
0.4, // 0.4,
0.5, // 0.5,
0.35, // 0.35,
0.35, // 0.35,
0.5, // 0.5,
0.5, // 0.5,
0.35, // 0.35,
0.35, // 0.35,
0.5, // 0.5,
0.2, // 0.2,
0.35, // 0.35,
0.35, // 0.35,
0.8, // 0.8,
0.1, // 0.1,
0.35, // 0.35,
0.35, // 0.35,
1.0, // 1.0,
0., // 0.,
0.35, // 0.35,
0.35 // 0.35
}, //},
/* /*
opacityCurveSH{ opacityCurveSH{
static_cast<double>(FCT_MinMaxCPoints), static_cast<double>(FCT_MinMaxCPoints),
@ -2592,7 +2592,7 @@ WaveletParams::WaveletParams() :
Backmethod("grey"), Backmethod("grey"),
Tilesmethod("full"), Tilesmethod("full"),
complexmethod("normal"), complexmethod("normal"),
denmethod("12low"), //denmethod("12low"),
mixmethod("mix"), mixmethod("mix"),
slimethod("sli"), slimethod("sli"),
quamethod("cons"), quamethod("cons"),
@ -2666,7 +2666,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const
&& wavdenoiseh == other.wavdenoiseh && wavdenoiseh == other.wavdenoiseh
&& blcurve == other.blcurve && blcurve == other.blcurve
&& opacityCurveRG == other.opacityCurveRG && opacityCurveRG == other.opacityCurveRG
&& opacityCurveSH == other.opacityCurveSH //&& opacityCurveSH == other.opacityCurveSH
&& opacityCurveBY == other.opacityCurveBY && opacityCurveBY == other.opacityCurveBY
&& opacityCurveW == other.opacityCurveW && opacityCurveW == other.opacityCurveW
&& opacityCurveWL == other.opacityCurveWL && opacityCurveWL == other.opacityCurveWL
@ -2742,7 +2742,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const
&& Backmethod == other.Backmethod && Backmethod == other.Backmethod
&& Tilesmethod == other.Tilesmethod && Tilesmethod == other.Tilesmethod
&& complexmethod == other.complexmethod && complexmethod == other.complexmethod
&& denmethod == other.denmethod //&& denmethod == other.denmethod
&& mixmethod == other.mixmethod && mixmethod == other.mixmethod
&& slimethod == other.slimethod && slimethod == other.slimethod
&& quamethod == other.quamethod && quamethod == other.quamethod
@ -2829,7 +2829,7 @@ void WaveletParams::getCurves(
wavdenoiseh.Set(this->wavdenoiseh); wavdenoiseh.Set(this->wavdenoiseh);
tCurve.Set(this->blcurve); tCurve.Set(this->blcurve);
opacityCurveLUTRG.Set(this->opacityCurveRG); opacityCurveLUTRG.Set(this->opacityCurveRG);
opacityCurveLUTSH.Set(this->opacityCurveSH); //opacityCurveLUTSH.Set(this->opacityCurveSH);
opacityCurveLUTBY.Set(this->opacityCurveBY); opacityCurveLUTBY.Set(this->opacityCurveBY);
opacityCurveLUTW.Set(this->opacityCurveW); opacityCurveLUTW.Set(this->opacityCurveW);
opacityCurveLUTWL.Set(this->opacityCurveWL); opacityCurveLUTWL.Set(this->opacityCurveWL);
@ -7235,7 +7235,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->wavelet.thres, "Wavelet", "MaxLev", wavelet.thres, keyFile); saveToKeyfile(!pedited || pedited->wavelet.thres, "Wavelet", "MaxLev", wavelet.thres, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.Tilesmethod, "Wavelet", "TilesMethod", wavelet.Tilesmethod, keyFile); saveToKeyfile(!pedited || pedited->wavelet.Tilesmethod, "Wavelet", "TilesMethod", wavelet.Tilesmethod, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.complexmethod, "Wavelet", "complexMethod", wavelet.complexmethod, keyFile); saveToKeyfile(!pedited || pedited->wavelet.complexmethod, "Wavelet", "complexMethod", wavelet.complexmethod, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.denmethod, "Wavelet", "denMethod", wavelet.denmethod, keyFile); //saveToKeyfile(!pedited || pedited->wavelet.denmethod, "Wavelet", "denMethod", wavelet.denmethod, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.mixmethod, "Wavelet", "mixMethod", wavelet.mixmethod, keyFile); saveToKeyfile(!pedited || pedited->wavelet.mixmethod, "Wavelet", "mixMethod", wavelet.mixmethod, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.slimethod, "Wavelet", "sliMethod", wavelet.slimethod, keyFile); saveToKeyfile(!pedited || pedited->wavelet.slimethod, "Wavelet", "sliMethod", wavelet.slimethod, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.quamethod, "Wavelet", "quaMethod", wavelet.quamethod, keyFile); saveToKeyfile(!pedited || pedited->wavelet.quamethod, "Wavelet", "quaMethod", wavelet.quamethod, keyFile);
@ -7326,7 +7326,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo
saveToKeyfile(!pedited || pedited->wavelet.pastlev, "Wavelet", "Pastlev", wavelet.pastlev.toVector(), keyFile); saveToKeyfile(!pedited || pedited->wavelet.pastlev, "Wavelet", "Pastlev", wavelet.pastlev.toVector(), keyFile);
saveToKeyfile(!pedited || pedited->wavelet.satlev, "Wavelet", "Satlev", wavelet.satlev.toVector(), keyFile); saveToKeyfile(!pedited || pedited->wavelet.satlev, "Wavelet", "Satlev", wavelet.satlev.toVector(), keyFile);
saveToKeyfile(!pedited || pedited->wavelet.opacityCurveRG, "Wavelet", "OpacityCurveRG", wavelet.opacityCurveRG, keyFile); saveToKeyfile(!pedited || pedited->wavelet.opacityCurveRG, "Wavelet", "OpacityCurveRG", wavelet.opacityCurveRG, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.opacityCurveSH, "Wavelet", "Levalshc", wavelet.opacityCurveSH, keyFile); //saveToKeyfile(!pedited || pedited->wavelet.opacityCurveSH, "Wavelet", "Levalshc", wavelet.opacityCurveSH, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.opacityCurveBY, "Wavelet", "OpacityCurveBY", wavelet.opacityCurveBY, keyFile); saveToKeyfile(!pedited || pedited->wavelet.opacityCurveBY, "Wavelet", "OpacityCurveBY", wavelet.opacityCurveBY, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.wavdenoise, "Wavelet", "wavdenoise", wavelet.wavdenoise, keyFile); saveToKeyfile(!pedited || pedited->wavelet.wavdenoise, "Wavelet", "wavdenoise", wavelet.wavdenoise, keyFile);
saveToKeyfile(!pedited || pedited->wavelet.wavdenoiseh, "Wavelet", "wavdenoiseh", wavelet.wavdenoiseh, keyFile); saveToKeyfile(!pedited || pedited->wavelet.wavdenoiseh, "Wavelet", "wavdenoiseh", wavelet.wavdenoiseh, keyFile);
@ -9595,7 +9595,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
} }
} }
assignFromKeyfile(keyFile, "Wavelet", "denMethod", pedited, wavelet.denmethod, pedited->wavelet.denmethod); //assignFromKeyfile(keyFile, "Wavelet", "denMethod", pedited, wavelet.denmethod, pedited->wavelet.denmethod);
assignFromKeyfile(keyFile, "Wavelet", "mixMethod", pedited, wavelet.mixmethod, pedited->wavelet.mixmethod); assignFromKeyfile(keyFile, "Wavelet", "mixMethod", pedited, wavelet.mixmethod, pedited->wavelet.mixmethod);
assignFromKeyfile(keyFile, "Wavelet", "sliMethod", pedited, wavelet.slimethod, pedited->wavelet.slimethod); assignFromKeyfile(keyFile, "Wavelet", "sliMethod", pedited, wavelet.slimethod, pedited->wavelet.slimethod);
assignFromKeyfile(keyFile, "Wavelet", "quaMethod", pedited, wavelet.quamethod, pedited->wavelet.quamethod); assignFromKeyfile(keyFile, "Wavelet", "quaMethod", pedited, wavelet.quamethod, pedited->wavelet.quamethod);
@ -9645,7 +9645,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited)
assignFromKeyfile(keyFile, "Wavelet", "ContrastCurve", pedited, wavelet.ccwcurve, pedited->wavelet.ccwcurve); assignFromKeyfile(keyFile, "Wavelet", "ContrastCurve", pedited, wavelet.ccwcurve, pedited->wavelet.ccwcurve);
assignFromKeyfile(keyFile, "Wavelet", "blcurve", pedited, wavelet.blcurve, pedited->wavelet.blcurve); assignFromKeyfile(keyFile, "Wavelet", "blcurve", pedited, wavelet.blcurve, pedited->wavelet.blcurve);
assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveRG", pedited, wavelet.opacityCurveRG, pedited->wavelet.opacityCurveRG); assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveRG", pedited, wavelet.opacityCurveRG, pedited->wavelet.opacityCurveRG);
assignFromKeyfile(keyFile, "Wavelet", "Levalshc", pedited, wavelet.opacityCurveSH, pedited->wavelet.opacityCurveSH); //assignFromKeyfile(keyFile, "Wavelet", "Levalshc", pedited, wavelet.opacityCurveSH, pedited->wavelet.opacityCurveSH);
assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveBY", pedited, wavelet.opacityCurveBY, pedited->wavelet.opacityCurveBY); assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveBY", pedited, wavelet.opacityCurveBY, pedited->wavelet.opacityCurveBY);
assignFromKeyfile(keyFile, "Wavelet", "wavdenoise", pedited, wavelet.wavdenoise, pedited->wavelet.wavdenoise); assignFromKeyfile(keyFile, "Wavelet", "wavdenoise", pedited, wavelet.wavdenoise, pedited->wavelet.wavdenoise);
assignFromKeyfile(keyFile, "Wavelet", "wavdenoiseh", pedited, wavelet.wavdenoiseh, pedited->wavelet.wavdenoiseh); assignFromKeyfile(keyFile, "Wavelet", "wavdenoiseh", pedited, wavelet.wavdenoiseh, pedited->wavelet.wavdenoiseh);

View File

@ -2070,7 +2070,7 @@ struct WaveletParams {
std::vector<double> blcurve; std::vector<double> blcurve;
std::vector<double> levelshc; std::vector<double> levelshc;
std::vector<double> opacityCurveRG; std::vector<double> opacityCurveRG;
std::vector<double> opacityCurveSH; //std::vector<double> opacityCurveSH;
std::vector<double> opacityCurveBY; std::vector<double> opacityCurveBY;
std::vector<double> opacityCurveW; std::vector<double> opacityCurveW;
std::vector<double> opacityCurveWL; std::vector<double> opacityCurveWL;
@ -2143,7 +2143,7 @@ struct WaveletParams {
Glib::ustring Backmethod; Glib::ustring Backmethod;
Glib::ustring Tilesmethod; Glib::ustring Tilesmethod;
Glib::ustring complexmethod; Glib::ustring complexmethod;
Glib::ustring denmethod; //Glib::ustring denmethod;
Glib::ustring mixmethod; Glib::ustring mixmethod;
Glib::ustring slimethod; Glib::ustring slimethod;
Glib::ustring quamethod; Glib::ustring quamethod;

View File

@ -34,6 +34,7 @@
#include "median.h" #include "median.h"
#include "mytime.h" #include "mytime.h"
#include "pdaflinesfilter.h" #include "pdaflinesfilter.h"
#include "pixelsmap.h"
#include "procparams.h" #include "procparams.h"
#include "rawimage.h" #include "rawimage.h"
#include "rawimagesource_i.h" #include "rawimagesource_i.h"
@ -41,6 +42,7 @@
#include "rt_math.h" #include "rt_math.h"
#include "rtengine.h" #include "rtengine.h"
#include "rtlensfun.h" #include "rtlensfun.h"
#include "../rtgui/options.h" #include "../rtgui/options.h"
#define BENCHMARK #define BENCHMARK
@ -1307,14 +1309,14 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
Glib::ustring newDF = raw.dark_frame; Glib::ustring newDF = raw.dark_frame;
RawImage *rid = nullptr; const RawImage* rid = nullptr;
if (!raw.df_autoselect) { if (!raw.df_autoselect) {
if (!raw.dark_frame.empty()) { if (!raw.dark_frame.empty()) {
rid = dfm.searchDarkFrame(raw.dark_frame); rid = DFManager::getInstance().searchDarkFrame(raw.dark_frame);
} }
} else { } else {
rid = dfm.searchDarkFrame(idata->getMake(), idata->getModel(), idata->getISOSpeed(), idata->getShutterSpeed(), idata->getDateTimeAsTS()); rid = DFManager::getInstance().searchDarkFrame(idata->getMake(), idata->getModel(), idata->getISOSpeed(), idata->getShutterSpeed(), idata->getDateTimeAsTS());
} }
if (rid && settings->verbose) { if (rid && settings->verbose) {
@ -1387,7 +1389,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
// Always correct camera badpixels from .badpixels file // Always correct camera badpixels from .badpixels file
std::vector<badPix> *bp = dfm.getBadPixels(ri->get_maker(), ri->get_model(), idata->getSerialNumber()); const std::vector<badPix> *bp = DFManager::getInstance().getBadPixels(ri->get_maker(), ri->get_model(), idata->getSerialNumber());
if (bp) { if (bp) {
if (!bitmapBads) { if (!bitmapBads) {
@ -1405,9 +1407,9 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
bp = nullptr; bp = nullptr;
if (raw.df_autoselect) { if (raw.df_autoselect) {
bp = dfm.getHotPixels(idata->getMake(), idata->getModel(), idata->getISOSpeed(), idata->getShutterSpeed(), idata->getDateTimeAsTS()); bp = DFManager::getInstance().getHotPixels(idata->getMake(), idata->getModel(), idata->getISOSpeed(), idata->getShutterSpeed(), idata->getDateTimeAsTS());
} else if (!raw.dark_frame.empty()) { } else if (!raw.dark_frame.empty()) {
bp = dfm.getHotPixels(raw.dark_frame); bp = DFManager::getInstance().getHotPixels(raw.dark_frame);
} }
if (bp) { if (bp) {
@ -2453,7 +2455,7 @@ void RawImageSource::HLRecovery_Global(const ToneCurveParams &hrp)
/* Copy original pixel data and /* Copy original pixel data and
* subtract dark frame (if present) from current image and apply flat field correction (if present) * subtract dark frame (if present) from current image and apply flat field correction (if present)
*/ */
void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, RawImage *riDark, RawImage *riFlatFile, array2D<float> &rawData) void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, const RawImage *riDark, RawImage *riFlatFile, array2D<float> &rawData)
{ {
const auto tmpfilters = ri->get_filters(); const auto tmpfilters = ri->get_filters();
ri->set_filters(ri->prefilters); // we need 4 blacks for bayer processing ri->set_filters(ri->prefilters); // we need 4 blacks for bayer processing

View File

@ -138,7 +138,7 @@ public:
} }
void processFlatField(const procparams::RAWParams &raw, const RawImage *riFlatFile, array2D<float> &rawData, const float black[4]); void processFlatField(const procparams::RAWParams &raw, const RawImage *riFlatFile, array2D<float> &rawData, const float black[4]);
void copyOriginalPixels(const procparams::RAWParams &raw, RawImage *ri, RawImage *riDark, RawImage *riFlatFile, array2D<float> &rawData ); void copyOriginalPixels(const procparams::RAWParams &raw, RawImage *ri, const RawImage *riDark, RawImage *riFlatFile, array2D<float> &rawData );
void scaleColors (int winx, int winy, int winw, int winh, const procparams::RAWParams &raw, array2D<float> &rawData); // raw for cblack void scaleColors (int winx, int winy, int winw, int winh, const procparams::RAWParams &raw, array2D<float> &rawData); // raw for cblack
void WBauto(double &tempref, double &greenref, array2D<float> &redloc, array2D<float> &greenloc, array2D<float> &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const procparams::WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw) override; void WBauto(double &tempref, double &greenref, array2D<float> &redloc, array2D<float> &greenloc, array2D<float> &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const procparams::WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw) override;
void getAutoWBMultipliersitc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const procparams::WBParams & wbpar, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw) override; void getAutoWBMultipliersitc(double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double &rm, double &gm, double &bm, const procparams::WBParams & wbpar, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw) override;

View File

@ -28,7 +28,7 @@
// Aligned so the first entry starts on line 30. // Aligned so the first entry starts on line 30.
int refreshmap[rtengine::NUMOFEVENTS] = { int refreshmap[rtengine::NUMOFEVENTS] = {
ALL, // EvPhotoLoaded, ALL, // EvPhotoLoaded,
ALL, // EvProfileLoaded, 0, // EvProfileLoaded : obsolete,
ALL, // EvProfileChanged, ALL, // EvProfileChanged,
ALL, // EvHistoryBrowsed, ALL, // EvHistoryBrowsed,
AUTOEXP, // EvBrightness, AUTOEXP, // EvBrightness,
@ -42,9 +42,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
AUTOEXP, // EvClip, AUTOEXP, // EvClip,
LUMINANCECURVE, // EvLBrightness, LUMINANCECURVE, // EvLBrightness,
LUMINANCECURVE, // EvLContrast, LUMINANCECURVE, // EvLContrast,
LUMINANCECURVE, // EvLBlack, 0, // EvLBlack : obsolete,
LUMINANCECURVE, // EvLHLCompr, 0, // EvLHLCompr : obsolete,
LUMINANCECURVE, // EvLSHCompr, 0, // EvLSHCompr : obsolete,
LUMINANCECURVE, // EvLLCurve, LUMINANCECURVE, // EvLLCurve,
SHARPENING, // EvShrEnabled, SHARPENING, // EvShrEnabled,
SHARPENING, // EvShrRadius, SHARPENING, // EvShrRadius,
@ -81,7 +81,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, // EvSHShadows, LUMINANCECURVE, // EvSHShadows,
LUMINANCECURVE, // EvSHHLTonalW, LUMINANCECURVE, // EvSHHLTonalW,
LUMINANCECURVE, // EvSHSHTonalW, LUMINANCECURVE, // EvSHSHTonalW,
AUTOEXP, // EvSHLContrast, 0, // EvSHLContrast : obsolete,
LUMINANCECURVE, // EvSHRadius, LUMINANCECURVE, // EvSHRadius,
ALLNORAW, // EvCTRotate, ALLNORAW, // EvCTRotate,
ALLNORAW, // EvCTHFlip, ALLNORAW, // EvCTHFlip,
@ -93,7 +93,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
CROP, // EvCrop, CROP, // EvCrop,
HDR, // EvCACorr, HDR, // EvCACorr,
ALLNORAW, // EvHREnabled, ALLNORAW, // EvHREnabled,
ALLNORAW, // EvHRAmount, 0, // EvHRAmount : obsolete,
ALLNORAW, // EvHRMethod, ALLNORAW, // EvHRMethod,
DEMOSAIC, // EvWProfile, DEMOSAIC, // EvWProfile,
OUTPUTPROFILE, // EvOProfile, OUTPUTPROFILE, // EvOProfile,
@ -104,12 +104,12 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
RESIZE, // EvResizeMethod, RESIZE, // EvResizeMethod,
EXIF, // EvExif, EXIF, // EvExif,
IPTC, // EvIPTC IPTC, // EvIPTC
RESIZE, // EvResizeSpec, 0, // EvResizeSpec : obsolete,
RESIZE, // EvResizeWidth RESIZE, // EvResizeWidth
RESIZE, // EvResizeHeight RESIZE, // EvResizeHeight
RESIZE, // EvResizeEnabled RESIZE, // EvResizeEnabled
ALL, // EvProfileChangeNotification ALL, // EvProfileChangeNotification
RETINEX, // EvShrHighQuality 0, // EvSHHighQuality : obsolete
HDR, // EvPerspCorr HDR, // EvPerspCorr
DARKFRAME, // EvLCPFile DARKFRAME, // EvLCPFile
AUTOEXP, // EvRGBrCurveLumamode AUTOEXP, // EvRGBrCurveLumamode
@ -157,12 +157,12 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
FLATFIELD, // EvFlatFieldBlurRadius, FLATFIELD, // EvFlatFieldBlurRadius,
FLATFIELD, // EvFlatFieldBlurType, FLATFIELD, // EvFlatFieldBlurType,
HDR, // EvAutoDIST, HDR, // EvAutoDIST,
ALLNORAW, // EvDPDNLumCurve, 0, // EvDPDNLumCurve : obsolete
ALLNORAW, // EvDPDNChromCurve, 0, // EvDPDNChromCurve : obsolete
GAMMA, // EvGAMMA 0, // EvGAMMA : obsolete
GAMMA, // EvGAMPOS 0, // EvGAMPOS : obsolete
GAMMA, // EvGAMFREE 0, // EvGAMFREE : obsolete
GAMMA, // EvSLPOS 0, // EvSLPOS : obsolete
DARKFRAME, // EvPreProcessExpBlackzero DARKFRAME, // EvPreProcessExpBlackzero
DARKFRAME, // EvPreProcessExpBlackone DARKFRAME, // EvPreProcessExpBlackone
DARKFRAME, // EvPreProcessExpBlacktwo DARKFRAME, // EvPreProcessExpBlacktwo
@ -200,7 +200,6 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, // EvLLCCurve LUMINANCECURVE, // EvLLCCurve
LUMINANCECURVE, // EvLLCredsk LUMINANCECURVE, // EvLLCredsk
ALLNORAW, // EvDPDNLdetail ALLNORAW, // EvDPDNLdetail
//ALLNORAW, // EvCATEnabled
LUMINANCECURVE, // EvCATEnabled LUMINANCECURVE, // EvCATEnabled
LUMINANCECURVE, // EvCATDegree LUMINANCECURVE, // EvCATDegree
LUMINANCECURVE, // EvCATMethodsur LUMINANCECURVE, // EvCATMethodsur
@ -236,7 +235,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, // EvCATAutoadap LUMINANCECURVE, // EvCATAutoadap
DEFRINGE, // EvPFCurve DEFRINGE, // EvPFCurve
ALLNORAW, // EvWBequal ALLNORAW, // EvWBequal
ALLNORAW, // EvWBequalbo 0, // EvWBequalbo : obsolete
HDR, // EvGradientDegree HDR, // EvGradientDegree
HDR, // EvGradientEnabled HDR, // EvGradientEnabled
HDR, // EvPCVignetteStrength HDR, // EvPCVignetteStrength
@ -277,7 +276,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
LUMINANCECURVE, // EvLLHCurve LUMINANCECURVE, // EvLLHCurve
LUMINANCECURVE, // EvLHHCurve LUMINANCECURVE, // EvLHHCurve
ALLNORAW, // EvDirPyrEqualizerThreshold ALLNORAW, // EvDirPyrEqualizerThreshold
ALLNORAW, // EvDPDNenhance 0, // EvDPDNenhance : obsolete
AUTOEXP, // EvBWMethodalg AUTOEXP, // EvBWMethodalg
ALLNORAW, // EvDirPyrEqualizerSkin ALLNORAW, // EvDirPyrEqualizerSkin
ALLNORAW, // EvDirPyrEqlgamutlab ALLNORAW, // EvDirPyrEqlgamutlab
@ -301,8 +300,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
AUTOEXP, // EvColorToningbluehigh AUTOEXP, // EvColorToningbluehigh
AUTOEXP, // EvColorToningbalance AUTOEXP, // EvColorToningbalance
AUTOEXP, // EvColorToningNeutral AUTOEXP, // EvColorToningNeutral
AUTOEXP, // EvColorToningsatlow 0, // EvColorToningsatlow : obsolete
AUTOEXP, // EvColorToningsathigh 0, // EvColorToningsathigh : obsolete
AUTOEXP, // EvColorToningTwocolor AUTOEXP, // EvColorToningTwocolor
AUTOEXP, // EvColorToningNeutralcur AUTOEXP, // EvColorToningNeutralcur
AUTOEXP, // EvColorToningLumamode AUTOEXP, // EvColorToningLumamode
@ -327,7 +326,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
ALLNORAW, // EvDPDNsmet ALLNORAW, // EvDPDNsmet
DARKFRAME, // EvPreProcessDeadPixel DARKFRAME, // EvPreProcessDeadPixel
ALLNORAW, // EvDPDNCCCurve ALLNORAW, // EvDPDNCCCurve
ALLNORAW, // EvDPDNautochroma 0, // EvDPDNautochroma : obsolete
ALLNORAW, // EvDPDNLmet ALLNORAW, // EvDPDNLmet
ALLNORAW, // EvDPDNCmet ALLNORAW, // EvDPDNCmet
ALLNORAW, // EvDPDNC2met ALLNORAW, // EvDPDNC2met
@ -436,7 +435,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
DIRPYREQUALIZER, // EvWavNPmet DIRPYREQUALIZER, // EvWavNPmet
DEMOSAIC, // EvretinexMethod DEMOSAIC, // EvretinexMethod
RETINEX, // EvLneigh RETINEX, // EvLneigh
RETINEX, // EvLgain 0, // EvLgain : obsolete
RETINEX, // EvLoffs RETINEX, // EvLoffs
RETINEX, // EvLstr RETINEX, // EvLstr
RETINEX, // EvLscal RETINEX, // EvLscal
@ -500,7 +499,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
0, // unused 0, // unused
DEMOSAIC, // EvPixelShiftMotionMethod DEMOSAIC, // EvPixelShiftMotionMethod
DEMOSAIC, // EvPixelShiftSmooth DEMOSAIC, // EvPixelShiftSmooth
DEMOSAIC, // EvPixelShiftLmmse 0, // EvPixelShiftLmmse : obsolete
DEMOSAIC, // EvPixelShiftEqualBright DEMOSAIC, // EvPixelShiftEqualBright
DEMOSAIC, // EvPixelShiftEqualBrightChannel DEMOSAIC, // EvPixelShiftEqualBrightChannel
LUMINANCECURVE, // EvCATtempout LUMINANCECURVE, // EvCATtempout
@ -631,7 +630,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
AUTOEXP, // EvLocallabstreng AUTOEXP, // EvLocallabstreng
AUTOEXP, // EvLocallabsensisf AUTOEXP, // EvLocallabsensisf
AUTOEXP, // Evlocallabsharblur AUTOEXP, // Evlocallabsharblur
AUTOEXP, // EvLocenalabregion 0, // EvLocenalabregion : obsolete
AUTOEXP, // EvlocallabshowmaskMethod AUTOEXP, // EvlocallabshowmaskMethod
AUTOEXP, // EvLocallabSpotSelectedWithMask AUTOEXP, // EvLocallabSpotSelectedWithMask
AUTOEXP, // EvlocallabCCmaskshape AUTOEXP, // EvlocallabCCmaskshape
@ -875,7 +874,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
AUTOEXP | M_AUTOEXP, // EvLocenalog AUTOEXP | M_AUTOEXP, // EvLocenalog
HDR, // EvLocallabAuto HDR, // EvLocallabAuto
AUTOEXP, // EvlocallabsourceGray AUTOEXP, // EvlocallabsourceGray
HDR, // EvlocallabsourceGrayAuto 0, // EvlocallabsourceGrayAuto : obsolete
HDR, // EvlocallabAutoGray HDR, // EvlocallabAutoGray
AUTOEXP, // EvlocallabblackEv AUTOEXP, // EvlocallabblackEv
AUTOEXP, // EvlocallabwhiteEv AUTOEXP, // EvlocallabwhiteEv

View File

@ -1205,7 +1205,6 @@ void BlackWhite::setBatchMode (bool batchMode)
{ {
removeIfThere (autoHBox, autoch, false); removeIfThere (autoHBox, autoch, false);
autoch = Gtk::manage (new Gtk::CheckButton (M("TP_BWMIX_AUTOCH"))); autoch = Gtk::manage (new Gtk::CheckButton (M("TP_BWMIX_AUTOCH")));
autoch->set_tooltip_markup (M("TP_BWMIX_AUTOCH_TIP"));
autoconn = autoch->signal_toggled().connect( sigc::mem_fun(*this, &BlackWhite::autoch_toggled) ); autoconn = autoch->signal_toggled().connect( sigc::mem_fun(*this, &BlackWhite::autoch_toggled) );
autoHBox->pack_start (*autoch); autoHBox->pack_start (*autoch);

View File

@ -53,7 +53,7 @@ ControlSpotPanel::ControlSpotPanel():
spotMethod_(Gtk::manage(new MyComboBoxText())), spotMethod_(Gtk::manage(new MyComboBoxText())),
shapeMethod_(Gtk::manage(new MyComboBoxText())), shapeMethod_(Gtk::manage(new MyComboBoxText())),
qualityMethod_(Gtk::manage(new MyComboBoxText())), qualityMethod_(Gtk::manage(new MyComboBoxText())),
complexMethod_(Gtk::manage(new MyComboBoxText())), //complexMethod_(Gtk::manage(new MyComboBoxText())),
wavMethod_(Gtk::manage(new MyComboBoxText())), wavMethod_(Gtk::manage(new MyComboBoxText())),
sensiexclu_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIEXCLU"), 0, 100, 1, 12))), sensiexclu_(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIEXCLU"), 0, 100, 1, 12))),
@ -90,7 +90,7 @@ ControlSpotPanel::ControlSpotPanel():
laplac_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_LAPLACC")))), laplac_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_LAPLACC")))),
deltae_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_DELTAEC")))), deltae_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_DELTAEC")))),
shortc_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SHORTC")))), shortc_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SHORTC")))),
savrest_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SAVREST")))), //savrest_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_SAVREST")))),
expTransGrad_(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_TRANSIT")))), expTransGrad_(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_TRANSIT")))),
expShapeDetect_(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_ARTIF")))), expShapeDetect_(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_ARTIF")))),
@ -476,11 +476,11 @@ ControlSpotPanel::ControlSpotPanel():
} }
lumask_->setAdjusterListener(this); lumask_->setAdjusterListener(this);
savrestConn_ = savrest_->signal_toggled().connect( //savrestConn_ = savrest_->signal_toggled().connect(
sigc::mem_fun(*this, &ControlSpotPanel::savrestChanged)); // sigc::mem_fun(*this, &ControlSpotPanel::savrestChanged));
if (showtooltip) { if (showtooltip) {
savrest_->set_tooltip_text(M("TP_LOCALLAB_SAVREST_TOOLTIP")); //savrest_->set_tooltip_text(M("TP_LOCALLAB_SAVREST_TOOLTIP"));
lumask_->set_tooltip_text(M("TP_LOCALLAB_LUMASK_TOOLTIP")); lumask_->set_tooltip_text(M("TP_LOCALLAB_LUMASK_TOOLTIP"));
laplac_->set_tooltip_text(M("TP_LOCALLAB_LAP_MASK_TOOLTIP")); laplac_->set_tooltip_text(M("TP_LOCALLAB_LAP_MASK_TOOLTIP"));
} }
@ -498,27 +498,27 @@ ControlSpotPanel::ControlSpotPanel():
Gtk::Separator *separatormet = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL)); Gtk::Separator *separatormet = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL));
pack_start(*separatormet, Gtk::PACK_SHRINK, 2); pack_start(*separatormet, Gtk::PACK_SHRINK, 2);
Gtk::Box* const ctboxcomplexmethod = Gtk::manage(new Gtk::Box()); //Gtk::Box* const ctboxcomplexmethod = Gtk::manage(new Gtk::Box());
if (showtooltip) { //if (showtooltip) {
ctboxcomplexmethod->set_tooltip_markup(M("TP_LOCALLAB_COMPLEXMETHOD_TOOLTIP")); // ctboxcomplexmethod->set_tooltip_markup(M("TP_LOCALLAB_COMPLEXMETHOD_TOOLTIP"));
} //}
Gtk::Label* const labelcomplexmethod = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_COMPLEX_METHOD") + ":")); //Gtk::Label* const labelcomplexmethod = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_COMPLEX_METHOD") + ":"));
ctboxcomplexmethod->pack_start(*labelcomplexmethod, Gtk::PACK_SHRINK, 4); //ctboxcomplexmethod->pack_start(*labelcomplexmethod, Gtk::PACK_SHRINK, 4);
if (showtooltip) { //if (showtooltip) {
complexMethod_->set_tooltip_markup(M("TP_LOCALLAB_COMPLEX_TOOLTIP")); // complexMethod_->set_tooltip_markup(M("TP_LOCALLAB_COMPLEX_TOOLTIP"));
} //}
complexMethod_->append(M("TP_LOCALLAB_SIM")); //complexMethod_->append(M("TP_LOCALLAB_SIM"));
complexMethod_->append(M("TP_LOCALLAB_MED")); //complexMethod_->append(M("TP_LOCALLAB_MED"));
complexMethod_->append(M("TP_LOCALLAB_ALL")); //complexMethod_->append(M("TP_LOCALLAB_ALL"));
complexMethod_->set_active(1); //complexMethod_->set_active(1);
complexMethodconn_ = complexMethod_->signal_changed().connect( //complexMethodconn_ = complexMethod_->signal_changed().connect(
sigc::mem_fun( // sigc::mem_fun(
*this, &ControlSpotPanel::complexMethodChanged)); // *this, &ControlSpotPanel::complexMethodChanged));
ctboxcomplexmethod->pack_start(*complexMethod_); //ctboxcomplexmethod->pack_start(*complexMethod_);
// pack_start(*ctboxcomplexmethod); // pack_start(*ctboxcomplexmethod);
/* /*
Gtk::Box* const ctboxwavmethod = Gtk::manage(new Gtk::Box()); Gtk::Box* const ctboxwavmethod = Gtk::manage(new Gtk::Box());
@ -865,8 +865,8 @@ void ControlSpotPanel::load_ControlSpot_param()
denoichmask_->setValue(row[spots_.denoichmask]); denoichmask_->setValue(row[spots_.denoichmask]);
shortc_->set_active(row[spots_.shortc]); shortc_->set_active(row[spots_.shortc]);
lumask_->setValue((double)row[spots_.lumask]); lumask_->setValue((double)row[spots_.lumask]);
savrest_->set_active(row[spots_.savrest]); //savrest_->set_active(row[spots_.savrest]);
complexMethod_->set_active(row[spots_.complexMethod]); //complexMethod_->set_active(row[spots_.complexMethod]);
wavMethod_->set_active(row[spots_.wavMethod]); wavMethod_->set_active(row[spots_.wavMethod]);
} }
@ -1157,37 +1157,37 @@ void ControlSpotPanel::qualityMethodChanged()
} }
} }
void ControlSpotPanel::complexMethodChanged() //void ControlSpotPanel::complexMethodChanged()
{ //{
// printf("qualityMethodChanged\n"); // // printf("qualityMethodChanged\n");
//
// Get selected control spot // // Get selected control spot
const auto s = treeview_->get_selection(); // const auto s = treeview_->get_selection();
//
if (!s->count_selected_rows()) { // if (!s->count_selected_rows()) {
return; // return;
} // }
//
const auto iter = s->get_selected(); // const auto iter = s->get_selected();
Gtk::TreeModel::Row row = *iter; // Gtk::TreeModel::Row row = *iter;
//
row[spots_.complexMethod] = complexMethod_->get_active_row_number(); // row[spots_.complexMethod] = complexMethod_->get_active_row_number();
//
if (multiImage && complexMethod_->get_active_text() == M("GENERAL_UNCHANGED")) { // if (multiImage && complexMethod_->get_active_text() == M("GENERAL_UNCHANGED")) {
// excluFrame->show(); // // excluFrame->show();
} else if (complexMethod_->get_active_row_number() == 0) { //sim // } else if (complexMethod_->get_active_row_number() == 0) { //sim
// excluFrame->hide(); // // excluFrame->hide();
} else if (complexMethod_->get_active_row_number() == 1) { // mod // } else if (complexMethod_->get_active_row_number() == 1) { // mod
// excluFrame->show(); // // excluFrame->show();
} else if (complexMethod_->get_active_row_number() == 2) { // all // } else if (complexMethod_->get_active_row_number() == 2) { // all
// excluFrame->show(); // // excluFrame->show();
} // }
//
// Raise event // // Raise event
if (listener) { // if (listener) {
listener->panelChanged(EvLocallabSpotcomplexMethod, complexMethod_->get_active_text()); // listener->panelChanged(EvLocallabSpotcomplexMethod, complexMethod_->get_active_text());
} // }
} //}
void ControlSpotPanel::wavMethodChanged() void ControlSpotPanel::wavMethodChanged()
{ {
@ -1786,28 +1786,28 @@ void ControlSpotPanel::shortcChanged()
} }
} }
void ControlSpotPanel::savrestChanged() //void ControlSpotPanel::savrestChanged()
{ //{
// Get selected control spot // // Get selected control spot
const auto s = treeview_->get_selection(); // const auto s = treeview_->get_selection();
//
if (!s->count_selected_rows()) { // if (!s->count_selected_rows()) {
return; // return;
} // }
//
const auto iter = s->get_selected(); // const auto iter = s->get_selected();
Gtk::TreeModel::Row row = *iter; // Gtk::TreeModel::Row row = *iter;
row[spots_.savrest] = savrest_->get_active(); // row[spots_.savrest] = savrest_->get_active();
//
// Raise event // // Raise event
if (listener) { // if (listener) {
if (savrest_->get_active()) { // if (savrest_->get_active()) {
listener->panelChanged(Evlocallabsavrest, M("GENERAL_ENABLED")); // listener->panelChanged(Evlocallabsavrest, M("GENERAL_ENABLED"));
} else { // } else {
listener->panelChanged(Evlocallabsavrest, M("GENERAL_DISABLED")); // listener->panelChanged(Evlocallabsavrest, M("GENERAL_DISABLED"));
} // }
} // }
} //}
void ControlSpotPanel::previewChanged() void ControlSpotPanel::previewChanged()
{ {
@ -1869,8 +1869,8 @@ void ControlSpotPanel::disableParamlistener(bool cond)
denoichmask_->block(cond); denoichmask_->block(cond);
shortcConn_.block(cond); shortcConn_.block(cond);
lumask_->block(cond); lumask_->block(cond);
savrestConn_.block(cond); //savrestConn_.block(cond);
complexMethodconn_.block(cond); //complexMethodconn_.block(cond);
wavMethodconn_.block(cond); wavMethodconn_.block(cond);
} }
@ -1916,8 +1916,8 @@ void ControlSpotPanel::setParamEditable(bool cond)
denoichmask_->set_sensitive(cond); denoichmask_->set_sensitive(cond);
shortc_->set_sensitive(cond); shortc_->set_sensitive(cond);
lumask_->set_sensitive(cond); lumask_->set_sensitive(cond);
savrest_->set_sensitive(cond); //savrest_->set_sensitive(cond);
complexMethod_->set_sensitive(cond); //complexMethod_->set_sensitive(cond);
wavMethod_->set_sensitive(cond); wavMethod_->set_sensitive(cond);
preview_->set_sensitive(cond); preview_->set_sensitive(cond);
@ -2599,7 +2599,7 @@ ControlSpotPanel::SpotRow* ControlSpotPanel::getSpot(const int index)
r->laplac = row[spots_.laplac]; r->laplac = row[spots_.laplac];
r->deltae = row[spots_.deltae]; r->deltae = row[spots_.deltae];
r->shortc = row[spots_.shortc]; r->shortc = row[spots_.shortc];
r->savrest = row[spots_.savrest]; //r->savrest = row[spots_.savrest];
r->wavMethod = row[spots_.wavMethod]; r->wavMethod = row[spots_.wavMethod];
return r; return r;
@ -2735,7 +2735,7 @@ void ControlSpotPanel::addControlSpot(SpotRow* newSpot)
row[spots_.denoichmask] = newSpot->denoichmask; row[spots_.denoichmask] = newSpot->denoichmask;
row[spots_.shortc] = newSpot->shortc; row[spots_.shortc] = newSpot->shortc;
row[spots_.lumask] = newSpot->lumask; row[spots_.lumask] = newSpot->lumask;
row[spots_.savrest] = newSpot->savrest; //row[spots_.savrest] = newSpot->savrest;
row[spots_.complexMethod] = newSpot->complexMethod; row[spots_.complexMethod] = newSpot->complexMethod;
row[spots_.wavMethod] = newSpot->wavMethod; row[spots_.wavMethod] = newSpot->wavMethod;
updateParamVisibility(); updateParamVisibility();
@ -2855,7 +2855,7 @@ ControlSpotPanel::ControlSpots::ControlSpots()
add(denoichmask); add(denoichmask);
add(shortc); add(shortc);
add(lumask); add(lumask);
add(savrest); //add(savrest);
add(complexMethod); add(complexMethod);
add(wavMethod); add(wavMethod);
} }

View File

@ -89,7 +89,7 @@ public:
double denoichmask; double denoichmask;
bool shortc; bool shortc;
int lumask; int lumask;
bool savrest; //bool savrest;
int complexMethod; // 0 = Simple, 1 = Moderate, 2 = all int complexMethod; // 0 = Simple, 1 = Moderate, 2 = all
int wavMethod; // 0 = D2, 1 = D4, 2 = D6, 3 = D10, 4 = D14 int wavMethod; // 0 = D2, 1 = D4, 2 = D6, 3 = D10, 4 = D14
}; };
@ -243,7 +243,7 @@ private:
void spotMethodChanged(); void spotMethodChanged();
void shapeMethodChanged(); void shapeMethodChanged();
void qualityMethodChanged(); void qualityMethodChanged();
void complexMethodChanged(); //void complexMethodChanged();
void wavMethodChanged(); void wavMethodChanged();
void updateParamVisibility(); void updateParamVisibility();
@ -259,7 +259,7 @@ private:
void laplacChanged(); void laplacChanged();
void deltaeChanged(); void deltaeChanged();
void shortcChanged(); void shortcChanged();
void savrestChanged(); //void savrestChanged();
void previewChanged(); void previewChanged();
@ -325,7 +325,7 @@ private:
Gtk::TreeModelColumn<int> denoichmask; Gtk::TreeModelColumn<int> denoichmask;
Gtk::TreeModelColumn<bool> shortc; Gtk::TreeModelColumn<bool> shortc;
Gtk::TreeModelColumn<int> lumask; Gtk::TreeModelColumn<int> lumask;
Gtk::TreeModelColumn<bool> savrest; //Gtk::TreeModelColumn<bool> savrest;
Gtk::TreeModelColumn<int> complexMethod; // 0 = Simple, 1 = mod, 2 = all Gtk::TreeModelColumn<int> complexMethod; // 0 = Simple, 1 = mod, 2 = all
Gtk::TreeModelColumn<int> wavMethod; // 0 = D2, 1 = D4, 2 = D6, 3 = D10, 4 = D14 Gtk::TreeModelColumn<int> wavMethod; // 0 = D2, 1 = D4, 2 = D6, 3 = D10, 4 = D14
}; };
@ -377,8 +377,8 @@ private:
sigc::connection shapeMethodconn_; sigc::connection shapeMethodconn_;
MyComboBoxText* const qualityMethod_; MyComboBoxText* const qualityMethod_;
sigc::connection qualityMethodconn_; sigc::connection qualityMethodconn_;
MyComboBoxText* const complexMethod_; //MyComboBoxText* const complexMethod_;
sigc::connection complexMethodconn_; //sigc::connection complexMethodconn_;
MyComboBoxText* const wavMethod_; MyComboBoxText* const wavMethod_;
sigc::connection wavMethodconn_; sigc::connection wavMethodconn_;
@ -425,8 +425,8 @@ private:
sigc::connection deltaeConn_; sigc::connection deltaeConn_;
Gtk::CheckButton* const shortc_; Gtk::CheckButton* const shortc_;
sigc::connection shortcConn_; sigc::connection shortcConn_;
Gtk::CheckButton* const savrest_; //Gtk::CheckButton* const savrest_;
sigc::connection savrestConn_; //sigc::connection savrestConn_;
MyExpander* const expTransGrad_; MyExpander* const expTransGrad_;
MyExpander* const expShapeDetect_; MyExpander* const expShapeDetect_;

View File

@ -97,7 +97,7 @@ void DarkFrame::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi
if( pp->raw.df_autoselect && dfp && !multiImage) { if( pp->raw.df_autoselect && dfp && !multiImage) {
// retrieve the auto-selected df filename // retrieve the auto-selected df filename
rtengine::RawImage *img = dfp->getDF(); const rtengine::RawImage *img = dfp->getDF();
if( img ) { if( img ) {
dfInfo->set_text( Glib::ustring::compose("%1: %2ISO %3s", Glib::path_get_basename(img->get_filename()), img->get_ISOspeed(), img->get_shutter()) ); dfInfo->set_text( Glib::ustring::compose("%1: %2ISO %3s", Glib::path_get_basename(img->get_filename()), img->get_ISOspeed(), img->get_shutter()) );
@ -179,7 +179,7 @@ void DarkFrame::dfAutoChanged()
if(dfAuto->get_active() && dfp && !batchMode) { if(dfAuto->get_active() && dfp && !batchMode) {
// retrieve the auto-selected df filename // retrieve the auto-selected df filename
rtengine::RawImage *img = dfp->getDF(); const rtengine::RawImage *img = dfp->getDF();
if( img ) { if( img ) {
dfInfo->set_text( Glib::ustring::compose("%1: %2ISO %3s", Glib::path_get_basename(img->get_filename()), img->get_ISOspeed(), img->get_shutter()) ); dfInfo->set_text( Glib::ustring::compose("%1: %2ISO %3s", Glib::path_get_basename(img->get_filename()), img->get_ISOspeed(), img->get_shutter()) );

View File

@ -36,7 +36,7 @@ class DFProvider
{ {
public: public:
virtual ~DFProvider() = default; virtual ~DFProvider() = default;
virtual rtengine::RawImage* getDF() = 0; virtual const rtengine::RawImage* getDF() = 0;
virtual Glib::ustring GetCurrentImageFilePath() = 0; virtual Glib::ustring GetCurrentImageFilePath() = 0;
// add other info here // add other info here
}; };

View File

@ -875,7 +875,7 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m)
} }
// Reinit cache // Reinit cache
rtengine::dfm.init( options.rtSettings.darkFramesPath ); rtengine::DFManager::getInstance().init( options.rtSettings.darkFramesPath );
} else { } else {
// Target directory creation failed, we clear the darkFramesPath setting // Target directory creation failed, we clear the darkFramesPath setting
options.rtSettings.darkFramesPath.clear(); options.rtSettings.darkFramesPath.clear();

View File

@ -305,7 +305,7 @@ bool FilePanel::imageLoaded( Thumbnail* thm, ProgressConnector<rtengine::Initial
#ifdef WIN32 #ifdef WIN32
int winGdiHandles = GetGuiResources( GetCurrentProcess(), GR_GDIOBJECTS); int winGdiHandles = GetGuiResources( GetCurrentProcess(), GR_GDIOBJECTS);
if(winGdiHandles > 0 && winGdiHandles <= 6500) //(old settings 8500) 0 means we don't have the rights to access the function, 8500 because the limit is 10000 and we need about 1500 free handles if(winGdiHandles > 0 && winGdiHandles <= 6500) //(old settings 8500) 0 means we don't have the rights to access the function, 8500 because the limit is 10000 and we need about 1500 free handles
//J.Desmis october 2021 I change 8500 to 6500..Why ? because whitout while increasing size GUI system crash in multieditor //J.Desmis october 2021 I change 8500 to 6500..Why ? because without while increasing size GUI system crash in multieditor
#endif #endif
{ {
GThreadLock lock; // Acquiring the GUI... not sure that it's necessary, but it shouldn't harm GThreadLock lock; // Acquiring the GUI... not sure that it's necessary, but it shouldn't harm

View File

@ -41,12 +41,12 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, "icm", M("TP_ICM_LABEL")), iuncha
EvICMprimariMethod = m->newEvent(GAMMA, "HISTORY_MSG_ICM_OUTPUT_PRIMARIES"); EvICMprimariMethod = m->newEvent(GAMMA, "HISTORY_MSG_ICM_OUTPUT_PRIMARIES");
EvICMprofileMethod = m->newEvent(GAMMA, "HISTORY_MSG_ICM_OUTPUT_TYPE"); EvICMprofileMethod = m->newEvent(GAMMA, "HISTORY_MSG_ICM_OUTPUT_TYPE");
EvICMtempMethod = m->newEvent(GAMMA, "HISTORY_MSG_ICM_OUTPUT_TEMP"); EvICMtempMethod = m->newEvent(GAMMA, "HISTORY_MSG_ICM_OUTPUT_TEMP");
EvICMpredx = m->newEvent(GAMMA, "HISTORY_MSG_ICMPREDX"); //EvICMpredx = m->newEvent(GAMMA, "HISTORY_MSG_ICMPREDX");
EvICMpredy = m->newEvent(GAMMA, "HISTORY_MSG_ICMPREDY"); //EvICMpredy = m->newEvent(GAMMA, "HISTORY_MSG_ICMPREDY");
EvICMpgrex = m->newEvent(GAMMA, "HISTORY_MSG_ICMPGREX"); //EvICMpgrex = m->newEvent(GAMMA, "HISTORY_MSG_ICMPGREX");
EvICMpgrey = m->newEvent(GAMMA, "HISTORY_MSG_ICMPGREY"); //EvICMpgrey = m->newEvent(GAMMA, "HISTORY_MSG_ICMPGREY");
EvICMpblux = m->newEvent(GAMMA, "HISTORY_MSG_ICMPBLUX"); //EvICMpblux = m->newEvent(GAMMA, "HISTORY_MSG_ICMPBLUX");
EvICMpbluy = m->newEvent(GAMMA, "HISTORY_MSG_ICMPBLUY"); //EvICMpbluy = m->newEvent(GAMMA, "HISTORY_MSG_ICMPBLUY");
EvICMgamm = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_WORKING_GAMMA"); EvICMgamm = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_WORKING_GAMMA");
EvICMslop = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_WORKING_SLOPE"); EvICMslop = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_WORKING_SLOPE");
EvICMtrcinMethod = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_WORKING_TRC_METHOD"); EvICMtrcinMethod = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_WORKING_TRC_METHOD");
@ -311,38 +311,30 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, "icm", M("TP_ICM_LABEL")), iuncha
redx->set_tooltip_text(M("TP_ICM_PRIMRED_TOOLTIP")); redx->set_tooltip_text(M("TP_ICM_PRIMRED_TOOLTIP"));
grex->set_tooltip_text(M("TP_ICM_PRIMGRE_TOOLTIP")); grex->set_tooltip_text(M("TP_ICM_PRIMGRE_TOOLTIP"));
blux->set_tooltip_text(M("TP_ICM_PRIMBLU_TOOLTIP")); blux->set_tooltip_text(M("TP_ICM_PRIMBLU_TOOLTIP"));
blr = Gtk::manage(new Gtk::Label(M(" ")));
blg = Gtk::manage(new Gtk::Label(M(" ")));
blb = Gtk::manage(new Gtk::Label(M(" ")));
redBox = Gtk::manage(new Gtk::Box());
redBox->pack_start(*redx);//, Gtk::PACK_SHRINK);
redBox->pack_start(*blr, Gtk::PACK_SHRINK);
redBox->pack_start(*redy);//, Gtk::PACK_SHRINK);
redFrame = Gtk::manage(new Gtk::Frame(M("TP_ICM_REDFRAME"))); redFrame = Gtk::manage(new Gtk::Frame(M("TP_ICM_REDFRAME")));
redFrame->set_label_align(0.025, 0.5); redFrame->set_label_align(0.025, 0.5);
Gtk::Box *redVBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
redVBox->pack_start(*redBox, Gtk::PACK_EXPAND_WIDGET);
redFrame->set_tooltip_text(M("TP_ICM_WORKING_PRIMFRAME_TOOLTIP")); redFrame->set_tooltip_text(M("TP_ICM_WORKING_PRIMFRAME_TOOLTIP"));
greBox = Gtk::manage(new Gtk::Box()); Gtk::Box *redVBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
greBox->pack_start(*grex);//, Gtk::PACK_SHRINK, 2); primCoordGrid = Gtk::manage(new Gtk::Grid());
greBox->pack_start(*blg, Gtk::PACK_SHRINK); primCoordGrid->set_column_homogeneous(true);
greBox->pack_start(*grey);//, Gtk::PACK_SHRINK, 2); primCoordGrid->attach(*redx, 0, 0, 1, 1);
redVBox->pack_start(*greBox, Gtk::PACK_EXPAND_WIDGET); primCoordGrid->attach_next_to(*redy, *redx, Gtk::PositionType::POS_RIGHT, 1, 1);
primCoordGrid->attach_next_to(*grex, *redx, Gtk::PositionType::POS_BOTTOM, 1, 1);
primCoordGrid->attach_next_to(*grey, *grex, Gtk::PositionType::POS_RIGHT, 1, 1);
primCoordGrid->attach_next_to(*blux, *grex, Gtk::PositionType::POS_BOTTOM, 1, 1);
primCoordGrid->attach_next_to(*bluy, *blux, Gtk::PositionType::POS_RIGHT, 1, 1);
redVBox->pack_start(*primCoordGrid, Gtk::PACK_EXPAND_WIDGET);
Gtk::Separator* const separator1 = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_VERTICAL)); Gtk::Separator* const separator1 = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_VERTICAL));
Gtk::Separator* const separator2 = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_VERTICAL)); Gtk::Separator* const separator2 = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_VERTICAL));
bluBox = Gtk::manage(new Gtk::Box());
bluBox->pack_start(*blux);//, Gtk::PACK_SHRINK);
bluBox->pack_start(*blb, Gtk::PACK_SHRINK);
bluBox->pack_start(*bluy);//, Gtk::PACK_SHRINK);
redVBox->pack_start(*bluBox, Gtk::PACK_EXPAND_WIDGET);
preser = Gtk::manage(new Adjuster(M("TP_ICM_WORKING_PRESER"), 0., 100., 0.5, 0.)); preser = Gtk::manage(new Adjuster(M("TP_ICM_WORKING_PRESER"), 0., 100., 0.5, 0.));
preser->setAdjusterListener(this); preser->setAdjusterListener(this);
preBox = Gtk::manage(new Gtk::Box()); preBox = Gtk::manage(new Gtk::Box());
preBox->pack_start(*preser, Gtk::PACK_SHRINK); preBox->pack_start(*preser, Gtk::PACK_EXPAND_WIDGET);
redVBox->pack_start(*separator1, Gtk::PACK_SHRINK); redVBox->pack_start(*separator1, Gtk::PACK_SHRINK);
redVBox->pack_start(*preBox, Gtk::PACK_EXPAND_WIDGET); redVBox->pack_start(*preBox, Gtk::PACK_EXPAND_WIDGET);
redVBox->pack_start(*separator2, Gtk::PACK_SHRINK); redVBox->pack_start(*separator2, Gtk::PACK_SHRINK);
@ -949,9 +941,7 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
&& ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM_GRID && ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM_GRID
) { ) {
will->set_sensitive(false); will->set_sensitive(false);
redBox->set_sensitive(false); primCoordGrid->set_sensitive(false);
greBox->set_sensitive(false);
bluBox->set_sensitive(false);
labgridcie->set_sensitive(false); labgridcie->set_sensitive(false);
} else { } else {
@ -959,9 +949,7 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
if (ColorManagementParams::Primaries(wprim->get_active_row_number()) == ColorManagementParams::Primaries::CUSTOM) { if (ColorManagementParams::Primaries(wprim->get_active_row_number()) == ColorManagementParams::Primaries::CUSTOM) {
will->set_sensitive(true); will->set_sensitive(true);
} }
redBox->set_sensitive(true); primCoordGrid->set_sensitive(true);
greBox->set_sensitive(true);
bluBox->set_sensitive(true);
labgridcie->set_sensitive(true); labgridcie->set_sensitive(true);
} }
@ -1091,9 +1079,7 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited)
case ColorManagementParams::Primaries::CUSTOM_GRID: { case ColorManagementParams::Primaries::CUSTOM_GRID: {
labgridcie->set_sensitive(true); labgridcie->set_sensitive(true);
redBox->set_sensitive(false); primCoordGrid->set_sensitive(false);
greBox->set_sensitive(false);
bluBox->set_sensitive(false);
will->set_sensitive(false); will->set_sensitive(false);
break; break;
} }
@ -1302,13 +1288,9 @@ void ICMPanel::wtrcinChanged()
ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM
&& ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM_GRID && ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM_GRID
) { ) {
redBox->set_sensitive(false); primCoordGrid->set_sensitive(false);
greBox->set_sensitive(false);
bluBox->set_sensitive(false);
} else { } else {
redBox->set_sensitive(true); primCoordGrid->set_sensitive(true);
greBox->set_sensitive(true);
bluBox->set_sensitive(true);
} }
} }
riaHBox->set_sensitive(true); riaHBox->set_sensitive(true);
@ -1340,9 +1322,7 @@ void ICMPanel::wtrcinChanged()
ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM
&& ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM_GRID && ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM_GRID
) { ) {
redBox->set_sensitive(false); primCoordGrid->set_sensitive(false);
greBox->set_sensitive(false);
bluBox->set_sensitive(false);
} }
} }
riaHBox->set_sensitive(true); riaHBox->set_sensitive(true);
@ -1367,13 +1347,9 @@ void ICMPanel::wtrcinChanged()
ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM
&& ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM_GRID && ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM_GRID
) { ) {
redBox->set_sensitive(false); primCoordGrid->set_sensitive(false);
greBox->set_sensitive(false);
bluBox->set_sensitive(false);
} else { } else {
redBox->set_sensitive(true); primCoordGrid->set_sensitive(true);
greBox->set_sensitive(true);
bluBox->set_sensitive(true);
} }
} }
break; break;
@ -1398,13 +1374,9 @@ void ICMPanel::wtrcinChanged()
ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM
&& ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM_GRID && ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM_GRID
) { ) {
redBox->set_sensitive(false); primCoordGrid->set_sensitive(false);
greBox->set_sensitive(false);
bluBox->set_sensitive(false);
} else { } else {
redBox->set_sensitive(true); primCoordGrid->set_sensitive(true);
greBox->set_sensitive(true);
bluBox->set_sensitive(true);
} }
} }
break; break;
@ -1429,13 +1401,9 @@ void ICMPanel::wtrcinChanged()
ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM
&& ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM_GRID && ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM_GRID
) { ) {
redBox->set_sensitive(false); primCoordGrid->set_sensitive(false);
greBox->set_sensitive(false);
bluBox->set_sensitive(false);
} else { } else {
redBox->set_sensitive(true); primCoordGrid->set_sensitive(true);
greBox->set_sensitive(true);
bluBox->set_sensitive(true);
} }
} }
break; break;
@ -1460,13 +1428,9 @@ void ICMPanel::wtrcinChanged()
ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM
&& ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM_GRID && ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM_GRID
) { ) {
redBox->set_sensitive(false); primCoordGrid->set_sensitive(false);
greBox->set_sensitive(false);
bluBox->set_sensitive(false);
} else { } else {
redBox->set_sensitive(true); primCoordGrid->set_sensitive(true);
greBox->set_sensitive(true);
bluBox->set_sensitive(true);
} }
} }
break; break;
@ -1761,18 +1725,14 @@ void ICMPanel::wprimChanged()
redFrame->show(); redFrame->show();
if (ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM) { if (ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM) {
redBox->set_sensitive(false); primCoordGrid->set_sensitive(false);
greBox->set_sensitive(false);
bluBox->set_sensitive(false);
labgridcie->set_sensitive(false); labgridcie->set_sensitive(false);
will->set_sensitive(false); will->set_sensitive(false);
if (ColorManagementParams::Primaries(wprim->get_active_row_number()) == ColorManagementParams::Primaries::CUSTOM_GRID) { if (ColorManagementParams::Primaries(wprim->get_active_row_number()) == ColorManagementParams::Primaries::CUSTOM_GRID) {
labgridcie->set_sensitive(true); labgridcie->set_sensitive(true);
} }
} else { } else {
redBox->set_sensitive(true); primCoordGrid->set_sensitive(true);
greBox->set_sensitive(true);
bluBox->set_sensitive(true);
labgridcie->set_sensitive(false); labgridcie->set_sensitive(false);
will->set_sensitive(true); will->set_sensitive(true);
} }
@ -1906,23 +1866,29 @@ void ICMPanel::ipChanged()
{ {
Glib::ustring profname; Glib::ustring profname;
Glib::ustring localized_profname;
if (inone->get_active()) { if (inone->get_active()) {
profname = inone->get_label(); profname = "(none)";
localized_profname = inone->get_label();
} else if (iembedded->get_active()) { } else if (iembedded->get_active()) {
profname = iembedded->get_label(); profname = "(embedded)";
localized_profname = iembedded->get_label();
} else if (icamera->get_active()) { } else if (icamera->get_active()) {
profname = icamera->get_label(); profname = "(camera)";
localized_profname = icamera->get_label();
} else if (icameraICC->get_active()) { } else if (icameraICC->get_active()) {
profname = icameraICC->get_label(); profname = "(cameraICC)";
localized_profname = icameraICC->get_label();
} else { } else {
profname = ipDialog->get_filename(); profname = ipDialog->get_filename();
localized_profname = profname;
} }
updateDCP(-1, profname); updateDCP(-1, profname);
if (listener && profname != oldip) { if (listener && profname != oldip) {
listener->panelChanged(EvIProfile, profname); listener->panelChanged(EvIProfile, localized_profname);
} }
oldip = profname; oldip = profname;

View File

@ -62,9 +62,9 @@ protected:
Gtk::Label* labmga; Gtk::Label* labmga;
Gtk::Box* gabox; Gtk::Box* gabox;
Gtk::Label* blr; //Gtk::Label* blr;
Gtk::Label* blg; //Gtk::Label* blg;
Gtk::Label* blb; //Gtk::Label* blb;
Gtk::Button* neutral; Gtk::Button* neutral;
sigc::connection neutralconn; sigc::connection neutralconn;
@ -86,12 +86,12 @@ private:
rtengine::ProcEvent EvICMprimariMethod; rtengine::ProcEvent EvICMprimariMethod;
rtengine::ProcEvent EvICMprofileMethod; rtengine::ProcEvent EvICMprofileMethod;
rtengine::ProcEvent EvICMtempMethod; rtengine::ProcEvent EvICMtempMethod;
rtengine::ProcEvent EvICMpredx; //rtengine::ProcEvent EvICMpredx;
rtengine::ProcEvent EvICMpredy; //rtengine::ProcEvent EvICMpredy;
rtengine::ProcEvent EvICMpgrex; //rtengine::ProcEvent EvICMpgrex;
rtengine::ProcEvent EvICMpgrey; //rtengine::ProcEvent EvICMpgrey;
rtengine::ProcEvent EvICMpblux; //rtengine::ProcEvent EvICMpblux;
rtengine::ProcEvent EvICMpbluy; //rtengine::ProcEvent EvICMpbluy;
rtengine::ProcEvent EvICMgamm; rtengine::ProcEvent EvICMgamm;
rtengine::ProcEvent EvICMslop; rtengine::ProcEvent EvICMslop;
rtengine::ProcEvent EvICMtrcinMethod; rtengine::ProcEvent EvICMtrcinMethod;
@ -115,9 +115,7 @@ private:
Gtk::Box* wprimBox; Gtk::Box* wprimBox;
Gtk::Label* wprimlab; Gtk::Label* wprimlab;
Gtk::Label* cielab; Gtk::Label* cielab;
Gtk::Box* redBox; Gtk::Grid* primCoordGrid;
Gtk::Box* greBox;
Gtk::Box* bluBox;
Gtk::Box* riaHBox; Gtk::Box* riaHBox;
Gtk::Box* preBox; Gtk::Box* preBox;
Gtk::Box* iVBox; Gtk::Box* iVBox;

View File

@ -148,11 +148,11 @@ Locallab::Locallab():
expsettings(Gtk::manage(new ControlSpotPanel())), expsettings(Gtk::manage(new ControlSpotPanel())),
// Tool list widget // Tool list widget
toollist(Gtk::manage(new LocallabToolList())), toollist(Gtk::manage(new LocallabToolList()))
// expcie(Gtk::manage(new Locallabcie())), // expcie(Gtk::manage(new Locallabcie())),
// Other widgets // Other widgets
resetshowButton(Gtk::manage(new Gtk::Button(M("TP_LOCALLAB_RESETSHOW")))) //resetshowButton(Gtk::manage(new Gtk::Button(M("TP_LOCALLAB_RESETSHOW"))))
{ {
set_orientation(Gtk::ORIENTATION_VERTICAL); set_orientation(Gtk::ORIENTATION_VERTICAL);
@ -197,7 +197,7 @@ Locallab::Locallab():
// panel->pack_start(*separator2, false, false); // panel->pack_start(*separator2, false, false);
// Add mask reset button to panel widget // Add mask reset button to panel widget
resetshowButton->signal_pressed().connect(sigc::mem_fun(*this, &Locallab::resetshowPressed)); //resetshowButton->signal_pressed().connect(sigc::mem_fun(*this, &Locallab::resetshowPressed));
// panel->pack_start(*resetshowButton); // panel->pack_start(*resetshowButton);
// Add panel widget to Locallab GUI // Add panel widget to Locallab GUI
@ -316,7 +316,7 @@ void Locallab::read(const rtengine::procparams::ProcParams* pp, const ParamsEdit
r->denoichmask = pp->locallab.spots.at(i).denoichmask; r->denoichmask = pp->locallab.spots.at(i).denoichmask;
r->shortc = pp->locallab.spots.at(i).shortc; r->shortc = pp->locallab.spots.at(i).shortc;
r->lumask = pp->locallab.spots.at(i).lumask; r->lumask = pp->locallab.spots.at(i).lumask;
r->savrest = pp->locallab.spots.at(i).savrest; //r->savrest = pp->locallab.spots.at(i).savrest;
if (pp->locallab.spots.at(i).complexMethod == "sim") { if (pp->locallab.spots.at(i).complexMethod == "sim") {
r->complexMethod = 0; r->complexMethod = 0;
@ -498,7 +498,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
r->denoichmask = newSpot->denoichmask; r->denoichmask = newSpot->denoichmask;
r->shortc = newSpot->shortc; r->shortc = newSpot->shortc;
r->lumask = newSpot->lumask; r->lumask = newSpot->lumask;
r->savrest = newSpot->savrest; //r->savrest = newSpot->savrest;
if (newSpot->complexMethod == "sim") { if (newSpot->complexMethod == "sim") {
r->complexMethod = 0; r->complexMethod = 0;
@ -809,7 +809,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
r->denoichmask = newSpot->denoichmask; r->denoichmask = newSpot->denoichmask;
r->shortc = newSpot->shortc; r->shortc = newSpot->shortc;
r->lumask = newSpot->lumask; r->lumask = newSpot->lumask;
r->savrest = newSpot->savrest; //r->savrest = newSpot->savrest;
if (newSpot->complexMethod == "sim") { if (newSpot->complexMethod == "sim") {
r->complexMethod = 0; r->complexMethod = 0;
@ -965,7 +965,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
pp->locallab.spots.at(pp->locallab.selspot).denoichmask = r->denoichmask; pp->locallab.spots.at(pp->locallab.selspot).denoichmask = r->denoichmask;
pp->locallab.spots.at(pp->locallab.selspot).shortc = r->shortc; pp->locallab.spots.at(pp->locallab.selspot).shortc = r->shortc;
pp->locallab.spots.at(pp->locallab.selspot).lumask = r->lumask; pp->locallab.spots.at(pp->locallab.selspot).lumask = r->lumask;
pp->locallab.spots.at(pp->locallab.selspot).savrest = r->savrest; //pp->locallab.spots.at(pp->locallab.selspot).savrest = r->savrest;
if (r->complexMethod == 0) { if (r->complexMethod == 0) {
pp->locallab.spots.at(pp->locallab.selspot).complexMethod = "sim"; pp->locallab.spots.at(pp->locallab.selspot).complexMethod = "sim";
@ -1128,13 +1128,13 @@ Locallab::llMaskVisibility Locallab::getMaskVisibility() const
return {prevDeltaE, colorMask, colorMaskinv, expMask, expMaskinv, shMask, shMaskinv, vibMask, softMask, blMask, tmMask, retiMask, sharMask, lcMask, cbMask, logMask, maskMask, cieMask}; return {prevDeltaE, colorMask, colorMaskinv, expMask, expMaskinv, shMask, shMaskinv, vibMask, softMask, blMask, tmMask, retiMask, sharMask, lcMask, cbMask, logMask, maskMask, cieMask};
} }
void Locallab::resetshowPressed() //void Locallab::resetshowPressed()
{ //{
// Raise event to reset mask // // Raise event to reset mask
if (listener) { // if (listener) {
listener->panelChanged(Evlocallabshowreset, ""); // listener->panelChanged(Evlocallabshowreset, "");
} // }
} //}
void Locallab::setEditProvider(EditDataProvider * provider) void Locallab::setEditProvider(EditDataProvider * provider)
{ {

View File

@ -127,7 +127,7 @@ private:
std::vector<locallabRef> maskBackRef; std::vector<locallabRef> maskBackRef;
// Other widgets // Other widgets
Gtk::Button* const resetshowButton; //Gtk::Button* const resetshowButton;
Glib::ustring spotName; Glib::ustring spotName;
@ -176,7 +176,7 @@ public:
llMaskVisibility getMaskVisibility() const; llMaskVisibility getMaskVisibility() const;
// Other widgets event functions // Other widgets event functions
void resetshowPressed(); //void resetshowPressed();
// EditProvider management function // EditProvider management function
void setEditProvider(EditDataProvider* provider) override; void setEditProvider(EditDataProvider* provider) override;

View File

@ -1151,7 +1151,7 @@ private:
Adjuster* const deltad; Adjuster* const deltad;
CurveEditorGroup* const LocalcurveEditorwavcomp; CurveEditorGroup* const LocalcurveEditorwavcomp;
FlatCurveEditor* const wavshapecomp; FlatCurveEditor* const wavshapecomp;
Adjuster* const fatres; //Adjuster* const fatres;
Gtk::CheckButton* const fftwlc; Gtk::CheckButton* const fftwlc;
MyExpander* const exprecovw; MyExpander* const exprecovw;
Gtk::Label* const maskusablew; Gtk::Label* const maskusablew;
@ -1342,8 +1342,8 @@ private:
Adjuster* const saturl; Adjuster* const saturl;
Adjuster* const chroml; Adjuster* const chroml;
MyExpander* const expL; MyExpander* const expL;
CurveEditorGroup* const CurveEditorL; //CurveEditorGroup* const CurveEditorL;
DiagonalCurveEditor* const LshapeL; //DiagonalCurveEditor* const LshapeL;
Adjuster* const targabs; Adjuster* const targabs;
MyComboBoxText* const surround; MyComboBoxText* const surround;
Gtk::Box* const surrHBox; Gtk::Box* const surrHBox;

View File

@ -2427,7 +2427,7 @@ LocallabContrast::LocallabContrast():
deltad(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DELTAD"), -3., 3., 0.1, 0.))),//, Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))), deltad(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DELTAD"), -3., 3., 0.1, 0.))),//, Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))),
LocalcurveEditorwavcomp(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVCOMP"))), LocalcurveEditorwavcomp(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVCOMP"))),
wavshapecomp(static_cast<FlatCurveEditor*>(LocalcurveEditorwavcomp->addCurve(CT_Flat, "", nullptr, false, false))), wavshapecomp(static_cast<FlatCurveEditor*>(LocalcurveEditorwavcomp->addCurve(CT_Flat, "", nullptr, false, false))),
fatres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATRES"), 0., 100., 1., 0.))), //fatres(Gtk::manage(new Adjuster(M("TP_LOCALLAB_FATRES"), 0., 100., 1., 0.))),
fftwlc(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FFTW")))), fftwlc(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_FFTW")))),
exprecovw(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))), exprecovw(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))),
maskusablew(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))), maskusablew(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
@ -2684,7 +2684,7 @@ LocallabContrast::LocallabContrast():
LocalcurveEditorwavcomp->curveListComplete(); LocalcurveEditorwavcomp->curveListComplete();
fatres->setAdjusterListener(this); //fatres->setAdjusterListener(this);
fftwlcConn = fftwlc->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::fftwlcChanged)); fftwlcConn = fftwlc->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::fftwlcChanged));
@ -2784,7 +2784,7 @@ LocallabContrast::LocallabContrast():
clariFrame->add(*clariBox); clariFrame->add(*clariBox);
pack_start(*clariFrame); pack_start(*clariFrame);
ToolParamBlock* const blurcontBox = Gtk::manage(new ToolParamBlock()); ToolParamBlock* const blurcontBox = Gtk::manage(new ToolParamBlock());
Gtk::Frame* const gradwavFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_GRADWAVFRA"))); Gtk::Frame* const gradwavFrame = Gtk::manage(new Gtk::Frame());
gradwavFrame->set_label_align(0.025, 0.5); gradwavFrame->set_label_align(0.025, 0.5);
gradwavFrame->set_label_widget(*wavgradl); gradwavFrame->set_label_widget(*wavgradl);
ToolParamBlock* const gradwavBox = Gtk::manage(new ToolParamBlock()); ToolParamBlock* const gradwavBox = Gtk::manage(new ToolParamBlock());
@ -2793,7 +2793,7 @@ LocallabContrast::LocallabContrast():
gradwavBox->pack_start(*angwav); gradwavBox->pack_start(*angwav);
gradwavFrame->add(*gradwavBox); gradwavFrame->add(*gradwavBox);
blurcontBox->pack_start(*gradwavFrame); blurcontBox->pack_start(*gradwavFrame);
Gtk::Frame* const edgFrame = Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_EDGSHARPFRA"))); Gtk::Frame* const edgFrame = Gtk::manage(new Gtk::Frame());
edgFrame->set_label_align(0.025, 0.5); edgFrame->set_label_align(0.025, 0.5);
edgFrame->set_label_widget(*wavedg); edgFrame->set_label_widget(*wavedg);
ToolParamBlock* const edgsBox = Gtk::manage(new ToolParamBlock()); ToolParamBlock* const edgsBox = Gtk::manage(new ToolParamBlock());
@ -3237,7 +3237,7 @@ void LocallabContrast::read(const rtengine::procparams::ProcParams* pp, const Pa
sigmadc->setValue(spot.sigmadc); sigmadc->setValue(spot.sigmadc);
deltad->setValue(spot.deltad); deltad->setValue(spot.deltad);
wavshapecomp->setCurve(spot.loccompwavcurve); wavshapecomp->setCurve(spot.loccompwavcurve);
fatres->setValue(spot.fatres); //fatres->setValue(spot.fatres);
enalcMask->set_active(spot.enalcMask); enalcMask->set_active(spot.enalcMask);
CCmasklcshape->setCurve(spot.CCmasklccurve); CCmasklcshape->setCurve(spot.CCmasklccurve);
LLmasklcshape->setCurve(spot.LLmasklccurve); LLmasklcshape->setCurve(spot.LLmasklccurve);
@ -3362,7 +3362,7 @@ void LocallabContrast::write(rtengine::procparams::ProcParams* pp, ParamsEdited*
spot.sigmadc = sigmadc->getValue(); spot.sigmadc = sigmadc->getValue();
spot.deltad = deltad->getValue(); spot.deltad = deltad->getValue();
spot.loccompwavcurve = wavshapecomp->getCurve(); spot.loccompwavcurve = wavshapecomp->getCurve();
spot.fatres = fatres->getValue(); //spot.fatres = fatres->getValue();
spot.fftwlc = fftwlc->get_active(); spot.fftwlc = fftwlc->get_active();
spot.enalcMask = enalcMask->get_active(); spot.enalcMask = enalcMask->get_active();
spot.CCmasklccurve = CCmasklcshape->getCurve(); spot.CCmasklccurve = CCmasklcshape->getCurve();
@ -3434,7 +3434,7 @@ void LocallabContrast::setDefaults(const rtengine::procparams::ProcParams* defPa
residcomp->setDefault(defSpot.residcomp); residcomp->setDefault(defSpot.residcomp);
sigmadc->setDefault(defSpot.sigmadc); sigmadc->setDefault(defSpot.sigmadc);
deltad->setDefault(defSpot.deltad); deltad->setDefault(defSpot.deltad);
fatres->setDefault(defSpot.fatres); //fatres->setDefault(defSpot.fatres);
blendmasklc->setDefault((double)defSpot.blendmasklc); blendmasklc->setDefault((double)defSpot.blendmasklc);
radmasklc->setDefault(defSpot.radmasklc); radmasklc->setDefault(defSpot.radmasklc);
chromasklc->setDefault(defSpot.chromasklc); chromasklc->setDefault(defSpot.chromasklc);
@ -3759,12 +3759,12 @@ void LocallabContrast::adjusterChanged(Adjuster* a, double newval)
} }
} }
if (a == fatres) { //if (a == fatres) {
if (listener) { // if (listener) {
listener->panelChanged(Evlocallabfatres, // listener->panelChanged(Evlocallabfatres,
fatres->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")"); // fatres->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
} // }
} //}
if (a == recothresw) { if (a == recothresw) {
@ -3983,7 +3983,7 @@ void LocallabContrast::convertParamToNormal()
sigmadc->setValue(defSpot.sigmadc); sigmadc->setValue(defSpot.sigmadc);
deltad->setValue(defSpot.deltad); deltad->setValue(defSpot.deltad);
wavshapecomp->setCurve(defSpot.loccompwavcurve); wavshapecomp->setCurve(defSpot.loccompwavcurve);
fatres->setValue(defSpot.fatres); //fatres->setValue(defSpot.fatres);
fftwlc->set_active(defSpot.fftwlc); fftwlc->set_active(defSpot.fftwlc);
decayw->setValue(defSpot.decayw); decayw->setValue(defSpot.decayw);
@ -5244,8 +5244,8 @@ LocallabLog::LocallabLog():
saturl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SATURV"), -100., 100., 0.5, 0.))), saturl(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SATURV"), -100., 100., 0.5, 0.))),
chroml(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROML"), -100., 100., 0.5, 0.))), chroml(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROML"), -100., 100., 0.5, 0.))),
expL(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_LOGEXP")))), expL(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_LOGEXP")))),
CurveEditorL(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_LOGCONTQ"))), //CurveEditorL(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_LOGCONTQ"))),
LshapeL(static_cast<DiagonalCurveEditor*>(CurveEditorL->addCurve(CT_Diagonal, "Q(Q)"))), //LshapeL(static_cast<DiagonalCurveEditor*>(CurveEditorL->addCurve(CT_Diagonal, "Q(Q)"))),
targabs(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOURCE_ABS"), 0.01, 16384.0, 0.01, 16.0))), targabs(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SOURCE_ABS"), 0.01, 16384.0, 0.01, 16.0))),
surround(Gtk::manage (new MyComboBoxText ())), surround(Gtk::manage (new MyComboBoxText ())),
surrHBox(Gtk::manage(new Gtk::Box())), surrHBox(Gtk::manage(new Gtk::Box())),
@ -5325,13 +5325,13 @@ LocallabLog::LocallabLog():
contq->setAdjusterListener(this); contq->setAdjusterListener(this);
colorfl->setAdjusterListener(this); colorfl->setAdjusterListener(this);
CurveEditorL->setCurveListener(this); //CurveEditorL->setCurveListener(this);
LshapeL->setResetCurve(DiagonalCurveType(defSpot.LcurveL.at(0)), defSpot.LcurveL); //LshapeL->setResetCurve(DiagonalCurveType(defSpot.LcurveL.at(0)), defSpot.LcurveL);
LshapeL->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}}); //LshapeL->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
LshapeL->setLeftBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}}); //LshapeL->setLeftBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
CurveEditorL->curveListComplete(); //CurveEditorL->curveListComplete();
targabs->setLogScale(500, 0); targabs->setLogScale(500, 0);
@ -5509,7 +5509,7 @@ LocallabLog::~LocallabLog()
{ {
delete maskCurveEditorL; delete maskCurveEditorL;
delete mask2CurveEditorL; delete mask2CurveEditorL;
delete CurveEditorL; //delete CurveEditorL;
} }
@ -5730,7 +5730,7 @@ void LocallabLog::read(const rtengine::procparams::ProcParams* pp, const ParamsE
contthres->setValue(spot.contthres); contthres->setValue(spot.contthres);
contq->setValue(spot.contq); contq->setValue(spot.contq);
colorfl->setValue(spot.colorfl); colorfl->setValue(spot.colorfl);
LshapeL->setCurve(spot.LcurveL); //LshapeL->setCurve(spot.LcurveL);
targabs->setValue(spot.targabs); targabs->setValue(spot.targabs);
targetGray->setValue(spot.targetGray); targetGray->setValue(spot.targetGray);
detail->setValue(spot.detail); detail->setValue(spot.detail);
@ -5794,7 +5794,7 @@ void LocallabLog::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi
spot.contthres = contthres->getValue(); spot.contthres = contthres->getValue();
spot.contq = contq->getValue(); spot.contq = contq->getValue();
spot.colorfl = colorfl->getValue(); spot.colorfl = colorfl->getValue();
spot.LcurveL = LshapeL->getCurve(); //spot.LcurveL = LshapeL->getCurve();
spot.detail = detail->getValue(); spot.detail = detail->getValue();
spot.baselog = baselog->getValue(); spot.baselog = baselog->getValue();
spot.sensilog = sensilog->getIntValue(); spot.sensilog = sensilog->getIntValue();
@ -6057,12 +6057,12 @@ void LocallabLog::curveChanged(CurveEditor* ce)
} }
} }
if (ce == LshapeL) { //if (ce == LshapeL) {
if (listener) { // if (listener) {
listener->panelChanged(EvlocallabLshapeL, // listener->panelChanged(EvlocallabLshapeL,
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")"); // M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
} // }
} //}
} }
} }
@ -7435,12 +7435,12 @@ Locallabcie::Locallabcie():
contqcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONQL"), -100., 100., 0.5, 0.))), contqcie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONQL"), -100., 100., 0.5, 0.))),
contthrescie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONTHRES"), -1., 1., 0.01, 0.))), contthrescie(Gtk::manage(new Adjuster(M("TP_LOCALLAB_LOGCONTHRES"), -1., 1., 0.01, 0.))),
logjzFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_LOGJZFRA")))), logjzFrame(Gtk::manage(new Gtk::Frame())),
logjz(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_JZLOG")))), logjz(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_JZLOG")))),
blackEvjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLACK_EV"), -16.0, 0.0, 0.1, -5.0))), blackEvjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLACK_EV"), -16.0, 0.0, 0.1, -5.0))),
whiteEvjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WHITE_EV"), 0., 32.0, 0.1, 10.0))), whiteEvjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WHITE_EV"), 0., 32.0, 0.1, 10.0))),
targetjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZTARGET_EV"), 4., 80.0, 0.1, 18.0))), targetjz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_JZTARGET_EV"), 4., 80.0, 0.1, 18.0))),
bevwevFrame(Gtk::manage(new Gtk::Frame(M("")))), bevwevFrame(Gtk::manage(new Gtk::Frame())),
forcebw(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_BWFORCE")))), forcebw(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_BWFORCE")))),
sigmoidFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGFRA")))), sigmoidFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGFRA")))),
@ -7713,7 +7713,7 @@ Locallabcie::Locallabcie():
jz2CurveEditorG->setCurveListener(this); jz2CurveEditorG->setCurveListener(this);
LHshapejz->setIdentityValue(0.); LHshapejz->setIdentityValue(0.);
LHshapejz->setResetCurve(FlatCurveType(defSpot.LHcurvejz.at(0)), defSpot.LHcurvejz); LHshapejz->setResetCurve(FlatCurveType(defSpot.LHcurvejz.at(0)), defSpot.LHcurvejz);
LHshapejz->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); // LHshapejz->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP"));
LHshapejz->setCurveColorProvider(this, 3); LHshapejz->setCurveColorProvider(this, 3);
LHshapejz->setBottomBarBgGradient(six_shape); LHshapejz->setBottomBarBgGradient(six_shape);
jz2CurveEditorG->curveListComplete(); jz2CurveEditorG->curveListComplete();
@ -7722,13 +7722,13 @@ Locallabcie::Locallabcie():
CHshapejz->setIdentityValue(0.); CHshapejz->setIdentityValue(0.);
CHshapejz->setResetCurve(FlatCurveType(defSpot.CHcurvejz.at(0)), defSpot.CHcurvejz); CHshapejz->setResetCurve(FlatCurveType(defSpot.CHcurvejz.at(0)), defSpot.CHcurvejz);
CHshapejz->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); // CHshapejz->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP"));
CHshapejz->setCurveColorProvider(this, 3); CHshapejz->setCurveColorProvider(this, 3);
CHshapejz->setBottomBarBgGradient(six_shape); CHshapejz->setBottomBarBgGradient(six_shape);
HHshapejz->setIdentityValue(0.); HHshapejz->setIdentityValue(0.);
HHshapejz->setResetCurve(FlatCurveType(defSpot.HHcurvejz.at(0)), defSpot.HHcurvejz); HHshapejz->setResetCurve(FlatCurveType(defSpot.HHcurvejz.at(0)), defSpot.HHcurvejz);
HHshapejz->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP")); // HHshapejz->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP"));
HHshapejz->setCurveColorProvider(this, 3); HHshapejz->setCurveColorProvider(this, 3);
HHshapejz->setBottomBarBgGradient(six_shape); HHshapejz->setBottomBarBgGradient(six_shape);
@ -8186,14 +8186,14 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips)
jz100->set_tooltip_text(M("TP_LOCALLAB_JZ100_TOOLTIP")); jz100->set_tooltip_text(M("TP_LOCALLAB_JZ100_TOOLTIP"));
pqremap->set_tooltip_text(M("TP_LOCALLAB_JZPQREMAP_TOOLTIP")); pqremap->set_tooltip_text(M("TP_LOCALLAB_JZPQREMAP_TOOLTIP"));
pqremapcam16->set_tooltip_text(M("TP_LOCALLAB_CAM16PQREMAP_TOOLTIP")); pqremapcam16->set_tooltip_text(M("TP_LOCALLAB_CAM16PQREMAP_TOOLTIP"));
Autograycie->set_tooltip_text(M("TP_LOCALLAB_AUTOGRAYCIE_TOOLTIP")); Autograycie->set_tooltip_text(M("TP_LOCALLAB_LOGAUTOGRAYJZ_TOOLTIP"));
sigmalcjz->set_tooltip_text(M("TP_LOCALLAB_WAT_SIGMALC_TOOLTIP")); sigmalcjz->set_tooltip_text(M("TP_LOCALLAB_WAT_SIGMALC_TOOLTIP"));
logjzFrame->set_tooltip_text(M("TP_LOCALLAB_JZLOGWB_TOOLTIP")); logjzFrame->set_tooltip_text(M("TP_LOCALLAB_JZLOGWB_TOOLTIP"));
blackEvjz->set_tooltip_text(M("TP_LOCALLAB_JZLOGWBS_TOOLTIP")); blackEvjz->set_tooltip_text(M("TP_LOCALLAB_JZLOGWBS_TOOLTIP"));
whiteEvjz->set_tooltip_text(M("TP_LOCALLAB_JZLOGWBS_TOOLTIP")); whiteEvjz->set_tooltip_text(M("TP_LOCALLAB_JZLOGWBS_TOOLTIP"));
clariFramejz->set_tooltip_markup(M("TP_LOCALLAB_CLARIJZ_TOOLTIP")); clariFramejz->set_tooltip_markup(M("TP_LOCALLAB_CLARIJZ_TOOLTIP"));
clarilresjz->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARILJZ_TOOLTIP")); clarilresjz->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARIL_TOOLTIP"));
claricresjz->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARICJZ_TOOLTIP")); claricresjz->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARIC_TOOLTIP"));
clarisoftjz->set_tooltip_markup(M("TP_LOCALLAB_CLARISOFTJZ_TOOLTIP")); clarisoftjz->set_tooltip_markup(M("TP_LOCALLAB_CLARISOFTJZ_TOOLTIP"));
wavshapejz->setTooltip(M("TP_LOCALLAB_WAT_WAVSHAPE_TOOLTIP")); wavshapejz->setTooltip(M("TP_LOCALLAB_WAT_WAVSHAPE_TOOLTIP"));
LocalcurveEditorwavjz->set_tooltip_markup(M("TP_LOCALLAB_WAT_LEVELLOCCONTRAST_TOOLTIP")); LocalcurveEditorwavjz->set_tooltip_markup(M("TP_LOCALLAB_WAT_LEVELLOCCONTRAST_TOOLTIP"));

View File

@ -44,33 +44,34 @@ struct LocaleToLang : private std::map<std::pair<Glib::ustring, Glib::ustring>,
emplace (key ("ca", "ES"), "Catala"); emplace (key ("ca", "ES"), "Catala");
emplace (key ("cs", "CZ"), "Czech"); emplace (key ("cs", "CZ"), "Czech");
emplace (key ("da", "DK"), "Dansk"); emplace (key ("da", "DK"), "Dansk");
emplace (key ("de", "DE"), "Deutsch"); emplace (key ("de", "" ), "Deutsch");
#ifdef __APPLE__ #ifdef __APPLE__
emplace (key ("en", "UK"), "English (UK)"); emplace (key ("en", "UK"), "English (UK)");
#else #else
emplace (key ("en", "GB"), "English (UK)"); emplace (key ("en", "GB"), "English (UK)");
#endif #endif
emplace (key ("en", "US"), "English (US)"); emplace (key ("en", "US"), "English (US)");
emplace (key ("es", "ES"), "Espanol"); emplace (key ("es", "" ), "Espanol (Latin America)");
emplace (key ("es", "ES"), "Espanol (Castellano)");
emplace (key ("eu", "ES"), "Euskara"); emplace (key ("eu", "ES"), "Euskara");
emplace (key ("fr", "FR"), "Francais"); emplace (key ("fr", "" ), "Francais");
emplace (key ("el", "GR"), "Greek"); emplace (key ("el", "GR"), "Greek");
emplace (key ("he", "IL"), "Hebrew"); emplace (key ("he", "IL"), "Hebrew");
emplace (key ("it", "IT"), "Italiano"); emplace (key ("it", "" ), "Italiano");
emplace (key ("ja", "JP"), "Japanese"); emplace (key ("ja", "JP"), "Japanese");
emplace (key ("lv", "LV"), "Latvian"); emplace (key ("lv", "" ), "Latvian");
emplace (key ("hu", "HU"), "Magyar"); emplace (key ("hu", "" ), "Magyar");
emplace (key ("nl", "NL"), "Nederlands"); emplace (key ("nl", "" ), "Nederlands");
emplace (key ("nn", "NO"), "Norsk BM"); emplace (key ("nn", "NO"), "Norsk BM");
emplace (key ("nb", "NO"), "Norsk BM"); emplace (key ("nb", "NO"), "Norsk BM");
emplace (key ("pl", "PL"), "Polish"); emplace (key ("pl", "" ), "Polish");
emplace (key ("pt", "PT"), "Portugues (Brasil)"); emplace (key ("pt", "" ), "Portugues (Brasil)");
emplace (key ("ru", "RU"), "Russian"); emplace (key ("ru", "" ), "Russian");
emplace (key ("sr", "RS"), "Serbian (Cyrilic Characters)"); emplace (key ("sr", "RS"), "Serbian (Cyrilic Characters)");
emplace (key ("sk", "SK"), "Slovak"); emplace (key ("sk", "" ), "Slovak");
emplace (key ("fi", "FI"), "Suomi"); emplace (key ("fi", "" ), "Suomi");
emplace (key ("sv", "SE"), "Swedish"); emplace (key ("sv", "SE"), "Swedish");
emplace (key ("tr", "TR"), "Turkish"); emplace (key ("tr", "" ), "Turkish");
emplace (key ("zh", "CN"), "Chinese (Simplified)"); emplace (key ("zh", "CN"), "Chinese (Simplified)");
emplace (key ("zh", "SG"), "Chinese (Traditional)"); emplace (key ("zh", "SG"), "Chinese (Traditional)");
} }
@ -79,12 +80,15 @@ struct LocaleToLang : private std::map<std::pair<Glib::ustring, Glib::ustring>,
{ {
Glib::ustring major, minor; Glib::ustring major, minor;
// TODO: Support 3 character language code when needed.
if (locale.length () >= 2) { if (locale.length () >= 2) {
major = locale.substr (0, 2).lowercase (); major = locale.substr (0, 2).lowercase ();
} }
if (locale.length () >= 5) { if (locale.length () >= 5) {
minor = locale.substr (3, 2).uppercase (); const Glib::ustring::size_type length =
locale.length() > 5 && g_unichar_isalnum(locale[5]) ? 3 : 2;
minor = locale.substr (3, length).uppercase ();
} }
// Look for matching language and country. // Look for matching language and country.
@ -95,7 +99,7 @@ struct LocaleToLang : private std::map<std::pair<Glib::ustring, Glib::ustring>,
} }
// Look for matching language only. // Look for matching language only.
iterator = find (key (major, major.uppercase())); iterator = find (key (major, ""));
if (iterator != end ()) { if (iterator != end ()) {
return iterator->second; return iterator->second;

View File

@ -773,6 +773,9 @@ void Options::readFromFile(Glib::ustring fname)
if (keyFile.has_key("General", "Language")) { if (keyFile.has_key("General", "Language")) {
language = keyFile.get_string("General", "Language"); language = keyFile.get_string("General", "Language");
if (!language.compare("Espanol")) {
language = "Espanol (Latin America)";
}
} }
if (keyFile.has_key("General", "LanguageAutoDetect")) { if (keyFile.has_key("General", "LanguageAutoDetect")) {

View File

@ -571,7 +571,7 @@ void ParamsEdited::set(bool v)
wavelet.Backmethod = v; wavelet.Backmethod = v;
wavelet.Tilesmethod = v; wavelet.Tilesmethod = v;
wavelet.complexmethod = v; wavelet.complexmethod = v;
wavelet.denmethod = v; //wavelet.denmethod = v;
wavelet.mixmethod = v; wavelet.mixmethod = v;
wavelet.slimethod = v; wavelet.slimethod = v;
wavelet.quamethod = v; wavelet.quamethod = v;
@ -632,7 +632,7 @@ void ParamsEdited::set(bool v)
wavelet.levelsigm = v; wavelet.levelsigm = v;
wavelet.ccwcurve = v; wavelet.ccwcurve = v;
wavelet.blcurve = v; wavelet.blcurve = v;
wavelet.opacityCurveSH = v; //wavelet.opacityCurveSH = v;
wavelet.opacityCurveRG = v; wavelet.opacityCurveRG = v;
wavelet.opacityCurveBY = v; wavelet.opacityCurveBY = v;
wavelet.wavdenoise = v; wavelet.wavdenoise = v;
@ -1982,7 +1982,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
wavelet.Backmethod = wavelet.Backmethod && p.wavelet.Backmethod == other.wavelet.Backmethod; wavelet.Backmethod = wavelet.Backmethod && p.wavelet.Backmethod == other.wavelet.Backmethod;
wavelet.Tilesmethod = wavelet.Tilesmethod && p.wavelet.Tilesmethod == other.wavelet.Tilesmethod; wavelet.Tilesmethod = wavelet.Tilesmethod && p.wavelet.Tilesmethod == other.wavelet.Tilesmethod;
wavelet.complexmethod = wavelet.complexmethod && p.wavelet.complexmethod == other.wavelet.complexmethod; wavelet.complexmethod = wavelet.complexmethod && p.wavelet.complexmethod == other.wavelet.complexmethod;
wavelet.denmethod = wavelet.denmethod && p.wavelet.denmethod == other.wavelet.denmethod; //wavelet.denmethod = wavelet.denmethod && p.wavelet.denmethod == other.wavelet.denmethod;
wavelet.mixmethod = wavelet.mixmethod && p.wavelet.mixmethod == other.wavelet.mixmethod; wavelet.mixmethod = wavelet.mixmethod && p.wavelet.mixmethod == other.wavelet.mixmethod;
wavelet.slimethod = wavelet.slimethod && p.wavelet.slimethod == other.wavelet.slimethod; wavelet.slimethod = wavelet.slimethod && p.wavelet.slimethod == other.wavelet.slimethod;
wavelet.quamethod = wavelet.quamethod && p.wavelet.quamethod == other.wavelet.quamethod; wavelet.quamethod = wavelet.quamethod && p.wavelet.quamethod == other.wavelet.quamethod;
@ -2044,7 +2044,7 @@ void ParamsEdited::initFrom(const std::vector<rtengine::procparams::ProcParams>&
wavelet.satlev = wavelet.satlev && p.wavelet.satlev == other.wavelet.satlev; wavelet.satlev = wavelet.satlev && p.wavelet.satlev == other.wavelet.satlev;
wavelet.ccwcurve = wavelet.ccwcurve && p.wavelet.ccwcurve == other.wavelet.ccwcurve; wavelet.ccwcurve = wavelet.ccwcurve && p.wavelet.ccwcurve == other.wavelet.ccwcurve;
wavelet.blcurve = wavelet.blcurve && p.wavelet.blcurve == other.wavelet.blcurve; wavelet.blcurve = wavelet.blcurve && p.wavelet.blcurve == other.wavelet.blcurve;
wavelet.opacityCurveSH = wavelet.opacityCurveSH && p.wavelet.opacityCurveSH == other.wavelet.opacityCurveSH; //wavelet.opacityCurveSH = wavelet.opacityCurveSH && p.wavelet.opacityCurveSH == other.wavelet.opacityCurveSH;
wavelet.opacityCurveRG = wavelet.opacityCurveRG && p.wavelet.opacityCurveRG == other.wavelet.opacityCurveRG; wavelet.opacityCurveRG = wavelet.opacityCurveRG && p.wavelet.opacityCurveRG == other.wavelet.opacityCurveRG;
wavelet.opacityCurveBY = wavelet.opacityCurveBY && p.wavelet.opacityCurveBY == other.wavelet.opacityCurveBY; wavelet.opacityCurveBY = wavelet.opacityCurveBY && p.wavelet.opacityCurveBY == other.wavelet.opacityCurveBY;
wavelet.wavdenoise = wavelet.wavdenoise && p.wavelet.wavdenoise == other.wavelet.wavdenoise; wavelet.wavdenoise = wavelet.wavdenoise && p.wavelet.wavdenoise == other.wavelet.wavdenoise;
@ -6864,9 +6864,9 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.wavelet.complexmethod = mods.wavelet.complexmethod; toEdit.wavelet.complexmethod = mods.wavelet.complexmethod;
} }
if (wavelet.denmethod) { //if (wavelet.denmethod) {
toEdit.wavelet.denmethod = mods.wavelet.denmethod; // toEdit.wavelet.denmethod = mods.wavelet.denmethod;
} //}
if (wavelet.mixmethod) { if (wavelet.mixmethod) {
toEdit.wavelet.mixmethod = mods.wavelet.mixmethod; toEdit.wavelet.mixmethod = mods.wavelet.mixmethod;
@ -7000,9 +7000,9 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng
toEdit.wavelet.blcurve = mods.wavelet.blcurve; toEdit.wavelet.blcurve = mods.wavelet.blcurve;
} }
if (wavelet.opacityCurveSH) { //if (wavelet.opacityCurveSH) {
toEdit.wavelet.opacityCurveSH = mods.wavelet.opacityCurveSH; // toEdit.wavelet.opacityCurveSH = mods.wavelet.opacityCurveSH;
} //}
if (wavelet.opacityCurveRG) { if (wavelet.opacityCurveRG) {
toEdit.wavelet.opacityCurveRG = mods.wavelet.opacityCurveRG; toEdit.wavelet.opacityCurveRG = mods.wavelet.opacityCurveRG;

View File

@ -1281,7 +1281,7 @@ struct WaveletParamsEdited {
bool Backmethod; bool Backmethod;
bool Tilesmethod; bool Tilesmethod;
bool complexmethod; bool complexmethod;
bool denmethod; //bool denmethod;
bool mixmethod; bool mixmethod;
bool slimethod; bool slimethod;
bool quamethod; bool quamethod;
@ -1335,7 +1335,7 @@ struct WaveletParamsEdited {
bool levelsigm; bool levelsigm;
bool ccwcurve; bool ccwcurve;
bool blcurve; bool blcurve;
bool opacityCurveSH; //bool opacityCurveSH;
bool opacityCurveBY; bool opacityCurveBY;
bool wavdenoise; bool wavdenoise;
bool wavdenoiseh; bool wavdenoiseh;

View File

@ -96,7 +96,7 @@ PerspCorrection::PerspCorrection () : FoldableToolPanel(this, "perspective", M("
EvPerspProjAngle = mapper->newEvent(TRANSFORM, "HISTORY_MSG_PERSP_PROJ_ANGLE"); EvPerspProjAngle = mapper->newEvent(TRANSFORM, "HISTORY_MSG_PERSP_PROJ_ANGLE");
EvPerspProjRotate = mapper->newEvent(TRANSFORM, "HISTORY_MSG_PERSP_PROJ_ROTATE"); EvPerspProjRotate = mapper->newEvent(TRANSFORM, "HISTORY_MSG_PERSP_PROJ_ROTATE");
EvPerspProjShift = mapper->newEvent(TRANSFORM, "HISTORY_MSG_PERSP_PROJ_SHIFT"); EvPerspProjShift = mapper->newEvent(TRANSFORM, "HISTORY_MSG_PERSP_PROJ_SHIFT");
EvPerspRender = mapper->newEvent(TRANSFORM); EvPerspRender = mapper->newEvent(TRANSFORM, "GENERAL_NA");
// Void events. // Void events.
EvPerspCamAngleVoid = mapper->newEvent(M_VOID, "HISTORY_MSG_PERSP_CAM_ANGLE"); EvPerspCamAngleVoid = mapper->newEvent(M_VOID, "HISTORY_MSG_PERSP_CAM_ANGLE");
EvPerspCamFocalLengthVoid = mapper->newEvent(M_VOID, "HISTORY_MSG_PERSP_CAM_FL"); EvPerspCamFocalLengthVoid = mapper->newEvent(M_VOID, "HISTORY_MSG_PERSP_CAM_FL");

View File

@ -2639,8 +2639,8 @@ void Preferences::darkFrameChanged()
{ {
//Glib::ustring s(darkFrameDir->get_filename()); //Glib::ustring s(darkFrameDir->get_filename());
Glib::ustring s(darkFrameDir->get_current_folder()); Glib::ustring s(darkFrameDir->get_current_folder());
//if( s.compare( rtengine::dfm.getPathname()) !=0 ){ //if( s.compare( rtengine::DFManager::getInstance().getPathname()) !=0 ){
rtengine::dfm.init(s); rtengine::DFManager::getInstance().init(s);
updateDFinfos(); updateDFinfos();
//} //}
} }
@ -2658,7 +2658,7 @@ void Preferences::flatFieldChanged()
void Preferences::updateDFinfos() void Preferences::updateDFinfos()
{ {
int t1, t2; int t1, t2;
rtengine::dfm.getStat(t1, t2); rtengine::DFManager::getInstance().getStat(t1, t2);
Glib::ustring s = Glib::ustring::compose("%1: %2 %3, %4 %5", M("PREFERENCES_DARKFRAMEFOUND"), t1, M("PREFERENCES_DARKFRAMESHOTS"), t2, M("PREFERENCES_DARKFRAMETEMPLATES")); Glib::ustring s = Glib::ustring::compose("%1: %2 %3, %4 %5", M("PREFERENCES_DARKFRAMEFOUND"), t1, M("PREFERENCES_DARKFRAMESHOTS"), t2, M("PREFERENCES_DARKFRAMETEMPLATES"));
dfLabel->set_text(s); dfLabel->set_text(s);
} }

View File

@ -193,7 +193,7 @@ Splash::Splash (Gtk::Window& parent) : Gtk::Dialog(M("GENERAL_ABOUT"), parent, t
} }
// Tab 4: the license // Tab 4: the license
std::string licenseFileName = Glib::build_filename (licensePath, "LICENSE.txt"); std::string licenseFileName = Glib::build_filename (licensePath, "LICENSE");
if ( Glib::file_test(licenseFileName, (Glib::FILE_TEST_EXISTS)) ) { if ( Glib::file_test(licenseFileName, (Glib::FILE_TEST_EXISTS)) ) {
FILE *f = g_fopen (licenseFileName.c_str (), "rt"); FILE *f = g_fopen (licenseFileName.c_str (), "rt");

View File

@ -557,7 +557,7 @@ void ToolPanelCoordinator::panelChanged(const rtengine::ProcEvent& event, const
maskStruc.blMask, maskStruc.tmMask, maskStruc.retiMask, maskStruc.sharMask, maskStruc.blMask, maskStruc.tmMask, maskStruc.retiMask, maskStruc.sharMask,
maskStruc.lcMask, maskStruc.cbMask, maskStruc.logMask, maskStruc.maskMask, maskStruc.cieMask); maskStruc.lcMask, maskStruc.cbMask, maskStruc.logMask, maskStruc.maskMask, maskStruc.cieMask);
} else if (event == rtengine::EvLocallabSpotCreated || event == rtengine::EvLocallabSpotSelectedWithMask || } else if (event == rtengine::EvLocallabSpotCreated || event == rtengine::EvLocallabSpotSelectedWithMask ||
event == rtengine::EvLocallabSpotDeleted || event == rtengine::Evlocallabshowreset || event == rtengine::EvLocallabSpotDeleted /*|| event == rtengine::Evlocallabshowreset*/ ||
event == rtengine::EvlocallabToolRemovedWithRefresh) { event == rtengine::EvlocallabToolRemovedWithRefresh) {
locallab->resetMaskVisibility(); locallab->resetMaskVisibility();
ipc->setLocallabMaskVisibility(false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); ipc->setLocallabMaskVisibility(false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
@ -944,7 +944,7 @@ void ToolPanelCoordinator::autoCropRequested()
crop->cropManipReady(); crop->cropManipReady();
} }
rtengine::RawImage* ToolPanelCoordinator::getDF() const rtengine::RawImage* ToolPanelCoordinator::getDF()
{ {
if (!ipc) { if (!ipc) {
return nullptr; return nullptr;
@ -959,7 +959,7 @@ rtengine::RawImage* ToolPanelCoordinator::getDF()
std::string model(imd->getModel()); std::string model(imd->getModel());
time_t timestamp = imd->getDateTimeAsTS(); time_t timestamp = imd->getDateTimeAsTS();
return rtengine::dfm.searchDarkFrame(maker, model, iso, shutter, timestamp); return rtengine::DFManager::getInstance().searchDarkFrame(maker, model, iso, shutter, timestamp);
} }
return nullptr; return nullptr;

View File

@ -307,7 +307,7 @@ public:
} }
//DFProvider interface //DFProvider interface
rtengine::RawImage* getDF() override; const rtengine::RawImage* getDF() override;
//FFProvider interface //FFProvider interface
rtengine::RawImage* getFF() override; rtengine::RawImage* getFF() override;

View File

@ -64,7 +64,7 @@ std::vector<GradientMilestone> makeWholeHueRange()
Wavelet::Wavelet() : Wavelet::Wavelet() :
FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"), true, true), FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"), true, true),
curveEditorG(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_CONTEDIT"))), curveEditorG(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_CONTEDIT"))),
curveEditorC(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_CONTRASTEDIT"))), //curveEditorC(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_CONTRASTEDIT"))),
CCWcurveEditorG(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_CCURVE"))), CCWcurveEditorG(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_CCURVE"))),
curveEditorbl(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_BLCURVE"))), curveEditorbl(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_BLCURVE"))),
curveEditorRES(new CurveEditorGroup(options.lastWaveletCurvesDir)), curveEditorRES(new CurveEditorGroup(options.lastWaveletCurvesDir)),
@ -178,7 +178,7 @@ Wavelet::Wavelet() :
Dirmethod(Gtk::manage(new MyComboBoxText())), Dirmethod(Gtk::manage(new MyComboBoxText())),
Medgreinf(Gtk::manage(new MyComboBoxText())), Medgreinf(Gtk::manage(new MyComboBoxText())),
ushamethod(Gtk::manage(new MyComboBoxText())), ushamethod(Gtk::manage(new MyComboBoxText())),
denmethod(Gtk::manage(new MyComboBoxText())), //denmethod(Gtk::manage(new MyComboBoxText())),
mixmethod(Gtk::manage(new MyComboBoxText())), mixmethod(Gtk::manage(new MyComboBoxText())),
quamethod(Gtk::manage(new MyComboBoxText())), quamethod(Gtk::manage(new MyComboBoxText())),
slimethod(Gtk::manage(new MyComboBoxText())), slimethod(Gtk::manage(new MyComboBoxText())),
@ -214,7 +214,7 @@ Wavelet::Wavelet() :
ctboxch(Gtk::manage(new Gtk::Box())), ctboxch(Gtk::manage(new Gtk::Box())),
quaHBox(Gtk::manage(new Gtk::Box())), quaHBox(Gtk::manage(new Gtk::Box())),
sliHBox(Gtk::manage(new Gtk::Box())), sliHBox(Gtk::manage(new Gtk::Box())),
denHBox(Gtk::manage(new Gtk::Box())), //denHBox(Gtk::manage(new Gtk::Box())),
mixHBox(Gtk::manage(new Gtk::Box())), mixHBox(Gtk::manage(new Gtk::Box())),
ctboxBA(Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL))) ctboxBA(Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)))
@ -253,11 +253,11 @@ Wavelet::Wavelet() :
EvWavLabGridValue = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVLABGRID_VALUE"); EvWavLabGridValue = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVLABGRID_VALUE");
EvWavrangeab = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_RANGEAB"); EvWavrangeab = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_RANGEAB");
EvWavprotab = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_PROTAB"); EvWavprotab = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_PROTAB");
EvWavlevelshc = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_LEVELSHC"); //EvWavlevelshc = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_LEVELSHC");
EvWavcomplexmet = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_COMPLEX"); EvWavcomplexmet = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_COMPLEX");
EvWavsigm = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSIGM"); EvWavsigm = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSIGM");
EvWavdenoise = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVDENOISE"); EvWavdenoise = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVDENOISE");
EvWavdenmethod = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVDENMET"); //EvWavdenmethod = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVDENMET");
EvWavmixmethod = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVMIXMET"); EvWavmixmethod = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVMIXMET");
EvWavquamethod = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVQUAMET"); EvWavquamethod = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVQUAMET");
EvWavlevden = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVLEVDEN"); EvWavlevden = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVLEVDEN");
@ -486,16 +486,16 @@ Wavelet::Wavelet() :
const WaveletParams default_params; const WaveletParams default_params;
curveEditorC->setCurveListener(this); //curveEditorC->setCurveListener(this);
curveEditorC->set_tooltip_text(M("TP_WAVELET_FINCOAR_TOOLTIP")); //curveEditorC->set_tooltip_text(M("TP_WAVELET_FINCOAR_TOOLTIP"));
opacityShapeSH = static_cast<FlatCurveEditor*>(curveEditorC->addCurve(CT_Flat, "", nullptr, false, false)); //opacityShapeSH = static_cast<FlatCurveEditor*>(curveEditorC->addCurve(CT_Flat, "", nullptr, false, false));
opacityShapeSH->setIdentityValue(0.); //opacityShapeSH->setIdentityValue(0.);
opacityShapeSH->setResetCurve(FlatCurveType(default_params.opacityCurveSH.at(0)), default_params.opacityCurveSH); //opacityShapeSH->setResetCurve(FlatCurveType(default_params.opacityCurveSH.at(0)), default_params.opacityCurveSH);
curveEditorC->curveListComplete(); //curveEditorC->curveListComplete();
curveEditorC->show(); //curveEditorC->show();
contrastSHVBox->pack_start(*HSmethod); contrastSHVBox->pack_start(*HSmethod);
contrastSHVBox->pack_start(*hllev); contrastSHVBox->pack_start(*hllev);
@ -684,17 +684,17 @@ Wavelet::Wavelet() :
sliHBox->pack_start(*slimethod); sliHBox->pack_start(*slimethod);
denmethod->append(M("TP_WAVELET_DENEQUAL")); //denmethod->append(M("TP_WAVELET_DENEQUAL"));
denmethod->append(M("TP_WAVELET_DEN14PLUS")); //denmethod->append(M("TP_WAVELET_DEN14PLUS"));
denmethod->append(M("TP_WAVELET_DEN14LOW")); //denmethod->append(M("TP_WAVELET_DEN14LOW"));
denmethod->append(M("TP_WAVELET_DEN12PLUS")); //denmethod->append(M("TP_WAVELET_DEN12PLUS"));
denmethod->append(M("TP_WAVELET_DEN12LOW")); //denmethod->append(M("TP_WAVELET_DEN12LOW"));
denmethodconn = denmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::denmethodChanged)); //denmethodconn = denmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::denmethodChanged));
denmethod->set_tooltip_text(M("TP_WAVELET_DENEQUAL_TOOLTIP")); //denmethod->set_tooltip_text(M("TP_WAVELET_DENEQUAL_TOOLTIP"));
// Gtk::Box* const denHBox = Gtk::manage(new Gtk::Box()); // Gtk::Box* const denHBox = Gtk::manage(new Gtk::Box());
Gtk::Label* const denLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_DENCONTRAST") + ":")); //Gtk::Label* const denLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_DENCONTRAST") + ":"));
denHBox->pack_start(*denLabel, Gtk::PACK_SHRINK, 4); //denHBox->pack_start(*denLabel, Gtk::PACK_SHRINK, 4);
denHBox->pack_start(*denmethod); //denHBox->pack_start(*denmethod);
mixmethod->append(M("TP_WAVELET_MIXNOISE")); mixmethod->append(M("TP_WAVELET_MIXNOISE"));
mixmethod->append(M("TP_WAVELET_MIXMIX")); mixmethod->append(M("TP_WAVELET_MIXMIX"));
@ -757,7 +757,7 @@ Wavelet::Wavelet() :
noiseBox->pack_start(*thrden); noiseBox->pack_start(*thrden);
noiseBox->pack_start(*quaHBox); noiseBox->pack_start(*quaHBox);
noiseBox->pack_start(*sliHBox); noiseBox->pack_start(*sliHBox);
noiseBox->pack_start(*denHBox); //noiseBox->pack_start(*denHBox);
noiseBox->pack_start(*mixHBox); noiseBox->pack_start(*mixHBox);
noiseBox->pack_start(*levelsigm, Gtk::PACK_SHRINK, 0); noiseBox->pack_start(*levelsigm, Gtk::PACK_SHRINK, 0);
noiseBox->pack_start(*limden); noiseBox->pack_start(*limden);
@ -1330,7 +1330,7 @@ Wavelet::~Wavelet()
idle_register.destroy(); idle_register.destroy();
delete opaCurveEditorG; delete opaCurveEditorG;
delete curveEditorC; //delete curveEditorC;
delete opacityCurveEditorG; delete opacityCurveEditorG;
delete CurveEditorwavnoise; delete CurveEditorwavnoise;
delete CurveEditorwavnoiseh; delete CurveEditorwavnoiseh;
@ -1422,7 +1422,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
Backmethodconn.block(true); Backmethodconn.block(true);
Tilesmethodconn.block(true); Tilesmethodconn.block(true);
complexmethodconn.block(true); complexmethodconn.block(true);
denmethodconn.block(true); //denmethodconn.block(true);
mixmethodconn.block(true); mixmethodconn.block(true);
slimethodconn.block(true); slimethodconn.block(true);
quamethodconn.block(true); quamethodconn.block(true);
@ -1553,17 +1553,17 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
complexmethod->set_active(1); complexmethod->set_active(1);
} }
if (pp->wavelet.denmethod == "equ") { //if (pp->wavelet.denmethod == "equ") {
denmethod->set_active(0); // denmethod->set_active(0);
} else if (pp->wavelet.denmethod == "high") { //} else if (pp->wavelet.denmethod == "high") {
denmethod->set_active(1); // denmethod->set_active(1);
} else if (pp->wavelet.denmethod == "low") { //} else if (pp->wavelet.denmethod == "low") {
denmethod->set_active(2); // denmethod->set_active(2);
} else if (pp->wavelet.denmethod == "12high") { //} else if (pp->wavelet.denmethod == "12high") {
denmethod->set_active(3); // denmethod->set_active(3);
} else if (pp->wavelet.denmethod == "12low") { //} else if (pp->wavelet.denmethod == "12low") {
denmethod->set_active(4); // denmethod->set_active(4);
} //}
if (pp->wavelet.mixmethod == "nois") { if (pp->wavelet.mixmethod == "nois") {
mixmethod->set_active(0); mixmethod->set_active(0);
@ -1628,7 +1628,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
opacityShapeRG->setCurve(pp->wavelet.opacityCurveRG); opacityShapeRG->setCurve(pp->wavelet.opacityCurveRG);
wavdenoise->setCurve(pp->wavelet.wavdenoise); wavdenoise->setCurve(pp->wavelet.wavdenoise);
wavdenoiseh->setCurve(pp->wavelet.wavdenoiseh); wavdenoiseh->setCurve(pp->wavelet.wavdenoiseh);
opacityShapeSH->setCurve(pp->wavelet.opacityCurveSH); //opacityShapeSH->setCurve(pp->wavelet.opacityCurveSH);
opacityShapeBY->setCurve(pp->wavelet.opacityCurveBY); opacityShapeBY->setCurve(pp->wavelet.opacityCurveBY);
opacityShape->setCurve(pp->wavelet.opacityCurveW); opacityShape->setCurve(pp->wavelet.opacityCurveW);
opacityShapeWL->setCurve(pp->wavelet.opacityCurveWL); opacityShapeWL->setCurve(pp->wavelet.opacityCurveWL);
@ -1804,9 +1804,9 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
complexmethod->set_active_text(M("GENERAL_UNCHANGED")); complexmethod->set_active_text(M("GENERAL_UNCHANGED"));
} }
if (!pedited->wavelet.denmethod) { //if (!pedited->wavelet.denmethod) {
denmethod->set_active_text(M("GENERAL_UNCHANGED")); // denmethod->set_active_text(M("GENERAL_UNCHANGED"));
} //}
if (!pedited->wavelet.mixmethod) { if (!pedited->wavelet.mixmethod) {
mixmethod->set_active_text(M("GENERAL_UNCHANGED")); mixmethod->set_active_text(M("GENERAL_UNCHANGED"));
@ -1882,7 +1882,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
exptoning->set_inconsistent(!pedited->wavelet.exptoning); exptoning->set_inconsistent(!pedited->wavelet.exptoning);
expnoise->set_inconsistent(!pedited->wavelet.expnoise); expnoise->set_inconsistent(!pedited->wavelet.expnoise);
opacityShapeRG->setCurve(pp->wavelet.opacityCurveRG); opacityShapeRG->setCurve(pp->wavelet.opacityCurveRG);
opacityShapeSH->setCurve(pp->wavelet.opacityCurveSH); //opacityShapeSH->setCurve(pp->wavelet.opacityCurveSH);
opacityShapeBY->setCurve(pp->wavelet.opacityCurveBY); opacityShapeBY->setCurve(pp->wavelet.opacityCurveBY);
wavdenoise->setCurve(pp->wavelet.wavdenoise); wavdenoise->setCurve(pp->wavelet.wavdenoise);
wavdenoiseh->setCurve(pp->wavelet.wavdenoiseh); wavdenoiseh->setCurve(pp->wavelet.wavdenoiseh);
@ -2071,7 +2071,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
Backmethodconn.block(false); Backmethodconn.block(false);
Tilesmethodconn.block(false); Tilesmethodconn.block(false);
complexmethodconn.block(false); complexmethodconn.block(false);
denmethodconn.block(false); //denmethodconn.block(false);
mixmethodconn.block(false); mixmethodconn.block(false);
slimethodconn.block(false); slimethodconn.block(false);
quamethodconn.block(false); quamethodconn.block(false);
@ -2102,7 +2102,7 @@ void Wavelet::setEditProvider(EditDataProvider *provider)
ccshape->setEditProvider(provider); ccshape->setEditProvider(provider);
blshape->setEditProvider(provider); blshape->setEditProvider(provider);
opacityShapeRG->setEditProvider(provider); opacityShapeRG->setEditProvider(provider);
opacityShapeSH->setEditProvider(provider); //opacityShapeSH->setEditProvider(provider);
opacityShapeBY->setEditProvider(provider); opacityShapeBY->setEditProvider(provider);
wavdenoise->setEditProvider(provider); wavdenoise->setEditProvider(provider);
wavdenoiseh->setEditProvider(provider); wavdenoiseh->setEditProvider(provider);
@ -2186,7 +2186,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited)
pp->wavelet.ccwcurve = ccshape->getCurve(); pp->wavelet.ccwcurve = ccshape->getCurve();
pp->wavelet.blcurve = blshape->getCurve(); pp->wavelet.blcurve = blshape->getCurve();
pp->wavelet.opacityCurveRG = opacityShapeRG->getCurve(); pp->wavelet.opacityCurveRG = opacityShapeRG->getCurve();
pp->wavelet.opacityCurveSH = opacityShapeSH->getCurve(); //pp->wavelet.opacityCurveSH = opacityShapeSH->getCurve();
pp->wavelet.opacityCurveBY = opacityShapeBY->getCurve(); pp->wavelet.opacityCurveBY = opacityShapeBY->getCurve();
pp->wavelet.wavdenoise = wavdenoise->getCurve(); pp->wavelet.wavdenoise = wavdenoise->getCurve();
pp->wavelet.wavdenoiseh = wavdenoiseh->getCurve(); pp->wavelet.wavdenoiseh = wavdenoiseh->getCurve();
@ -2274,7 +2274,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited)
pedited->wavelet.Backmethod = Backmethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->wavelet.Backmethod = Backmethod->get_active_text() != M("GENERAL_UNCHANGED");
pedited->wavelet.Tilesmethod = Tilesmethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->wavelet.Tilesmethod = Tilesmethod->get_active_text() != M("GENERAL_UNCHANGED");
pedited->wavelet.complexmethod = complexmethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->wavelet.complexmethod = complexmethod->get_active_text() != M("GENERAL_UNCHANGED");
pedited->wavelet.denmethod = denmethod->get_active_text() != M("GENERAL_UNCHANGED"); //pedited->wavelet.denmethod = denmethod->get_active_text() != M("GENERAL_UNCHANGED");
pedited->wavelet.mixmethod = mixmethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->wavelet.mixmethod = mixmethod->get_active_text() != M("GENERAL_UNCHANGED");
pedited->wavelet.slimethod = slimethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->wavelet.slimethod = slimethod->get_active_text() != M("GENERAL_UNCHANGED");
pedited->wavelet.quamethod = quamethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->wavelet.quamethod = quamethod->get_active_text() != M("GENERAL_UNCHANGED");
@ -2335,7 +2335,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited)
pedited->wavelet.leveldenoise = leveldenoise->getEditedState(); pedited->wavelet.leveldenoise = leveldenoise->getEditedState();
pedited->wavelet.levelsigm = levelsigm->getEditedState(); pedited->wavelet.levelsigm = levelsigm->getEditedState();
pedited->wavelet.opacityCurveRG = !opacityShapeRG->isUnChanged(); pedited->wavelet.opacityCurveRG = !opacityShapeRG->isUnChanged();
pedited->wavelet.opacityCurveSH = !opacityShapeSH->isUnChanged(); //pedited->wavelet.opacityCurveSH = !opacityShapeSH->isUnChanged();
pedited->wavelet.opacityCurveBY = !opacityShapeBY->isUnChanged(); pedited->wavelet.opacityCurveBY = !opacityShapeBY->isUnChanged();
pedited->wavelet.wavdenoise = !wavdenoise->isUnChanged(); pedited->wavelet.wavdenoise = !wavdenoise->isUnChanged();
pedited->wavelet.wavdenoiseh = !wavdenoiseh->isUnChanged(); pedited->wavelet.wavdenoiseh = !wavdenoiseh->isUnChanged();
@ -2500,17 +2500,17 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited)
pp->wavelet.complexmethod = "expert"; pp->wavelet.complexmethod = "expert";
} }
if (denmethod->get_active_row_number() == 0) { //if (denmethod->get_active_row_number() == 0) {
pp->wavelet.denmethod = "equ"; // pp->wavelet.denmethod = "equ";
} else if (denmethod->get_active_row_number() == 1) { //} else if (denmethod->get_active_row_number() == 1) {
pp->wavelet.denmethod = "high"; // pp->wavelet.denmethod = "high";
} else if (denmethod->get_active_row_number() == 2) { //} else if (denmethod->get_active_row_number() == 2) {
pp->wavelet.denmethod = "low"; // pp->wavelet.denmethod = "low";
} else if (denmethod->get_active_row_number() == 3) { //} else if (denmethod->get_active_row_number() == 3) {
pp->wavelet.denmethod = "12high"; // pp->wavelet.denmethod = "12high";
} else if (denmethod->get_active_row_number() == 4) { //} else if (denmethod->get_active_row_number() == 4) {
pp->wavelet.denmethod = "12low"; // pp->wavelet.denmethod = "12low";
} //}
if (mixmethod->get_active_row_number() == 0) { if (mixmethod->get_active_row_number() == 0) {
pp->wavelet.mixmethod = "nois"; pp->wavelet.mixmethod = "nois";
@ -2569,8 +2569,8 @@ void Wavelet::curveChanged(CurveEditor* ce)
listener->panelChanged(EvWavblshape, M("HISTORY_CUSTOMCURVE")); listener->panelChanged(EvWavblshape, M("HISTORY_CUSTOMCURVE"));
} else if (ce == opacityShapeRG) { } else if (ce == opacityShapeRG) {
listener->panelChanged(EvWavColor, M("HISTORY_CUSTOMCURVE")); listener->panelChanged(EvWavColor, M("HISTORY_CUSTOMCURVE"));
} else if (ce == opacityShapeSH) { //} else if (ce == opacityShapeSH) {
listener->panelChanged(EvWavlevelshc, M("HISTORY_CUSTOMCURVE")); // listener->panelChanged(EvWavlevelshc, M("HISTORY_CUSTOMCURVE"));
} else if (ce == opacityShapeBY) { } else if (ce == opacityShapeBY) {
listener->panelChanged(EvWavOpac, M("HISTORY_CUSTOMCURVE")); listener->panelChanged(EvWavOpac, M("HISTORY_CUSTOMCURVE"));
} else if (ce == wavdenoise) { } else if (ce == wavdenoise) {
@ -2913,13 +2913,13 @@ void Wavelet::HSmethodUpdateUI()
bllev->hide(); bllev->hide();
threshold->hide(); threshold->hide();
threshold2->hide(); threshold2->hide();
curveEditorC->hide(); //curveEditorC->hide();
} else { //with } else { //with
hllev->show(); hllev->show();
bllev->show(); bllev->show();
threshold->show(); threshold->show();
threshold2->show(); threshold2->show();
curveEditorC->show(); //curveEditorC->show();
} }
} }
} }
@ -3252,7 +3252,7 @@ void Wavelet::convertParamToNormal()
//denoise //denoise
chromfi->setValue(def_params.chromfi); chromfi->setValue(def_params.chromfi);
chromco->setValue(def_params.chromco); chromco->setValue(def_params.chromco);
denmethod->set_active(4); //denmethod->set_active(4);
mixmethod->set_active(2); mixmethod->set_active(2);
slimethod->set_active(0); slimethod->set_active(0);
levelsigm->setValue<double>(def_params.levelsigm); levelsigm->setValue<double>(def_params.levelsigm);
@ -3310,7 +3310,7 @@ void Wavelet::updateGUIToMode(int mode)
blurFrame->hide(); blurFrame->hide();
cbenab->hide(); cbenab->hide();
sigmafin->hide(); sigmafin->hide();
denHBox->hide(); //denHBox->hide();
mixHBox->hide(); mixHBox->hide();
sliHBox->hide(); sliHBox->hide();
sigm->hide(); sigm->hide();
@ -3338,7 +3338,7 @@ void Wavelet::updateGUIToMode(int mode)
blurFrame->show(); blurFrame->show();
cbenab->show(); cbenab->show();
sigmafin->show(); sigmafin->show();
denHBox->hide(); //denHBox->hide();
mixHBox->show(); mixHBox->show();
sigm->hide(); sigm->hide();
levelsigm->show(); levelsigm->show();
@ -3357,7 +3357,7 @@ void Wavelet::updateGUIToMode(int mode)
CurveEditorwavnoise->show(); CurveEditorwavnoise->show();
} }
disableListener(); disableListener();
denmethod->set_active(4); //denmethod->set_active(4);
enableListener(); enableListener();
} }
@ -3380,13 +3380,13 @@ void Wavelet::complexmethodChanged()
} }
} }
void Wavelet::denmethodChanged() //void Wavelet::denmethodChanged()
{ //{
//
if (listener && (multiImage || getEnabled())) { // if (listener && (multiImage || getEnabled())) {
listener->panelChanged(EvWavdenmethod, denmethod->get_active_text()); // listener->panelChanged(EvWavdenmethod, denmethod->get_active_text());
} // }
} //}
void Wavelet::mixmethodChanged() void Wavelet::mixmethodChanged()
{ {
@ -3511,7 +3511,7 @@ void Wavelet::setBatchMode(bool batchMode)
Backmethod->append(M("GENERAL_UNCHANGED")); Backmethod->append(M("GENERAL_UNCHANGED"));
Tilesmethod->append(M("GENERAL_UNCHANGED")); Tilesmethod->append(M("GENERAL_UNCHANGED"));
complexmethod->append(M("GENERAL_UNCHANGED")); complexmethod->append(M("GENERAL_UNCHANGED"));
denmethod->append(M("GENERAL_UNCHANGED")); //denmethod->append(M("GENERAL_UNCHANGED"));
mixmethod->append(M("GENERAL_UNCHANGED")); mixmethod->append(M("GENERAL_UNCHANGED"));
slimethod->append(M("GENERAL_UNCHANGED")); slimethod->append(M("GENERAL_UNCHANGED"));
quamethod->append(M("GENERAL_UNCHANGED")); quamethod->append(M("GENERAL_UNCHANGED"));
@ -3528,7 +3528,7 @@ void Wavelet::setBatchMode(bool batchMode)
Dirmethod->append(M("GENERAL_UNCHANGED")); Dirmethod->append(M("GENERAL_UNCHANGED"));
CCWcurveEditorG->setBatchMode(batchMode); CCWcurveEditorG->setBatchMode(batchMode);
opaCurveEditorG->setBatchMode(batchMode); opaCurveEditorG->setBatchMode(batchMode);
curveEditorC->setBatchMode(batchMode); //curveEditorC->setBatchMode(batchMode);
opacityCurveEditorG->setBatchMode(batchMode); opacityCurveEditorG->setBatchMode(batchMode);
CurveEditorwavnoise->setBatchMode(batchMode); CurveEditorwavnoise->setBatchMode(batchMode);
CurveEditorwavnoiseh->setBatchMode(batchMode); CurveEditorwavnoiseh->setBatchMode(batchMode);

View File

@ -139,7 +139,7 @@ private:
void MedgreinfChanged(); void MedgreinfChanged();
void TMmethodChanged(); void TMmethodChanged();
void complexmethodChanged(); void complexmethodChanged();
void denmethodChanged(); //void denmethodChanged();
void mixmethodChanged(); void mixmethodChanged();
void quamethodChanged(); void quamethodChanged();
void slimethodChanged(); void slimethodChanged();
@ -190,8 +190,8 @@ private:
void enableToggled(MyExpander* expander); void enableToggled(MyExpander* expander);
CurveEditorGroup* const curveEditorG; CurveEditorGroup* const curveEditorG;
CurveEditorGroup* const curveEditorC; //CurveEditorGroup* const curveEditorC;
FlatCurveEditor* opacityShapeSH; //FlatCurveEditor* opacityShapeSH;
CurveEditorGroup* const CCWcurveEditorG; CurveEditorGroup* const CCWcurveEditorG;
CurveEditorGroup* const curveEditorbl; CurveEditorGroup* const curveEditorbl;
@ -349,8 +349,8 @@ private:
sigc::connection MedgreinfConn; sigc::connection MedgreinfConn;
MyComboBoxText* const ushamethod; MyComboBoxText* const ushamethod;
sigc::connection ushamethodconn; sigc::connection ushamethodconn;
MyComboBoxText* const denmethod; //MyComboBoxText* const denmethod;
sigc::connection denmethodconn; //sigc::connection denmethodconn;
MyComboBoxText* const mixmethod; MyComboBoxText* const mixmethod;
sigc::connection mixmethodconn; sigc::connection mixmethodconn;
MyComboBoxText* const quamethod; MyComboBoxText* const quamethod;
@ -392,7 +392,7 @@ private:
Gtk::Box* const ctboxch; Gtk::Box* const ctboxch;
Gtk::Box* const quaHBox; Gtk::Box* const quaHBox;
Gtk::Box* const sliHBox; Gtk::Box* const sliHBox;
Gtk::Box* const denHBox; //Gtk::Box* const denHBox;
Gtk::Box* const mixHBox; Gtk::Box* const mixHBox;
Gtk::Box* const ctboxBA;// = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); Gtk::Box* const ctboxBA;// = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));

46
tools/findorphans.py Executable file
View File

@ -0,0 +1,46 @@
#!/usr/bin/env python3
import clang.cindex
import subprocess
import sys
index = clang.cindex.Index.create()
procevents = index.parse('rtengine/procevents.h',args=['-x', 'c++'])
if(1):
for chld in procevents.cursor.get_children():
if(chld.displayname == 'rtengine'):
for c in chld.get_children():
if(c.displayname == 'ProcEventCode'):
for pec in c.get_children():
#print(pec.kind, pec.displayname, pec.enum_value)
#print(pec.displayname, file=sys.stderr)
grp1 = subprocess.Popen(('grep', '-ro', '--exclude=procevents.h', '--exclude-dir=.git', pec.displayname), stdout=subprocess.PIPE)
wcr1 = subprocess.check_output(('wc', '-l'), stdin=grp1.stdout)
grp1.wait()
grp2 = subprocess.Popen(('grep', '-ro', '--exclude=procevents.h', '--exclude=refreshmap.cc', '--exclude-dir=.git', pec.displayname), stdout=subprocess.PIPE)
wcr2 = subprocess.check_output(('wc', '-l'), stdin=grp2.stdout)
grp2.wait()
print(pec.enum_value, pec.displayname,int(wcr1), int(wcr2))
with open('rtdata/languages/default', 'r') as deflang:
for line in deflang:
if(line[0] == '#'):
continue
if(line[0:2] == '//'):
continue
if(line[0:2] == '/*'):
#our language files support comment blocks?????????????????????????????
#or is this commented block bogus?
continue
if(line[0:2] == '*/'):
continue
else:
stringid = line.split(';')[0]
if(stringid.startswith('HISTORY_MSG')):
continue
#print(stringid, file=sys.stderr)
grp1 = subprocess.Popen(('grep', '-ro', '--exclude-dir=languages', '--exclude-dir=.git', stringid), stdout=subprocess.PIPE)
wcr1 = subprocess.check_output(('wc', '-l'), stdin=grp1.stdout)
grp1.wait()
print(stringid, int(wcr1))

View File

@ -3,10 +3,14 @@
<dict> <dict>
<key>LSEnvironment</key> <key>LSEnvironment</key>
<dict> <dict>
<key>XDG_DATA_DIRS</key> <key>XDG_CONFIG_DIRS</key>
<string>/Applications/RawTherapee.app/Contents/Resources/share/gtk-3.0</string>
<key>XDG_CONFIG_HOME</key>
<string>/Applications/RawTherapee.app/Contents/Resources/share</string> <string>/Applications/RawTherapee.app/Contents/Resources/share</string>
<key>XDG_DATA_DIRS</key>
<string>/Applications/RawTherapee.app/Contents/Resources/share/gtk-3.0</string>
<key>GTK_PATH</key> <key>GTK_PATH</key>
<string>/Applications/RawTherapee.app/Contents/Frameworks</string> <string>/Applications/RawTherapee.app/Contents/Resources/share/gtk-3.0</string>
<key>GTK_IM_MODULE_FILE</key> <key>GTK_IM_MODULE_FILE</key>
<string>/Applications/RawTherapee.app/Contents/Resources/etc/gtk-3.0/gtk.immodules</string> <string>/Applications/RawTherapee.app/Contents/Resources/etc/gtk-3.0/gtk.immodules</string>
<key>XDG_DATA_HOME</key> <key>XDG_DATA_HOME</key>
@ -28,8 +32,13 @@
</dict> </dict>
<key>LSMultipleInstancesProhibited</key> <key>LSMultipleInstancesProhibited</key>
<true /> <true />
<key>LSMinimumSystemVersion</key> <key>LSMinimumSystemVersionByArchitecture</key>
<string>@minimum_macos_version@</string> <dict>
<key>arm64</key>
<string>@minimum_arm64_version@</string>
<key>x86_64</key>
<string>@minimum_x86_64_version@</string>
</dict>
<key>CFBundleAllowMixedLocalizations</key> <key>CFBundleAllowMixedLocalizations</key>
<true /> <true />
<key>CFBundleDisplayName</key> <key>CFBundleDisplayName</key>
@ -156,9 +165,10 @@
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>@shortVersion@</string> <string>@shortVersion@</string>
<key>LSExecutableArchitectures</key> <key>LSArchitecturePriority</key>
<array> <array>
<string>@arch@</string> <string>arm64</string>
<string>x86_64</string>
</array> </array>
<key>NSHighResolutionCapable</key> <key>NSHighResolutionCapable</key>
<true /> <true />

View File

@ -24,7 +24,7 @@ function msgError {
} }
function GetDependencies { function GetDependencies {
otool -L "$1" | awk 'NR >= 2 && $1 !~ /^(\/usr\/lib|\/System|@executable_path|@rpath)\// { print $1 }' otool -L "$1" | awk 'NR >= 2 && $1 !~ /^(\/usr\/lib|\/System|@executable_path|@rpath)\// { print $1 }' 2>&1
} }
function CheckLink { function CheckLink {
@ -40,11 +40,11 @@ function ModifyInstallNames {
{ {
# id # id
if [[ ${x:(-6)} == ".dylib" ]] || [[ f${x:(-3)} == ".so" ]]; then if [[ ${x:(-6)} == ".dylib" ]] || [[ f${x:(-3)} == ".so" ]]; then
install_name_tool -id /Applications/"${LIB}"/$(basename ${x}) ${x} install_name_tool -id /Applications/"${LIB}"/$(basename ${x}) ${x} 2>/dev/null
fi fi
GetDependencies "${x}" | while read -r y GetDependencies "${x}" | while read -r y
do do
install_name_tool -change ${y} /Applications/"${LIB}"/$(basename ${y}) ${x} install_name_tool -change ${y} /Applications/"${LIB}"/$(basename ${y}) ${x} 2>/dev/null
done done
} | bash -v } | bash -v
done done
@ -120,6 +120,13 @@ minimum_macos_version=${MINIMUM_SYSTEM_VERSION}
#Out: /opt #Out: /opt
LOCAL_PREFIX="$(cmake .. -L -N | grep LOCAL_PREFIX)"; LOCAL_PREFIX="${LOCAL_PREFIX#*=}" LOCAL_PREFIX="$(cmake .. -L -N | grep LOCAL_PREFIX)"; LOCAL_PREFIX="${LOCAL_PREFIX#*=}"
#In: OSX_UNIVERSAL_URL=https:// etc.
#Out: https:// etc.
UNIVERSAL_URL="$(cmake .. -L -N | grep OSX_UNIVERSAL_URL)"; UNIVERSAL_URL="${UNIVERSAL_URL#*=}"
if [[ -n $UNIVERSAL_URL ]]; then
echo "Univeral app is ON. The URL is ${UNIVERSAL_URL}"
fi
#In: pkgcfg_lib_EXPAT_expat:FILEPATH=/opt/local/lib/libexpat.dylib #In: pkgcfg_lib_EXPAT_expat:FILEPATH=/opt/local/lib/libexpat.dylib
#Out: /opt/local/lib/libexpat.dylib #Out: /opt/local/lib/libexpat.dylib
EXPATLIB="$(cmake .. -LA -N | grep pkgcfg_lib_EXPAT_expat)"; pkgcfg_lib_EXPAT_expat="${pkgcfg_lib_EXPAT_expat#*=}" EXPATLIB="$(cmake .. -LA -N | grep pkgcfg_lib_EXPAT_expat)"; pkgcfg_lib_EXPAT_expat="${pkgcfg_lib_EXPAT_expat#*=}"
@ -139,6 +146,13 @@ if [[ -n $FANCY_DMG ]]; then
echo "Fancy .dmg build is ON." echo "Fancy .dmg build is ON."
fi fi
# In: OSX_NIGHTLY:BOOL=ON
# Out: ON
OSX_NIGHTLY="$(cmake .. -L -N | grep OSX_NIGHTLY)"; NIGHTLY="${OSX_NIGHTLY#*=}"
if [[ -n $NIGHTLY ]]; then
echo "Nightly/generically-named zip is ON."
fi
APP="${PROJECT_NAME}.app" APP="${PROJECT_NAME}.app"
CONTENTS="${APP}/Contents" CONTENTS="${APP}/Contents"
RESOURCES="${CONTENTS}/Resources" RESOURCES="${CONTENTS}/Resources"
@ -149,7 +163,7 @@ EXECUTABLE="${MACOS}/rawtherapee"
GDK_PREFIX="${LOCAL_PREFIX}/" GDK_PREFIX="${LOCAL_PREFIX}/"
msg "Removing old files:" msg "Removing old files:"
rm -rf "${APP}" *.dmg *.zip rm -rf "${APP}" *.dmg *.zip *.app
msg "Creating bundle container:" msg "Creating bundle container:"
install -d "${RESOURCES}" install -d "${RESOURCES}"
@ -188,10 +202,10 @@ ditto ${LOCAL_PREFIX}/lib/liblensfun.2.dylib "${CONTENTS}/Frameworks/liblensfun.
ditto ${LOCAL_PREFIX}/lib/libomp.dylib "${CONTENTS}/Frameworks" ditto ${LOCAL_PREFIX}/lib/libomp.dylib "${CONTENTS}/Frameworks"
msg "Copying dependencies from ${GTK_PREFIX}." msg "Copying dependencies from ${GTK_PREFIX}."
CheckLink "${EXECUTABLE}" CheckLink "${EXECUTABLE}" 2>&1
# dylib install names # dylib install names
ModifyInstallNames ModifyInstallNames 2>&1
# Copy libjpeg-turbo ("62") into the app bundle # Copy libjpeg-turbo ("62") into the app bundle
ditto ${LOCAL_PREFIX}/lib/libjpeg.62.dylib "${CONTENTS}/Frameworks/libjpeg.62.dylib" ditto ${LOCAL_PREFIX}/lib/libjpeg.62.dylib "${CONTENTS}/Frameworks/libjpeg.62.dylib"
@ -246,20 +260,22 @@ cp -RL "${LOCAL_PREFIX}/share/icons/hicolor" "${RESOURCES}/share/icons/hicolor"
# fix libfreetype install name # fix libfreetype install name
for lib in "${LIB}"/*; do for lib in "${LIB}"/*; do
install_name_tool -change libfreetype.6.dylib "${LIB}"/libfreetype.6.dylib "${lib}" install_name_tool -change libfreetype.6.dylib "${LIB}"/libfreetype.6.dylib "${lib}" 2>/dev/null
done done
# Build GTK3 pixbuf loaders & immodules database # Build GTK3 pixbuf loaders & immodules database
msg "Build GTK3 databases:" msg "Build GTK3 databases:"
mkdir -p "${RESOURCES}"/share/gtk-3.0
mkdir -p "${ETC}"/gtk-3.0
"${LOCAL_PREFIX}"/bin/gdk-pixbuf-query-loaders "${LIB}"/libpixbufloader-*.so > "${ETC}"/gtk-3.0/gdk-pixbuf.loaders "${LOCAL_PREFIX}"/bin/gdk-pixbuf-query-loaders "${LIB}"/libpixbufloader-*.so > "${ETC}"/gtk-3.0/gdk-pixbuf.loaders
"${LOCAL_PREFIX}"/bin/gtk-query-immodules-3.0 "${LIB}"/im-* > "${ETC}"/gtk-3.0/gtk.immodules || "${LOCAL_PREFIX}"/bin/gtk-query-immodules "${LIB}"/im-* > "${ETC}"/gtk-3.0/gtk.immodules "${LOCAL_PREFIX}"/bin/gtk-query-immodules-3.0 "${LIB}"/im-* > "${ETC}"/gtk-3.0/gtk.immodules || "${LOCAL_PREFIX}"/bin/gtk-query-immodules "${LIB}"/im-* > "${ETC}"/gtk-3.0/gtk.immodules
sed -i.bak -e "s|${PWD}/RawTherapee.app/Contents/|/Applications/RawTherapee.app/Contents/|" "${ETC}"/gtk-3.0/gdk-pixbuf.loaders "${ETC}/gtk-3.0/gtk.immodules" sed -i.bak -e "s|${PWD}/RawTherapee.app/Contents/|/Applications/RawTherapee.app/Contents/|" "${ETC}"/gtk-3.0/gdk-pixbuf.loaders "${ETC}/gtk-3.0/gtk.immodules"
sed -i.bak -e "s|${LOCAL_PREFIX}/share/|/Applications/RawTherapee.app/Contents/Resources/share/|" "${ETC}"/gtk-3.0/gtk.immodules sed -i.bak -e "s|${LOCAL_PREFIX}/share/|/Applications/RawTherapee.app/Contents/Resources/share/|" "${ETC}"/gtk-3.0/gtk.immodules
sed -i.bak -e "s|${LOCAL_PREFIX}/|/Applications/RawTherapee.app/Contents/Frameworks/|" "${ETC}"/gtk-3.0/gtk.immodules sed -i.bak -e "s|${LOCAL_PREFIX}/|/Applications/RawTherapee.app/Contents/Frameworks/|" "${ETC}"/gtk-3.0/gtk.immodules
rm "${ETC}"/*.bak rm "${ETC}"/*/*.bak
# Install names # Install names
ModifyInstallNames ModifyInstallNames 2>/dev/null
# Mime directory # Mime directory
msg "Copying shared files from ${GTK_PREFIX}:" msg "Copying shared files from ${GTK_PREFIX}:"
@ -271,8 +287,8 @@ ditto "${PROJECT_SOURCE_DIR}/rtdata/fonts" "${ETC}/fonts"
# App bundle resources # App bundle resources
ditto "${PROJECT_SOURCE_DATA_DIR}/"{rawtherapee,profile}.icns "${RESOURCES}" ditto "${PROJECT_SOURCE_DATA_DIR}/"{rawtherapee,profile}.icns "${RESOURCES}"
ditto "${PROJECT_SOURCE_DATA_DIR}/PkgInfo" "${CONTENTS}" #ditto "${PROJECT_SOURCE_DATA_DIR}/PkgInfo" "${CONTENTS}"
cmake -DPROJECT_SOURCE_DATA_DIR=${PROJECT_SOURCE_DATA_DIR} -DCONTENTS=${CONTENTS} -Dversion=${PROJECT_FULL_VERSION} -DshortVersion=${PROJECT_VERSION} -Darch=${arch} -P "${PROJECT_SOURCE_DATA_DIR}/info-plist.cmake"
update-mime-database -V "${RESOURCES}/share/mime" update-mime-database -V "${RESOURCES}/share/mime"
cp -RL "${LOCAL_PREFIX}/share/locale" "${RESOURCES}/share/locale" cp -RL "${LOCAL_PREFIX}/share/locale" "${RESOURCES}/share/locale"
@ -283,20 +299,61 @@ cp -LR {"${LOCAL_PREFIX}","${RESOURCES}"}/share/glib-2.0/schemas
# Append an LC_RPATH # Append an LC_RPATH
msg "Registering @rpath into the main executable." msg "Registering @rpath into the main executable."
install_name_tool -add_rpath /Applications/"${LIB}" "${EXECUTABLE}" install_name_tool -add_rpath /Applications/"${LIB}" "${EXECUTABLE}" 2>/dev/null
ModifyInstallNames ModifyInstallNames 2>/dev/null
# fix @rpath in Frameworks # fix @rpath in Frameworks
msg "Registering @rpath in Frameworks folder." msg "Registering @rpath in Frameworks folder."
for frameworklibs in "${LIB}"/*{dylib,so,cli}; do for frameworklibs in "${LIB}"/*{dylib,so,cli}; do
install_name_tool -delete_rpath ${LOCAL_PREFIX}/lib "${frameworklibs}" install_name_tool -delete_rpath ${LOCAL_PREFIX}/lib "${frameworklibs}" 2>/dev/null
install_name_tool -add_rpath /Applications/"${LIB}" "${frameworklibs}" install_name_tool -add_rpath /Applications/"${LIB}" "${frameworklibs}" 2>/dev/null
done done
install_name_tool -delete_rpath RawTherapee.app/Contents/Frameworks "${EXECUTABLE}"-cli install_name_tool -delete_rpath RawTherapee.app/Contents/Frameworks "${EXECUTABLE}"-cli 2>/dev/null
install_name_tool -add_rpath /Applications/"${LIB}" "${EXECUTABLE}"-cli install_name_tool -add_rpath /Applications/"${LIB}" "${EXECUTABLE}"-cli 2>/dev/null
ditto "${EXECUTABLE}"-cli "${APP}"/.. ditto "${EXECUTABLE}"-cli "${APP}"/..
# Merge the app with the other archictecture to create the Universal app.
if [[ -n $UNIVERSAL_URL ]]; then
msg "Getting Universal countercomponent."
curl -L ${UNIVERSAL_URL} -o univ.zip
msg "Extracting app."
unzip univ.zip -d univapp
hdiutil attach -mountpoint ./RawTherapeeuniv univapp/*/*dmg
if [[ $arch = "arm64" ]]; then
cp -R RawTherapee.app RawTherapee-arm64.app
minimum_arm64_version=$(f=$(cat RawTherapee-arm64.app/Contents/Resources/AboutThisBuild.txt | grep mmacosx-version); echo "${f#*min=}" | cut -d ' ' -f1)
cp -R RawTherapeeuniv/RawTherapee.app RawTherapee-x86_64.app
minimum_x86_64_version=$(f=$(cat RawTherapee-x86_64.app/Contents/Resources/AboutThisBuild.txt | grep mmacosx-version); echo "${f#*min=}" | cut -d ' ' -f1)
echo "\n\n=====================================\n\n" >> RawTherapee.app/Contents/Resources/AboutThisBuild.txt
cat RawTherapee-x86_64.app/Contents/Resources/AboutThisBuild.txt >> RawTherapee.app/Contents/Resources/AboutThisBuild.txt
else
cp -R RawTherapee.app RawTherapee-x86_64.app
minimum_x86_64_version=$(f=$(cat RawTherapee-x86_64.app/Contents/Resources/AboutThisBuild.txt | grep mmacosx-version); echo "${f#*min=}" | cut -d ' ' -f1)
cp -R RawTherapeeuniv/RawTherapee.app RawTherapee-arm64.app
minimum_arm64_version=$(f=$(cat RawTherapee-arm64.app/Contents/Resources/AboutThisBuild.txt | grep mmacosx-version); echo "${f#*min=}" | cut -d ' ' -f1)
echo "\n\n=====================================\n\n" >> RawTherapee.app/Contents/Resources/AboutThisBuild.txt
cat RawTherapee-arm64.app/Contents/Resources/AboutThisBuild.txt >> RawTherapee.app/Contents/Resources/AboutThisBuild.txt
fi
cmake -DPROJECT_SOURCE_DATA_DIR=${PROJECT_SOURCE_DATA_DIR} -DCONTENTS=${CONTENTS} -Dversion=${PROJECT_FULL_VERSION} -DshortVersion=${PROJECT_VERSION} -Dminimum_arm64_version=${minimum_arm64_version} -Dminimum_x86_64_version=${minimum_x86_64_version} -Darch=${arch} -P ${PROJECT_SOURCE_DATA_DIR}/info-plist.cmake
hdiutil unmount ./RawTherapeeuniv
rm -r univapp
# Create the fat main RawTherapee binary and move it into the new bundle
lipo -create -output RawTherapee RawTherapee-arm64.app/Contents/MacOS/RawTherapee RawTherapee-x86_64.app/Contents/MacOS/RawTherapee
mv RawTherapee RawTherapee.app/Contents/MacOS
# Create all the fat dependencies and move them into the bundle
for lib in RawTherapee-arm64.app/Contents/Frameworks/* ; do
lipo -create -output $(basename $lib) RawTherapee-arm64.app/Contents/Frameworks/$(basename $lib) RawTherapee-x86_64.app/Contents/Frameworks/$(basename $lib)
done
sudo mv *cli *so *dylib RawTherapee.app/Contents/Frameworks
rm -r RawTherapee-arm64.app
rm -r RawTherapee-x86_64.app
else
minimum_arm64_version=$(f=$(cat RawTherapee.app/Contents/Resources/AboutThisBuild.txt | grep mmacosx-version); echo "${f#*min=}" | cut -d ' ' -f1)
minimum_x86_64_version=${minimum_arm64_version}
cmake -DPROJECT_SOURCE_DATA_DIR=${PROJECT_SOURCE_DATA_DIR} -DCONTENTS=${CONTENTS} -Dversion=${PROJECT_FULL_VERSION} -DshortVersion=${PROJECT_VERSION} -Dminimum_arm64_version=${minimum_arm64_version} -Dminimum_x86_64_version=${minimum_x86_64_version} -Darch=${arch} -P ${PROJECT_SOURCE_DATA_DIR}/info-plist.cmake
fi
# Codesign the app # Codesign the app
if [[ -n $CODESIGNID ]]; then if [[ -n $CODESIGNID ]]; then
msg "Codesigning Application." msg "Codesigning Application."
@ -339,7 +396,7 @@ function CreateDmg {
msg "Preparing disk image sources at ${srcDir}:" msg "Preparing disk image sources at ${srcDir}:"
cp -R "${APP}" "${srcDir}" cp -R "${APP}" "${srcDir}"
cp "${RESOURCES}"/LICENSE.txt "${srcDir}" cp "${RESOURCES}"/LICENSE "${srcDir}"
ln -s /Applications "${srcDir}" ln -s /Applications "${srcDir}"
# Web bookmarks # Web bookmarks
@ -353,6 +410,9 @@ function CreateDmg {
CreateWebloc 'Report Bug' 'https://github.com/Beep6581/RawTherapee/issues/new' CreateWebloc 'Report Bug' 'https://github.com/Beep6581/RawTherapee/issues/new'
# Disk image name # Disk image name
if [[ -n $UNIVERSAL_URL ]]; then
arch="Universal"
fi
dmg_name="${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}" dmg_name="${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}"
lower_build_type="$(tr '[:upper:]' '[:lower:]' <<< "$CMAKE_BUILD_TYPE")" lower_build_type="$(tr '[:upper:]' '[:lower:]' <<< "$CMAKE_BUILD_TYPE")"
if [[ $lower_build_type != release ]]; then if [[ $lower_build_type != release ]]; then
@ -368,6 +428,7 @@ function CreateDmg {
SetFile -c incC "${srcDir}/.VolumeIcon.icns" SetFile -c incC "${srcDir}/.VolumeIcon.icns"
create-dmg "${dmg_name}.dmg" "${srcDir}" \ create-dmg "${dmg_name}.dmg" "${srcDir}" \
--volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" \ --volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" \
--appname "${PROJECT_NAME}" \
--volicon "${srcDir}/.VolumeIcon.icns" \ --volicon "${srcDir}/.VolumeIcon.icns" \
--sandbox-safe \ --sandbox-safe \
--no-internet-enable \ --no-internet-enable \
@ -389,8 +450,8 @@ function CreateDmg {
msg "Notarizing the dmg:" msg "Notarizing the dmg:"
zip "${dmg_name}.dmg.zip" "${dmg_name}.dmg" zip "${dmg_name}.dmg.zip" "${dmg_name}.dmg"
echo "Uploading..." echo "Uploading..."
uuid=`xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee" ${NOTARY} --file "${dmg_name}.dmg.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }'` uuid=$(xcrun altool --notarize-app --primary-bundle-id "com.rawtherapee" ${NOTARY} --file "${dmg_name}.dmg.zip" 2>&1 | grep 'RequestUUID' | awk '{ print $3 }')
echo "dmg Result= $uuid" # Display identifier string echo "dmg Result= ${uuid}" # Display identifier string
sleep 15 sleep 15
while : while :
do do
@ -416,8 +477,11 @@ function CreateDmg {
# Zip disk image for redistribution # Zip disk image for redistribution
msg "Zipping disk image for redistribution:" msg "Zipping disk image for redistribution:"
mkdir "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder" mkdir "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder"
ditto {"${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}.dmg","rawtherapee-cli","${PROJECT_SOURCE_DATA_DIR}/INSTALL.readme.rtf"} "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder" ditto {"${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}.dmg","rawtherapee-cli","${PROJECT_SOURCE_DATA_DIR}/INSTALL.txt"} "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder"
zip -r "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}.zip" "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder/" zip -r "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}.zip" "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder/"
if [[ -n $NIGHTLY ]]; then
cp "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}.zip" "${PROJECT_NAME}_macOS_${arch}_latest.zip"
fi
} }
CreateDmg CreateDmg
msg "Finishing build:" msg "Finishing build:"

View File

@ -47,7 +47,7 @@ AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}\{#MyAppVersion} DefaultDirName={pf}\{#MyAppName}\{#MyAppVersion}
DefaultGroupName={#MyAppName} DefaultGroupName={#MyAppName}
AllowNoIcons=yes AllowNoIcons=yes
LicenseFile={#MyBuildBasePath}\LICENSE.txt LicenseFile={#MyBuildBasePath}\LICENSE
OutputDir={#MyBuildBasePath}\..\ OutputDir={#MyBuildBasePath}\..\
OutputBaseFilename={#MyAppName}_{#MyAppVersion}_{#MySystemName}_{#MyBitDepth} OutputBaseFilename={#MyAppName}_{#MyAppVersion}_{#MySystemName}_{#MyBitDepth}
SetupIconFile={#MySourceBasePath}\rtdata\images\rawtherapee.ico SetupIconFile={#MySourceBasePath}\rtdata\images\rawtherapee.ico
@ -112,7 +112,7 @@ Source: "{#MyBuildBasePath}\sounds\*"; DestDir: "{app}\sounds\"; Flags: ignoreve
Source: "{#MyBuildBasePath}\themes\*"; DestDir: "{app}\themes\"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#MyBuildBasePath}\themes\*"; DestDir: "{app}\themes\"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "{#MyBuildBasePath}\AboutThisBuild.txt"; DestDir: "{app}"; Flags: ignoreversion Source: "{#MyBuildBasePath}\AboutThisBuild.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#MyBuildBasePath}\AUTHORS.txt"; DestDir: "{app}"; Flags: ignoreversion Source: "{#MyBuildBasePath}\AUTHORS.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#MyBuildBasePath}\LICENSE.txt"; DestDir: "{app}"; Flags: ignoreversion Source: "{#MyBuildBasePath}\LICENSE"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#MyBuildBasePath}\RELEASE_NOTES.txt"; DestDir: "{app}"; Flags: ignoreversion Source: "{#MyBuildBasePath}\RELEASE_NOTES.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#MyBuildBasePath}\options"; DestDir: "{app}"; Flags: ignoreversion Source: "{#MyBuildBasePath}\options"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#MyBuildBasePath}\*.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "{#MyBuildBasePath}\*.dll"; DestDir: "{app}"; Flags: ignoreversion