Merge with 'Beep6581/dev'

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

View File

@ -76,6 +76,8 @@ jobs:
- name: Include Lensfun
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-*

View File

@ -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}" \

View File

@ -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" \

View File

@ -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

View File

@ -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(

View File

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

View File

@ -38,5 +38,8 @@ set(PROC_TARGET_8_FLAGS "-march=athlon64" CACHE STRING "Processor-8 flags")
set(PROC_TARGET_9_LABEL phenomX4 CACHE STRING "Processor-9 label - use it to provide a phenomX4 optimized build, if you have this processor")
set(PROC_TARGET_9_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")

View File

@ -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")

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -162,7 +162,6 @@ HISTOGRAM_TOOLTIP_BAR;Mostra/amaga la barra indicadora RGB\nClic botó dret a la
HISTOGRAM_TOOLTIP_G;Mostra/amaga l'histograma VERD
HISTOGRAM_TOOLTIP_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

View File

@ -291,7 +291,6 @@ HISTOGRAM_TOOLTIP_G;Skrýt/Zobrazit histogram zelené.
HISTOGRAM_TOOLTIP_L;Skrýt/Zobrazit CIELab histogram jasu.
HISTOGRAM_TOOLTIP_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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -362,7 +362,6 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh
!HISTOGRAM_TOOLTIP_L;Show/Hide CIELab luminance histogram.
!HISTOGRAM_TOOLTIP_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

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -297,7 +297,6 @@ HISTOGRAM_TOOLTIP_G;Mostrar/Ocultar Histograma Verde
HISTOGRAM_TOOLTIP_L;Mostrar/Ocultar Histograma de Luminancia CIELAB
HISTOGRAM_TOOLTIP_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

View File

@ -236,7 +236,6 @@ HISTOGRAM_TOOLTIP_G;Montrer/cacher l'histogramme VERT
HISTOGRAM_TOOLTIP_L;Montrer/cacher l'histogramme Luminance CIELAB
HISTOGRAM_TOOLTIP_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 dondelettes utilisée dans lensemble du module “wavelets”
TP_LOCALLAB_WAT_EXPRESID_TOOLTIP;Image résiduelle, a le même comportement que l'image principale
TP_LOCALLAB_WAT_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

View File

@ -191,7 +191,6 @@ HISTOGRAM_TOOLTIP_CHRO;Mostra/Nascondi l'istogramma di cromaticità.
HISTOGRAM_TOOLTIP_G;Mostra/Nascondi l'istogramma del Verde.
HISTOGRAM_TOOLTIP_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

View File

@ -156,7 +156,6 @@ HISTOGRAM_TOOLTIP_BAR;RGB jelzősáv megjelenítése/elrejtése.\nKattints jobb
HISTOGRAM_TOOLTIP_G;Zöld csatorna hisztogrammja (mutat/elrejt)
HISTOGRAM_TOOLTIP_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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -244,7 +244,6 @@ HISTOGRAM_TOOLTIP_G;Mostrar/Ocultar histograma verde.
HISTOGRAM_TOOLTIP_L;Mostrar/Ocultar histograma de luminância CIELab.
HISTOGRAM_TOOLTIP_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

View File

@ -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;Из буфера обмена

View File

@ -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;Из оставе

View File

@ -247,7 +247,6 @@ HISTOGRAM_TOOLTIP_G;Prikaži/Skrij histogram za zeleno.
HISTOGRAM_TOOLTIP_L;Prikaži/Skrij histogram CIELab svetlosti.
HISTOGRAM_TOOLTIP_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

View File

@ -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

View File

@ -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&amp;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 hasnt 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

View File

@ -1208,12 +1208,17 @@ 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],
"raw_crop" : [ 128, 96, 8224, 5490 ],
"masked_areas" : [ 94, 20, 5578, 122 ],
"ranges" : { "white" : 16382 }
"ranges" : { "white" : 16382 }
},
{ // Quality C
@ -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
@ -1702,7 +1717,7 @@ Camera constants:
{ // Quality A, samples provided by dimonoid (#5842)
"make_model": "NIKON COOLPIX P1000",
"dcraw_matrix": [ 14294, -6116, -1333, -1628, 10219, 1637, -14, 1158, 5022 ], // ColorMatrix2 from Adobe DNG Converter 11.4
"ranges": {
"ranges": {
"black": 200,
"white": [ 4000, 4050, 3950 ] // Typical values without LENR: 4009, 4093, 3963
} // No significant influence of ISO

View File

@ -738,7 +738,7 @@ void Ciecam02::jzczhzxyz (double &x, double &y, double &z, double jz, double az,
Lp = Iz + 0.138605043271539 * az + 0.0580473161561189 * bz;
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

View File

@ -3544,14 +3544,14 @@ double ColorTemp::daylight_spect(double wavelength, double m1, double m2)
53.30, 56.10, 58.90, 60.40, 61.90
};
//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
};

View File

@ -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

View File

@ -193,8 +193,17 @@ 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];

View File

@ -17,28 +17,82 @@
* 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;
}
inline dfInfo& dfInfo::operator =(const dfInfo &o)
inline dfInfo& dfInfo::operator = (const dfInfo &o)
{
if (this != &o) {
pathname = o.pathname;
@ -48,7 +102,7 @@ inline dfInfo& dfInfo::operator =(const dfInfo &o)
shutter = o.shutter;
timestamp = o.timestamp;
if( ri ) {
if (ri) {
delete ri;
ri = nullptr;
}
@ -57,38 +111,13 @@ 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::string dfInfo::key(const std::string &mak, const std::string &mod, int iso, double shut)
{
std::ostringstream s;
s << mak << " " << mod << " ";
s.width(5);
s << iso << "ISO ";
s.precision( 2 );
s.precision(2);
s.width(4);
s << shut << "s";
return s.str();
@ -96,115 +125,106 @@ std::string dfInfo::key(const std::string &mak, const std::string &mod, int iso,
double dfInfo::distance(const std::string &mak, const std::string &mod, int iso, double shutter) const
{
if( this->maker.compare( mak) != 0 ) {
if (this->maker.compare(mak) != 0) {
return INFINITY;
}
if( this->model.compare( mod) != 0 ) {
if (this->model.compare(mod) != 0) {
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) {
if (ri) {
return ri;
}
updateRawImage();
updateBadPixelList( ri );
updateBadPixelList(ri);
return ri;
}
std::vector<badPix>& dfInfo::getHotPixels()
const std::vector<rtengine::badPix>& dfInfo::getHotPixels()
{
if( !ri ) {
if (!ri) {
updateRawImage();
updateBadPixelList( ri );
updateBadPixelList(ri);
}
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.. )
if (!pathNames.empty()) {
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)) {
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);
for (++iName; iName != pathNames.end(); ++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 ) {
for( int row = 0; row < H; row++) {
for( int col = 0; col < W; col++) {
acc[row][col] += temp->data[row][col];
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];
}
}
} 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];
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];
}
}
}
}
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)) {
if (ri->loadRaw(true)) {
delete ri;
ri = nullptr;
} else {
@ -213,35 +233,36 @@ void dfInfo::updateRawImage()
}
}
void dfInfo::updateBadPixelList( RawImage *df )
void dfInfo::updateBadPixelList(const rtengine::RawImage *df)
{
if(!df) {
if (!df) {
return;
}
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] +
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]);
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];
if( df->data[row][col] > m * threshold ) {
if (df->data[row][col] > m * threshold) {
badPixelsThread.emplace_back(col, row);
}
}
}
#ifdef _OPENMP
#pragma omp critical
@ -250,48 +271,78 @@ 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] +
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]);
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] +
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];
}
if( df->data[row][3 * col] > m[0]*threshold || df->data[row][3 * col + 1] > m[1]*threshold || df->data[row][3 * col + 2] > m[2]*threshold) {
if (df->data[row][3 * col] > m[0]*threshold || df->data[row][3 * col + 1] > m[1]*threshold || df->data[row][3 * col + 2] > m[2]*threshold) {
badPixels.emplace_back(col, row);
}
}
}
}
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 ()) {
names.emplace_back (Glib::build_filename (pathname, file->get_name ()));
while (const auto file = enumerator->next_file()) {
names.emplace_back(Glib::build_filename(pathname, file->get_name()));
}
} catch (Glib::Exception&) {}
@ -299,40 +350,40 @@ 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);
if (n > 0 && settings->verbose) {
printf("Loaded %s: %d pixels\n", name.c_str(), n);
}
continue;
}
try {
addFileInfo(names[i]);
} catch( std::exception& e ) {}
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 );
if (!i.pathNames.empty() && !i.pathname.empty()) {
i.pathNames.push_back(i.pathname);
i.pathname.clear();
}
if( settings->verbose ) {
if( !i.pathname.empty() ) {
printf( "%s: %s\n", i.key().c_str(), i.pathname.c_str());
if (settings->verbose) {
if (!i.pathname.empty()) {
printf("%s: %s\n", i.key().c_str(), i.pathname.c_str());
} else {
printf( "%s: MEAN of \n ", i.key().c_str());
printf("%s: MEAN of \n ", i.key().c_str());
for(std::list<Glib::ustring>::iterator path = i.pathNames.begin(); path != i.pathNames.end(); ++path) {
for (std::list<Glib::ustring>::iterator path = i.pathNames.begin(); path != i.pathNames.end(); ++path) {
printf("%s, ", path->c_str());
}
@ -345,9 +396,140 @@ void DFManager::init(const Glib::ustring& pathname)
return;
}
dfInfo* DFManager::addFileInfo (const Glib::ustring& filename, bool pool)
void rtengine::DFManager::Implementation::getStat(int& totFiles, int& totTemplates) const
{
auto ext = getFileExtension(filename);
totFiles = 0;
totTemplates = 0;
for (const auto &df : dfList) {
const dfInfo &i = df.second;
if (i.pathname.empty()) {
totTemplates++;
totFiles += i.pathNames.size();
} else {
totFiles++;
}
}
}
/* The search for the best match is twofold:
* if perfect matches for iso and shutter are found, then the list is scanned for lesser distance in time
* otherwise if no match is found, the whole list is searched for lesser distance in iso and shutter
*/
const rtengine::RawImage* rtengine::DFManager::Implementation::searchDarkFrame(const std::string& mak, const std::string& mod, int iso, double shut, time_t t)
{
dfInfo* df = find(toUppercase(mak), toUppercase(mod), iso, shut, t);
if (df) {
return df->getRawImage();
} else {
return nullptr;
}
}
const rtengine::RawImage* rtengine::DFManager::Implementation::searchDarkFrame(const Glib::ustring& filename)
{
for (auto& df : dfList) {
if (df.second.pathname.compare(filename) == 0) {
return df.second.getRawImage();
}
}
dfInfo *df = addFileInfo(filename, false);
if (df) {
return df->getRawImage();
}
return nullptr;
}
const std::vector<rtengine::badPix>* rtengine::DFManager::Implementation::getHotPixels(const Glib::ustring& filename)
{
for (auto& df : dfList) {
if (df.second.pathname.compare(filename) == 0) {
return &df.second.getHotPixels();
}
}
return nullptr;
}
const std::vector<rtengine::badPix>* rtengine::DFManager::Implementation::getHotPixels(const std::string& mak, const std::string& mod, int iso, double shut, time_t t)
{
dfInfo* df = find(toUppercase(mak), toUppercase(mod), iso, shut, t);
if (df) {
if (settings->verbose) {
if (!df->pathname.empty()) {
printf("Searched hotpixels from %s\n", df->pathname.c_str());
} else {
if (!df->pathNames.empty()) {
printf("Searched hotpixels from template (first %s)\n", df->pathNames.begin()->c_str());
}
}
}
return &df->getHotPixels();
} else {
return nullptr;
}
}
const std::vector<rtengine::badPix>* rtengine::DFManager::Implementation::getBadPixels(const std::string& mak, const std::string& mod, const std::string& serial) const
{
bpList_t::const_iterator iter;
bool found = false;
if (!serial.empty()) {
// search with serial number first
std::ostringstream s;
s << mak << " " << mod << " " << serial;
iter = bpList.find(s.str());
if (iter != bpList.end()) {
found = true;
}
if (settings->verbose) {
if (found) {
printf("%s.badpixels found\n", s.str().c_str());
} else {
printf("%s.badpixels not found\n", s.str().c_str());
}
}
}
if (!found) {
// search without serial number
std::ostringstream s;
s << mak << " " << mod;
iter = bpList.find(s.str());
if (iter != bpList.end()) {
found = true;
}
if (settings->verbose) {
if (found) {
printf("%s.badpixels found\n", s.str().c_str());
} else {
printf("%s.badpixels not found\n", s.str().c_str());
}
}
}
if (!found) {
return nullptr;
} else {
return &(iter->second);
}
}
dfInfo* rtengine::DFManager::Implementation::addFileInfo(const Glib::ustring& filename, bool pool)
{
const auto ext = getFileExtension(filename);
if (ext.empty() || !options.is_extention_enabled(ext)) {
return nullptr;
@ -376,37 +558,34 @@ dfInfo* DFManager::addFileInfo (const Glib::ustring& filename, bool pool)
}
RawImage ri(filename);
int res = ri.loadRaw(false); // Read information about shot
if (res != 0) {
if (ri.loadRaw(false) != 0) { // Read information about shot
return nullptr;
}
dfList_t::iterator iter;
if(!pool) {
dfInfo n(filename, "", "", 0, 0, 0);
iter = dfList.emplace("", n);
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(((Glib::ustring)idata.getMake()).uppercase(), ((Glib::ustring)idata.getModel()).uppercase(), idata.getISOSpeed(), idata.getShutterSpeed()));
iter = dfList.find(key);
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, ((Glib::ustring)idata.getMake()).uppercase(), ((Glib::ustring)idata.getModel()).uppercase(), idata.getISOSpeed(), idata.getShutterSpeed(), idata.getDateTimeAsTS());
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()) {
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());
dfInfo n(filename, toUppercase(idata.getMake()), toUppercase(idata.getModel()), idata.getISOSpeed(), idata.getShutterSpeed(), idata.getDateTimeAsTS());
iter = dfList.emplace(key, n);
}
}
@ -418,44 +597,23 @@ dfInfo* DFManager::addFileInfo (const Glib::ustring& filename, bool pool)
return nullptr;
}
void DFManager::getStat( int &totFiles, int &totTemplates)
dfInfo* rtengine::DFManager::Implementation::find(const std::string& mak, const std::string& mod, int isospeed, double shut, time_t t)
{
totFiles = 0;
totTemplates = 0;
for( dfList_t::iterator iter = dfList.begin(); iter != dfList.end(); ++iter ) {
dfInfo &i = iter->second;
if( i.pathname.empty() ) {
totTemplates++;
totFiles += i.pathNames.size();
} else {
totFiles++;
}
}
}
/* The search for the best match is twofold:
* if perfect matches for iso and shutter are found, then the list is scanned for lesser distance in time
* otherwise if no match is found, the whole list is searched for lesser distance in iso and shutter
*/
dfInfo* DFManager::find( const std::string &mak, const std::string &mod, int isospeed, double shut, time_t t )
{
if( dfList.empty() ) {
if (dfList.empty()) {
return nullptr;
}
std::string key( dfInfo::key(mak, mod, isospeed, shut) );
dfList_t::iterator iter = dfList.find( key );
const std::string key(dfInfo::key(mak, mod, isospeed, shut));
dfList_t::iterator iter = dfList.find(key);
if( iter != dfList.end() ) {
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 );
for (++iter; iter != dfList.end() && !key.compare(iter->second.key()); ++iter) {
const time_t d = ABS(iter->second.timestamp - t);
if( d < bestDeltaTime ) {
if (d < bestDeltaTime) {
bestMatch = iter;
bestDeltaTime = d;
}
@ -465,12 +623,12 @@ dfInfo* DFManager::find( const std::string &mak, const std::string &mod, int iso
} else {
iter = dfList.begin();
dfList_t::iterator bestMatch = iter;
double bestD = iter->second.distance( mak, mod, isospeed, shut );
double bestD = iter->second.distance(mak, mod, isospeed, shut);
for( ++iter; iter != dfList.end(); ++iter ) {
double d = 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 ) {
if (d < bestD) {
bestD = d;
bestMatch = iter;
}
@ -480,170 +638,107 @@ dfInfo* DFManager::find( const std::string &mak, const std::string &mod, int iso
}
}
RawImage* DFManager::searchDarkFrame( const std::string &mak, const std::string &mod, int iso, double shut, time_t t )
{
dfInfo *df = find( ((Glib::ustring)mak).uppercase(), ((Glib::ustring)mod).uppercase(), iso, shut, t );
if( df ) {
return df->getRawImage();
} else {
return nullptr;
}
}
RawImage* DFManager::searchDarkFrame( const Glib::ustring filename )
{
for ( dfList_t::iterator iter = dfList.begin(); iter != dfList.end(); ++iter ) {
if( iter->second.pathname.compare( filename ) == 0 ) {
return iter->second.getRawImage();
}
}
dfInfo *df = addFileInfo( filename, false );
if(df) {
return df->getRawImage();
}
return nullptr;
}
std::vector<badPix> *DFManager::getHotPixels ( const Glib::ustring filename )
{
for ( dfList_t::iterator iter = dfList.begin(); iter != dfList.end(); ++iter ) {
if( iter->second.pathname.compare( filename ) == 0 ) {
return &iter->second.getHotPixels();
}
}
return nullptr;
}
std::vector<badPix> *DFManager::getHotPixels ( const std::string &mak, const std::string &mod, int iso, double shut, time_t t )
{
dfInfo *df = find( ((Glib::ustring)mak).uppercase(), ((Glib::ustring)mod).uppercase(), iso, shut, t );
if( df ) {
if( settings->verbose ) {
if( !df->pathname.empty() ) {
printf( "Searched hotpixels from %s\n", df->pathname.c_str());
} else {
if( !df->pathNames.empty() ) {
printf( "Searched hotpixels from template (first %s)\n", df->pathNames.begin()->c_str());
}
}
}
return &df->getHotPixels();
} else {
return nullptr;
}
}
int DFManager::scanBadPixelsFile( Glib::ustring filename )
int rtengine::DFManager::Implementation::scanBadPixelsFile(const Glib::ustring& filename)
{
FILE *file = ::fopen( filename.c_str(), "r" );
if( !file ) {
return false;
if (!file) {
return 0;
}
size_t lastdot = filename.find_last_of ('.');
size_t dirpos1 = filename.find_last_of ('/');
size_t dirpos2 = filename.find_last_of ('\\');
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 ) {
if (dirpos1 == Glib::ustring::npos && dirpos2 == Glib::ustring::npos) {
dirpos1 = 0;
} else if( dirpos1 != Glib::ustring::npos && dirpos2 != Glib::ustring::npos ) {
} else if (dirpos1 != Glib::ustring::npos && dirpos2 != Glib::ustring::npos) {
dirpos1 = (dirpos1 > dirpos2 ? dirpos1 : dirpos2);
} else if( dirpos1 == Glib::ustring::npos ) {
} else if (dirpos1 == Glib::ustring::npos) {
dirpos1 = dirpos2;
}
std::string makmodel(filename, dirpos1 + 1, lastdot - (dirpos1 + 1) );
const std::string makmodel(filename, dirpos1 + 1, lastdot - (dirpos1 + 1));
std::vector<badPix> bp;
char line[256];
if(fgets(line, sizeof(line), file )) {
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.
if (numparms == 1) { // only one number in first line means, that this is the offset.
offset = x;
} else if(numparms == 2) {
} 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 ) {
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();
const int numPixels = bp.size();
if( numPixels > 0 ) {
bpList[ makmodel ] = bp;
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)
rtengine::DFManager& rtengine::DFManager::getInstance()
{
bpList_t::iterator iter;
bool found = false;
if( !serial.empty() ) {
// search with serial number first
std::ostringstream s;
s << mak << " " << mod << " " << serial;
iter = bpList.find( s.str() );
if( iter != bpList.end() ) {
found = true;
}
if( settings->verbose ) {
if(found) {
printf("%s.badpixels found\n", s.str().c_str());
} else {
printf("%s.badpixels not found\n", s.str().c_str());
}
}
}
if(!found) {
// search without serial number
std::ostringstream s;
s << mak << " " << mod;
iter = bpList.find( s.str() );
if( iter != bpList.end() ) {
found = true;
}
if( settings->verbose ) {
if(found) {
printf("%s.badpixels found\n", s.str().c_str());
} else {
printf("%s.badpixels not found\n", s.str().c_str());
}
}
}
if(!found) {
return nullptr;
} else {
return &(iter->second);
}
static DFManager instance;
return instance;
}
// Global variable
DFManager dfm;
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;

View File

@ -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:
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);
static DFManager& getInstance();
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 );
void init(const Glib::ustring& pathname);
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;
private:
DFManager();
~DFManager();
class Implementation;
const std::unique_ptr<Implementation> implementation;
};
extern DFManager dfm;
}

View File

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

View File

@ -617,6 +617,7 @@ struct local_params {
float laplacexp;
float balanexp;
float linear;
int fullim;
int expmet;
int softmet;
int blurmet;
@ -895,7 +896,15 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall
lp.laplacexp = locallab.spots.at(sp).laplacexp;
lp.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;
lp.showmaskcolmet = llColorMask;
@ -3316,7 +3325,7 @@ void ImProcFunctions::ciecamloc_02float(const struct local_params& lp, int sp, L
}
}
}
//others "Lab" threatment...to adapt
//others "Lab" treatment...to adapt
if(wavcurvejz || mjjz != 0.f || lp.mCjz != 0.f) {//local contrast wavelet and clarity
#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 &yend, int cx, int cy)
void optfft(int N_fftwsize, int &bfh, int &bfw, int &bfhr, int &bfwr, struct local_params& lp, int H, int W, int &xstart, int &ystart, int &xend, int &yend, int cx, int cy, int fulima)
{
int ftsizeH = 1;
int 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) {
@ -8335,6 +8355,31 @@ void optfft(int N_fftwsize, int &bfh, int &bfw, int &bfhr, int &bfwr, struct loc
break;
}
}
if(fulima == 2) {// if full image, the ftsizeH and ftsizeW is a bit larger (about 10 to 200 pixels) than the image dimensions so that it is fully processed (consumes a bit more resources)
for (int ftfu = 0; ftfu < N_fftwsize; ftfu++) { //find best values
if (fftw_size[ftfu] <= (H + deltah)) {
ftsizeH = fftw_size[ftfu];
break;
}
}
for (int ftfu = 0; ftfu < N_fftwsize; ftfu++) { //find best values
if (fftw_size[ftfu] <= (W + deltaw)) {
ftsizeW = fftw_size[ftfu];
break;
}
}
}
if (settings->verbose) {
if(fulima == 2) {
printf("Full image: ftsizeWF=%i ftsizeH=%i\n", ftsizeW, ftsizeH);
} else {
printf("ftsizeW=%i ftsizeH=%i\n", ftsizeW, ftsizeH);
}
}
//optimize with size fftw
bool reduW = 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);

View File

@ -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;
}
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
}

View File

@ -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,
@ -89,7 +93,7 @@ enum ProcEventCode {
EvCrop = 63,
EvCACorr = 64,
EvHREnabled = 65,
obsolete_66 = 66, //obsolete
obsolete_66 = 66, // obsolete
EvHRMethod = 67,
EvWProfile = 68,
EvOProfile = 69,
@ -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,

View File

@ -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);

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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);

View File

@ -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);
}

View File

@ -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_;

View File

@ -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()) );

View File

@ -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
};

View File

@ -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();

View File

@ -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

View File

@ -41,12 +41,12 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, "icm", M("TP_ICM_LABEL")), iuncha
EvICMprimariMethod = m->newEvent(GAMMA, "HISTORY_MSG_ICM_OUTPUT_PRIMARIES");
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;

View File

@ -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;

View File

@ -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)
{

View File

@ -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;

View File

@ -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;

View File

@ -2427,7 +2427,7 @@ LocallabContrast::LocallabContrast():
deltad(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DELTAD"), -3., 3., 0.1, 0.))),//, Gtk::manage(new RTImage("circle-black-small")), Gtk::manage(new RTImage("circle-white-small"))))),
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"));

View File

@ -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;

View File

@ -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")) {

View File

@ -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;

View File

@ -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;

View File

@ -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");

View File

@ -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);
}

View File

@ -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");

View File

@ -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;

View File

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

View File

@ -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);

View File

@ -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
View File

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

View File

@ -3,10 +3,14 @@
<dict>
<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 />

View File

@ -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:"

View File

@ -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