Merge with 'Beep6581/dev'
This commit is contained in:
commit
2cd6ba96ca
8
.github/workflows/appimage.yml
vendored
8
.github/workflows/appimage.yml
vendored
@ -76,6 +76,8 @@ jobs:
|
||||
|
||||
- name: Include Lensfun
|
||||
run: |
|
||||
echo "Patching lensfun-update-data script."
|
||||
sudo sed -i 's/HTTPError\(, ValueError\)/URLError\1/' $(which lensfun-update-data)
|
||||
echo "Updating Lensfun database."
|
||||
lensfun-update-data
|
||||
echo "Creating Lensfun directory in the build directory."
|
||||
@ -87,7 +89,7 @@ jobs:
|
||||
id: appimage-tools-cache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
key: appimage-tools
|
||||
key: appimage-tools-1
|
||||
path: |
|
||||
./build/linuxdeploy-x86_64.AppImage
|
||||
./build/linuxdeploy-plugin-gtk.sh
|
||||
@ -99,7 +101,9 @@ jobs:
|
||||
echo "Downloading linuxdeploy."
|
||||
curl --location 'https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage' > linuxdeploy-x86_64.AppImage
|
||||
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."
|
||||
chmod u+x linuxdeploy-*
|
||||
|
||||
|
6
.github/workflows/main.yml
vendored
6
.github/workflows/main.yml
vendored
@ -14,7 +14,7 @@ on:
|
||||
- created
|
||||
jobs:
|
||||
build:
|
||||
runs-on: macos-latest
|
||||
runs-on: macos-10.15
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install dependencies
|
||||
@ -52,8 +52,8 @@ jobs:
|
||||
-DPROC_LABEL="generic processor" \
|
||||
-DWITH_LTO="OFF" \
|
||||
-DLENSFUNDBDIR="/Applications/RawTherapee.app/Contents/Resources/share/lensfun" \
|
||||
-DCMAKE_C_COMPILER=/usr/local/opt/llvm/bin/clang \
|
||||
-DCMAKE_CXX_COMPILER=/usr/local/opt/llvm/bin/clang++ \
|
||||
-DCMAKE_C_COMPILER=clang \
|
||||
-DCMAKE_CXX_COMPILER=clang++ \
|
||||
-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" \
|
||||
-DOpenMP_C_FLAGS="${C_FLAGS}" \
|
||||
|
4
.github/workflows/windows.yml
vendored
4
.github/workflows/windows.yml
vendored
@ -82,6 +82,8 @@ jobs:
|
||||
|
||||
- name: Include Lensfun
|
||||
run: |
|
||||
echo "Patching lensfun-update-data script."
|
||||
sed -i 's/HTTPError\(, ValueError\)/URLError\1/' $(which lensfun-update-data)
|
||||
echo "Updating Lensfun database."
|
||||
lensfun-update-data
|
||||
echo "Creating Lensfun directory in the build directory."
|
||||
@ -115,7 +117,7 @@ jobs:
|
||||
"libdeflate.dll" \
|
||||
"libepoxy-0.dll" \
|
||||
"libexpat-1.dll" \
|
||||
"libffi-7.dll" \
|
||||
libffi-*.dll \
|
||||
"libfftw3f-3.dll" \
|
||||
"libfontconfig-1.dll" \
|
||||
"libfreetype-6.dll" \
|
||||
|
@ -63,6 +63,7 @@ Other contributors (profiles, ideas, mockups, testing, forum activity, translati
|
||||
Lebarhon
|
||||
Karl Loncarek
|
||||
Patrick Lopatto
|
||||
Francisco Lorés
|
||||
Jie Luo
|
||||
Paul Matthijsse
|
||||
Wim ter Meer
|
||||
|
@ -80,6 +80,24 @@ set(CACHE_NAME_SUFFIX
|
||||
# being bundled. However, file access can be restricted for some folder.
|
||||
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
|
||||
# set to 0. Specify other values to optimize for specific processor architecture
|
||||
# as listed in ProcessorTargets.cmake:
|
||||
@ -721,7 +739,7 @@ add_custom_target(
|
||||
# End generating AboutThisBuild.txt
|
||||
|
||||
install(FILES AUTHORS.txt DESTINATION "${CREDITSDIR}")
|
||||
install(FILES LICENSE.txt DESTINATION "${LICENCEDIR}")
|
||||
install(FILES LICENSE DESTINATION "${LICENCEDIR}")
|
||||
install(FILES "${CMAKE_BINARY_DIR}/AboutThisBuild.txt"
|
||||
DESTINATION "${CREDITSDIR}")
|
||||
install(
|
||||
|
@ -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
|
||||
Version 3, 29 June 2007
|
||||
|
@ -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_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__FLAGS "procFlags" CACHE STRING "Processor- flags")
|
||||
|
@ -106,9 +106,9 @@ if(WIN32)
|
||||
elseif(BIT_DEPTH EQUAL 8)
|
||||
set(BUILD_BIT_DEPTH 64)
|
||||
# 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
|
||||
set(INSTALL_MODE "x64 ia64")
|
||||
set(INSTALL_MODE "x64 ia64 arm64")
|
||||
endif()
|
||||
# set part of the output archive name
|
||||
set(SYSTEM_NAME "WinVista")
|
||||
|
BIN
rtdata/dcpprofiles/Canon EOS 5D Mark II.dcp
Normal file
BIN
rtdata/dcpprofiles/Canon EOS 5D Mark II.dcp
Normal file
Binary file not shown.
BIN
rtdata/dcpprofiles/Canon EOS-1D X Mark III.dcp
Normal file
BIN
rtdata/dcpprofiles/Canon EOS-1D X Mark III.dcp
Normal file
Binary file not shown.
BIN
rtdata/dcpprofiles/Canon EOS-1Ds Mark II.dcp
Normal file
BIN
rtdata/dcpprofiles/Canon EOS-1Ds Mark II.dcp
Normal file
Binary file not shown.
BIN
rtdata/dcpprofiles/FUJIFILM X-T4.dcp
Normal file
BIN
rtdata/dcpprofiles/FUJIFILM X-T4.dcp
Normal file
Binary file not shown.
BIN
rtdata/dcpprofiles/SONY ILCE-7M4.dcp
Normal file
BIN
rtdata/dcpprofiles/SONY ILCE-7M4.dcp
Normal file
Binary file not shown.
BIN
rtdata/dcpprofiles/samsung SM-G930V.dcp
Normal file
BIN
rtdata/dcpprofiles/samsung SM-G930V.dcp
Normal file
Binary file not shown.
@ -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_L;Mostra/amaga l'histograma de luminància CIELAB
|
||||
HISTOGRAM_TOOLTIP_R;Mostra/amaga l'histograma VERMELL
|
||||
HISTOGRAM_TOOLTIP_RAW;Mostra/Amaga l'histograma RAW
|
||||
HISTORY_CHANGED;Canviat
|
||||
HISTORY_CUSTOMCURVE;Corba particular
|
||||
HISTORY_FROMCLIPBOARD;Del portapapers
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -291,7 +291,6 @@ HISTOGRAM_TOOLTIP_G;Skrýt/Zobrazit histogram zelené.
|
||||
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_R;Skrýt/Zobrazit histogram červené.
|
||||
HISTOGRAM_TOOLTIP_RAW;Skrýt/Zobrazit raw histogram.
|
||||
HISTORY_CHANGED;Změněno
|
||||
HISTORY_CUSTOMCURVE;Vlastní křivka
|
||||
HISTORY_FROMCLIPBOARD;Ze schránky
|
||||
|
4177
rtdata/languages/Dansk
Normal file
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
@ -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_MODE;Toggle between linear, log-linear and log-log scaling of the histogram.
|
||||
!HISTOGRAM_TOOLTIP_R;Show/Hide red histogram.
|
||||
!HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram.
|
||||
!HISTORY_CHANGED;Changed
|
||||
!HISTORY_CUSTOMCURVE;Custom curve
|
||||
!HISTORY_FROMCLIPBOARD;From clipboard
|
||||
|
@ -248,7 +248,6 @@
|
||||
!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_R;Show/Hide red histogram.
|
||||
!HISTOGRAM_TOOLTIP_RAW;Show/Hide raw histogram.
|
||||
!HISTORY_CHANGED;Changed
|
||||
!HISTORY_CUSTOMCURVE;Custom curve
|
||||
!HISTORY_FROMCLIPBOARD;From clipboard
|
||||
|
4120
rtdata/languages/Espanol (Castellano)
Normal file
4120
rtdata/languages/Espanol (Castellano)
Normal file
File diff suppressed because it is too large
Load Diff
@ -297,7 +297,6 @@ HISTOGRAM_TOOLTIP_G;Mostrar/Ocultar Histograma Verde
|
||||
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_R;Mostrar/Ocultar Histograma Rojo
|
||||
HISTOGRAM_TOOLTIP_RAW;Mostrar/ocultar Histograma Raw
|
||||
HISTORY_CHANGED;Cambiado
|
||||
HISTORY_CUSTOMCURVE;Curva a medida
|
||||
HISTORY_FROMCLIPBOARD;Desde el portapapeles
|
@ -236,7 +236,6 @@ HISTOGRAM_TOOLTIP_G;Montrer/cacher l'histogramme VERT
|
||||
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_R;Montrer/cacher l'histogramme ROUGE
|
||||
HISTOGRAM_TOOLTIP_RAW;Montrer/Cacher l'histogramme des données RAW
|
||||
HISTORY_CHANGED;Changé
|
||||
HISTORY_CUSTOMCURVE;Courbe personnelle
|
||||
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_LABEL;Apparence de la Couleur (CIECAM02)
|
||||
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_LIGHT;Luminosité (J)
|
||||
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_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_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_WBRT;BB [RT] + [sortie]
|
||||
TP_COLORTONING_AB;o C/L
|
||||
@ -1807,6 +1807,15 @@ TP_LOCALLAB_BUTTON_DEL;Effacer
|
||||
TP_LOCALLAB_BUTTON_DUPL;Dupliquer
|
||||
TP_LOCALLAB_BUTTON_REN;Renommer
|
||||
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_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.
|
||||
@ -1824,10 +1833,29 @@ TP_LOCALLAB_CHROMALEV;Niveaux de 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_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_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_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_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
|
||||
@ -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_INVMASK;Algorithme inverse
|
||||
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_LABEL;Ajustements Locaux
|
||||
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_CONTRASTPYRLAB; Filtre Gradué/Netteté bords/Flou
|
||||
TP_LOCALLAB_LOC_RESIDPYR;Image Residuelle
|
||||
TP_LOCALLAB_LOG;Codage log
|
||||
TP_LOCALLAB_LOG;Codage logbwforce
|
||||
TP_LOCALLAB_LOG1FRA;Ajustements Image
|
||||
TP_LOCALLAB_LOG2FRA;Conditions de visionnage
|
||||
TP_LOCALLAB_LOGAUTO;Automatique
|
||||
@ -2280,6 +2386,7 @@ TP_LOCALLAB_REWEI;Repondération iterations
|
||||
TP_LOCALLAB_RGB;RGB Courbe de tonalité
|
||||
TP_LOCALLAB_ROW_NVIS;Pas 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_SAVREST;Sauve - Récupère Image Courante
|
||||
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_SH_TOOLNAME;Ombres/lumières & Egaliseur tonal - 5
|
||||
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_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é.
|
||||
@ -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 d’ondelettes utilisée dans l’ensemble du module “wavelets”
|
||||
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_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_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.
|
||||
@ -2505,6 +2619,30 @@ TP_PCVIGNETTE_STRENGTH_TOOLTIP;Force du filtre en EV (maximum dans les coins)
|
||||
TP_PERSPECTIVE_HORIZONTAL;Horizontale
|
||||
TP_PERSPECTIVE_LABEL;Perspective
|
||||
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_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
|
||||
@ -3019,8 +3157,11 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: <b>-</b>
|
||||
!GENERAL_HELP;Help
|
||||
!HISTORY_MSG_494;Capture Sharpening
|
||||
!HISTORY_MSG_DEHAZE_LUMINANCE;Dehaze - Luminance only
|
||||
!HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative
|
||||
!HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values
|
||||
HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negatif
|
||||
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_RADIUS;CS - Auto radius
|
||||
!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_TRANS_METHOD;Geometry - Method
|
||||
!MAIN_FRAME_PLACES_DEL;Remove
|
||||
!PARTIALPASTE_FILMNEGATIVE;Film Negative
|
||||
!PARTIALPASTE_FILMNEGATIVE;Film Negatif
|
||||
!PROGRESSBAR_DECODING;Decoding...
|
||||
!PROGRESSBAR_GREENEQUIL;Green equilibration...
|
||||
!PROGRESSBAR_HLREC;Highlight reconstruction...
|
||||
@ -3040,12 +3181,23 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: <b>-</b>
|
||||
!QUEUE_LOCATION_TITLE;Output Location
|
||||
!TP_CROP_PPI;PPI
|
||||
!TP_DEHAZE_LUMINANCE;Luminance only
|
||||
!TP_FILMNEGATIVE_BLUE;Blue ratio
|
||||
!TP_FILMNEGATIVE_GREEN;Reference exponent (contrast)
|
||||
!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_LABEL;Film Negative
|
||||
!TP_FILMNEGATIVE_PICK;Pick neutral spots
|
||||
!TP_FILMNEGATIVE_RED;Red ratio
|
||||
TP_FILMNEGATIVE_BLUE;Ratio bleu
|
||||
TP_FILMNEGATIVE_BLUEBALANCE;Froid/Chaud
|
||||
TP_FILMNEGATIVE_COLORSPACE;Inversion espace couleur:
|
||||
TP_FILMNEGATIVE_COLORSPACE_INPUT;Espace couleur -entrée
|
||||
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_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_LOG;Logarithmic
|
||||
!TP_LENSPROFILE_CORRECTION_AUTOMATCH;Automatically selected
|
||||
|
@ -191,7 +191,6 @@ HISTOGRAM_TOOLTIP_CHRO;Mostra/Nascondi l'istogramma di cromaticità.
|
||||
HISTOGRAM_TOOLTIP_G;Mostra/Nascondi l'istogramma del Verde.
|
||||
HISTOGRAM_TOOLTIP_L;Mostra/Nascondi l'istogramma di Luminanza CIELAB.
|
||||
HISTOGRAM_TOOLTIP_R;Mostra/Nascondi l'istogramma del Rosso.
|
||||
HISTOGRAM_TOOLTIP_RAW;Mostra/Nascondi l'istogramma del raw.
|
||||
HISTORY_CHANGED;Modificato
|
||||
HISTORY_CUSTOMCURVE;Curva personalizzata
|
||||
HISTORY_FROMCLIPBOARD;Dagli appunti
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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_L;CIELAB Luminancia hisztogramm (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_CUSTOMCURVE;Saját görbe
|
||||
HISTORY_FROMCLIPBOARD;Vágólapról
|
||||
|
@ -235,7 +235,6 @@ HISTOGRAM_TOOLTIP_CHRO;Toon/Verberg Chromaticiteit histogram
|
||||
HISTOGRAM_TOOLTIP_G;Toon/verberg groen histogram
|
||||
HISTOGRAM_TOOLTIP_L;Toon/verberg CIELAB-luminantiehistogram
|
||||
HISTOGRAM_TOOLTIP_R;Toon/verberg rood histogram
|
||||
HISTOGRAM_TOOLTIP_RAW;Toon/verberg RAW-histogram
|
||||
HISTORY_CHANGED;Veranderd
|
||||
HISTORY_CUSTOMCURVE;Handmatig
|
||||
HISTORY_FROMCLIPBOARD;Van klembord
|
||||
|
@ -238,7 +238,6 @@ HISTOGRAM_TOOLTIP_CHRO;Pokaż/Ukryj histogram chromatyczności.
|
||||
HISTOGRAM_TOOLTIP_G;Pokaż/Ukryj histogram zieleni.
|
||||
HISTOGRAM_TOOLTIP_L;Pokaż/Ukryj histogram luminancji CIELab.
|
||||
HISTOGRAM_TOOLTIP_R;Pokaż/Ukryj histogram czerwieni.
|
||||
HISTOGRAM_TOOLTIP_RAW;Pokaż/Ukryj histogram raw.
|
||||
HISTORY_CHANGED;Zmieniono
|
||||
HISTORY_CUSTOMCURVE;Krzywa własna
|
||||
HISTORY_FROMCLIPBOARD;Ze schowka
|
||||
|
@ -237,7 +237,6 @@ HISTOGRAM_TOOLTIP_G;Mostrar histograma verde.
|
||||
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_R;Mostrar histograma vermelho.
|
||||
HISTOGRAM_TOOLTIP_RAW;Mostrar histograma raw.
|
||||
HISTORY_CHANGED;Alterado
|
||||
HISTORY_CUSTOMCURVE;Curva personalizada
|
||||
HISTORY_FROMCLIPBOARD;Da área de transferência
|
||||
|
@ -244,7 +244,6 @@ HISTOGRAM_TOOLTIP_G;Mostrar/Ocultar histograma verde.
|
||||
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_R;Mostrar/Ocultar histograma vermelho.
|
||||
HISTOGRAM_TOOLTIP_RAW;Mostrar/Ocultar histograma raw.
|
||||
HISTORY_CHANGED;Alterado
|
||||
HISTORY_CUSTOMCURVE;Curva personalizada
|
||||
HISTORY_FROMCLIPBOARD;Da área de transferência
|
||||
|
@ -225,7 +225,6 @@ HISTOGRAM_TOOLTIP_CHRO;Показать/скрыть хроматическую
|
||||
HISTOGRAM_TOOLTIP_G;Показать/скрыть зелёный канал гистограммы
|
||||
HISTOGRAM_TOOLTIP_L;Показать/скрыть CIELAB гистограмму
|
||||
HISTOGRAM_TOOLTIP_R;Показать/скрыть красный канал гистограммы
|
||||
HISTOGRAM_TOOLTIP_RAW;Показать/скрыть Raw гистограмму
|
||||
HISTORY_CHANGED;Изменено
|
||||
HISTORY_CUSTOMCURVE;Пользовательская кривая
|
||||
HISTORY_FROMCLIPBOARD;Из буфера обмена
|
||||
|
@ -171,7 +171,6 @@ HISTOGRAM_TOOLTIP_CHRO;Прикажи/сакриј хистограм хроми
|
||||
HISTOGRAM_TOOLTIP_G;Приказује зелени хистограм
|
||||
HISTOGRAM_TOOLTIP_L;Приказује ЦиеЛаб хитограм
|
||||
HISTOGRAM_TOOLTIP_R;Приказује црвени хистограм
|
||||
HISTOGRAM_TOOLTIP_RAW;Приказује/скрива RAW хистограм
|
||||
HISTORY_CHANGED;Измењено
|
||||
HISTORY_CUSTOMCURVE;Произвољна крива
|
||||
HISTORY_FROMCLIPBOARD;Из оставе
|
||||
|
@ -247,7 +247,6 @@ HISTOGRAM_TOOLTIP_G;Prikaži/Skrij histogram za zeleno.
|
||||
HISTOGRAM_TOOLTIP_L;Prikaži/Skrij histogram CIELab svetlosti.
|
||||
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_RAW;Prikaži/Skrij surovi histogram.
|
||||
HISTORY_CHANGED;Spremenjeno
|
||||
HISTORY_CUSTOMCURVE;Prilagojena krivulja
|
||||
HISTORY_FROMCLIPBOARD;Iz odložišča
|
||||
|
@ -204,7 +204,6 @@ HISTOGRAM_TOOLTIP_CHRO;Visa/Dölj kromananshistogrammet
|
||||
HISTOGRAM_TOOLTIP_G;Visa/dölj grönt histogram
|
||||
HISTOGRAM_TOOLTIP_L;Visa/dölj CIELAB histogram för luminans
|
||||
HISTOGRAM_TOOLTIP_R;Visa/dölj rött histogram
|
||||
HISTOGRAM_TOOLTIP_RAW;Visa/dölj råbildens histogram
|
||||
HISTORY_CHANGED;Ändrad
|
||||
HISTORY_CUSTOMCURVE;Egen kurva
|
||||
HISTORY_FROMCLIPBOARD;Från klippbordet
|
||||
|
@ -251,7 +251,6 @@ HISTOGRAM_TOOLTIP_G;Show/Hide green 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_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_TRACE_BRIGHTNESS;Adjust scope brightness.
|
||||
HISTOGRAM_TOOLTIP_TYPE_HISTOGRAM;Histogram
|
||||
@ -265,7 +264,6 @@ HISTORY_CUSTOMCURVE;Custom curve
|
||||
HISTORY_FROMCLIPBOARD;From clipboard
|
||||
HISTORY_LABEL;History
|
||||
HISTORY_MSG_1;Photo loaded
|
||||
HISTORY_MSG_2;PP3 loaded
|
||||
HISTORY_MSG_3;PP3 changed
|
||||
HISTORY_MSG_4;History browsing
|
||||
HISTORY_MSG_5;Exposure - Lightness
|
||||
@ -279,9 +277,6 @@ HISTORY_MSG_12;Exposure - Auto levels
|
||||
HISTORY_MSG_13;Exposure - Clip
|
||||
HISTORY_MSG_14;L*a*b* - Lightness
|
||||
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_20;Sharpening
|
||||
HISTORY_MSG_21;USM - Radius
|
||||
@ -307,10 +302,6 @@ HISTORY_MSG_40;WB - Tint
|
||||
HISTORY_MSG_41;Exposure - Tone curve 1 mode
|
||||
HISTORY_MSG_42;Exposure - Tone curve 2
|
||||
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_49;DCP illuminant
|
||||
HISTORY_MSG_50;Shadows/Highlights
|
||||
@ -318,7 +309,6 @@ HISTORY_MSG_51;S/H - Highlights
|
||||
HISTORY_MSG_52;S/H - Shadows
|
||||
HISTORY_MSG_53;S/H - Highlights 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_57;Coarse rotation
|
||||
HISTORY_MSG_58;Horizontal flipping
|
||||
@ -330,7 +320,6 @@ HISTORY_MSG_63;Snapshot selected
|
||||
HISTORY_MSG_64;Crop
|
||||
HISTORY_MSG_65;CA correction
|
||||
HISTORY_MSG_66;Exposure - Highlight reconstruction
|
||||
HISTORY_MSG_67;Exposure - HLR amount
|
||||
HISTORY_MSG_68;Exposure - HLR method
|
||||
HISTORY_MSG_69;Working color space
|
||||
HISTORY_MSG_70;Output color space
|
||||
@ -341,12 +330,10 @@ HISTORY_MSG_74;Resize - Scale
|
||||
HISTORY_MSG_75;Resize - Method
|
||||
HISTORY_MSG_76;Exif metadata
|
||||
HISTORY_MSG_77;IPTC metadata
|
||||
HISTORY_MSG_78;-
|
||||
HISTORY_MSG_79;Resize - Width
|
||||
HISTORY_MSG_80;Resize - Height
|
||||
HISTORY_MSG_81;Resize
|
||||
HISTORY_MSG_82;Profile changed
|
||||
HISTORY_MSG_83;S/H - Sharp mask
|
||||
HISTORY_MSG_84;Perspective correction
|
||||
HISTORY_MSG_85;Lens Correction - LCP file
|
||||
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_129;Flat-Field - Blur type
|
||||
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_138;Black level - Red
|
||||
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_248;L*a*b* - HH curve
|
||||
HISTORY_MSG_249;CbDL - Threshold
|
||||
HISTORY_MSG_250;NR - Enhanced
|
||||
HISTORY_MSG_251;B&W - Algorithm
|
||||
HISTORY_MSG_252;CbDL - Skin tar/prot
|
||||
HISTORY_MSG_253;CbDL - Reduce artifacts
|
||||
@ -535,8 +515,6 @@ HISTORY_MSG_270;CT - High - Green
|
||||
HISTORY_MSG_271;CT - High - Blue
|
||||
HISTORY_MSG_272;CT - Balance
|
||||
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_277;--unused--
|
||||
HISTORY_MSG_278;CT - Preserve luminance
|
||||
@ -561,7 +539,6 @@ HISTORY_MSG_296;NR - Luminance curve
|
||||
HISTORY_MSG_297;NR - Mode
|
||||
HISTORY_MSG_298;Dead pixel filter
|
||||
HISTORY_MSG_299;NR - Chrominance curve
|
||||
HISTORY_MSG_300;-
|
||||
HISTORY_MSG_301;NR - Luma control
|
||||
HISTORY_MSG_302;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_407;Retinex - Method
|
||||
HISTORY_MSG_408;Retinex - Radius
|
||||
HISTORY_MSG_409;Retinex - Contrast
|
||||
HISTORY_MSG_410;Retinex - Offset
|
||||
HISTORY_MSG_411;Retinex - Strength
|
||||
HISTORY_MSG_412;Retinex - Gaussian gradient
|
||||
@ -686,7 +662,7 @@ HISTORY_MSG_421;Retinex - Gamma
|
||||
HISTORY_MSG_422;Retinex - Gamma
|
||||
HISTORY_MSG_423;Retinex - Gamma slope
|
||||
HISTORY_MSG_424;Retinex - HL threshold
|
||||
HISTORY_MSG_425;Retinex - Log base
|
||||
HISTORY_MSG_425;--unused--
|
||||
HISTORY_MSG_426;Retinex - Hue equalizer
|
||||
HISTORY_MSG_427;Output 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_444;WB - Temp bias
|
||||
HISTORY_MSG_445;Raw Sub-Image
|
||||
HISTORY_MSG_446;EvPixelShiftMotion
|
||||
HISTORY_MSG_447;EvPixelShiftMotionCorrection
|
||||
HISTORY_MSG_448;EvPixelShiftStddevFactorGreen
|
||||
HISTORY_MSG_446;--unused--
|
||||
HISTORY_MSG_447;--unused--
|
||||
HISTORY_MSG_448;--unused--
|
||||
HISTORY_MSG_449;PS ISO adaption
|
||||
HISTORY_MSG_450;EvPixelShiftNreadIso
|
||||
HISTORY_MSG_451;EvPixelShiftPrnu
|
||||
HISTORY_MSG_450;--unused--
|
||||
HISTORY_MSG_451;--unused--
|
||||
HISTORY_MSG_452;PS Show motion
|
||||
HISTORY_MSG_453;PS Show mask only
|
||||
HISTORY_MSG_454;EvPixelShiftAutomatic
|
||||
HISTORY_MSG_455;EvPixelShiftNonGreenHorizontal
|
||||
HISTORY_MSG_456;EvPixelShiftNonGreenVertical
|
||||
HISTORY_MSG_454;--unused--
|
||||
HISTORY_MSG_455;--unused--
|
||||
HISTORY_MSG_456;--unused--
|
||||
HISTORY_MSG_457;PS Check red/blue
|
||||
HISTORY_MSG_458;EvPixelShiftStddevFactorRed
|
||||
HISTORY_MSG_459;EvPixelShiftStddevFactorBlue
|
||||
HISTORY_MSG_460;EvPixelShiftGreenAmaze
|
||||
HISTORY_MSG_461;EvPixelShiftNonGreenAmaze
|
||||
HISTORY_MSG_458;--unused--
|
||||
HISTORY_MSG_459;--unused--
|
||||
HISTORY_MSG_460;--unused--
|
||||
HISTORY_MSG_461;--unused--
|
||||
HISTORY_MSG_462;PS Check green
|
||||
HISTORY_MSG_463;EvPixelShiftRedBlueWeight
|
||||
HISTORY_MSG_463;--unused--
|
||||
HISTORY_MSG_464;PS Blur motion mask
|
||||
HISTORY_MSG_465;PS Blur radius
|
||||
HISTORY_MSG_466;EvPixelShiftSum
|
||||
HISTORY_MSG_467;EvPixelShiftExp0
|
||||
HISTORY_MSG_466;--unused--
|
||||
HISTORY_MSG_467;--unused--
|
||||
HISTORY_MSG_468;PS Fill holes
|
||||
HISTORY_MSG_469;PS Median
|
||||
HISTORY_MSG_470;EvPixelShiftMedian3
|
||||
HISTORY_MSG_470;--unused--
|
||||
HISTORY_MSG_471;PS Motion correction
|
||||
HISTORY_MSG_472;PS Smooth transitions
|
||||
HISTORY_MSG_473;PS Use lmmse
|
||||
HISTORY_MSG_474;PS Equalize
|
||||
HISTORY_MSG_475;PS Equalize channel
|
||||
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_578;Local - cbdl threshold
|
||||
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_582;Local - deNoise lum c
|
||||
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_662;Local - deNoise lum f 0
|
||||
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_666;Local - cbdl mask radius
|
||||
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_922;Local - changes In Black and White
|
||||
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_926;Local - Show mask type
|
||||
HISTORY_MSG_927;Local - Shadow
|
||||
@ -1348,7 +1323,6 @@ HISTORY_MSG_1095;Local - Jz highligths thr
|
||||
HISTORY_MSG_1096;Local - Jz shadows
|
||||
HISTORY_MSG_1097;Local - Jz shadows thr
|
||||
HISTORY_MSG_1098;Local - Jz radius SH
|
||||
//HISTORY_MSG_1099;Local - Hz(Hz) Curve
|
||||
HISTORY_MSG_1099;Local - Cz(Hz) Curve
|
||||
HISTORY_MSG_1100;Local - Jz reference 100
|
||||
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_WAVCLARI;Clarity
|
||||
HISTORY_MSG_WAVDENLH;Level 5
|
||||
HISTORY_MSG_WAVDENMET;Local equalizer
|
||||
HISTORY_MSG_WAVDENOISE;Local contrast
|
||||
HISTORY_MSG_WAVDENOISEH;High levels Local contrast
|
||||
HISTORY_MSG_WAVDETEND;Details soft
|
||||
@ -1780,7 +1753,6 @@ PARTIALPASTE_LENSPROFILE;Profiled lens correction
|
||||
PARTIALPASTE_LOCALCONTRAST;Local contrast
|
||||
PARTIALPASTE_LOCALLAB;Local Adjustments
|
||||
PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings
|
||||
PARTIALPASTE_LOCGROUP;Local
|
||||
PARTIALPASTE_METADATA;Metadata mode
|
||||
PARTIALPASTE_METAGROUP;Metadata settings
|
||||
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_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_BLUFRAME;Blue Primaries
|
||||
TP_ICM_BPC;Black Point Compensation
|
||||
TP_ICM_DCPILLUMINANT;Illuminant
|
||||
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_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_INPUTCAMERA;Camera standard
|
||||
TP_ICM_INPUTCAMERAICC;Auto-matched camera profile
|
||||
@ -2679,7 +2649,6 @@ TP_LOCALCONTRAST_RADIUS;Radius
|
||||
TP_LOCALLAB_ACTIV;Luminance only
|
||||
TP_LOCALLAB_ACTIVSPOT;Enable Spot
|
||||
TP_LOCALLAB_ADJ;Equalizer Color
|
||||
TP_LOCALLAB_ALL;All rubrics
|
||||
TP_LOCALLAB_AMOUNT;Amount
|
||||
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.
|
||||
@ -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_BLNOI_EXP;Blur & Noise
|
||||
TP_LOCALLAB_BLNORM;Normal
|
||||
TP_LOCALLAB_BLSYM;Symmetric
|
||||
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_BLUR;Gaussian Blur - Noise - Grain
|
||||
TP_LOCALLAB_BLURCBDL;Blur levels 0-1-2-3-4
|
||||
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_BLURDE;Blur shape detection
|
||||
TP_LOCALLAB_BLURLC;Luminance only
|
||||
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_BLURRESIDFRA;Blur Residual
|
||||
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_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_VIS;Status
|
||||
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_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_CONTFRA;Contrast by level
|
||||
TP_LOCALLAB_CONTL;Contrast (J)
|
||||
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_CONTRESID;Contrast
|
||||
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_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_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_CURVES_CIE;Tone curve
|
||||
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_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_DENOIS;Denoise
|
||||
TP_LOCALLAB_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas.
|
||||
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
|
||||
@ -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_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_EXPTRC;Tone Response Curve - TRC
|
||||
TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure
|
||||
TP_LOCALLAB_FATAMOUNT;Amount
|
||||
TP_LOCALLAB_FATANCHOR;Anchor
|
||||
TP_LOCALLAB_FATANCHORA;Offset
|
||||
TP_LOCALLAB_FATDETAIL;Detail
|
||||
TP_LOCALLAB_FATFRA;Dynamic Range Compression ƒ
|
||||
TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm.
|
||||
TP_LOCALLAB_FATLEVEL;Sigma
|
||||
TP_LOCALLAB_FATRES;Amount Residual Image
|
||||
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 hasn’t been activated.
|
||||
TP_LOCALLAB_FEATVALUE;Feather gradient (Grad. Filters)
|
||||
TP_LOCALLAB_FFTCOL_MASK;FFTW ƒ
|
||||
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_FFTW2;ƒ - Use Fast Fourier Transform (TIF, JPG,..)
|
||||
TP_LOCALLAB_FFTWBLUR;ƒ - Always Use Fast Fourier Transform
|
||||
TP_LOCALLAB_FULLIMAGE;Black-Ev and White-Ev for 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_GRADSTRHUE_TOOLTIP;Adjusts hue 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_GRAINFRA2;Coarseness
|
||||
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_HIGHMASKCOL;Highlights
|
||||
TP_LOCALLAB_HLH;H
|
||||
TP_LOCALLAB_HLHZ;Hz
|
||||
TP_LOCALLAB_HUECIE;Hue
|
||||
TP_LOCALLAB_IND;Independent (mouse)
|
||||
TP_LOCALLAB_INDSL;Independent (mouse + sliders)
|
||||
@ -3055,6 +3004,7 @@ TP_LOCALLAB_LOG1FRA;CAM16 Image Adjustments
|
||||
TP_LOCALLAB_LOG2FRA;Viewing Conditions
|
||||
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_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_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
|
||||
@ -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_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_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_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_LOG_TOOLNAME;Log Encoding
|
||||
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_LUMAWHITESEST;Lightest
|
||||
TP_LOCALLAB_LUMFRA;L*a*b* standard
|
||||
TP_LOCALLAB_LUMONLY;Luminance only
|
||||
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_MASK;Curves
|
||||
@ -3155,7 +3102,6 @@ TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications)
|
||||
TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications)
|
||||
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_MED;Medium
|
||||
TP_LOCALLAB_MEDIAN;Median Low
|
||||
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.
|
||||
@ -3169,16 +3115,8 @@ TP_LOCALLAB_MERFOU;Multiply
|
||||
TP_LOCALLAB_MERGE1COLFRA;Merge with Original/Previous/Background
|
||||
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_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_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_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_MERHUE;Hue
|
||||
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_NOISECHRODETAIL;Chroma detail recovery
|
||||
TP_LOCALLAB_NOISECHROFINE;Fine chroma (Wav)
|
||||
TP_LOCALLAB_NOISEDETAIL_TOOLTIP;Disabled if slider = 100
|
||||
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_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_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_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_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.
|
||||
@ -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_RETIM;Original Retinex
|
||||
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_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.
|
||||
@ -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_SATUR;Saturation
|
||||
TP_LOCALLAB_SATURV;Saturation (s)
|
||||
TP_LOCALLAB_SAVREST;Save - Restore Current Image
|
||||
TP_LOCALLAB_SCALEGR;Scale
|
||||
TP_LOCALLAB_SCALERETI;Scale
|
||||
TP_LOCALLAB_SCALTM;Scale
|
||||
@ -3377,7 +3311,6 @@ TP_LOCALLAB_SIGMOIDTH;Threshold (Gray point)
|
||||
TP_LOCALLAB_SIGMOIDBL;Blend
|
||||
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_SIM;Simple
|
||||
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_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_TOOLTIP;Applies a guided filter to the output image to reduce possible 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_SOURCE_ABS;Absolute luminance
|
||||
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_STRENGTH;Noise
|
||||
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_STRUCCOL;Spot structure
|
||||
TP_LOCALLAB_STRUCCOL1;Spot structure
|
||||
@ -3422,7 +3353,6 @@ TP_LOCALLAB_THRESDELTAE;ΔE scope threshold
|
||||
TP_LOCALLAB_THRESRETI;Threshold
|
||||
TP_LOCALLAB_THRESWAV;Balance threshold
|
||||
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_TM;Tone Mapping
|
||||
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_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_WAMASKCOL;Mask Wavelet level
|
||||
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_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_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_WAVHIGH;Wavelet high
|
||||
TP_LOCALLAB_WAVHUE_TOOLTIP;Allows you to reduce or increase the denoise based on hue.
|
||||
TP_LOCALLAB_WAVLEV;Blur by level
|
||||
TP_LOCALLAB_WAVLOW;Wavelet low
|
||||
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_WAVMED;Ψ Wavelet normal
|
||||
TP_LOCALLAB_WAVMED;Wavelet normal
|
||||
TP_LOCALLAB_WEDIANHI;Median Hi
|
||||
TP_LOCALLAB_WHITE_EV;White Ev
|
||||
TP_LOCALLAB_ZCAMFRA;ZCAM Image Adjustments
|
||||
@ -3913,7 +3838,6 @@ TP_WAVELET_CONTEDIT;'After' contrast curve
|
||||
TP_WAVELET_CONTFRAME;Contrast - Compression
|
||||
TP_WAVELET_CONTR;Gamut
|
||||
TP_WAVELET_CONTRA;Contrast
|
||||
TP_WAVELET_CONTRASTEDIT;Finer - Coarser levels
|
||||
TP_WAVELET_CONTRAST_MINUS;Contrast -
|
||||
TP_WAVELET_CONTRAST_PLUS;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_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_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_DENEQUAL;1 2 3 4 Equal
|
||||
TP_WAVELET_DENH;Threshold
|
||||
TP_WAVELET_DENL;Correction structure
|
||||
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
|
||||
@ -3986,7 +3903,6 @@ TP_WAVELET_EDTYPE;Local contrast method
|
||||
TP_WAVELET_EDVAL;Strength
|
||||
TP_WAVELET_FINAL;Final Touchup
|
||||
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_FINTHR_TOOLTIP;Uses local contrast to reduce or increase the action of the guided filter
|
||||
TP_WAVELET_GUIDFRAME;Final smoothing (guided filter)
|
||||
@ -4055,7 +3971,6 @@ TP_WAVELET_PASTEL;Pastel chroma
|
||||
TP_WAVELET_PROC;Process
|
||||
TP_WAVELET_PROTAB;Protection
|
||||
TP_WAVELET_QUAAGRES;Aggressive
|
||||
TP_WAVELET_QUANONE;Off
|
||||
TP_WAVELET_QUACONSER;Conservative
|
||||
TP_WAVELET_RADIUS;Radius shadows - highlight
|
||||
TP_WAVELET_RANGEAB;Range a and b %
|
||||
@ -4094,7 +4009,6 @@ TP_WAVELET_THRESHOLD;Finer 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_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_TILESBIG;Tiles
|
||||
TP_WAVELET_TILESFULL;Full image
|
||||
@ -4110,7 +4024,6 @@ TP_WAVELET_TON;Toning
|
||||
TP_WAVELET_TONFRAME;Excluded colors
|
||||
TP_WAVELET_USH;None
|
||||
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_WAVLOWTHR;Low contrast threshold
|
||||
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_ZOOMIN;Zoom In\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
|
||||
|
@ -1208,6 +1208,11 @@ Camera constants:
|
||||
"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
|
||||
"make_model": "Canon EOS R5",
|
||||
"dcraw_matrix" : [9766, -2953, -1254, -4276, 12116, 2433, -437, 1336, 5131],
|
||||
@ -1224,6 +1229,16 @@ Camera constants:
|
||||
"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
|
||||
"make_model": "Canon PowerShot A3100 IS",
|
||||
"raw_crop": [ 24, 12, 4032, 3024 ] // full size 4036X3026
|
||||
|
@ -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;
|
||||
Mp = Iz - 0.138605043271539 * az - 0.0580473161561189 * 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);
|
||||
if(std::isnan(tmp)) {//to avoid crash
|
||||
|
@ -3544,14 +3544,14 @@ double ColorTemp::daylight_spect(double wavelength, double m1, double m2)
|
||||
53.30, 56.10, 58.90, 60.40, 61.90
|
||||
};
|
||||
//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.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
|
||||
};
|
||||
//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,
|
||||
-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
|
||||
};
|
||||
|
||||
|
@ -6091,13 +6091,26 @@ get2_256:
|
||||
offsetChannelBlackLevel2 = save1 + (0x157 << 1);
|
||||
offsetWhiteLevels = save1 + (0x32a << 1);
|
||||
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)
|
||||
{
|
||||
fseek(ifp, offsetChannelBlackLevel, SEEK_SET);
|
||||
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;
|
||||
// RT_blacklevel_from_constant = ThreeValBool::F;
|
||||
}
|
||||
@ -6109,7 +6122,8 @@ get2_256:
|
||||
imCanon.SpecularWhiteLevel = get2();
|
||||
// FORC4
|
||||
// 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;
|
||||
}
|
||||
|
||||
@ -6117,7 +6131,8 @@ get2_256:
|
||||
{
|
||||
fseek(ifp, offsetChannelBlackLevel2, SEEK_SET);
|
||||
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;
|
||||
// RT_blacklevel_from_constant = ThreeValBool::F;
|
||||
}
|
||||
@ -9852,7 +9867,8 @@ void CLASS identify()
|
||||
filters = 0;
|
||||
tiff_samples = colors = 3;
|
||||
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")) {
|
||||
height = 613;
|
||||
width = 854;
|
||||
@ -10518,6 +10534,14 @@ bw: colors = 1;
|
||||
}
|
||||
}
|
||||
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))
|
||||
&& cmatrix[0][0] > 0.125
|
||||
&& strncmp(RT_software.c_str(), "Adobe DNG Converter", 19) != 0
|
||||
|
@ -193,9 +193,18 @@ public:
|
||||
int crx_track_selected;
|
||||
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:
|
||||
CanonCR3Data RT_canon_CR3_data;
|
||||
|
||||
CanonLevelsData RT_canon_levels_data;
|
||||
|
||||
float cam_mul[4], pre_mul[4], cmatrix[3][4], rgb_cam[3][4];
|
||||
|
||||
void (DCraw::*write_thumb)();
|
||||
|
@ -17,22 +17,76 @@
|
||||
* along with RawTherapee. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
#include <cmath>
|
||||
#include <cstdio>
|
||||
#include <iostream>
|
||||
#include <list>
|
||||
#include <map>
|
||||
#include <sstream>
|
||||
|
||||
#include <giomm.h>
|
||||
#include <glibmm/ustring.h>
|
||||
|
||||
#include "dfmanager.h"
|
||||
#include "../rtgui/options.h"
|
||||
#include "rawimage.h"
|
||||
|
||||
#include "imagedata.h"
|
||||
#include "jaggedarray.h"
|
||||
#include "noncopyable.h"
|
||||
#include "pixelsmap.h"
|
||||
#include "rawimage.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()
|
||||
{
|
||||
delete ri;
|
||||
@ -57,31 +111,6 @@ inline dfInfo& dfInfo::operator =(const dfInfo &o)
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool dfInfo::operator <(const dfInfo &e2) const
|
||||
{
|
||||
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;
|
||||
@ -104,12 +133,12 @@ double dfInfo::distance(const std::string &mak, const std::string &mod, int iso,
|
||||
return INFINITY;
|
||||
}
|
||||
|
||||
double dISO = (log(this->iso / 100.) - log(iso / 100.)) / log(2);
|
||||
double dShutter = (log(this->shutter) - log(shutter)) / log(2);
|
||||
return sqrt( dISO * dISO + dShutter * dShutter);
|
||||
const double dISO = (log(this->iso / 100.) - log(iso / 100.)) / log(2);
|
||||
const double dShutter = (log(this->shutter) - log(shutter)) / log(2);
|
||||
return std::sqrt(dISO * dISO + dShutter * dShutter);
|
||||
}
|
||||
|
||||
RawImage* dfInfo::getRawImage()
|
||||
const rtengine::RawImage* dfInfo::getRawImage()
|
||||
{
|
||||
if (ri) {
|
||||
return ri;
|
||||
@ -121,7 +150,7 @@ RawImage* dfInfo::getRawImage()
|
||||
return ri;
|
||||
}
|
||||
|
||||
std::vector<badPix>& dfInfo::getHotPixels()
|
||||
const std::vector<rtengine::badPix>& dfInfo::getHotPixels()
|
||||
{
|
||||
if (!ri) {
|
||||
updateRawImage();
|
||||
@ -130,79 +159,70 @@ std::vector<badPix>& dfInfo::getHotPixels()
|
||||
|
||||
return badPixels;
|
||||
}
|
||||
|
||||
/* 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;
|
||||
* the first file is used also for reading all information other than pixels
|
||||
*/
|
||||
void dfInfo::updateRawImage()
|
||||
{
|
||||
typedef unsigned int acc_t;
|
||||
|
||||
if (!pathNames.empty()) {
|
||||
std::list<Glib::ustring>::iterator iName = pathNames.begin();
|
||||
ri = new RawImage(*iName); // First file used also for extra pixels information (width,height, shutter, filters etc.. )
|
||||
std::list<Glib::ustring>::const_iterator iName = pathNames.begin();
|
||||
ri = new rtengine::RawImage(*iName); // First file used also for extra pixels information (width,height, shutter, filters etc.. )
|
||||
|
||||
if (ri->loadRaw(true)) {
|
||||
delete ri;
|
||||
ri = nullptr;
|
||||
} else {
|
||||
int H = ri->get_height();
|
||||
int W = ri->get_width();
|
||||
const int H = ri->get_height();
|
||||
const int W = ri->get_width();
|
||||
ri->compress_image(0);
|
||||
int rSize = W * ((ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS) ? 1 : 3);
|
||||
acc_t **acc = new acc_t*[H];
|
||||
|
||||
for( int row = 0; row < H; row++) {
|
||||
acc[row] = new acc_t[rSize ];
|
||||
}
|
||||
const int rSize = W * ((ri->getSensorType() == rtengine::ST_BAYER || ri->getSensorType() == rtengine::ST_FUJI_XTRANS) ? 1 : 3);
|
||||
rtengine::JaggedArray<float> acc(W, H);
|
||||
|
||||
// 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++) {
|
||||
acc[row][col] = ri->data[row][col];
|
||||
}
|
||||
}
|
||||
|
||||
int nFiles = 1; // First file data already loaded
|
||||
|
||||
for (++iName; iName != pathNames.end(); ++iName) {
|
||||
RawImage* temp = new RawImage(*iName);
|
||||
rtengine::RawImage temp(*iName);
|
||||
|
||||
if( !temp->loadRaw(true)) {
|
||||
temp->compress_image(0); //\ TODO would be better working on original, because is temporary
|
||||
if (!temp.loadRaw(true)) {
|
||||
temp.compress_image(0); //\ TODO would be better working on original, because is temporary
|
||||
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 col = 0; col < W; col++) {
|
||||
acc[row][col] += temp->data[row][col];
|
||||
acc[row][col] += temp.data[row][col];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int row = 0; row < H; row++) {
|
||||
for (int col = 0; col < W; col++) {
|
||||
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 + 2] += temp->data[row][3 * col + 2];
|
||||
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 + 2] += temp.data[row][3 * col + 2];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete temp;
|
||||
}
|
||||
|
||||
const float factor = 1.f / nFiles;
|
||||
for (int row = 0; row < H; row++) {
|
||||
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 {
|
||||
ri = new RawImage(pathname);
|
||||
ri = new rtengine::RawImage(pathname);
|
||||
|
||||
if (ri->loadRaw(true)) {
|
||||
delete ri;
|
||||
@ -213,35 +233,36 @@ void dfInfo::updateRawImage()
|
||||
}
|
||||
}
|
||||
|
||||
void dfInfo::updateBadPixelList( RawImage *df )
|
||||
void dfInfo::updateBadPixelList(const rtengine::RawImage *df)
|
||||
{
|
||||
if (!df) {
|
||||
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 ) {
|
||||
std::vector<badPix> badPixelsTemp;
|
||||
if (df->getSensorType() == rtengine::ST_BAYER || df->getSensorType() == rtengine::ST_FUJI_XTRANS) {
|
||||
std::vector<rtengine::badPix> badPixelsTemp;
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp parallel
|
||||
#endif
|
||||
{
|
||||
std::vector<badPix> badPixelsThread;
|
||||
std::vector<rtengine::badPix> badPixelsThread;
|
||||
#ifdef _OPENMP
|
||||
#pragma omp for nowait
|
||||
#endif
|
||||
|
||||
for( int row = 2; row < df->get_height() - 2; row++)
|
||||
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] +
|
||||
for (int row = 2; row < df->get_height() - 2; ++row) {
|
||||
for (int col = 2; col < df->get_width() - 2; ++col) {
|
||||
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 + 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) {
|
||||
badPixelsThread.emplace_back(col, row);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef _OPENMP
|
||||
#pragma omp critical
|
||||
@ -250,14 +271,14 @@ void dfInfo::updateBadPixelList( RawImage *df )
|
||||
}
|
||||
badPixels.insert(badPixels.end(), badPixelsTemp.begin(), badPixelsTemp.end());
|
||||
} else {
|
||||
for( int row = 1; row < df->get_height() - 1; row++)
|
||||
for( int col = 1; col < df->get_width() - 1; col++) {
|
||||
for (int row = 1; row < df->get_height() - 1; ++row) {
|
||||
for (int col = 1; col < df->get_width() - 1; ++col) {
|
||||
float m[3];
|
||||
|
||||
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 + 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) {
|
||||
@ -265,32 +286,62 @@ void dfInfo::updateBadPixelList( RawImage *df )
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( settings->verbose ) {
|
||||
if (rtengine::settings->verbose) {
|
||||
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()) {
|
||||
return;
|
||||
}
|
||||
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()) {
|
||||
return;
|
||||
}
|
||||
|
||||
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()));
|
||||
}
|
||||
|
||||
@ -299,27 +350,27 @@ void DFManager::init(const Glib::ustring& pathname)
|
||||
dfList.clear();
|
||||
bpList.clear();
|
||||
|
||||
for (size_t i = 0; i < names.size(); i++) {
|
||||
size_t lastdot = names[i].find_last_of ('.');
|
||||
for (const auto &name : names) {
|
||||
const auto lastdot = name.find_last_of('.');
|
||||
|
||||
if (lastdot != Glib::ustring::npos && names[i].substr(lastdot) == ".badpixels" ) {
|
||||
int n = scanBadPixelsFile( names[i] );
|
||||
if (lastdot != Glib::ustring::npos && name.substr(lastdot) == ".badpixels") {
|
||||
const int n = scanBadPixelsFile(name);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
try {
|
||||
addFileInfo(names[i]);
|
||||
addFileInfo(name);
|
||||
} catch(std::exception& e) {}
|
||||
}
|
||||
|
||||
// Where multiple shots exist for same group, move filename to list
|
||||
for( dfList_t::iterator iter = dfList.begin(); iter != dfList.end(); ++iter ) {
|
||||
dfInfo &i = iter->second;
|
||||
for (auto &df : dfList) {
|
||||
dfInfo &i = df.second;
|
||||
|
||||
if (!i.pathNames.empty() && !i.pathname.empty()) {
|
||||
i.pathNames.push_back(i.pathname);
|
||||
@ -345,86 +396,13 @@ void DFManager::init(const Glib::ustring& pathname)
|
||||
return;
|
||||
}
|
||||
|
||||
dfInfo* DFManager::addFileInfo (const Glib::ustring& filename, bool pool)
|
||||
{
|
||||
auto ext = getFileExtension(filename);
|
||||
|
||||
if (ext.empty() || !options.is_extention_enabled(ext)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto file = Gio::File::create_for_path(filename);
|
||||
|
||||
if (!file) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (!file->query_exists()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
auto info = file->query_info("standard::name,standard::type,standard::is-hidden");
|
||||
|
||||
if (!info || info->get_file_type() == Gio::FILE_TYPE_DIRECTORY) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (!options.fbShowHidden && info->is_hidden()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RawImage ri(filename);
|
||||
int res = ri.loadRaw(false); // Read information about shot
|
||||
|
||||
if (res != 0) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
dfList_t::iterator iter;
|
||||
|
||||
if(!pool) {
|
||||
dfInfo n(filename, "", "", 0, 0, 0);
|
||||
iter = dfList.emplace("", n);
|
||||
return &(iter->second);
|
||||
}
|
||||
|
||||
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*/
|
||||
std::string key(dfInfo::key(((Glib::ustring)idata.getMake()).uppercase(), ((Glib::ustring)idata.getModel()).uppercase(), idata.getISOSpeed(), idata.getShutterSpeed()));
|
||||
iter = dfList.find(key);
|
||||
|
||||
if(iter == dfList.end()) {
|
||||
dfInfo n(filename, ((Glib::ustring)idata.getMake()).uppercase(), ((Glib::ustring)idata.getModel()).uppercase(), idata.getISOSpeed(), idata.getShutterSpeed(), idata.getDateTimeAsTS());
|
||||
iter = dfList.emplace(key, n);
|
||||
} else {
|
||||
while(iter != dfList.end() && iter->second.key() == key && ABS(iter->second.timestamp - idata.getDateTimeAsTS()) > 60 * 60 * 6) { // 6 hour difference
|
||||
++iter;
|
||||
}
|
||||
|
||||
if(iter != dfList.end()) {
|
||||
iter->second.pathNames.push_back(filename);
|
||||
} else {
|
||||
dfInfo n(filename, ((Glib::ustring)idata.getMake()).uppercase(), ((Glib::ustring)idata.getModel()).uppercase(), idata.getISOSpeed(), idata.getShutterSpeed(), idata.getDateTimeAsTS());
|
||||
iter = dfList.emplace(key, n);
|
||||
}
|
||||
}
|
||||
|
||||
return &(iter->second);
|
||||
|
||||
} catch(Gio::Error&) {}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void DFManager::getStat( int &totFiles, int &totTemplates)
|
||||
void rtengine::DFManager::Implementation::getStat(int& totFiles, int& totTemplates) const
|
||||
{
|
||||
totFiles = 0;
|
||||
totTemplates = 0;
|
||||
|
||||
for( dfList_t::iterator iter = dfList.begin(); iter != dfList.end(); ++iter ) {
|
||||
dfInfo &i = iter->second;
|
||||
for (const auto &df : dfList) {
|
||||
const dfInfo &i = df.second;
|
||||
|
||||
if (i.pathname.empty()) {
|
||||
totTemplates++;
|
||||
@ -439,50 +417,9 @@ void DFManager::getStat( int &totFiles, int &totTemplates)
|
||||
* 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 )
|
||||
const rtengine::RawImage* rtengine::DFManager::Implementation::searchDarkFrame(const std::string& mak, const std::string& mod, int iso, double shut, time_t t)
|
||||
{
|
||||
if( dfList.empty() ) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::string key( dfInfo::key(mak, mod, isospeed, shut) );
|
||||
dfList_t::iterator iter = dfList.find( key );
|
||||
|
||||
if( iter != dfList.end() ) {
|
||||
dfList_t::iterator bestMatch = iter;
|
||||
time_t bestDeltaTime = ABS(iter->second.timestamp - t);
|
||||
|
||||
for(++iter; iter != dfList.end() && !key.compare( iter->second.key() ); ++iter ) {
|
||||
time_t d = ABS(iter->second.timestamp - t );
|
||||
|
||||
if( d < bestDeltaTime ) {
|
||||
bestMatch = iter;
|
||||
bestDeltaTime = d;
|
||||
}
|
||||
}
|
||||
|
||||
return &(bestMatch->second);
|
||||
} else {
|
||||
iter = dfList.begin();
|
||||
dfList_t::iterator bestMatch = iter;
|
||||
double bestD = iter->second.distance( mak, mod, isospeed, shut );
|
||||
|
||||
for( ++iter; iter != dfList.end(); ++iter ) {
|
||||
double d = iter->second.distance( mak, mod, isospeed, shut );
|
||||
|
||||
if( d < bestD ) {
|
||||
bestD = d;
|
||||
bestMatch = iter;
|
||||
}
|
||||
}
|
||||
|
||||
return bestD != RT_INFINITY ? &(bestMatch->second) : nullptr ;
|
||||
}
|
||||
}
|
||||
|
||||
RawImage* DFManager::searchDarkFrame( 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 );
|
||||
dfInfo* df = find(toUppercase(mak), toUppercase(mod), iso, shut, t);
|
||||
|
||||
if (df) {
|
||||
return df->getRawImage();
|
||||
@ -491,11 +428,11 @@ RawImage* DFManager::searchDarkFrame( const std::string &mak, const std::string
|
||||
}
|
||||
}
|
||||
|
||||
RawImage* DFManager::searchDarkFrame( const Glib::ustring filename )
|
||||
const rtengine::RawImage* rtengine::DFManager::Implementation::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();
|
||||
for (auto& df : dfList) {
|
||||
if (df.second.pathname.compare(filename) == 0) {
|
||||
return df.second.getRawImage();
|
||||
}
|
||||
}
|
||||
|
||||
@ -507,19 +444,21 @@ RawImage* DFManager::searchDarkFrame( const Glib::ustring filename )
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
std::vector<badPix> *DFManager::getHotPixels ( const Glib::ustring filename )
|
||||
|
||||
const std::vector<rtengine::badPix>* rtengine::DFManager::Implementation::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();
|
||||
for (auto& df : dfList) {
|
||||
if (df.second.pathname.compare(filename) == 0) {
|
||||
return &df.second.getHotPixels();
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
std::vector<badPix> *DFManager::getHotPixels ( const std::string &mak, const std::string &mod, int iso, double shut, time_t t )
|
||||
|
||||
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( ((Glib::ustring)mak).uppercase(), ((Glib::ustring)mod).uppercase(), iso, shut, t );
|
||||
dfInfo* df = find(toUppercase(mak), toUppercase(mod), iso, shut, t);
|
||||
|
||||
if (df) {
|
||||
if (settings->verbose) {
|
||||
@ -538,61 +477,9 @@ std::vector<badPix> *DFManager::getHotPixels ( const std::string &mak, const std
|
||||
}
|
||||
}
|
||||
|
||||
int DFManager::scanBadPixelsFile( Glib::ustring filename )
|
||||
const std::vector<rtengine::badPix>* rtengine::DFManager::Implementation::getBadPixels(const std::string& mak, const std::string& mod, const std::string& serial) const
|
||||
{
|
||||
FILE *file = ::fopen( filename.c_str(), "r" );
|
||||
|
||||
if( !file ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t lastdot = filename.find_last_of ('.');
|
||||
size_t dirpos1 = filename.find_last_of ('/');
|
||||
size_t dirpos2 = filename.find_last_of ('\\');
|
||||
|
||||
if( dirpos1 == Glib::ustring::npos && dirpos2 == Glib::ustring::npos ) {
|
||||
dirpos1 = 0;
|
||||
} else if( dirpos1 != Glib::ustring::npos && dirpos2 != Glib::ustring::npos ) {
|
||||
dirpos1 = (dirpos1 > dirpos2 ? dirpos1 : dirpos2);
|
||||
} else if( dirpos1 == Glib::ustring::npos ) {
|
||||
dirpos1 = dirpos2;
|
||||
}
|
||||
|
||||
std::string makmodel(filename, dirpos1 + 1, lastdot - (dirpos1 + 1) );
|
||||
std::vector<badPix> bp;
|
||||
char line[256];
|
||||
|
||||
if(fgets(line, sizeof(line), file )) {
|
||||
int x, y;
|
||||
int offset = 0;
|
||||
int numparms = sscanf(line, "%d %d", &x, &y);
|
||||
|
||||
if( numparms == 1 ) { // only one number in first line means, that this is the offset.
|
||||
offset = x;
|
||||
} else if(numparms == 2) {
|
||||
bp.emplace_back(x + offset, y + offset);
|
||||
}
|
||||
|
||||
while( fgets(line, sizeof(line), file ) ) {
|
||||
if( sscanf(line, "%d %d", &x, &y) == 2 ) {
|
||||
bp.emplace_back(x + offset, y + offset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int numPixels = bp.size();
|
||||
|
||||
if( numPixels > 0 ) {
|
||||
bpList[ makmodel ] = bp;
|
||||
}
|
||||
|
||||
fclose(file);
|
||||
return numPixels;
|
||||
}
|
||||
|
||||
std::vector<badPix> *DFManager::getBadPixels ( const std::string &mak, const std::string &mod, const std::string &serial)
|
||||
{
|
||||
bpList_t::iterator iter;
|
||||
bpList_t::const_iterator iter;
|
||||
bool found = false;
|
||||
|
||||
if (!serial.empty()) {
|
||||
@ -612,7 +499,6 @@ std::vector<badPix> *DFManager::getBadPixels ( const std::string &mak, const std
|
||||
printf("%s.badpixels not found\n", s.str().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
@ -641,9 +527,218 @@ std::vector<badPix> *DFManager::getBadPixels ( const std::string &mak, const std
|
||||
}
|
||||
}
|
||||
|
||||
// Global variable
|
||||
DFManager dfm;
|
||||
|
||||
dfInfo* rtengine::DFManager::Implementation::addFileInfo(const Glib::ustring& filename, bool pool)
|
||||
{
|
||||
const auto ext = getFileExtension(filename);
|
||||
|
||||
if (ext.empty() || !options.is_extention_enabled(ext)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto file = Gio::File::create_for_path(filename);
|
||||
|
||||
if (!file) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (!file->query_exists()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
auto info = file->query_info("standard::name,standard::type,standard::is-hidden");
|
||||
|
||||
if (!info || info->get_file_type() == Gio::FILE_TYPE_DIRECTORY) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (!options.fbShowHidden && info->is_hidden()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RawImage ri(filename);
|
||||
|
||||
if (ri.loadRaw(false) != 0) { // Read information about shot
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (!pool) {
|
||||
const dfInfo n(filename, "", "", 0, 0, 0);
|
||||
auto iter = dfList.emplace("", n);
|
||||
return &(iter->second);
|
||||
}
|
||||
|
||||
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*/
|
||||
std::string key(dfInfo::key(toUppercase(idata.getMake()), toUppercase(idata.getModel()), idata.getISOSpeed(), idata.getShutterSpeed()));
|
||||
auto iter = dfList.find(key);
|
||||
|
||||
if (iter == dfList.end()) {
|
||||
dfInfo n(filename, toUppercase(idata.getMake()), toUppercase(idata.getModel()), idata.getISOSpeed(), idata.getShutterSpeed(), idata.getDateTimeAsTS());
|
||||
iter = dfList.emplace(key, n);
|
||||
} else {
|
||||
while(iter != dfList.end() && iter->second.key() == key && ABS(iter->second.timestamp - idata.getDateTimeAsTS()) > 60 * 60 * 6) { // 6 hour difference
|
||||
++iter;
|
||||
}
|
||||
|
||||
if (iter != dfList.end()) {
|
||||
iter->second.pathNames.push_back(filename);
|
||||
} else {
|
||||
dfInfo n(filename, toUppercase(idata.getMake()), toUppercase(idata.getModel()), idata.getISOSpeed(), idata.getShutterSpeed(), idata.getDateTimeAsTS());
|
||||
iter = dfList.emplace(key, n);
|
||||
}
|
||||
}
|
||||
|
||||
return &(iter->second);
|
||||
|
||||
} catch(Gio::Error&) {}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
dfInfo* rtengine::DFManager::Implementation::find(const std::string& mak, const std::string& mod, int isospeed, double shut, time_t t)
|
||||
{
|
||||
if (dfList.empty()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const std::string key(dfInfo::key(mak, mod, isospeed, shut));
|
||||
dfList_t::iterator iter = dfList.find(key);
|
||||
|
||||
if (iter != dfList.end()) {
|
||||
dfList_t::iterator bestMatch = iter;
|
||||
time_t bestDeltaTime = ABS(iter->second.timestamp - t);
|
||||
|
||||
for (++iter; iter != dfList.end() && !key.compare(iter->second.key()); ++iter) {
|
||||
const time_t d = ABS(iter->second.timestamp - t);
|
||||
|
||||
if (d < bestDeltaTime) {
|
||||
bestMatch = iter;
|
||||
bestDeltaTime = d;
|
||||
}
|
||||
}
|
||||
|
||||
return &(bestMatch->second);
|
||||
} else {
|
||||
iter = dfList.begin();
|
||||
dfList_t::iterator bestMatch = iter;
|
||||
double bestD = iter->second.distance(mak, mod, isospeed, shut);
|
||||
|
||||
for (++iter; iter != dfList.end(); ++iter) {
|
||||
const double d = iter->second.distance(mak, mod, isospeed, shut);
|
||||
|
||||
if (d < bestD) {
|
||||
bestD = d;
|
||||
bestMatch = iter;
|
||||
}
|
||||
}
|
||||
|
||||
return bestD != RT_INFINITY ? &(bestMatch->second) : nullptr ;
|
||||
}
|
||||
}
|
||||
|
||||
int rtengine::DFManager::Implementation::scanBadPixelsFile(const Glib::ustring& filename)
|
||||
{
|
||||
FILE *file = ::fopen( filename.c_str(), "r" );
|
||||
|
||||
if (!file) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const auto lastdot = filename.find_last_of('.');
|
||||
auto dirpos1 = filename.find_last_of('/');
|
||||
auto dirpos2 = filename.find_last_of('\\');
|
||||
|
||||
if (dirpos1 == Glib::ustring::npos && dirpos2 == Glib::ustring::npos) {
|
||||
dirpos1 = 0;
|
||||
} else if (dirpos1 != Glib::ustring::npos && dirpos2 != Glib::ustring::npos) {
|
||||
dirpos1 = (dirpos1 > dirpos2 ? dirpos1 : dirpos2);
|
||||
} else if (dirpos1 == Glib::ustring::npos) {
|
||||
dirpos1 = dirpos2;
|
||||
}
|
||||
|
||||
const std::string makmodel(filename, dirpos1 + 1, lastdot - (dirpos1 + 1));
|
||||
std::vector<badPix> bp;
|
||||
char line[256];
|
||||
|
||||
if (fgets(line, sizeof(line), file)) {
|
||||
int x, y;
|
||||
int offset = 0;
|
||||
int numparms = sscanf(line, "%d %d", &x, &y);
|
||||
|
||||
if (numparms == 1) { // only one number in first line means, that this is the offset.
|
||||
offset = x;
|
||||
} else if (numparms == 2) {
|
||||
bp.emplace_back(x + offset, y + offset);
|
||||
}
|
||||
|
||||
while(fgets(line, sizeof(line), file)) {
|
||||
if (sscanf(line, "%d %d", &x, &y) == 2) {
|
||||
bp.emplace_back(x + offset, y + offset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const int numPixels = bp.size();
|
||||
|
||||
if (numPixels > 0) {
|
||||
bpList[makmodel] = bp;
|
||||
}
|
||||
|
||||
fclose(file);
|
||||
return numPixels;
|
||||
}
|
||||
|
||||
rtengine::DFManager& rtengine::DFManager::getInstance()
|
||||
{
|
||||
static DFManager instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
void rtengine::DFManager::init(const Glib::ustring& pathname)
|
||||
{
|
||||
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;
|
||||
|
@ -18,89 +18,40 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <cmath>
|
||||
#include <list>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <glibmm/ustring.h>
|
||||
|
||||
#include "pixelsmap.h"
|
||||
|
||||
namespace rtengine
|
||||
{
|
||||
|
||||
struct badPix;
|
||||
|
||||
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
|
||||
{
|
||||
public:
|
||||
static DFManager& getInstance();
|
||||
|
||||
void init(const Glib::ustring& pathname);
|
||||
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);
|
||||
Glib::ustring getPathname() const;
|
||||
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;
|
||||
|
||||
protected:
|
||||
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( Glib::ustring filename );
|
||||
};
|
||||
private:
|
||||
DFManager();
|
||||
~DFManager();
|
||||
|
||||
extern DFManager dfm;
|
||||
class Implementation;
|
||||
|
||||
const std::unique_ptr<Implementation> implementation;
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -92,7 +92,7 @@ int init (const Settings* s, const Glib::ustring& baseDir, const Glib::ustring&
|
||||
#pragma omp section
|
||||
#endif
|
||||
{
|
||||
dfm.init(s->darkFramesPath);
|
||||
DFManager::getInstance().init(s->darkFramesPath);
|
||||
}
|
||||
#ifdef _OPENMP
|
||||
#pragma omp section
|
||||
|
@ -617,6 +617,7 @@ struct local_params {
|
||||
float laplacexp;
|
||||
float balanexp;
|
||||
float linear;
|
||||
int fullim;
|
||||
int expmet;
|
||||
int softmet;
|
||||
int blurmet;
|
||||
@ -895,6 +896,14 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
|
||||
lp.laplacexp = locallab.spots.at(sp).laplacexp;
|
||||
lp.balanexp = locallab.spots.at(sp).balanexp;
|
||||
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.prevdE = prevDeltaE;
|
||||
@ -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
|
||||
#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
|
||||
//begin ciecam
|
||||
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 maxicamq = -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)
|
||||
{
|
||||
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;
|
||||
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;
|
||||
@ -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]);
|
||||
|
||||
|
||||
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 ¥d, 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 ¥d, int cx, int cy, int fulima)
|
||||
{
|
||||
int ftsizeH = 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
|
||||
if (fftw_size[ft] <= bfh) {
|
||||
@ -8336,6 +8356,31 @@ void optfft(int N_fftwsize, int &bfh, int &bfw, int &bfhr, int &bfwr, struct loc
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
bool reduW = false;
|
||||
bool reduH = false;
|
||||
@ -8373,7 +8418,6 @@ void optfft(int N_fftwsize, int &bfh, int &bfw, int &bfhr, int &bfwr, struct loc
|
||||
reduW = true;
|
||||
exec = false;
|
||||
}
|
||||
|
||||
//new values optimized
|
||||
ystart = rtengine::max(static_cast<int>(lp.yc - lp.lyT) - cy, 0);
|
||||
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 bfwr = bfw;
|
||||
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;
|
||||
@ -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;
|
||||
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");
|
||||
@ -10542,7 +10586,7 @@ void ImProcFunctions::wavcontrast4(struct local_params& lp, float ** tmp, float
|
||||
cmsHTRANSFORM dummy = nullptr;
|
||||
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, 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);
|
||||
delete tmpImage;
|
||||
|
||||
@ -10925,7 +10969,7 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
||||
float gamma = lp.noisegam;
|
||||
rtengine::GammaValues g_a; //gamma parameters
|
||||
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
|
||||
|
||||
if(gamma > 1.f) {
|
||||
@ -11640,7 +11684,7 @@ void ImProcFunctions::DeNoise(int call, float * slidL, float * slida, float * sl
|
||||
float gamma = lp.noisegam;
|
||||
rtengine::GammaValues g_a; //gamma parameters
|
||||
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
|
||||
if(gamma > 1.f) {
|
||||
#ifdef _OPENMP
|
||||
@ -13660,7 +13704,7 @@ void ImProcFunctions::Lab_Local(
|
||||
|
||||
if (bfw >= mSP && bfh >= mSP) {
|
||||
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));
|
||||
@ -14977,7 +15021,7 @@ void ImProcFunctions::Lab_Local(
|
||||
|
||||
if (bfw >= mSP && bfh > mSP) {
|
||||
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);
|
||||
@ -15732,7 +15776,7 @@ void ImProcFunctions::Lab_Local(
|
||||
float gamma1 = params->locallab.spots.at(sp).vibgam;
|
||||
rtengine::GammaValues g_a; //gamma parameters
|
||||
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
|
||||
if(gamma1 != 1.f) {
|
||||
#ifdef _OPENMP
|
||||
@ -15757,7 +15801,7 @@ void ImProcFunctions::Lab_Local(
|
||||
// float gamma = params->locallab.spots.at(sp).vibgam;
|
||||
// rtengine::GammaValues g_a; //gamma parameters
|
||||
// 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
|
||||
|
||||
if(gamma1 != 1.f) {
|
||||
@ -16141,7 +16185,7 @@ void ImProcFunctions::Lab_Local(
|
||||
if (bfw >= mSP && bfh >= mSP) {
|
||||
|
||||
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));
|
||||
@ -16267,7 +16311,7 @@ void ImProcFunctions::Lab_Local(
|
||||
|
||||
if (bfw >= mSPwav && bfh >= mSPwav) {//avoid too small spot for wavelet
|
||||
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;
|
||||
@ -16483,7 +16527,7 @@ void ImProcFunctions::Lab_Local(
|
||||
float gamma = lp.gamlc;
|
||||
rtengine::GammaValues g_a; //gamma parameters
|
||||
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
|
||||
|
||||
if(gamma != 1.f) {
|
||||
@ -16782,7 +16826,7 @@ void ImProcFunctions::Lab_Local(
|
||||
float gamma1 = params->locallab.spots.at(sp).shargam;
|
||||
rtengine::GammaValues g_a; //gamma parameters
|
||||
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
|
||||
if(gamma1 != 1.f) {
|
||||
#ifdef _OPENMP
|
||||
@ -16808,7 +16852,7 @@ void ImProcFunctions::Lab_Local(
|
||||
/*
|
||||
float gamma = params->locallab.spots.at(sp).shargam;
|
||||
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
|
||||
*/
|
||||
if(gamma1 != 1.f) {
|
||||
@ -16837,7 +16881,7 @@ void ImProcFunctions::Lab_Local(
|
||||
float gamma1 = params->locallab.spots.at(sp).shargam;
|
||||
rtengine::GammaValues g_a; //gamma parameters
|
||||
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
|
||||
if(gamma1 != 1.f) {
|
||||
#ifdef _OPENMP
|
||||
@ -16861,7 +16905,7 @@ void ImProcFunctions::Lab_Local(
|
||||
/*
|
||||
float gamma = params->locallab.spots.at(sp).shargam;
|
||||
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
|
||||
*/
|
||||
if(gamma1 != 1.f) {
|
||||
@ -16903,7 +16947,7 @@ void ImProcFunctions::Lab_Local(
|
||||
float gamma1 = params->locallab.spots.at(sp).shargam;
|
||||
rtengine::GammaValues g_a; //gamma parameters
|
||||
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
|
||||
if(gamma1 != 1.f) {
|
||||
#ifdef _OPENMP
|
||||
@ -16928,7 +16972,7 @@ void ImProcFunctions::Lab_Local(
|
||||
/*
|
||||
float gamma = params->locallab.spots.at(sp).shargam;
|
||||
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
|
||||
*/
|
||||
if(gamma1 != 1.f) {
|
||||
@ -16983,7 +17027,7 @@ void ImProcFunctions::Lab_Local(
|
||||
if (bfw >= mSP && bfh >= mSP) {
|
||||
|
||||
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));
|
||||
@ -17014,7 +17058,7 @@ void ImProcFunctions::Lab_Local(
|
||||
float gamma1 = lp.gamex;
|
||||
rtengine::GammaValues g_a; //gamma parameters
|
||||
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
|
||||
|
||||
if(gamma1 != 1.f) {
|
||||
@ -17334,7 +17378,7 @@ void ImProcFunctions::Lab_Local(
|
||||
float gamma = lp.gamex;
|
||||
rtengine::GammaValues g_a; //gamma parameters
|
||||
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
|
||||
*/
|
||||
if(gamma1 != 1.f) {
|
||||
@ -17513,7 +17557,7 @@ void ImProcFunctions::Lab_Local(
|
||||
if (bfw >= mSP && bfh >= mSP) {
|
||||
|
||||
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;
|
||||
@ -17573,7 +17617,7 @@ void ImProcFunctions::Lab_Local(
|
||||
float gamma1 = lp.gamc;
|
||||
rtengine::GammaValues g_a; //gamma parameters
|
||||
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
|
||||
|
||||
if(gamma1 != 1.f) {
|
||||
@ -18601,7 +18645,7 @@ void ImProcFunctions::Lab_Local(
|
||||
float gamma = lp.gamc;
|
||||
rtengine::GammaValues g_a; //gamma parameters
|
||||
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
|
||||
*/
|
||||
if(gamma1 != 1.f) {
|
||||
@ -18783,7 +18827,7 @@ void ImProcFunctions::Lab_Local(
|
||||
if (bfw >= mSP && bfh >= mSP) {
|
||||
|
||||
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> ble(bfw, bfh);
|
||||
|
@ -301,17 +301,18 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const
|
||||
}
|
||||
|
||||
|
||||
if (params->wavelet.denmethod == "equ") {
|
||||
cp.denmet = 0;
|
||||
} else if (params->wavelet.denmethod == "high") {
|
||||
cp.denmet = 1;
|
||||
} else if (params->wavelet.denmethod == "low") {
|
||||
cp.denmet = 2;
|
||||
} else if (params->wavelet.denmethod == "12high") {
|
||||
cp.denmet = 3;
|
||||
} else if (params->wavelet.denmethod == "12low") {
|
||||
cp.denmet = 4;
|
||||
}
|
||||
//if (params->wavelet.denmethod == "equ") {
|
||||
// cp.denmet = 0;
|
||||
//} else if (params->wavelet.denmethod == "high") {
|
||||
// cp.denmet = 1;
|
||||
//} else if (params->wavelet.denmethod == "low") {
|
||||
// cp.denmet = 2;
|
||||
//} else if (params->wavelet.denmethod == "12high") {
|
||||
// cp.denmet = 3;
|
||||
//} else if (params->wavelet.denmethod == "12low") {
|
||||
// cp.denmet = 4;
|
||||
//}
|
||||
|
||||
if (params->wavelet.mixmethod == "nois") {
|
||||
cp.mixmet = 0;
|
||||
@ -658,7 +659,7 @@ void ImProcFunctions::ip_wavelet(LabImage * lab, LabImage * dst, int kall, const
|
||||
maxlevelcrop = 10;
|
||||
}
|
||||
|
||||
// adap maximum level wavelet to size of crop
|
||||
// adapt maximum level wavelet to size of crop
|
||||
if (minwin * skip < 1024) {
|
||||
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);
|
||||
|
||||
// I suppress this fonctionality ==> crash for level < 3
|
||||
// I suppress this functionality ==> crash for level < 3
|
||||
if (levwav < 1) {
|
||||
return; // nothing to do
|
||||
}
|
||||
|
@ -21,10 +21,14 @@
|
||||
namespace rtengine
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Aligned so the first entry starts on line 30
|
||||
enum ProcEventCode {
|
||||
EvPhotoLoaded = 0,
|
||||
EvProfileLoaded = 1,
|
||||
obsolete_1 = 1,
|
||||
EvProfileChanged = 2,
|
||||
EvHistoryBrowsed = 3,
|
||||
EvBrightness = 4,
|
||||
@ -38,9 +42,9 @@ enum ProcEventCode {
|
||||
EvClip = 12,
|
||||
EvLBrightness = 13,
|
||||
EvLContrast = 14,
|
||||
EvLBlack = 15,
|
||||
EvLHLCompr = 16,
|
||||
EvLSHCompr = 17,
|
||||
obsolete_15 = 15, // obsolete
|
||||
obsolete_16 = 16, // obsolete
|
||||
obsolete_17 = 17, // obsolete
|
||||
EvLLCurve = 18,
|
||||
EvShrEnabled = 19,
|
||||
EvShrRadius = 20,
|
||||
@ -77,7 +81,7 @@ enum ProcEventCode {
|
||||
EvSHShadows = 51,
|
||||
EvSHHLTonalW = 52,
|
||||
EvSHSHTonalW = 53,
|
||||
EvSHLContrast = 54,
|
||||
obsolete_54 = 54, // obsolete
|
||||
EvSHRadius = 55,
|
||||
EvCTRotate = 56,
|
||||
EvCTHFlip = 57,
|
||||
@ -100,12 +104,12 @@ enum ProcEventCode {
|
||||
EvResizeMethod = 74,
|
||||
EvExif = 75,
|
||||
EvIPTC = 76,
|
||||
EvResizeSpec = 77,
|
||||
obsolete_77 = 77, // obsolete
|
||||
EvResizeWidth = 78,
|
||||
EvResizeHeight = 79,
|
||||
EvResizeEnabled = 80,
|
||||
EvProfileChangeNotification = 81,
|
||||
EvSHHighQuality = 82,
|
||||
obsolete_82 = 82, // obsolete
|
||||
EvPerspCorr = 83,
|
||||
EvLCPFile = 84,
|
||||
EvRGBrCurveLumamode = 85,
|
||||
@ -153,12 +157,12 @@ enum ProcEventCode {
|
||||
EvFlatFieldBlurRadius = 127,
|
||||
EvFlatFieldBlurType = 128,
|
||||
EvAutoDIST = 129,
|
||||
EvDPDNLumCurve = 130,
|
||||
EvDPDNChromCurve = 131,
|
||||
EvGAMMA = 132,
|
||||
EvGAMPOS = 133,
|
||||
EvGAMFREE = 134,
|
||||
EvSLPOS = 135,
|
||||
obsolete_130 = 130, // obsolete
|
||||
obsolete_131 = 131, // obsolete
|
||||
obsolete_132 = 132, // obsolete
|
||||
obsolete_133 = 133, // obsolete
|
||||
obsolete_134 = 134, // obsolete
|
||||
obsolete_135 = 135, // obsolete
|
||||
EvPreProcessExpBlackzero = 136,
|
||||
EvPreProcessExpBlackone = 137,
|
||||
EvPreProcessExpBlacktwo = 138,
|
||||
@ -231,7 +235,7 @@ enum ProcEventCode {
|
||||
EvCATAutoAdap = 205,
|
||||
EvPFCurve = 206,
|
||||
EvWBequal = 207,
|
||||
EvWBequalbo = 208,
|
||||
obsolete_208 = 208,
|
||||
EvGradientDegree = 209,
|
||||
EvGradientEnabled = 210,
|
||||
EvPCVignetteStrength = 211,
|
||||
@ -272,7 +276,7 @@ enum ProcEventCode {
|
||||
EvLLHCurve = 246,
|
||||
EvLHHCurve = 247,
|
||||
EvDirPyrEqualizerThreshold = 248,
|
||||
EvDPDNenhance = 249,
|
||||
obsolete_249 = 249,
|
||||
EvBWMethodalg = 250,
|
||||
EvDirPyrEqualizerSkin = 251,
|
||||
EvDirPyrEqlgamutlab = 252,
|
||||
@ -296,8 +300,8 @@ enum ProcEventCode {
|
||||
EvColorToningbluehigh = 270,
|
||||
EvColorToningbalance = 271,
|
||||
EvColorToningNeutral = 272,
|
||||
EvColorToningsatlow = 273,
|
||||
EvColorToningsathigh = 274,
|
||||
obsolete_273 = 273,
|
||||
obsolete_274 = 274,
|
||||
EvColorToningTwocolor = 275,
|
||||
EvColorToningNeutralcur = 276,
|
||||
EvColorToningLumamode = 277,
|
||||
@ -322,7 +326,7 @@ enum ProcEventCode {
|
||||
EvDPDNsmet = 296,
|
||||
EvPreProcessDeadPixel = 297,
|
||||
EvDPDNCCCurve = 298,
|
||||
EvDPDNautochroma = 299,
|
||||
obsolete_299 = 299,
|
||||
EvDPDNLmet = 300,
|
||||
EvDPDNCmet = 301,
|
||||
EvDPDNC2met = 302,
|
||||
@ -431,7 +435,7 @@ enum ProcEventCode {
|
||||
EvWavNPmet = 405,
|
||||
EvretinexMethod = 406,
|
||||
EvLneigh = 407,
|
||||
EvLgain = 408,
|
||||
obsolete_408 = 408,
|
||||
EvLoffs = 409,
|
||||
EvLstr = 410,
|
||||
EvLscal = 411,
|
||||
@ -495,7 +499,7 @@ enum ProcEventCode {
|
||||
// EvPixelShiftMedian3 = 469,
|
||||
EvPixelShiftMotionMethod = 470,
|
||||
EvPixelShiftSmooth = 471,
|
||||
EvPixelShiftLmmse = 472,
|
||||
obsolete_472 = 472,
|
||||
EvPixelShiftEqualBright = 473,
|
||||
EvPixelShiftEqualBrightChannel = 474,
|
||||
EvCATtempout = 475,
|
||||
@ -626,7 +630,7 @@ enum ProcEventCode {
|
||||
Evlocallabstreng = 600,
|
||||
Evlocallabsensisf = 601,
|
||||
Evlocallabsharblur = 602,
|
||||
EvLocenalabregion = 603,
|
||||
obsolete_603 = 603,
|
||||
EvlocallabshowmaskMethod = 604,
|
||||
EvLocallabSpotSelectedWithMask = 605,
|
||||
EvlocallabCCmaskshape = 606,
|
||||
@ -870,7 +874,7 @@ enum ProcEventCode {
|
||||
EvLocenalog = 844,
|
||||
EvLocallabAuto = 845,
|
||||
EvlocallabsourceGray = 846,
|
||||
EvlocallabsourceGrayAuto = 847,
|
||||
obsolete_847 = 847,
|
||||
EvlocallabAutogray = 848,
|
||||
EvlocallabblackEv = 849,
|
||||
EvlocallabwhiteEv = 850,
|
||||
@ -889,7 +893,7 @@ enum ProcEventCode {
|
||||
Evlocallabsigmadc = 863,
|
||||
Evlocallabdeltad = 864,
|
||||
EvlocallabwavCurvecomp = 865,
|
||||
Evlocallabfatres = 866,
|
||||
//Evlocallabfatres = 866,
|
||||
EvLocallabSpotbalanh = 867,
|
||||
EvlocallabwavCurveden = 868,
|
||||
EvlocallabHHmasklcshape = 869,
|
||||
@ -918,7 +922,7 @@ enum ProcEventCode {
|
||||
Evlocallabanglog = 892,
|
||||
EvLocallabSpotcolorde = 893,
|
||||
// EvlocallabshowmasksharMethod = 894,
|
||||
Evlocallabshowreset = 895,
|
||||
//Evlocallabshowreset = 895,
|
||||
Evlocallabstrengthw = 896,
|
||||
Evlocallabradiusw = 897,
|
||||
Evlocallabdetailw = 898,
|
||||
@ -998,7 +1002,7 @@ enum ProcEventCode {
|
||||
EvLocallabchromaskL = 972,
|
||||
EvlocallabLmaskshapeL = 973,
|
||||
Evlocallablightl = 974,
|
||||
EvlocallabLshapeL = 975,
|
||||
//EvlocallabLshapeL = 975,
|
||||
Evlocallabcontq = 976,
|
||||
Evlocallabsursour = 977,
|
||||
Evlocallablightq = 978,
|
||||
@ -1121,7 +1125,6 @@ enum ProcEventCode {
|
||||
Evlocallabshjzcie = 1095,
|
||||
Evlocallabshthjzcie = 1096,
|
||||
Evlocallabradjzcie = 1097,
|
||||
// EvlocallabHHshapejz = 1098,
|
||||
EvlocallabCHshapejz = 1098,
|
||||
Evlocallabjz100 = 1099,
|
||||
Evlocallabpqremap = 1100,
|
||||
@ -1136,14 +1139,6 @@ enum ProcEventCode {
|
||||
Evlocallabshapecz = 1109,
|
||||
Evlocallabshapeczjz = 1110,
|
||||
Evlocallabforcejz = 1111,
|
||||
//Evlocallablightlzcam = 1113,
|
||||
//Evlocallablightqzcam = 1114,
|
||||
//Evlocallabcontlzcam = 1115,
|
||||
//Evlocallabcontqzcam = 1116,
|
||||
//Evlocallabcontthreszcam = 1117,
|
||||
//Evlocallabcolorflzcam = 1118,
|
||||
//Evlocallabsaturzcam = 1119,
|
||||
//Evlocallabchromzcam = 1120,
|
||||
Evlocallabpqremapcam16 = 1112,
|
||||
EvLocallabEnacieMask = 1113,
|
||||
EvlocallabCCmaskcieshape = 1114,
|
||||
|
@ -2420,41 +2420,41 @@ WaveletParams::WaveletParams() :
|
||||
0.35,
|
||||
0.35
|
||||
},
|
||||
opacityCurveSH{
|
||||
static_cast<double>(FCT_MinMaxCPoints),
|
||||
0.,
|
||||
1.,
|
||||
0.35,
|
||||
0.35,
|
||||
0.15,
|
||||
0.9,
|
||||
0.35,
|
||||
0.35,
|
||||
0.4,
|
||||
0.8,
|
||||
0.35,
|
||||
0.35,
|
||||
0.4,
|
||||
0.5,
|
||||
0.35,
|
||||
0.35,
|
||||
0.5,
|
||||
0.5,
|
||||
0.35,
|
||||
0.35,
|
||||
0.5,
|
||||
0.2,
|
||||
0.35,
|
||||
0.35,
|
||||
0.8,
|
||||
0.1,
|
||||
0.35,
|
||||
0.35,
|
||||
1.0,
|
||||
0.,
|
||||
0.35,
|
||||
0.35
|
||||
},
|
||||
//opacityCurveSH{
|
||||
// static_cast<double>(FCT_MinMaxCPoints),
|
||||
// 0.,
|
||||
// 1.,
|
||||
// 0.35,
|
||||
// 0.35,
|
||||
// 0.15,
|
||||
// 0.9,
|
||||
// 0.35,
|
||||
// 0.35,
|
||||
// 0.4,
|
||||
// 0.8,
|
||||
// 0.35,
|
||||
// 0.35,
|
||||
// 0.4,
|
||||
// 0.5,
|
||||
// 0.35,
|
||||
// 0.35,
|
||||
// 0.5,
|
||||
// 0.5,
|
||||
// 0.35,
|
||||
// 0.35,
|
||||
// 0.5,
|
||||
// 0.2,
|
||||
// 0.35,
|
||||
// 0.35,
|
||||
// 0.8,
|
||||
// 0.1,
|
||||
// 0.35,
|
||||
// 0.35,
|
||||
// 1.0,
|
||||
// 0.,
|
||||
// 0.35,
|
||||
// 0.35
|
||||
//},
|
||||
/*
|
||||
opacityCurveSH{
|
||||
static_cast<double>(FCT_MinMaxCPoints),
|
||||
@ -2592,7 +2592,7 @@ WaveletParams::WaveletParams() :
|
||||
Backmethod("grey"),
|
||||
Tilesmethod("full"),
|
||||
complexmethod("normal"),
|
||||
denmethod("12low"),
|
||||
//denmethod("12low"),
|
||||
mixmethod("mix"),
|
||||
slimethod("sli"),
|
||||
quamethod("cons"),
|
||||
@ -2666,7 +2666,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const
|
||||
&& wavdenoiseh == other.wavdenoiseh
|
||||
&& blcurve == other.blcurve
|
||||
&& opacityCurveRG == other.opacityCurveRG
|
||||
&& opacityCurveSH == other.opacityCurveSH
|
||||
//&& opacityCurveSH == other.opacityCurveSH
|
||||
&& opacityCurveBY == other.opacityCurveBY
|
||||
&& opacityCurveW == other.opacityCurveW
|
||||
&& opacityCurveWL == other.opacityCurveWL
|
||||
@ -2742,7 +2742,7 @@ bool WaveletParams::operator ==(const WaveletParams& other) const
|
||||
&& Backmethod == other.Backmethod
|
||||
&& Tilesmethod == other.Tilesmethod
|
||||
&& complexmethod == other.complexmethod
|
||||
&& denmethod == other.denmethod
|
||||
//&& denmethod == other.denmethod
|
||||
&& mixmethod == other.mixmethod
|
||||
&& slimethod == other.slimethod
|
||||
&& quamethod == other.quamethod
|
||||
@ -2829,7 +2829,7 @@ void WaveletParams::getCurves(
|
||||
wavdenoiseh.Set(this->wavdenoiseh);
|
||||
tCurve.Set(this->blcurve);
|
||||
opacityCurveLUTRG.Set(this->opacityCurveRG);
|
||||
opacityCurveLUTSH.Set(this->opacityCurveSH);
|
||||
//opacityCurveLUTSH.Set(this->opacityCurveSH);
|
||||
opacityCurveLUTBY.Set(this->opacityCurveBY);
|
||||
opacityCurveLUTW.Set(this->opacityCurveW);
|
||||
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.Tilesmethod, "Wavelet", "TilesMethod", wavelet.Tilesmethod, 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.slimethod, "Wavelet", "sliMethod", wavelet.slimethod, 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.satlev, "Wavelet", "Satlev", wavelet.satlev.toVector(), 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.wavdenoise, "Wavelet", "wavdenoise", wavelet.wavdenoise, 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", "sliMethod", pedited, wavelet.slimethod, pedited->wavelet.slimethod);
|
||||
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", "blcurve", pedited, wavelet.blcurve, pedited->wavelet.blcurve);
|
||||
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", "wavdenoise", pedited, wavelet.wavdenoise, pedited->wavelet.wavdenoise);
|
||||
assignFromKeyfile(keyFile, "Wavelet", "wavdenoiseh", pedited, wavelet.wavdenoiseh, pedited->wavelet.wavdenoiseh);
|
||||
|
@ -2070,7 +2070,7 @@ struct WaveletParams {
|
||||
std::vector<double> blcurve;
|
||||
std::vector<double> levelshc;
|
||||
std::vector<double> opacityCurveRG;
|
||||
std::vector<double> opacityCurveSH;
|
||||
//std::vector<double> opacityCurveSH;
|
||||
std::vector<double> opacityCurveBY;
|
||||
std::vector<double> opacityCurveW;
|
||||
std::vector<double> opacityCurveWL;
|
||||
@ -2143,7 +2143,7 @@ struct WaveletParams {
|
||||
Glib::ustring Backmethod;
|
||||
Glib::ustring Tilesmethod;
|
||||
Glib::ustring complexmethod;
|
||||
Glib::ustring denmethod;
|
||||
//Glib::ustring denmethod;
|
||||
Glib::ustring mixmethod;
|
||||
Glib::ustring slimethod;
|
||||
Glib::ustring quamethod;
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include "median.h"
|
||||
#include "mytime.h"
|
||||
#include "pdaflinesfilter.h"
|
||||
#include "pixelsmap.h"
|
||||
#include "procparams.h"
|
||||
#include "rawimage.h"
|
||||
#include "rawimagesource_i.h"
|
||||
@ -41,6 +42,7 @@
|
||||
#include "rt_math.h"
|
||||
#include "rtengine.h"
|
||||
#include "rtlensfun.h"
|
||||
|
||||
#include "../rtgui/options.h"
|
||||
|
||||
#define BENCHMARK
|
||||
@ -1307,14 +1309,14 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
|
||||
|
||||
|
||||
Glib::ustring newDF = raw.dark_frame;
|
||||
RawImage *rid = nullptr;
|
||||
const RawImage* rid = nullptr;
|
||||
|
||||
if (!raw.df_autoselect) {
|
||||
if (!raw.dark_frame.empty()) {
|
||||
rid = dfm.searchDarkFrame(raw.dark_frame);
|
||||
rid = DFManager::getInstance().searchDarkFrame(raw.dark_frame);
|
||||
}
|
||||
} 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) {
|
||||
@ -1387,7 +1389,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
|
||||
|
||||
|
||||
// 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 (!bitmapBads) {
|
||||
@ -1405,9 +1407,9 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le
|
||||
bp = nullptr;
|
||||
|
||||
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()) {
|
||||
bp = dfm.getHotPixels(raw.dark_frame);
|
||||
bp = DFManager::getInstance().getHotPixels(raw.dark_frame);
|
||||
}
|
||||
|
||||
if (bp) {
|
||||
@ -2453,7 +2455,7 @@ void RawImageSource::HLRecovery_Global(const ToneCurveParams &hrp)
|
||||
/* Copy original pixel data and
|
||||
* 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();
|
||||
ri->set_filters(ri->prefilters); // we need 4 blacks for bayer processing
|
||||
|
@ -138,7 +138,7 @@ public:
|
||||
}
|
||||
|
||||
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 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;
|
||||
|
@ -28,7 +28,7 @@
|
||||
// Aligned so the first entry starts on line 30.
|
||||
int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
ALL, // EvPhotoLoaded,
|
||||
ALL, // EvProfileLoaded,
|
||||
0, // EvProfileLoaded : obsolete,
|
||||
ALL, // EvProfileChanged,
|
||||
ALL, // EvHistoryBrowsed,
|
||||
AUTOEXP, // EvBrightness,
|
||||
@ -42,9 +42,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
AUTOEXP, // EvClip,
|
||||
LUMINANCECURVE, // EvLBrightness,
|
||||
LUMINANCECURVE, // EvLContrast,
|
||||
LUMINANCECURVE, // EvLBlack,
|
||||
LUMINANCECURVE, // EvLHLCompr,
|
||||
LUMINANCECURVE, // EvLSHCompr,
|
||||
0, // EvLBlack : obsolete,
|
||||
0, // EvLHLCompr : obsolete,
|
||||
0, // EvLSHCompr : obsolete,
|
||||
LUMINANCECURVE, // EvLLCurve,
|
||||
SHARPENING, // EvShrEnabled,
|
||||
SHARPENING, // EvShrRadius,
|
||||
@ -81,7 +81,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
LUMINANCECURVE, // EvSHShadows,
|
||||
LUMINANCECURVE, // EvSHHLTonalW,
|
||||
LUMINANCECURVE, // EvSHSHTonalW,
|
||||
AUTOEXP, // EvSHLContrast,
|
||||
0, // EvSHLContrast : obsolete,
|
||||
LUMINANCECURVE, // EvSHRadius,
|
||||
ALLNORAW, // EvCTRotate,
|
||||
ALLNORAW, // EvCTHFlip,
|
||||
@ -93,7 +93,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
CROP, // EvCrop,
|
||||
HDR, // EvCACorr,
|
||||
ALLNORAW, // EvHREnabled,
|
||||
ALLNORAW, // EvHRAmount,
|
||||
0, // EvHRAmount : obsolete,
|
||||
ALLNORAW, // EvHRMethod,
|
||||
DEMOSAIC, // EvWProfile,
|
||||
OUTPUTPROFILE, // EvOProfile,
|
||||
@ -104,12 +104,12 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
RESIZE, // EvResizeMethod,
|
||||
EXIF, // EvExif,
|
||||
IPTC, // EvIPTC
|
||||
RESIZE, // EvResizeSpec,
|
||||
0, // EvResizeSpec : obsolete,
|
||||
RESIZE, // EvResizeWidth
|
||||
RESIZE, // EvResizeHeight
|
||||
RESIZE, // EvResizeEnabled
|
||||
ALL, // EvProfileChangeNotification
|
||||
RETINEX, // EvShrHighQuality
|
||||
0, // EvSHHighQuality : obsolete
|
||||
HDR, // EvPerspCorr
|
||||
DARKFRAME, // EvLCPFile
|
||||
AUTOEXP, // EvRGBrCurveLumamode
|
||||
@ -157,12 +157,12 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
FLATFIELD, // EvFlatFieldBlurRadius,
|
||||
FLATFIELD, // EvFlatFieldBlurType,
|
||||
HDR, // EvAutoDIST,
|
||||
ALLNORAW, // EvDPDNLumCurve,
|
||||
ALLNORAW, // EvDPDNChromCurve,
|
||||
GAMMA, // EvGAMMA
|
||||
GAMMA, // EvGAMPOS
|
||||
GAMMA, // EvGAMFREE
|
||||
GAMMA, // EvSLPOS
|
||||
0, // EvDPDNLumCurve : obsolete
|
||||
0, // EvDPDNChromCurve : obsolete
|
||||
0, // EvGAMMA : obsolete
|
||||
0, // EvGAMPOS : obsolete
|
||||
0, // EvGAMFREE : obsolete
|
||||
0, // EvSLPOS : obsolete
|
||||
DARKFRAME, // EvPreProcessExpBlackzero
|
||||
DARKFRAME, // EvPreProcessExpBlackone
|
||||
DARKFRAME, // EvPreProcessExpBlacktwo
|
||||
@ -200,7 +200,6 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
LUMINANCECURVE, // EvLLCCurve
|
||||
LUMINANCECURVE, // EvLLCredsk
|
||||
ALLNORAW, // EvDPDNLdetail
|
||||
//ALLNORAW, // EvCATEnabled
|
||||
LUMINANCECURVE, // EvCATEnabled
|
||||
LUMINANCECURVE, // EvCATDegree
|
||||
LUMINANCECURVE, // EvCATMethodsur
|
||||
@ -236,7 +235,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
LUMINANCECURVE, // EvCATAutoadap
|
||||
DEFRINGE, // EvPFCurve
|
||||
ALLNORAW, // EvWBequal
|
||||
ALLNORAW, // EvWBequalbo
|
||||
0, // EvWBequalbo : obsolete
|
||||
HDR, // EvGradientDegree
|
||||
HDR, // EvGradientEnabled
|
||||
HDR, // EvPCVignetteStrength
|
||||
@ -277,7 +276,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
LUMINANCECURVE, // EvLLHCurve
|
||||
LUMINANCECURVE, // EvLHHCurve
|
||||
ALLNORAW, // EvDirPyrEqualizerThreshold
|
||||
ALLNORAW, // EvDPDNenhance
|
||||
0, // EvDPDNenhance : obsolete
|
||||
AUTOEXP, // EvBWMethodalg
|
||||
ALLNORAW, // EvDirPyrEqualizerSkin
|
||||
ALLNORAW, // EvDirPyrEqlgamutlab
|
||||
@ -301,8 +300,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
AUTOEXP, // EvColorToningbluehigh
|
||||
AUTOEXP, // EvColorToningbalance
|
||||
AUTOEXP, // EvColorToningNeutral
|
||||
AUTOEXP, // EvColorToningsatlow
|
||||
AUTOEXP, // EvColorToningsathigh
|
||||
0, // EvColorToningsatlow : obsolete
|
||||
0, // EvColorToningsathigh : obsolete
|
||||
AUTOEXP, // EvColorToningTwocolor
|
||||
AUTOEXP, // EvColorToningNeutralcur
|
||||
AUTOEXP, // EvColorToningLumamode
|
||||
@ -327,7 +326,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
ALLNORAW, // EvDPDNsmet
|
||||
DARKFRAME, // EvPreProcessDeadPixel
|
||||
ALLNORAW, // EvDPDNCCCurve
|
||||
ALLNORAW, // EvDPDNautochroma
|
||||
0, // EvDPDNautochroma : obsolete
|
||||
ALLNORAW, // EvDPDNLmet
|
||||
ALLNORAW, // EvDPDNCmet
|
||||
ALLNORAW, // EvDPDNC2met
|
||||
@ -436,7 +435,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
DIRPYREQUALIZER, // EvWavNPmet
|
||||
DEMOSAIC, // EvretinexMethod
|
||||
RETINEX, // EvLneigh
|
||||
RETINEX, // EvLgain
|
||||
0, // EvLgain : obsolete
|
||||
RETINEX, // EvLoffs
|
||||
RETINEX, // EvLstr
|
||||
RETINEX, // EvLscal
|
||||
@ -500,7 +499,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
0, // unused
|
||||
DEMOSAIC, // EvPixelShiftMotionMethod
|
||||
DEMOSAIC, // EvPixelShiftSmooth
|
||||
DEMOSAIC, // EvPixelShiftLmmse
|
||||
0, // EvPixelShiftLmmse : obsolete
|
||||
DEMOSAIC, // EvPixelShiftEqualBright
|
||||
DEMOSAIC, // EvPixelShiftEqualBrightChannel
|
||||
LUMINANCECURVE, // EvCATtempout
|
||||
@ -631,7 +630,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
AUTOEXP, // EvLocallabstreng
|
||||
AUTOEXP, // EvLocallabsensisf
|
||||
AUTOEXP, // Evlocallabsharblur
|
||||
AUTOEXP, // EvLocenalabregion
|
||||
0, // EvLocenalabregion : obsolete
|
||||
AUTOEXP, // EvlocallabshowmaskMethod
|
||||
AUTOEXP, // EvLocallabSpotSelectedWithMask
|
||||
AUTOEXP, // EvlocallabCCmaskshape
|
||||
@ -875,7 +874,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = {
|
||||
AUTOEXP | M_AUTOEXP, // EvLocenalog
|
||||
HDR, // EvLocallabAuto
|
||||
AUTOEXP, // EvlocallabsourceGray
|
||||
HDR, // EvlocallabsourceGrayAuto
|
||||
0, // EvlocallabsourceGrayAuto : obsolete
|
||||
HDR, // EvlocallabAutoGray
|
||||
AUTOEXP, // EvlocallabblackEv
|
||||
AUTOEXP, // EvlocallabwhiteEv
|
||||
|
@ -1205,7 +1205,6 @@ void BlackWhite::setBatchMode (bool batchMode)
|
||||
{
|
||||
removeIfThere (autoHBox, autoch, false);
|
||||
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) );
|
||||
autoHBox->pack_start (*autoch);
|
||||
|
||||
|
@ -53,7 +53,7 @@ ControlSpotPanel::ControlSpotPanel():
|
||||
spotMethod_(Gtk::manage(new MyComboBoxText())),
|
||||
shapeMethod_(Gtk::manage(new MyComboBoxText())),
|
||||
qualityMethod_(Gtk::manage(new MyComboBoxText())),
|
||||
complexMethod_(Gtk::manage(new MyComboBoxText())),
|
||||
//complexMethod_(Gtk::manage(new MyComboBoxText())),
|
||||
wavMethod_(Gtk::manage(new MyComboBoxText())),
|
||||
|
||||
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")))),
|
||||
deltae_(Gtk::manage(new Gtk::CheckButton(M("TP_LOCALLAB_DELTAEC")))),
|
||||
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")))),
|
||||
expShapeDetect_(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_ARTIF")))),
|
||||
@ -476,11 +476,11 @@ ControlSpotPanel::ControlSpotPanel():
|
||||
}
|
||||
|
||||
lumask_->setAdjusterListener(this);
|
||||
savrestConn_ = savrest_->signal_toggled().connect(
|
||||
sigc::mem_fun(*this, &ControlSpotPanel::savrestChanged));
|
||||
//savrestConn_ = savrest_->signal_toggled().connect(
|
||||
// sigc::mem_fun(*this, &ControlSpotPanel::savrestChanged));
|
||||
|
||||
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"));
|
||||
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));
|
||||
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) {
|
||||
ctboxcomplexmethod->set_tooltip_markup(M("TP_LOCALLAB_COMPLEXMETHOD_TOOLTIP"));
|
||||
}
|
||||
//if (showtooltip) {
|
||||
// ctboxcomplexmethod->set_tooltip_markup(M("TP_LOCALLAB_COMPLEXMETHOD_TOOLTIP"));
|
||||
//}
|
||||
|
||||
Gtk::Label* const labelcomplexmethod = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_COMPLEX_METHOD") + ":"));
|
||||
ctboxcomplexmethod->pack_start(*labelcomplexmethod, Gtk::PACK_SHRINK, 4);
|
||||
//Gtk::Label* const labelcomplexmethod = Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_COMPLEX_METHOD") + ":"));
|
||||
//ctboxcomplexmethod->pack_start(*labelcomplexmethod, Gtk::PACK_SHRINK, 4);
|
||||
|
||||
if (showtooltip) {
|
||||
complexMethod_->set_tooltip_markup(M("TP_LOCALLAB_COMPLEX_TOOLTIP"));
|
||||
}
|
||||
//if (showtooltip) {
|
||||
// complexMethod_->set_tooltip_markup(M("TP_LOCALLAB_COMPLEX_TOOLTIP"));
|
||||
//}
|
||||
|
||||
complexMethod_->append(M("TP_LOCALLAB_SIM"));
|
||||
complexMethod_->append(M("TP_LOCALLAB_MED"));
|
||||
complexMethod_->append(M("TP_LOCALLAB_ALL"));
|
||||
complexMethod_->set_active(1);
|
||||
complexMethodconn_ = complexMethod_->signal_changed().connect(
|
||||
sigc::mem_fun(
|
||||
*this, &ControlSpotPanel::complexMethodChanged));
|
||||
ctboxcomplexmethod->pack_start(*complexMethod_);
|
||||
//complexMethod_->append(M("TP_LOCALLAB_SIM"));
|
||||
//complexMethod_->append(M("TP_LOCALLAB_MED"));
|
||||
//complexMethod_->append(M("TP_LOCALLAB_ALL"));
|
||||
//complexMethod_->set_active(1);
|
||||
//complexMethodconn_ = complexMethod_->signal_changed().connect(
|
||||
// sigc::mem_fun(
|
||||
// *this, &ControlSpotPanel::complexMethodChanged));
|
||||
//ctboxcomplexmethod->pack_start(*complexMethod_);
|
||||
// pack_start(*ctboxcomplexmethod);
|
||||
/*
|
||||
Gtk::Box* const ctboxwavmethod = Gtk::manage(new Gtk::Box());
|
||||
@ -865,8 +865,8 @@ void ControlSpotPanel::load_ControlSpot_param()
|
||||
denoichmask_->setValue(row[spots_.denoichmask]);
|
||||
shortc_->set_active(row[spots_.shortc]);
|
||||
lumask_->setValue((double)row[spots_.lumask]);
|
||||
savrest_->set_active(row[spots_.savrest]);
|
||||
complexMethod_->set_active(row[spots_.complexMethod]);
|
||||
//savrest_->set_active(row[spots_.savrest]);
|
||||
//complexMethod_->set_active(row[spots_.complexMethod]);
|
||||
wavMethod_->set_active(row[spots_.wavMethod]);
|
||||
}
|
||||
|
||||
@ -1157,37 +1157,37 @@ void ControlSpotPanel::qualityMethodChanged()
|
||||
}
|
||||
}
|
||||
|
||||
void ControlSpotPanel::complexMethodChanged()
|
||||
{
|
||||
// printf("qualityMethodChanged\n");
|
||||
|
||||
// Get selected control spot
|
||||
const auto s = treeview_->get_selection();
|
||||
|
||||
if (!s->count_selected_rows()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const auto iter = s->get_selected();
|
||||
Gtk::TreeModel::Row row = *iter;
|
||||
|
||||
row[spots_.complexMethod] = complexMethod_->get_active_row_number();
|
||||
|
||||
if (multiImage && complexMethod_->get_active_text() == M("GENERAL_UNCHANGED")) {
|
||||
// excluFrame->show();
|
||||
} else if (complexMethod_->get_active_row_number() == 0) { //sim
|
||||
// excluFrame->hide();
|
||||
} else if (complexMethod_->get_active_row_number() == 1) { // mod
|
||||
// excluFrame->show();
|
||||
} else if (complexMethod_->get_active_row_number() == 2) { // all
|
||||
// excluFrame->show();
|
||||
}
|
||||
|
||||
// Raise event
|
||||
if (listener) {
|
||||
listener->panelChanged(EvLocallabSpotcomplexMethod, complexMethod_->get_active_text());
|
||||
}
|
||||
}
|
||||
//void ControlSpotPanel::complexMethodChanged()
|
||||
//{
|
||||
// // printf("qualityMethodChanged\n");
|
||||
//
|
||||
// // Get selected control spot
|
||||
// const auto s = treeview_->get_selection();
|
||||
//
|
||||
// if (!s->count_selected_rows()) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// const auto iter = s->get_selected();
|
||||
// Gtk::TreeModel::Row row = *iter;
|
||||
//
|
||||
// row[spots_.complexMethod] = complexMethod_->get_active_row_number();
|
||||
//
|
||||
// if (multiImage && complexMethod_->get_active_text() == M("GENERAL_UNCHANGED")) {
|
||||
// // excluFrame->show();
|
||||
// } else if (complexMethod_->get_active_row_number() == 0) { //sim
|
||||
// // excluFrame->hide();
|
||||
// } else if (complexMethod_->get_active_row_number() == 1) { // mod
|
||||
// // excluFrame->show();
|
||||
// } else if (complexMethod_->get_active_row_number() == 2) { // all
|
||||
// // excluFrame->show();
|
||||
// }
|
||||
//
|
||||
// // Raise event
|
||||
// if (listener) {
|
||||
// listener->panelChanged(EvLocallabSpotcomplexMethod, complexMethod_->get_active_text());
|
||||
// }
|
||||
//}
|
||||
|
||||
void ControlSpotPanel::wavMethodChanged()
|
||||
{
|
||||
@ -1786,28 +1786,28 @@ void ControlSpotPanel::shortcChanged()
|
||||
}
|
||||
}
|
||||
|
||||
void ControlSpotPanel::savrestChanged()
|
||||
{
|
||||
// Get selected control spot
|
||||
const auto s = treeview_->get_selection();
|
||||
|
||||
if (!s->count_selected_rows()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const auto iter = s->get_selected();
|
||||
Gtk::TreeModel::Row row = *iter;
|
||||
row[spots_.savrest] = savrest_->get_active();
|
||||
|
||||
// Raise event
|
||||
if (listener) {
|
||||
if (savrest_->get_active()) {
|
||||
listener->panelChanged(Evlocallabsavrest, M("GENERAL_ENABLED"));
|
||||
} else {
|
||||
listener->panelChanged(Evlocallabsavrest, M("GENERAL_DISABLED"));
|
||||
}
|
||||
}
|
||||
}
|
||||
//void ControlSpotPanel::savrestChanged()
|
||||
//{
|
||||
// // Get selected control spot
|
||||
// const auto s = treeview_->get_selection();
|
||||
//
|
||||
// if (!s->count_selected_rows()) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// const auto iter = s->get_selected();
|
||||
// Gtk::TreeModel::Row row = *iter;
|
||||
// row[spots_.savrest] = savrest_->get_active();
|
||||
//
|
||||
// // Raise event
|
||||
// if (listener) {
|
||||
// if (savrest_->get_active()) {
|
||||
// listener->panelChanged(Evlocallabsavrest, M("GENERAL_ENABLED"));
|
||||
// } else {
|
||||
// listener->panelChanged(Evlocallabsavrest, M("GENERAL_DISABLED"));
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
void ControlSpotPanel::previewChanged()
|
||||
{
|
||||
@ -1869,8 +1869,8 @@ void ControlSpotPanel::disableParamlistener(bool cond)
|
||||
denoichmask_->block(cond);
|
||||
shortcConn_.block(cond);
|
||||
lumask_->block(cond);
|
||||
savrestConn_.block(cond);
|
||||
complexMethodconn_.block(cond);
|
||||
//savrestConn_.block(cond);
|
||||
//complexMethodconn_.block(cond);
|
||||
wavMethodconn_.block(cond);
|
||||
}
|
||||
|
||||
@ -1916,8 +1916,8 @@ void ControlSpotPanel::setParamEditable(bool cond)
|
||||
denoichmask_->set_sensitive(cond);
|
||||
shortc_->set_sensitive(cond);
|
||||
lumask_->set_sensitive(cond);
|
||||
savrest_->set_sensitive(cond);
|
||||
complexMethod_->set_sensitive(cond);
|
||||
//savrest_->set_sensitive(cond);
|
||||
//complexMethod_->set_sensitive(cond);
|
||||
wavMethod_->set_sensitive(cond);
|
||||
preview_->set_sensitive(cond);
|
||||
|
||||
@ -2599,7 +2599,7 @@ ControlSpotPanel::SpotRow* ControlSpotPanel::getSpot(const int index)
|
||||
r->laplac = row[spots_.laplac];
|
||||
r->deltae = row[spots_.deltae];
|
||||
r->shortc = row[spots_.shortc];
|
||||
r->savrest = row[spots_.savrest];
|
||||
//r->savrest = row[spots_.savrest];
|
||||
r->wavMethod = row[spots_.wavMethod];
|
||||
|
||||
return r;
|
||||
@ -2735,7 +2735,7 @@ void ControlSpotPanel::addControlSpot(SpotRow* newSpot)
|
||||
row[spots_.denoichmask] = newSpot->denoichmask;
|
||||
row[spots_.shortc] = newSpot->shortc;
|
||||
row[spots_.lumask] = newSpot->lumask;
|
||||
row[spots_.savrest] = newSpot->savrest;
|
||||
//row[spots_.savrest] = newSpot->savrest;
|
||||
row[spots_.complexMethod] = newSpot->complexMethod;
|
||||
row[spots_.wavMethod] = newSpot->wavMethod;
|
||||
updateParamVisibility();
|
||||
@ -2855,7 +2855,7 @@ ControlSpotPanel::ControlSpots::ControlSpots()
|
||||
add(denoichmask);
|
||||
add(shortc);
|
||||
add(lumask);
|
||||
add(savrest);
|
||||
//add(savrest);
|
||||
add(complexMethod);
|
||||
add(wavMethod);
|
||||
}
|
||||
|
@ -89,7 +89,7 @@ public:
|
||||
double denoichmask;
|
||||
bool shortc;
|
||||
int lumask;
|
||||
bool savrest;
|
||||
//bool savrest;
|
||||
int complexMethod; // 0 = Simple, 1 = Moderate, 2 = all
|
||||
int wavMethod; // 0 = D2, 1 = D4, 2 = D6, 3 = D10, 4 = D14
|
||||
};
|
||||
@ -243,7 +243,7 @@ private:
|
||||
void spotMethodChanged();
|
||||
void shapeMethodChanged();
|
||||
void qualityMethodChanged();
|
||||
void complexMethodChanged();
|
||||
//void complexMethodChanged();
|
||||
void wavMethodChanged();
|
||||
|
||||
void updateParamVisibility();
|
||||
@ -259,7 +259,7 @@ private:
|
||||
void laplacChanged();
|
||||
void deltaeChanged();
|
||||
void shortcChanged();
|
||||
void savrestChanged();
|
||||
//void savrestChanged();
|
||||
|
||||
void previewChanged();
|
||||
|
||||
@ -325,7 +325,7 @@ private:
|
||||
Gtk::TreeModelColumn<int> denoichmask;
|
||||
Gtk::TreeModelColumn<bool> shortc;
|
||||
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> wavMethod; // 0 = D2, 1 = D4, 2 = D6, 3 = D10, 4 = D14
|
||||
};
|
||||
@ -377,8 +377,8 @@ private:
|
||||
sigc::connection shapeMethodconn_;
|
||||
MyComboBoxText* const qualityMethod_;
|
||||
sigc::connection qualityMethodconn_;
|
||||
MyComboBoxText* const complexMethod_;
|
||||
sigc::connection complexMethodconn_;
|
||||
//MyComboBoxText* const complexMethod_;
|
||||
//sigc::connection complexMethodconn_;
|
||||
MyComboBoxText* const wavMethod_;
|
||||
sigc::connection wavMethodconn_;
|
||||
|
||||
@ -425,8 +425,8 @@ private:
|
||||
sigc::connection deltaeConn_;
|
||||
Gtk::CheckButton* const shortc_;
|
||||
sigc::connection shortcConn_;
|
||||
Gtk::CheckButton* const savrest_;
|
||||
sigc::connection savrestConn_;
|
||||
//Gtk::CheckButton* const savrest_;
|
||||
//sigc::connection savrestConn_;
|
||||
|
||||
MyExpander* const expTransGrad_;
|
||||
MyExpander* const expShapeDetect_;
|
||||
|
@ -97,7 +97,7 @@ void DarkFrame::read(const rtengine::procparams::ProcParams* pp, const ParamsEdi
|
||||
|
||||
if( pp->raw.df_autoselect && dfp && !multiImage) {
|
||||
// retrieve the auto-selected df filename
|
||||
rtengine::RawImage *img = dfp->getDF();
|
||||
const rtengine::RawImage *img = dfp->getDF();
|
||||
|
||||
if( img ) {
|
||||
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) {
|
||||
// retrieve the auto-selected df filename
|
||||
rtengine::RawImage *img = dfp->getDF();
|
||||
const rtengine::RawImage *img = dfp->getDF();
|
||||
|
||||
if( img ) {
|
||||
dfInfo->set_text( Glib::ustring::compose("%1: %2ISO %3s", Glib::path_get_basename(img->get_filename()), img->get_ISOspeed(), img->get_shutter()) );
|
||||
|
@ -36,7 +36,7 @@ class DFProvider
|
||||
{
|
||||
public:
|
||||
virtual ~DFProvider() = default;
|
||||
virtual rtengine::RawImage* getDF() = 0;
|
||||
virtual const rtengine::RawImage* getDF() = 0;
|
||||
virtual Glib::ustring GetCurrentImageFilePath() = 0;
|
||||
// add other info here
|
||||
};
|
||||
|
@ -875,7 +875,7 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m)
|
||||
}
|
||||
|
||||
// Reinit cache
|
||||
rtengine::dfm.init( options.rtSettings.darkFramesPath );
|
||||
rtengine::DFManager::getInstance().init( options.rtSettings.darkFramesPath );
|
||||
} else {
|
||||
// Target directory creation failed, we clear the darkFramesPath setting
|
||||
options.rtSettings.darkFramesPath.clear();
|
||||
|
@ -305,7 +305,7 @@ bool FilePanel::imageLoaded( Thumbnail* thm, ProgressConnector<rtengine::Initial
|
||||
#ifdef WIN32
|
||||
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
|
||||
//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
|
||||
{
|
||||
GThreadLock lock; // Acquiring the GUI... not sure that it's necessary, but it shouldn't harm
|
||||
|
@ -41,12 +41,12 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, "icm", M("TP_ICM_LABEL")), iuncha
|
||||
EvICMprimariMethod = m->newEvent(GAMMA, "HISTORY_MSG_ICM_OUTPUT_PRIMARIES");
|
||||
EvICMprofileMethod = m->newEvent(GAMMA, "HISTORY_MSG_ICM_OUTPUT_TYPE");
|
||||
EvICMtempMethod = m->newEvent(GAMMA, "HISTORY_MSG_ICM_OUTPUT_TEMP");
|
||||
EvICMpredx = m->newEvent(GAMMA, "HISTORY_MSG_ICMPREDX");
|
||||
EvICMpredy = m->newEvent(GAMMA, "HISTORY_MSG_ICMPREDY");
|
||||
EvICMpgrex = m->newEvent(GAMMA, "HISTORY_MSG_ICMPGREX");
|
||||
EvICMpgrey = m->newEvent(GAMMA, "HISTORY_MSG_ICMPGREY");
|
||||
EvICMpblux = m->newEvent(GAMMA, "HISTORY_MSG_ICMPBLUX");
|
||||
EvICMpbluy = m->newEvent(GAMMA, "HISTORY_MSG_ICMPBLUY");
|
||||
//EvICMpredx = m->newEvent(GAMMA, "HISTORY_MSG_ICMPREDX");
|
||||
//EvICMpredy = m->newEvent(GAMMA, "HISTORY_MSG_ICMPREDY");
|
||||
//EvICMpgrex = m->newEvent(GAMMA, "HISTORY_MSG_ICMPGREX");
|
||||
//EvICMpgrey = m->newEvent(GAMMA, "HISTORY_MSG_ICMPGREY");
|
||||
//EvICMpblux = m->newEvent(GAMMA, "HISTORY_MSG_ICMPBLUX");
|
||||
//EvICMpbluy = m->newEvent(GAMMA, "HISTORY_MSG_ICMPBLUY");
|
||||
EvICMgamm = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_WORKING_GAMMA");
|
||||
EvICMslop = m->newEvent(LUMINANCECURVE, "HISTORY_MSG_ICM_WORKING_SLOPE");
|
||||
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"));
|
||||
grex->set_tooltip_text(M("TP_ICM_PRIMGRE_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->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"));
|
||||
|
||||
greBox = Gtk::manage(new Gtk::Box());
|
||||
greBox->pack_start(*grex);//, Gtk::PACK_SHRINK, 2);
|
||||
greBox->pack_start(*blg, Gtk::PACK_SHRINK);
|
||||
greBox->pack_start(*grey);//, Gtk::PACK_SHRINK, 2);
|
||||
redVBox->pack_start(*greBox, Gtk::PACK_EXPAND_WIDGET);
|
||||
Gtk::Box *redVBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
|
||||
primCoordGrid = Gtk::manage(new Gtk::Grid());
|
||||
primCoordGrid->set_column_homogeneous(true);
|
||||
primCoordGrid->attach(*redx, 0, 0, 1, 1);
|
||||
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 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->setAdjusterListener(this);
|
||||
|
||||
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(*preBox, Gtk::PACK_EXPAND_WIDGET);
|
||||
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
|
||||
) {
|
||||
will->set_sensitive(false);
|
||||
redBox->set_sensitive(false);
|
||||
greBox->set_sensitive(false);
|
||||
bluBox->set_sensitive(false);
|
||||
primCoordGrid->set_sensitive(false);
|
||||
labgridcie->set_sensitive(false);
|
||||
|
||||
} 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) {
|
||||
will->set_sensitive(true);
|
||||
}
|
||||
redBox->set_sensitive(true);
|
||||
greBox->set_sensitive(true);
|
||||
bluBox->set_sensitive(true);
|
||||
primCoordGrid->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: {
|
||||
labgridcie->set_sensitive(true);
|
||||
redBox->set_sensitive(false);
|
||||
greBox->set_sensitive(false);
|
||||
bluBox->set_sensitive(false);
|
||||
primCoordGrid->set_sensitive(false);
|
||||
will->set_sensitive(false);
|
||||
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_GRID
|
||||
) {
|
||||
redBox->set_sensitive(false);
|
||||
greBox->set_sensitive(false);
|
||||
bluBox->set_sensitive(false);
|
||||
primCoordGrid->set_sensitive(false);
|
||||
} else {
|
||||
redBox->set_sensitive(true);
|
||||
greBox->set_sensitive(true);
|
||||
bluBox->set_sensitive(true);
|
||||
primCoordGrid->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_GRID
|
||||
) {
|
||||
redBox->set_sensitive(false);
|
||||
greBox->set_sensitive(false);
|
||||
bluBox->set_sensitive(false);
|
||||
primCoordGrid->set_sensitive(false);
|
||||
}
|
||||
}
|
||||
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_GRID
|
||||
) {
|
||||
redBox->set_sensitive(false);
|
||||
greBox->set_sensitive(false);
|
||||
bluBox->set_sensitive(false);
|
||||
primCoordGrid->set_sensitive(false);
|
||||
} else {
|
||||
redBox->set_sensitive(true);
|
||||
greBox->set_sensitive(true);
|
||||
bluBox->set_sensitive(true);
|
||||
primCoordGrid->set_sensitive(true);
|
||||
}
|
||||
}
|
||||
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_GRID
|
||||
) {
|
||||
redBox->set_sensitive(false);
|
||||
greBox->set_sensitive(false);
|
||||
bluBox->set_sensitive(false);
|
||||
primCoordGrid->set_sensitive(false);
|
||||
} else {
|
||||
redBox->set_sensitive(true);
|
||||
greBox->set_sensitive(true);
|
||||
bluBox->set_sensitive(true);
|
||||
primCoordGrid->set_sensitive(true);
|
||||
}
|
||||
}
|
||||
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_GRID
|
||||
) {
|
||||
redBox->set_sensitive(false);
|
||||
greBox->set_sensitive(false);
|
||||
bluBox->set_sensitive(false);
|
||||
primCoordGrid->set_sensitive(false);
|
||||
} else {
|
||||
redBox->set_sensitive(true);
|
||||
greBox->set_sensitive(true);
|
||||
bluBox->set_sensitive(true);
|
||||
primCoordGrid->set_sensitive(true);
|
||||
}
|
||||
}
|
||||
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_GRID
|
||||
) {
|
||||
redBox->set_sensitive(false);
|
||||
greBox->set_sensitive(false);
|
||||
bluBox->set_sensitive(false);
|
||||
primCoordGrid->set_sensitive(false);
|
||||
} else {
|
||||
redBox->set_sensitive(true);
|
||||
greBox->set_sensitive(true);
|
||||
bluBox->set_sensitive(true);
|
||||
primCoordGrid->set_sensitive(true);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -1761,18 +1725,14 @@ void ICMPanel::wprimChanged()
|
||||
redFrame->show();
|
||||
|
||||
if (ColorManagementParams::Primaries(wprim->get_active_row_number()) != ColorManagementParams::Primaries::CUSTOM) {
|
||||
redBox->set_sensitive(false);
|
||||
greBox->set_sensitive(false);
|
||||
bluBox->set_sensitive(false);
|
||||
primCoordGrid->set_sensitive(false);
|
||||
labgridcie->set_sensitive(false);
|
||||
will->set_sensitive(false);
|
||||
if (ColorManagementParams::Primaries(wprim->get_active_row_number()) == ColorManagementParams::Primaries::CUSTOM_GRID) {
|
||||
labgridcie->set_sensitive(true);
|
||||
}
|
||||
} else {
|
||||
redBox->set_sensitive(true);
|
||||
greBox->set_sensitive(true);
|
||||
bluBox->set_sensitive(true);
|
||||
primCoordGrid->set_sensitive(true);
|
||||
labgridcie->set_sensitive(false);
|
||||
will->set_sensitive(true);
|
||||
}
|
||||
@ -1906,23 +1866,29 @@ void ICMPanel::ipChanged()
|
||||
{
|
||||
|
||||
Glib::ustring profname;
|
||||
Glib::ustring localized_profname;
|
||||
|
||||
if (inone->get_active()) {
|
||||
profname = inone->get_label();
|
||||
profname = "(none)";
|
||||
localized_profname = inone->get_label();
|
||||
} else if (iembedded->get_active()) {
|
||||
profname = iembedded->get_label();
|
||||
profname = "(embedded)";
|
||||
localized_profname = iembedded->get_label();
|
||||
} else if (icamera->get_active()) {
|
||||
profname = icamera->get_label();
|
||||
profname = "(camera)";
|
||||
localized_profname = icamera->get_label();
|
||||
} else if (icameraICC->get_active()) {
|
||||
profname = icameraICC->get_label();
|
||||
profname = "(cameraICC)";
|
||||
localized_profname = icameraICC->get_label();
|
||||
} else {
|
||||
profname = ipDialog->get_filename();
|
||||
localized_profname = profname;
|
||||
}
|
||||
|
||||
updateDCP(-1, profname);
|
||||
|
||||
if (listener && profname != oldip) {
|
||||
listener->panelChanged(EvIProfile, profname);
|
||||
listener->panelChanged(EvIProfile, localized_profname);
|
||||
}
|
||||
|
||||
oldip = profname;
|
||||
|
@ -62,9 +62,9 @@ protected:
|
||||
|
||||
Gtk::Label* labmga;
|
||||
Gtk::Box* gabox;
|
||||
Gtk::Label* blr;
|
||||
Gtk::Label* blg;
|
||||
Gtk::Label* blb;
|
||||
//Gtk::Label* blr;
|
||||
//Gtk::Label* blg;
|
||||
//Gtk::Label* blb;
|
||||
Gtk::Button* neutral;
|
||||
|
||||
sigc::connection neutralconn;
|
||||
@ -86,12 +86,12 @@ private:
|
||||
rtengine::ProcEvent EvICMprimariMethod;
|
||||
rtengine::ProcEvent EvICMprofileMethod;
|
||||
rtengine::ProcEvent EvICMtempMethod;
|
||||
rtengine::ProcEvent EvICMpredx;
|
||||
rtengine::ProcEvent EvICMpredy;
|
||||
rtengine::ProcEvent EvICMpgrex;
|
||||
rtengine::ProcEvent EvICMpgrey;
|
||||
rtengine::ProcEvent EvICMpblux;
|
||||
rtengine::ProcEvent EvICMpbluy;
|
||||
//rtengine::ProcEvent EvICMpredx;
|
||||
//rtengine::ProcEvent EvICMpredy;
|
||||
//rtengine::ProcEvent EvICMpgrex;
|
||||
//rtengine::ProcEvent EvICMpgrey;
|
||||
//rtengine::ProcEvent EvICMpblux;
|
||||
//rtengine::ProcEvent EvICMpbluy;
|
||||
rtengine::ProcEvent EvICMgamm;
|
||||
rtengine::ProcEvent EvICMslop;
|
||||
rtengine::ProcEvent EvICMtrcinMethod;
|
||||
@ -115,9 +115,7 @@ private:
|
||||
Gtk::Box* wprimBox;
|
||||
Gtk::Label* wprimlab;
|
||||
Gtk::Label* cielab;
|
||||
Gtk::Box* redBox;
|
||||
Gtk::Box* greBox;
|
||||
Gtk::Box* bluBox;
|
||||
Gtk::Grid* primCoordGrid;
|
||||
Gtk::Box* riaHBox;
|
||||
Gtk::Box* preBox;
|
||||
Gtk::Box* iVBox;
|
||||
|
@ -148,11 +148,11 @@ Locallab::Locallab():
|
||||
expsettings(Gtk::manage(new ControlSpotPanel())),
|
||||
|
||||
// Tool list widget
|
||||
toollist(Gtk::manage(new LocallabToolList())),
|
||||
toollist(Gtk::manage(new LocallabToolList()))
|
||||
|
||||
// expcie(Gtk::manage(new Locallabcie())),
|
||||
// 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);
|
||||
|
||||
@ -197,7 +197,7 @@ Locallab::Locallab():
|
||||
// panel->pack_start(*separator2, false, false);
|
||||
|
||||
// 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);
|
||||
|
||||
// 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->shortc = pp->locallab.spots.at(i).shortc;
|
||||
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") {
|
||||
r->complexMethod = 0;
|
||||
@ -498,7 +498,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
||||
r->denoichmask = newSpot->denoichmask;
|
||||
r->shortc = newSpot->shortc;
|
||||
r->lumask = newSpot->lumask;
|
||||
r->savrest = newSpot->savrest;
|
||||
//r->savrest = newSpot->savrest;
|
||||
|
||||
if (newSpot->complexMethod == "sim") {
|
||||
r->complexMethod = 0;
|
||||
@ -809,7 +809,7 @@ void Locallab::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedited
|
||||
r->denoichmask = newSpot->denoichmask;
|
||||
r->shortc = newSpot->shortc;
|
||||
r->lumask = newSpot->lumask;
|
||||
r->savrest = newSpot->savrest;
|
||||
//r->savrest = newSpot->savrest;
|
||||
|
||||
if (newSpot->complexMethod == "sim") {
|
||||
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).shortc = r->shortc;
|
||||
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) {
|
||||
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};
|
||||
}
|
||||
|
||||
void Locallab::resetshowPressed()
|
||||
{
|
||||
// Raise event to reset mask
|
||||
if (listener) {
|
||||
listener->panelChanged(Evlocallabshowreset, "");
|
||||
}
|
||||
}
|
||||
//void Locallab::resetshowPressed()
|
||||
//{
|
||||
// // Raise event to reset mask
|
||||
// if (listener) {
|
||||
// listener->panelChanged(Evlocallabshowreset, "");
|
||||
// }
|
||||
//}
|
||||
|
||||
void Locallab::setEditProvider(EditDataProvider * provider)
|
||||
{
|
||||
|
@ -127,7 +127,7 @@ private:
|
||||
std::vector<locallabRef> maskBackRef;
|
||||
|
||||
// Other widgets
|
||||
Gtk::Button* const resetshowButton;
|
||||
//Gtk::Button* const resetshowButton;
|
||||
|
||||
Glib::ustring spotName;
|
||||
|
||||
@ -176,7 +176,7 @@ public:
|
||||
llMaskVisibility getMaskVisibility() const;
|
||||
|
||||
// Other widgets event functions
|
||||
void resetshowPressed();
|
||||
//void resetshowPressed();
|
||||
|
||||
// EditProvider management function
|
||||
void setEditProvider(EditDataProvider* provider) override;
|
||||
|
@ -1151,7 +1151,7 @@ private:
|
||||
Adjuster* const deltad;
|
||||
CurveEditorGroup* const LocalcurveEditorwavcomp;
|
||||
FlatCurveEditor* const wavshapecomp;
|
||||
Adjuster* const fatres;
|
||||
//Adjuster* const fatres;
|
||||
Gtk::CheckButton* const fftwlc;
|
||||
MyExpander* const exprecovw;
|
||||
Gtk::Label* const maskusablew;
|
||||
@ -1342,8 +1342,8 @@ private:
|
||||
Adjuster* const saturl;
|
||||
Adjuster* const chroml;
|
||||
MyExpander* const expL;
|
||||
CurveEditorGroup* const CurveEditorL;
|
||||
DiagonalCurveEditor* const LshapeL;
|
||||
//CurveEditorGroup* const CurveEditorL;
|
||||
//DiagonalCurveEditor* const LshapeL;
|
||||
Adjuster* const targabs;
|
||||
MyComboBoxText* const surround;
|
||||
Gtk::Box* const surrHBox;
|
||||
|
@ -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"))))),
|
||||
LocalcurveEditorwavcomp(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_WAVCOMP"))),
|
||||
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")))),
|
||||
exprecovw(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_DENOI2_EXP")))),
|
||||
maskusablew(Gtk::manage(new Gtk::Label(M("TP_LOCALLAB_MASKUSABLE")))),
|
||||
@ -2684,7 +2684,7 @@ LocallabContrast::LocallabContrast():
|
||||
|
||||
LocalcurveEditorwavcomp->curveListComplete();
|
||||
|
||||
fatres->setAdjusterListener(this);
|
||||
//fatres->setAdjusterListener(this);
|
||||
|
||||
fftwlcConn = fftwlc->signal_toggled().connect(sigc::mem_fun(*this, &LocallabContrast::fftwlcChanged));
|
||||
|
||||
@ -2784,7 +2784,7 @@ LocallabContrast::LocallabContrast():
|
||||
clariFrame->add(*clariBox);
|
||||
pack_start(*clariFrame);
|
||||
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_widget(*wavgradl);
|
||||
ToolParamBlock* const gradwavBox = Gtk::manage(new ToolParamBlock());
|
||||
@ -2793,7 +2793,7 @@ LocallabContrast::LocallabContrast():
|
||||
gradwavBox->pack_start(*angwav);
|
||||
gradwavFrame->add(*gradwavBox);
|
||||
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_widget(*wavedg);
|
||||
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);
|
||||
deltad->setValue(spot.deltad);
|
||||
wavshapecomp->setCurve(spot.loccompwavcurve);
|
||||
fatres->setValue(spot.fatres);
|
||||
//fatres->setValue(spot.fatres);
|
||||
enalcMask->set_active(spot.enalcMask);
|
||||
CCmasklcshape->setCurve(spot.CCmasklccurve);
|
||||
LLmasklcshape->setCurve(spot.LLmasklccurve);
|
||||
@ -3362,7 +3362,7 @@ void LocallabContrast::write(rtengine::procparams::ProcParams* pp, ParamsEdited*
|
||||
spot.sigmadc = sigmadc->getValue();
|
||||
spot.deltad = deltad->getValue();
|
||||
spot.loccompwavcurve = wavshapecomp->getCurve();
|
||||
spot.fatres = fatres->getValue();
|
||||
//spot.fatres = fatres->getValue();
|
||||
spot.fftwlc = fftwlc->get_active();
|
||||
spot.enalcMask = enalcMask->get_active();
|
||||
spot.CCmasklccurve = CCmasklcshape->getCurve();
|
||||
@ -3434,7 +3434,7 @@ void LocallabContrast::setDefaults(const rtengine::procparams::ProcParams* defPa
|
||||
residcomp->setDefault(defSpot.residcomp);
|
||||
sigmadc->setDefault(defSpot.sigmadc);
|
||||
deltad->setDefault(defSpot.deltad);
|
||||
fatres->setDefault(defSpot.fatres);
|
||||
//fatres->setDefault(defSpot.fatres);
|
||||
blendmasklc->setDefault((double)defSpot.blendmasklc);
|
||||
radmasklc->setDefault(defSpot.radmasklc);
|
||||
chromasklc->setDefault(defSpot.chromasklc);
|
||||
@ -3759,12 +3759,12 @@ void LocallabContrast::adjusterChanged(Adjuster* a, double newval)
|
||||
}
|
||||
}
|
||||
|
||||
if (a == fatres) {
|
||||
if (listener) {
|
||||
listener->panelChanged(Evlocallabfatres,
|
||||
fatres->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
|
||||
}
|
||||
}
|
||||
//if (a == fatres) {
|
||||
// if (listener) {
|
||||
// listener->panelChanged(Evlocallabfatres,
|
||||
// fatres->getTextValue() + " (" + escapeHtmlChars(getSpotName()) + ")");
|
||||
// }
|
||||
//}
|
||||
|
||||
if (a == recothresw) {
|
||||
|
||||
@ -3983,7 +3983,7 @@ void LocallabContrast::convertParamToNormal()
|
||||
sigmadc->setValue(defSpot.sigmadc);
|
||||
deltad->setValue(defSpot.deltad);
|
||||
wavshapecomp->setCurve(defSpot.loccompwavcurve);
|
||||
fatres->setValue(defSpot.fatres);
|
||||
//fatres->setValue(defSpot.fatres);
|
||||
fftwlc->set_active(defSpot.fftwlc);
|
||||
decayw->setValue(defSpot.decayw);
|
||||
|
||||
@ -5244,8 +5244,8 @@ LocallabLog::LocallabLog():
|
||||
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.))),
|
||||
expL(Gtk::manage(new MyExpander(false, M("TP_LOCALLAB_LOGEXP")))),
|
||||
CurveEditorL(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_LOGCONTQ"))),
|
||||
LshapeL(static_cast<DiagonalCurveEditor*>(CurveEditorL->addCurve(CT_Diagonal, "Q(Q)"))),
|
||||
//CurveEditorL(new CurveEditorGroup(options.lastlocalCurvesDir, M("TP_LOCALLAB_LOGCONTQ"))),
|
||||
//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))),
|
||||
surround(Gtk::manage (new MyComboBoxText ())),
|
||||
surrHBox(Gtk::manage(new Gtk::Box())),
|
||||
@ -5325,13 +5325,13 @@ LocallabLog::LocallabLog():
|
||||
contq->setAdjusterListener(this);
|
||||
colorfl->setAdjusterListener(this);
|
||||
|
||||
CurveEditorL->setCurveListener(this);
|
||||
//CurveEditorL->setCurveListener(this);
|
||||
|
||||
LshapeL->setResetCurve(DiagonalCurveType(defSpot.LcurveL.at(0)), defSpot.LcurveL);
|
||||
LshapeL->setBottomBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
|
||||
LshapeL->setLeftBarBgGradient({{0., 0., 0., 0.}, {1., 1., 1., 1.}});
|
||||
//LshapeL->setResetCurve(DiagonalCurveType(defSpot.LcurveL.at(0)), defSpot.LcurveL);
|
||||
//LshapeL->setBottomBarBgGradient({{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);
|
||||
@ -5509,7 +5509,7 @@ LocallabLog::~LocallabLog()
|
||||
{
|
||||
delete maskCurveEditorL;
|
||||
delete mask2CurveEditorL;
|
||||
delete CurveEditorL;
|
||||
//delete CurveEditorL;
|
||||
|
||||
}
|
||||
|
||||
@ -5730,7 +5730,7 @@ void LocallabLog::read(const rtengine::procparams::ProcParams* pp, const ParamsE
|
||||
contthres->setValue(spot.contthres);
|
||||
contq->setValue(spot.contq);
|
||||
colorfl->setValue(spot.colorfl);
|
||||
LshapeL->setCurve(spot.LcurveL);
|
||||
//LshapeL->setCurve(spot.LcurveL);
|
||||
targabs->setValue(spot.targabs);
|
||||
targetGray->setValue(spot.targetGray);
|
||||
detail->setValue(spot.detail);
|
||||
@ -5794,7 +5794,7 @@ void LocallabLog::write(rtengine::procparams::ProcParams* pp, ParamsEdited* pedi
|
||||
spot.contthres = contthres->getValue();
|
||||
spot.contq = contq->getValue();
|
||||
spot.colorfl = colorfl->getValue();
|
||||
spot.LcurveL = LshapeL->getCurve();
|
||||
//spot.LcurveL = LshapeL->getCurve();
|
||||
spot.detail = detail->getValue();
|
||||
spot.baselog = baselog->getValue();
|
||||
spot.sensilog = sensilog->getIntValue();
|
||||
@ -6057,12 +6057,12 @@ void LocallabLog::curveChanged(CurveEditor* ce)
|
||||
}
|
||||
}
|
||||
|
||||
if (ce == LshapeL) {
|
||||
if (listener) {
|
||||
listener->panelChanged(EvlocallabLshapeL,
|
||||
M("HISTORY_CUSTOMCURVE") + " (" + escapeHtmlChars(getSpotName()) + ")");
|
||||
}
|
||||
}
|
||||
//if (ce == LshapeL) {
|
||||
// if (listener) {
|
||||
// listener->panelChanged(EvlocallabLshapeL,
|
||||
// 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.))),
|
||||
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")))),
|
||||
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))),
|
||||
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")))),
|
||||
|
||||
sigmoidFrame(Gtk::manage(new Gtk::Frame(M("TP_LOCALLAB_SIGFRA")))),
|
||||
@ -7713,7 +7713,7 @@ Locallabcie::Locallabcie():
|
||||
jz2CurveEditorG->setCurveListener(this);
|
||||
LHshapejz->setIdentityValue(0.);
|
||||
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->setBottomBarBgGradient(six_shape);
|
||||
jz2CurveEditorG->curveListComplete();
|
||||
@ -7722,13 +7722,13 @@ Locallabcie::Locallabcie():
|
||||
|
||||
CHshapejz->setIdentityValue(0.);
|
||||
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->setBottomBarBgGradient(six_shape);
|
||||
|
||||
HHshapejz->setIdentityValue(0.);
|
||||
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->setBottomBarBgGradient(six_shape);
|
||||
|
||||
@ -8186,14 +8186,14 @@ void Locallabcie::updateAdviceTooltips(const bool showTooltips)
|
||||
jz100->set_tooltip_text(M("TP_LOCALLAB_JZ100_TOOLTIP"));
|
||||
pqremap->set_tooltip_text(M("TP_LOCALLAB_JZPQREMAP_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"));
|
||||
logjzFrame->set_tooltip_text(M("TP_LOCALLAB_JZLOGWB_TOOLTIP"));
|
||||
blackEvjz->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"));
|
||||
clarilresjz->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARILJZ_TOOLTIP"));
|
||||
claricresjz->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARICJZ_TOOLTIP"));
|
||||
clarilresjz->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARIL_TOOLTIP"));
|
||||
claricresjz->set_tooltip_text(M("TP_LOCALLAB_WAT_CLARIC_TOOLTIP"));
|
||||
clarisoftjz->set_tooltip_markup(M("TP_LOCALLAB_CLARISOFTJZ_TOOLTIP"));
|
||||
wavshapejz->setTooltip(M("TP_LOCALLAB_WAT_WAVSHAPE_TOOLTIP"));
|
||||
LocalcurveEditorwavjz->set_tooltip_markup(M("TP_LOCALLAB_WAT_LEVELLOCCONTRAST_TOOLTIP"));
|
||||
|
@ -44,33 +44,34 @@ struct LocaleToLang : private std::map<std::pair<Glib::ustring, Glib::ustring>,
|
||||
emplace (key ("ca", "ES"), "Catala");
|
||||
emplace (key ("cs", "CZ"), "Czech");
|
||||
emplace (key ("da", "DK"), "Dansk");
|
||||
emplace (key ("de", "DE"), "Deutsch");
|
||||
emplace (key ("de", "" ), "Deutsch");
|
||||
#ifdef __APPLE__
|
||||
emplace (key ("en", "UK"), "English (UK)");
|
||||
#else
|
||||
emplace (key ("en", "GB"), "English (UK)");
|
||||
#endif
|
||||
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 ("fr", "FR"), "Francais");
|
||||
emplace (key ("fr", "" ), "Francais");
|
||||
emplace (key ("el", "GR"), "Greek");
|
||||
emplace (key ("he", "IL"), "Hebrew");
|
||||
emplace (key ("it", "IT"), "Italiano");
|
||||
emplace (key ("it", "" ), "Italiano");
|
||||
emplace (key ("ja", "JP"), "Japanese");
|
||||
emplace (key ("lv", "LV"), "Latvian");
|
||||
emplace (key ("hu", "HU"), "Magyar");
|
||||
emplace (key ("nl", "NL"), "Nederlands");
|
||||
emplace (key ("lv", "" ), "Latvian");
|
||||
emplace (key ("hu", "" ), "Magyar");
|
||||
emplace (key ("nl", "" ), "Nederlands");
|
||||
emplace (key ("nn", "NO"), "Norsk BM");
|
||||
emplace (key ("nb", "NO"), "Norsk BM");
|
||||
emplace (key ("pl", "PL"), "Polish");
|
||||
emplace (key ("pt", "PT"), "Portugues (Brasil)");
|
||||
emplace (key ("ru", "RU"), "Russian");
|
||||
emplace (key ("pl", "" ), "Polish");
|
||||
emplace (key ("pt", "" ), "Portugues (Brasil)");
|
||||
emplace (key ("ru", "" ), "Russian");
|
||||
emplace (key ("sr", "RS"), "Serbian (Cyrilic Characters)");
|
||||
emplace (key ("sk", "SK"), "Slovak");
|
||||
emplace (key ("fi", "FI"), "Suomi");
|
||||
emplace (key ("sk", "" ), "Slovak");
|
||||
emplace (key ("fi", "" ), "Suomi");
|
||||
emplace (key ("sv", "SE"), "Swedish");
|
||||
emplace (key ("tr", "TR"), "Turkish");
|
||||
emplace (key ("tr", "" ), "Turkish");
|
||||
emplace (key ("zh", "CN"), "Chinese (Simplified)");
|
||||
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;
|
||||
|
||||
// TODO: Support 3 character language code when needed.
|
||||
if (locale.length () >= 2) {
|
||||
major = locale.substr (0, 2).lowercase ();
|
||||
}
|
||||
|
||||
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.
|
||||
@ -95,7 +99,7 @@ struct LocaleToLang : private std::map<std::pair<Glib::ustring, Glib::ustring>,
|
||||
}
|
||||
|
||||
// Look for matching language only.
|
||||
iterator = find (key (major, major.uppercase()));
|
||||
iterator = find (key (major, ""));
|
||||
|
||||
if (iterator != end ()) {
|
||||
return iterator->second;
|
||||
|
@ -773,6 +773,9 @@ void Options::readFromFile(Glib::ustring fname)
|
||||
|
||||
if (keyFile.has_key("General", "Language")) {
|
||||
language = keyFile.get_string("General", "Language");
|
||||
if (!language.compare("Espanol")) {
|
||||
language = "Espanol (Latin America)";
|
||||
}
|
||||
}
|
||||
|
||||
if (keyFile.has_key("General", "LanguageAutoDetect")) {
|
||||
|
@ -571,7 +571,7 @@ void ParamsEdited::set(bool v)
|
||||
wavelet.Backmethod = v;
|
||||
wavelet.Tilesmethod = v;
|
||||
wavelet.complexmethod = v;
|
||||
wavelet.denmethod = v;
|
||||
//wavelet.denmethod = v;
|
||||
wavelet.mixmethod = v;
|
||||
wavelet.slimethod = v;
|
||||
wavelet.quamethod = v;
|
||||
@ -632,7 +632,7 @@ void ParamsEdited::set(bool v)
|
||||
wavelet.levelsigm = v;
|
||||
wavelet.ccwcurve = v;
|
||||
wavelet.blcurve = v;
|
||||
wavelet.opacityCurveSH = v;
|
||||
//wavelet.opacityCurveSH = v;
|
||||
wavelet.opacityCurveRG = v;
|
||||
wavelet.opacityCurveBY = 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.Tilesmethod = wavelet.Tilesmethod && p.wavelet.Tilesmethod == other.wavelet.Tilesmethod;
|
||||
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.slimethod = wavelet.slimethod && p.wavelet.slimethod == other.wavelet.slimethod;
|
||||
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.ccwcurve = wavelet.ccwcurve && p.wavelet.ccwcurve == other.wavelet.ccwcurve;
|
||||
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.opacityCurveBY = wavelet.opacityCurveBY && p.wavelet.opacityCurveBY == other.wavelet.opacityCurveBY;
|
||||
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;
|
||||
}
|
||||
|
||||
if (wavelet.denmethod) {
|
||||
toEdit.wavelet.denmethod = mods.wavelet.denmethod;
|
||||
}
|
||||
//if (wavelet.denmethod) {
|
||||
// toEdit.wavelet.denmethod = mods.wavelet.denmethod;
|
||||
//}
|
||||
|
||||
if (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;
|
||||
}
|
||||
|
||||
if (wavelet.opacityCurveSH) {
|
||||
toEdit.wavelet.opacityCurveSH = mods.wavelet.opacityCurveSH;
|
||||
}
|
||||
//if (wavelet.opacityCurveSH) {
|
||||
// toEdit.wavelet.opacityCurveSH = mods.wavelet.opacityCurveSH;
|
||||
//}
|
||||
|
||||
if (wavelet.opacityCurveRG) {
|
||||
toEdit.wavelet.opacityCurveRG = mods.wavelet.opacityCurveRG;
|
||||
|
@ -1281,7 +1281,7 @@ struct WaveletParamsEdited {
|
||||
bool Backmethod;
|
||||
bool Tilesmethod;
|
||||
bool complexmethod;
|
||||
bool denmethod;
|
||||
//bool denmethod;
|
||||
bool mixmethod;
|
||||
bool slimethod;
|
||||
bool quamethod;
|
||||
@ -1335,7 +1335,7 @@ struct WaveletParamsEdited {
|
||||
bool levelsigm;
|
||||
bool ccwcurve;
|
||||
bool blcurve;
|
||||
bool opacityCurveSH;
|
||||
//bool opacityCurveSH;
|
||||
bool opacityCurveBY;
|
||||
bool wavdenoise;
|
||||
bool wavdenoiseh;
|
||||
|
@ -96,7 +96,7 @@ PerspCorrection::PerspCorrection () : FoldableToolPanel(this, "perspective", M("
|
||||
EvPerspProjAngle = mapper->newEvent(TRANSFORM, "HISTORY_MSG_PERSP_PROJ_ANGLE");
|
||||
EvPerspProjRotate = mapper->newEvent(TRANSFORM, "HISTORY_MSG_PERSP_PROJ_ROTATE");
|
||||
EvPerspProjShift = mapper->newEvent(TRANSFORM, "HISTORY_MSG_PERSP_PROJ_SHIFT");
|
||||
EvPerspRender = mapper->newEvent(TRANSFORM);
|
||||
EvPerspRender = mapper->newEvent(TRANSFORM, "GENERAL_NA");
|
||||
// Void events.
|
||||
EvPerspCamAngleVoid = mapper->newEvent(M_VOID, "HISTORY_MSG_PERSP_CAM_ANGLE");
|
||||
EvPerspCamFocalLengthVoid = mapper->newEvent(M_VOID, "HISTORY_MSG_PERSP_CAM_FL");
|
||||
|
@ -2639,8 +2639,8 @@ void Preferences::darkFrameChanged()
|
||||
{
|
||||
//Glib::ustring s(darkFrameDir->get_filename());
|
||||
Glib::ustring s(darkFrameDir->get_current_folder());
|
||||
//if( s.compare( rtengine::dfm.getPathname()) !=0 ){
|
||||
rtengine::dfm.init(s);
|
||||
//if( s.compare( rtengine::DFManager::getInstance().getPathname()) !=0 ){
|
||||
rtengine::DFManager::getInstance().init(s);
|
||||
updateDFinfos();
|
||||
//}
|
||||
}
|
||||
@ -2658,7 +2658,7 @@ void Preferences::flatFieldChanged()
|
||||
void Preferences::updateDFinfos()
|
||||
{
|
||||
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"));
|
||||
dfLabel->set_text(s);
|
||||
}
|
||||
|
@ -193,7 +193,7 @@ Splash::Splash (Gtk::Window& parent) : Gtk::Dialog(M("GENERAL_ABOUT"), parent, t
|
||||
}
|
||||
|
||||
// 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)) ) {
|
||||
FILE *f = g_fopen (licenseFileName.c_str (), "rt");
|
||||
|
@ -557,7 +557,7 @@ void ToolPanelCoordinator::panelChanged(const rtengine::ProcEvent& event, const
|
||||
maskStruc.blMask, maskStruc.tmMask, maskStruc.retiMask, maskStruc.sharMask,
|
||||
maskStruc.lcMask, maskStruc.cbMask, maskStruc.logMask, maskStruc.maskMask, maskStruc.cieMask);
|
||||
} else if (event == rtengine::EvLocallabSpotCreated || event == rtengine::EvLocallabSpotSelectedWithMask ||
|
||||
event == rtengine::EvLocallabSpotDeleted || event == rtengine::Evlocallabshowreset ||
|
||||
event == rtengine::EvLocallabSpotDeleted /*|| event == rtengine::Evlocallabshowreset*/ ||
|
||||
event == rtengine::EvlocallabToolRemovedWithRefresh) {
|
||||
locallab->resetMaskVisibility();
|
||||
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();
|
||||
}
|
||||
|
||||
rtengine::RawImage* ToolPanelCoordinator::getDF()
|
||||
const rtengine::RawImage* ToolPanelCoordinator::getDF()
|
||||
{
|
||||
if (!ipc) {
|
||||
return nullptr;
|
||||
@ -959,7 +959,7 @@ rtengine::RawImage* ToolPanelCoordinator::getDF()
|
||||
std::string model(imd->getModel());
|
||||
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;
|
||||
|
@ -307,7 +307,7 @@ public:
|
||||
}
|
||||
|
||||
//DFProvider interface
|
||||
rtengine::RawImage* getDF() override;
|
||||
const rtengine::RawImage* getDF() override;
|
||||
|
||||
//FFProvider interface
|
||||
rtengine::RawImage* getFF() override;
|
||||
|
148
rtgui/wavelet.cc
148
rtgui/wavelet.cc
@ -64,7 +64,7 @@ std::vector<GradientMilestone> makeWholeHueRange()
|
||||
Wavelet::Wavelet() :
|
||||
FoldableToolPanel(this, "wavelet", M("TP_WAVELET_LABEL"), true, true),
|
||||
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"))),
|
||||
curveEditorbl(new CurveEditorGroup(options.lastWaveletCurvesDir, M("TP_WAVELET_BLCURVE"))),
|
||||
curveEditorRES(new CurveEditorGroup(options.lastWaveletCurvesDir)),
|
||||
@ -178,7 +178,7 @@ Wavelet::Wavelet() :
|
||||
Dirmethod(Gtk::manage(new MyComboBoxText())),
|
||||
Medgreinf(Gtk::manage(new MyComboBoxText())),
|
||||
ushamethod(Gtk::manage(new MyComboBoxText())),
|
||||
denmethod(Gtk::manage(new MyComboBoxText())),
|
||||
//denmethod(Gtk::manage(new MyComboBoxText())),
|
||||
mixmethod(Gtk::manage(new MyComboBoxText())),
|
||||
quamethod(Gtk::manage(new MyComboBoxText())),
|
||||
slimethod(Gtk::manage(new MyComboBoxText())),
|
||||
@ -214,7 +214,7 @@ Wavelet::Wavelet() :
|
||||
ctboxch(Gtk::manage(new Gtk::Box())),
|
||||
quaHBox(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())),
|
||||
ctboxBA(Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)))
|
||||
|
||||
@ -253,11 +253,11 @@ Wavelet::Wavelet() :
|
||||
EvWavLabGridValue = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVLABGRID_VALUE");
|
||||
EvWavrangeab = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_RANGEAB");
|
||||
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");
|
||||
EvWavsigm = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVSIGM");
|
||||
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");
|
||||
EvWavquamethod = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVQUAMET");
|
||||
EvWavlevden = m->newEvent(DIRPYREQUALIZER, "HISTORY_MSG_WAVLEVDEN");
|
||||
@ -486,16 +486,16 @@ Wavelet::Wavelet() :
|
||||
|
||||
const WaveletParams default_params;
|
||||
|
||||
curveEditorC->setCurveListener(this);
|
||||
curveEditorC->set_tooltip_text(M("TP_WAVELET_FINCOAR_TOOLTIP"));
|
||||
//curveEditorC->setCurveListener(this);
|
||||
//curveEditorC->set_tooltip_text(M("TP_WAVELET_FINCOAR_TOOLTIP"));
|
||||
|
||||
|
||||
opacityShapeSH = static_cast<FlatCurveEditor*>(curveEditorC->addCurve(CT_Flat, "", nullptr, false, false));
|
||||
opacityShapeSH->setIdentityValue(0.);
|
||||
opacityShapeSH->setResetCurve(FlatCurveType(default_params.opacityCurveSH.at(0)), default_params.opacityCurveSH);
|
||||
//opacityShapeSH = static_cast<FlatCurveEditor*>(curveEditorC->addCurve(CT_Flat, "", nullptr, false, false));
|
||||
//opacityShapeSH->setIdentityValue(0.);
|
||||
//opacityShapeSH->setResetCurve(FlatCurveType(default_params.opacityCurveSH.at(0)), default_params.opacityCurveSH);
|
||||
|
||||
curveEditorC->curveListComplete();
|
||||
curveEditorC->show();
|
||||
//curveEditorC->curveListComplete();
|
||||
//curveEditorC->show();
|
||||
|
||||
contrastSHVBox->pack_start(*HSmethod);
|
||||
contrastSHVBox->pack_start(*hllev);
|
||||
@ -684,17 +684,17 @@ Wavelet::Wavelet() :
|
||||
sliHBox->pack_start(*slimethod);
|
||||
|
||||
|
||||
denmethod->append(M("TP_WAVELET_DENEQUAL"));
|
||||
denmethod->append(M("TP_WAVELET_DEN14PLUS"));
|
||||
denmethod->append(M("TP_WAVELET_DEN14LOW"));
|
||||
denmethod->append(M("TP_WAVELET_DEN12PLUS"));
|
||||
denmethod->append(M("TP_WAVELET_DEN12LOW"));
|
||||
denmethodconn = denmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::denmethodChanged));
|
||||
denmethod->set_tooltip_text(M("TP_WAVELET_DENEQUAL_TOOLTIP"));
|
||||
//denmethod->append(M("TP_WAVELET_DENEQUAL"));
|
||||
//denmethod->append(M("TP_WAVELET_DEN14PLUS"));
|
||||
//denmethod->append(M("TP_WAVELET_DEN14LOW"));
|
||||
//denmethod->append(M("TP_WAVELET_DEN12PLUS"));
|
||||
//denmethod->append(M("TP_WAVELET_DEN12LOW"));
|
||||
//denmethodconn = denmethod->signal_changed().connect(sigc::mem_fun(*this, &Wavelet::denmethodChanged));
|
||||
//denmethod->set_tooltip_text(M("TP_WAVELET_DENEQUAL_TOOLTIP"));
|
||||
// Gtk::Box* const denHBox = Gtk::manage(new Gtk::Box());
|
||||
Gtk::Label* const denLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_DENCONTRAST") + ":"));
|
||||
denHBox->pack_start(*denLabel, Gtk::PACK_SHRINK, 4);
|
||||
denHBox->pack_start(*denmethod);
|
||||
//Gtk::Label* const denLabel = Gtk::manage(new Gtk::Label(M("TP_WAVELET_DENCONTRAST") + ":"));
|
||||
//denHBox->pack_start(*denLabel, Gtk::PACK_SHRINK, 4);
|
||||
//denHBox->pack_start(*denmethod);
|
||||
|
||||
mixmethod->append(M("TP_WAVELET_MIXNOISE"));
|
||||
mixmethod->append(M("TP_WAVELET_MIXMIX"));
|
||||
@ -757,7 +757,7 @@ Wavelet::Wavelet() :
|
||||
noiseBox->pack_start(*thrden);
|
||||
noiseBox->pack_start(*quaHBox);
|
||||
noiseBox->pack_start(*sliHBox);
|
||||
noiseBox->pack_start(*denHBox);
|
||||
//noiseBox->pack_start(*denHBox);
|
||||
noiseBox->pack_start(*mixHBox);
|
||||
noiseBox->pack_start(*levelsigm, Gtk::PACK_SHRINK, 0);
|
||||
noiseBox->pack_start(*limden);
|
||||
@ -1330,7 +1330,7 @@ Wavelet::~Wavelet()
|
||||
idle_register.destroy();
|
||||
|
||||
delete opaCurveEditorG;
|
||||
delete curveEditorC;
|
||||
//delete curveEditorC;
|
||||
delete opacityCurveEditorG;
|
||||
delete CurveEditorwavnoise;
|
||||
delete CurveEditorwavnoiseh;
|
||||
@ -1422,7 +1422,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
|
||||
Backmethodconn.block(true);
|
||||
Tilesmethodconn.block(true);
|
||||
complexmethodconn.block(true);
|
||||
denmethodconn.block(true);
|
||||
//denmethodconn.block(true);
|
||||
mixmethodconn.block(true);
|
||||
slimethodconn.block(true);
|
||||
quamethodconn.block(true);
|
||||
@ -1553,17 +1553,17 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
|
||||
complexmethod->set_active(1);
|
||||
}
|
||||
|
||||
if (pp->wavelet.denmethod == "equ") {
|
||||
denmethod->set_active(0);
|
||||
} else if (pp->wavelet.denmethod == "high") {
|
||||
denmethod->set_active(1);
|
||||
} else if (pp->wavelet.denmethod == "low") {
|
||||
denmethod->set_active(2);
|
||||
} else if (pp->wavelet.denmethod == "12high") {
|
||||
denmethod->set_active(3);
|
||||
} else if (pp->wavelet.denmethod == "12low") {
|
||||
denmethod->set_active(4);
|
||||
}
|
||||
//if (pp->wavelet.denmethod == "equ") {
|
||||
// denmethod->set_active(0);
|
||||
//} else if (pp->wavelet.denmethod == "high") {
|
||||
// denmethod->set_active(1);
|
||||
//} else if (pp->wavelet.denmethod == "low") {
|
||||
// denmethod->set_active(2);
|
||||
//} else if (pp->wavelet.denmethod == "12high") {
|
||||
// denmethod->set_active(3);
|
||||
//} else if (pp->wavelet.denmethod == "12low") {
|
||||
// denmethod->set_active(4);
|
||||
//}
|
||||
|
||||
if (pp->wavelet.mixmethod == "nois") {
|
||||
mixmethod->set_active(0);
|
||||
@ -1628,7 +1628,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
|
||||
opacityShapeRG->setCurve(pp->wavelet.opacityCurveRG);
|
||||
wavdenoise->setCurve(pp->wavelet.wavdenoise);
|
||||
wavdenoiseh->setCurve(pp->wavelet.wavdenoiseh);
|
||||
opacityShapeSH->setCurve(pp->wavelet.opacityCurveSH);
|
||||
//opacityShapeSH->setCurve(pp->wavelet.opacityCurveSH);
|
||||
opacityShapeBY->setCurve(pp->wavelet.opacityCurveBY);
|
||||
opacityShape->setCurve(pp->wavelet.opacityCurveW);
|
||||
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"));
|
||||
}
|
||||
|
||||
if (!pedited->wavelet.denmethod) {
|
||||
denmethod->set_active_text(M("GENERAL_UNCHANGED"));
|
||||
}
|
||||
//if (!pedited->wavelet.denmethod) {
|
||||
// denmethod->set_active_text(M("GENERAL_UNCHANGED"));
|
||||
//}
|
||||
|
||||
if (!pedited->wavelet.mixmethod) {
|
||||
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);
|
||||
expnoise->set_inconsistent(!pedited->wavelet.expnoise);
|
||||
opacityShapeRG->setCurve(pp->wavelet.opacityCurveRG);
|
||||
opacityShapeSH->setCurve(pp->wavelet.opacityCurveSH);
|
||||
//opacityShapeSH->setCurve(pp->wavelet.opacityCurveSH);
|
||||
opacityShapeBY->setCurve(pp->wavelet.opacityCurveBY);
|
||||
wavdenoise->setCurve(pp->wavelet.wavdenoise);
|
||||
wavdenoiseh->setCurve(pp->wavelet.wavdenoiseh);
|
||||
@ -2071,7 +2071,7 @@ void Wavelet::read(const ProcParams* pp, const ParamsEdited* pedited)
|
||||
Backmethodconn.block(false);
|
||||
Tilesmethodconn.block(false);
|
||||
complexmethodconn.block(false);
|
||||
denmethodconn.block(false);
|
||||
//denmethodconn.block(false);
|
||||
mixmethodconn.block(false);
|
||||
slimethodconn.block(false);
|
||||
quamethodconn.block(false);
|
||||
@ -2102,7 +2102,7 @@ void Wavelet::setEditProvider(EditDataProvider *provider)
|
||||
ccshape->setEditProvider(provider);
|
||||
blshape->setEditProvider(provider);
|
||||
opacityShapeRG->setEditProvider(provider);
|
||||
opacityShapeSH->setEditProvider(provider);
|
||||
//opacityShapeSH->setEditProvider(provider);
|
||||
opacityShapeBY->setEditProvider(provider);
|
||||
wavdenoise->setEditProvider(provider);
|
||||
wavdenoiseh->setEditProvider(provider);
|
||||
@ -2186,7 +2186,7 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited)
|
||||
pp->wavelet.ccwcurve = ccshape->getCurve();
|
||||
pp->wavelet.blcurve = blshape->getCurve();
|
||||
pp->wavelet.opacityCurveRG = opacityShapeRG->getCurve();
|
||||
pp->wavelet.opacityCurveSH = opacityShapeSH->getCurve();
|
||||
//pp->wavelet.opacityCurveSH = opacityShapeSH->getCurve();
|
||||
pp->wavelet.opacityCurveBY = opacityShapeBY->getCurve();
|
||||
pp->wavelet.wavdenoise = wavdenoise->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.Tilesmethod = Tilesmethod->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.slimethod = slimethod->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.levelsigm = levelsigm->getEditedState();
|
||||
pedited->wavelet.opacityCurveRG = !opacityShapeRG->isUnChanged();
|
||||
pedited->wavelet.opacityCurveSH = !opacityShapeSH->isUnChanged();
|
||||
//pedited->wavelet.opacityCurveSH = !opacityShapeSH->isUnChanged();
|
||||
pedited->wavelet.opacityCurveBY = !opacityShapeBY->isUnChanged();
|
||||
pedited->wavelet.wavdenoise = !wavdenoise->isUnChanged();
|
||||
pedited->wavelet.wavdenoiseh = !wavdenoiseh->isUnChanged();
|
||||
@ -2500,17 +2500,17 @@ void Wavelet::write(ProcParams* pp, ParamsEdited* pedited)
|
||||
pp->wavelet.complexmethod = "expert";
|
||||
}
|
||||
|
||||
if (denmethod->get_active_row_number() == 0) {
|
||||
pp->wavelet.denmethod = "equ";
|
||||
} else if (denmethod->get_active_row_number() == 1) {
|
||||
pp->wavelet.denmethod = "high";
|
||||
} else if (denmethod->get_active_row_number() == 2) {
|
||||
pp->wavelet.denmethod = "low";
|
||||
} else if (denmethod->get_active_row_number() == 3) {
|
||||
pp->wavelet.denmethod = "12high";
|
||||
} else if (denmethod->get_active_row_number() == 4) {
|
||||
pp->wavelet.denmethod = "12low";
|
||||
}
|
||||
//if (denmethod->get_active_row_number() == 0) {
|
||||
// pp->wavelet.denmethod = "equ";
|
||||
//} else if (denmethod->get_active_row_number() == 1) {
|
||||
// pp->wavelet.denmethod = "high";
|
||||
//} else if (denmethod->get_active_row_number() == 2) {
|
||||
// pp->wavelet.denmethod = "low";
|
||||
//} else if (denmethod->get_active_row_number() == 3) {
|
||||
// pp->wavelet.denmethod = "12high";
|
||||
//} else if (denmethod->get_active_row_number() == 4) {
|
||||
// pp->wavelet.denmethod = "12low";
|
||||
//}
|
||||
|
||||
if (mixmethod->get_active_row_number() == 0) {
|
||||
pp->wavelet.mixmethod = "nois";
|
||||
@ -2569,8 +2569,8 @@ void Wavelet::curveChanged(CurveEditor* ce)
|
||||
listener->panelChanged(EvWavblshape, M("HISTORY_CUSTOMCURVE"));
|
||||
} else if (ce == opacityShapeRG) {
|
||||
listener->panelChanged(EvWavColor, M("HISTORY_CUSTOMCURVE"));
|
||||
} else if (ce == opacityShapeSH) {
|
||||
listener->panelChanged(EvWavlevelshc, M("HISTORY_CUSTOMCURVE"));
|
||||
//} else if (ce == opacityShapeSH) {
|
||||
// listener->panelChanged(EvWavlevelshc, M("HISTORY_CUSTOMCURVE"));
|
||||
} else if (ce == opacityShapeBY) {
|
||||
listener->panelChanged(EvWavOpac, M("HISTORY_CUSTOMCURVE"));
|
||||
} else if (ce == wavdenoise) {
|
||||
@ -2913,13 +2913,13 @@ void Wavelet::HSmethodUpdateUI()
|
||||
bllev->hide();
|
||||
threshold->hide();
|
||||
threshold2->hide();
|
||||
curveEditorC->hide();
|
||||
//curveEditorC->hide();
|
||||
} else { //with
|
||||
hllev->show();
|
||||
bllev->show();
|
||||
threshold->show();
|
||||
threshold2->show();
|
||||
curveEditorC->show();
|
||||
//curveEditorC->show();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3252,7 +3252,7 @@ void Wavelet::convertParamToNormal()
|
||||
//denoise
|
||||
chromfi->setValue(def_params.chromfi);
|
||||
chromco->setValue(def_params.chromco);
|
||||
denmethod->set_active(4);
|
||||
//denmethod->set_active(4);
|
||||
mixmethod->set_active(2);
|
||||
slimethod->set_active(0);
|
||||
levelsigm->setValue<double>(def_params.levelsigm);
|
||||
@ -3310,7 +3310,7 @@ void Wavelet::updateGUIToMode(int mode)
|
||||
blurFrame->hide();
|
||||
cbenab->hide();
|
||||
sigmafin->hide();
|
||||
denHBox->hide();
|
||||
//denHBox->hide();
|
||||
mixHBox->hide();
|
||||
sliHBox->hide();
|
||||
sigm->hide();
|
||||
@ -3338,7 +3338,7 @@ void Wavelet::updateGUIToMode(int mode)
|
||||
blurFrame->show();
|
||||
cbenab->show();
|
||||
sigmafin->show();
|
||||
denHBox->hide();
|
||||
//denHBox->hide();
|
||||
mixHBox->show();
|
||||
sigm->hide();
|
||||
levelsigm->show();
|
||||
@ -3357,7 +3357,7 @@ void Wavelet::updateGUIToMode(int mode)
|
||||
CurveEditorwavnoise->show();
|
||||
}
|
||||
disableListener();
|
||||
denmethod->set_active(4);
|
||||
//denmethod->set_active(4);
|
||||
enableListener();
|
||||
|
||||
}
|
||||
@ -3380,13 +3380,13 @@ void Wavelet::complexmethodChanged()
|
||||
}
|
||||
}
|
||||
|
||||
void Wavelet::denmethodChanged()
|
||||
{
|
||||
|
||||
if (listener && (multiImage || getEnabled())) {
|
||||
listener->panelChanged(EvWavdenmethod, denmethod->get_active_text());
|
||||
}
|
||||
}
|
||||
//void Wavelet::denmethodChanged()
|
||||
//{
|
||||
//
|
||||
// if (listener && (multiImage || getEnabled())) {
|
||||
// listener->panelChanged(EvWavdenmethod, denmethod->get_active_text());
|
||||
// }
|
||||
//}
|
||||
|
||||
void Wavelet::mixmethodChanged()
|
||||
{
|
||||
@ -3511,7 +3511,7 @@ void Wavelet::setBatchMode(bool batchMode)
|
||||
Backmethod->append(M("GENERAL_UNCHANGED"));
|
||||
Tilesmethod->append(M("GENERAL_UNCHANGED"));
|
||||
complexmethod->append(M("GENERAL_UNCHANGED"));
|
||||
denmethod->append(M("GENERAL_UNCHANGED"));
|
||||
//denmethod->append(M("GENERAL_UNCHANGED"));
|
||||
mixmethod->append(M("GENERAL_UNCHANGED"));
|
||||
slimethod->append(M("GENERAL_UNCHANGED"));
|
||||
quamethod->append(M("GENERAL_UNCHANGED"));
|
||||
@ -3528,7 +3528,7 @@ void Wavelet::setBatchMode(bool batchMode)
|
||||
Dirmethod->append(M("GENERAL_UNCHANGED"));
|
||||
CCWcurveEditorG->setBatchMode(batchMode);
|
||||
opaCurveEditorG->setBatchMode(batchMode);
|
||||
curveEditorC->setBatchMode(batchMode);
|
||||
//curveEditorC->setBatchMode(batchMode);
|
||||
opacityCurveEditorG->setBatchMode(batchMode);
|
||||
CurveEditorwavnoise->setBatchMode(batchMode);
|
||||
CurveEditorwavnoiseh->setBatchMode(batchMode);
|
||||
|
@ -139,7 +139,7 @@ private:
|
||||
void MedgreinfChanged();
|
||||
void TMmethodChanged();
|
||||
void complexmethodChanged();
|
||||
void denmethodChanged();
|
||||
//void denmethodChanged();
|
||||
void mixmethodChanged();
|
||||
void quamethodChanged();
|
||||
void slimethodChanged();
|
||||
@ -190,8 +190,8 @@ private:
|
||||
void enableToggled(MyExpander* expander);
|
||||
|
||||
CurveEditorGroup* const curveEditorG;
|
||||
CurveEditorGroup* const curveEditorC;
|
||||
FlatCurveEditor* opacityShapeSH;
|
||||
//CurveEditorGroup* const curveEditorC;
|
||||
//FlatCurveEditor* opacityShapeSH;
|
||||
|
||||
CurveEditorGroup* const CCWcurveEditorG;
|
||||
CurveEditorGroup* const curveEditorbl;
|
||||
@ -349,8 +349,8 @@ private:
|
||||
sigc::connection MedgreinfConn;
|
||||
MyComboBoxText* const ushamethod;
|
||||
sigc::connection ushamethodconn;
|
||||
MyComboBoxText* const denmethod;
|
||||
sigc::connection denmethodconn;
|
||||
//MyComboBoxText* const denmethod;
|
||||
//sigc::connection denmethodconn;
|
||||
MyComboBoxText* const mixmethod;
|
||||
sigc::connection mixmethodconn;
|
||||
MyComboBoxText* const quamethod;
|
||||
@ -392,7 +392,7 @@ private:
|
||||
Gtk::Box* const ctboxch;
|
||||
Gtk::Box* const quaHBox;
|
||||
Gtk::Box* const sliHBox;
|
||||
Gtk::Box* const denHBox;
|
||||
//Gtk::Box* const denHBox;
|
||||
Gtk::Box* const mixHBox;
|
||||
Gtk::Box* const ctboxBA;// = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL));
|
||||
|
||||
|
46
tools/findorphans.py
Executable file
46
tools/findorphans.py
Executable 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))
|
@ -3,10 +3,14 @@
|
||||
<dict>
|
||||
<key>LSEnvironment</key>
|
||||
<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>
|
||||
<key>XDG_DATA_DIRS</key>
|
||||
<string>/Applications/RawTherapee.app/Contents/Resources/share/gtk-3.0</string>
|
||||
<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>
|
||||
<string>/Applications/RawTherapee.app/Contents/Resources/etc/gtk-3.0/gtk.immodules</string>
|
||||
<key>XDG_DATA_HOME</key>
|
||||
@ -28,8 +32,13 @@
|
||||
</dict>
|
||||
<key>LSMultipleInstancesProhibited</key>
|
||||
<true />
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>@minimum_macos_version@</string>
|
||||
<key>LSMinimumSystemVersionByArchitecture</key>
|
||||
<dict>
|
||||
<key>arm64</key>
|
||||
<string>@minimum_arm64_version@</string>
|
||||
<key>x86_64</key>
|
||||
<string>@minimum_x86_64_version@</string>
|
||||
</dict>
|
||||
<key>CFBundleAllowMixedLocalizations</key>
|
||||
<true />
|
||||
<key>CFBundleDisplayName</key>
|
||||
@ -156,9 +165,10 @@
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>@shortVersion@</string>
|
||||
<key>LSExecutableArchitectures</key>
|
||||
<key>LSArchitecturePriority</key>
|
||||
<array>
|
||||
<string>@arch@</string>
|
||||
<string>arm64</string>
|
||||
<string>x86_64</string>
|
||||
</array>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true />
|
||||
|
@ -24,7 +24,7 @@ function msgError {
|
||||
}
|
||||
|
||||
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 {
|
||||
@ -40,11 +40,11 @@ function ModifyInstallNames {
|
||||
{
|
||||
# id
|
||||
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
|
||||
GetDependencies "${x}" | while read -r y
|
||||
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
|
||||
} | bash -v
|
||||
done
|
||||
@ -120,6 +120,13 @@ minimum_macos_version=${MINIMUM_SYSTEM_VERSION}
|
||||
#Out: /opt
|
||||
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
|
||||
#Out: /opt/local/lib/libexpat.dylib
|
||||
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."
|
||||
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"
|
||||
CONTENTS="${APP}/Contents"
|
||||
RESOURCES="${CONTENTS}/Resources"
|
||||
@ -149,7 +163,7 @@ EXECUTABLE="${MACOS}/rawtherapee"
|
||||
GDK_PREFIX="${LOCAL_PREFIX}/"
|
||||
|
||||
msg "Removing old files:"
|
||||
rm -rf "${APP}" *.dmg *.zip
|
||||
rm -rf "${APP}" *.dmg *.zip *.app
|
||||
|
||||
msg "Creating bundle container:"
|
||||
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"
|
||||
|
||||
msg "Copying dependencies from ${GTK_PREFIX}."
|
||||
CheckLink "${EXECUTABLE}"
|
||||
CheckLink "${EXECUTABLE}" 2>&1
|
||||
|
||||
# dylib install names
|
||||
ModifyInstallNames
|
||||
ModifyInstallNames 2>&1
|
||||
|
||||
# Copy libjpeg-turbo ("62") into the app bundle
|
||||
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
|
||||
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
|
||||
|
||||
# Build GTK3 pixbuf loaders & immodules database
|
||||
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/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|${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
|
||||
rm "${ETC}"/*.bak
|
||||
rm "${ETC}"/*/*.bak
|
||||
|
||||
# Install names
|
||||
ModifyInstallNames
|
||||
ModifyInstallNames 2>/dev/null
|
||||
|
||||
# Mime directory
|
||||
msg "Copying shared files from ${GTK_PREFIX}:"
|
||||
@ -271,8 +287,8 @@ ditto "${PROJECT_SOURCE_DIR}/rtdata/fonts" "${ETC}/fonts"
|
||||
|
||||
# App bundle resources
|
||||
ditto "${PROJECT_SOURCE_DATA_DIR}/"{rawtherapee,profile}.icns "${RESOURCES}"
|
||||
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"
|
||||
#ditto "${PROJECT_SOURCE_DATA_DIR}/PkgInfo" "${CONTENTS}"
|
||||
|
||||
update-mime-database -V "${RESOURCES}/share/mime"
|
||||
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
|
||||
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
|
||||
msg "Registering @rpath in Frameworks folder."
|
||||
for frameworklibs in "${LIB}"/*{dylib,so,cli}; do
|
||||
install_name_tool -delete_rpath ${LOCAL_PREFIX}/lib "${frameworklibs}"
|
||||
install_name_tool -add_rpath /Applications/"${LIB}" "${frameworklibs}"
|
||||
install_name_tool -delete_rpath ${LOCAL_PREFIX}/lib "${frameworklibs}" 2>/dev/null
|
||||
install_name_tool -add_rpath /Applications/"${LIB}" "${frameworklibs}" 2>/dev/null
|
||||
done
|
||||
install_name_tool -delete_rpath RawTherapee.app/Contents/Frameworks "${EXECUTABLE}"-cli
|
||||
install_name_tool -add_rpath /Applications/"${LIB}" "${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 2>/dev/null
|
||||
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
|
||||
if [[ -n $CODESIGNID ]]; then
|
||||
msg "Codesigning Application."
|
||||
@ -339,7 +396,7 @@ function CreateDmg {
|
||||
|
||||
msg "Preparing disk image sources at ${srcDir}:"
|
||||
cp -R "${APP}" "${srcDir}"
|
||||
cp "${RESOURCES}"/LICENSE.txt "${srcDir}"
|
||||
cp "${RESOURCES}"/LICENSE "${srcDir}"
|
||||
ln -s /Applications "${srcDir}"
|
||||
|
||||
# Web bookmarks
|
||||
@ -353,6 +410,9 @@ function CreateDmg {
|
||||
CreateWebloc 'Report Bug' 'https://github.com/Beep6581/RawTherapee/issues/new'
|
||||
|
||||
# Disk image name
|
||||
if [[ -n $UNIVERSAL_URL ]]; then
|
||||
arch="Universal"
|
||||
fi
|
||||
dmg_name="${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}"
|
||||
lower_build_type="$(tr '[:upper:]' '[:lower:]' <<< "$CMAKE_BUILD_TYPE")"
|
||||
if [[ $lower_build_type != release ]]; then
|
||||
@ -368,6 +428,7 @@ function CreateDmg {
|
||||
SetFile -c incC "${srcDir}/.VolumeIcon.icns"
|
||||
create-dmg "${dmg_name}.dmg" "${srcDir}" \
|
||||
--volname "${PROJECT_NAME}_${PROJECT_FULL_VERSION}" \
|
||||
--appname "${PROJECT_NAME}" \
|
||||
--volicon "${srcDir}/.VolumeIcon.icns" \
|
||||
--sandbox-safe \
|
||||
--no-internet-enable \
|
||||
@ -389,8 +450,8 @@ function CreateDmg {
|
||||
msg "Notarizing the dmg:"
|
||||
zip "${dmg_name}.dmg.zip" "${dmg_name}.dmg"
|
||||
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 }'`
|
||||
echo "dmg Result= $uuid" # Display identifier string
|
||||
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
|
||||
sleep 15
|
||||
while :
|
||||
do
|
||||
@ -416,8 +477,11 @@ function CreateDmg {
|
||||
# Zip disk image for redistribution
|
||||
msg "Zipping disk image for redistribution:"
|
||||
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/"
|
||||
if [[ -n $NIGHTLY ]]; then
|
||||
cp "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}.zip" "${PROJECT_NAME}_macOS_${arch}_latest.zip"
|
||||
fi
|
||||
}
|
||||
CreateDmg
|
||||
msg "Finishing build:"
|
||||
|
@ -47,7 +47,7 @@ AppUpdatesURL={#MyAppURL}
|
||||
DefaultDirName={pf}\{#MyAppName}\{#MyAppVersion}
|
||||
DefaultGroupName={#MyAppName}
|
||||
AllowNoIcons=yes
|
||||
LicenseFile={#MyBuildBasePath}\LICENSE.txt
|
||||
LicenseFile={#MyBuildBasePath}\LICENSE
|
||||
OutputDir={#MyBuildBasePath}\..\
|
||||
OutputBaseFilename={#MyAppName}_{#MyAppVersion}_{#MySystemName}_{#MyBitDepth}
|
||||
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}\AboutThisBuild.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}\options"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "{#MyBuildBasePath}\*.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
|
Loading…
x
Reference in New Issue
Block a user