diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 6b286b68b..0d3c76399 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -10,8 +10,10 @@ on: branches: - dev workflow_dispatch: + env: - publish_pre_dev_labels: '["Beep6581:ladenoise_improv"]' + publish_pre_dev_labels: '[]' + jobs: build: runs-on: ubuntu-20.04 @@ -21,7 +23,7 @@ jobs: build_type: [release] steps: - name: Checkout source - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 @@ -30,7 +32,21 @@ jobs: echo "Running apt update." sudo apt update echo "Installing dependencies with apt." - DEBIAN_FRONTEND=noninteractive sudo apt install -y cmake libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev liblensfun-bin + DEBIAN_FRONTEND=noninteractive sudo apt install -y cmake libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev liblensfun-bin libexpat1-dev libbrotli-dev zlib1g-dev libinih-dev + + - name: Install Exiv2 + run: | + EXIV2_VERSION='v0.28.0' + echo "Cloning Exiv2 $EXIV2_VERSION." + git clone --depth 1 --branch "$EXIV2_VERSION" https://github.com/Exiv2/exiv2.git ext/exiv2 + + echo "Configuring build." + mkdir ext/exiv2/build + cd ext/exiv2/build + cmake -DCMAKE_BUILD_TYPE=Release -DEXIV2_ENABLE_BMFF=ON .. + + echo "Building and installing." + sudo make -j$(nproc) install - name: Configure build run: | @@ -90,7 +106,7 @@ jobs: - name: Restore AppImage tools from cache id: appimage-tools-cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: key: appimage-tools-1 path: | @@ -113,6 +129,9 @@ jobs: - name: Package AppImage working-directory: ./build run: | + echo "LD_LIBRARY_PATH is '$LD_LIBRARY_PATH'. Adding /usr/local/lib." + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" + echo "Creating artifact name." if [ '${{github.ref_type}}' == 'tag' ]; then ARTIFACT_NAME="RawTherapee_${REF_NAME_FILTERED}_${{matrix.build_type}}" @@ -140,7 +159,7 @@ jobs: echo "ARTIFACT_NAME=$ARTIFACT_NAME" >> $GITHUB_ENV - name: Upload artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: ${{env.ARTIFACT_NAME}}.AppImage path: ${{github.workspace}}/build/${{env.ARTIFACT_NAME}}.AppImage diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index b90d30e27..d3b3244b4 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -35,7 +35,7 @@ jobs: echo "Running apt update." sudo apt update echo "Installing dependencies with apt." - DEBIAN_FRONTEND=noninteractive sudo apt install -y cmake libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev liblensfun-bin + DEBIAN_FRONTEND=noninteractive sudo apt install -y cmake libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev liblensfun-bin libexiv2-dev - name: Configure build run: | diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 3348d48b9..992bf4db3 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -10,6 +10,7 @@ on: branches: - dev workflow_dispatch: + jobs: build: runs-on: macos-11 @@ -21,7 +22,7 @@ jobs: mkdir build date +%s > build/stamp brew uninstall --ignore-dependencies libtiff - brew install libtiff gtk+3 gtkmm3 gtk-mac-integration adwaita-icon-theme libsigc++@2 little-cms2 libiptcdata fftw lensfun expat pkgconfig llvm shared-mime-info | tee -a depslog + brew install libtiff gtk+3 gtkmm3 gtk-mac-integration adwaita-icon-theme libsigc++@2 little-cms2 libiptcdata fftw lensfun expat pkgconfig llvm shared-mime-info exiv2 | tee -a depslog date -u echo "----====Pourage====----" cat depslog | grep Pouring diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index bdcd98c1c..8b73d7548 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -10,11 +10,13 @@ on: branches: - dev workflow_dispatch: + env: - publish_pre_dev_labels: '["Beep6581:ladenoise_improv"]' + publish_pre_dev_labels: '[]' + jobs: build: - runs-on: windows-2022 + runs-on: windows-latest defaults: run: shell: msys2 {0} @@ -24,7 +26,7 @@ jobs: build_type: [release, debug] steps: - name: Checkout source - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 @@ -47,11 +49,12 @@ jobs: mingw-w64-x86_64-fftw mingw-w64-x86_64-lensfun mingw-w64-x86_64-libiptcdata + mingw-w64-x86_64-exiv2 - name: Configure build run: | export REF_NAME_FILTERED="$(echo '${{github.ref_name}}' | sed 's/[^A-z0-9_.-]//g')" - + if [ '${{github.ref_type}}' == 'tag' ]; then export CACHE_SUFFIX="" else @@ -198,14 +201,14 @@ jobs: 7z a -tzip "%ARTIFACT_NAME%.zip" "./%ARTIFACT_NAME%" - name: Upload artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: ${{env.ARTIFACT_NAME}} path: build\${{env.ARTIFACT_NAME}} - name: Upload installer if: ${{matrix.build_type == 'release' && (github.ref_type == 'tag' || github.ref_name == 'dev')}} - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: ${{env.ARTIFACT_NAME}}.exe path: build\${{env.ARTIFACT_NAME}}.exe diff --git a/.gitignore b/.gitignore index fc65c877c..e67dc3511 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,8 @@ .settings .directory .vscode +.DS_Store +.idea CMakeCache.txt CMakeFiles @@ -23,7 +25,6 @@ Release rtdata/rawtherapee.desktop rtengine/librtengine.a -rtexif/librtexif.a rtgui/config.h rtgui/version.h rtgui/rawtherapee @@ -43,4 +44,3 @@ clean *.tar *.xz *.zip - diff --git a/CMakeLists.txt b/CMakeLists.txt index 92888424c..abb86a108 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,7 +46,7 @@ endif() # Warning for GCC vectorization issues, which causes problems #5749 and #6384: if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "10.0" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "10.2") - message(STATUS "WARNING: gcc ${CMAKE_CXX_COMPILER_VERSION} is known to miscompile RawTherapee when using -ftree-loop-vectorize, forcing the option to be off") + message(STATUS "WARNING: gcc ${CMAKE_CXX_COMPILER_VERSION} is known to miscompile RawTherapee when using -ftree-loop-vectorize, forcing the option to be off") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-tree-loop-vectorize") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-tree-loop-vectorize") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "11.0") @@ -497,6 +497,31 @@ pkg_check_modules(SIGC REQUIRED sigc++-2.0>=2.3.1) pkg_check_modules(LENSFUN REQUIRED lensfun>=0.2) pkg_check_modules(RSVG REQUIRED librsvg-2.0>=2.40) +# Require exiv2 >= 0.24 to make sure everything we need is available +#find_package(Exiv2 0.24 REQUIRED) +pkg_check_modules(EXIV2 REQUIRED exiv2>=0.24) +#include_directories(SYSTEM ${Exiv2_INCLUDE_DIRS}) +#list(APPEND LIBS ${EXIV2_LIBRARIES}) +add_definitions(${EXIV2_DEFINITIONS}) +set(_exiv2_libs ${EXIV2_LIBRARIES}) +set(EXIV2_LIBRARIES "") +foreach(l ${_exiv2_libs}) + set(_el "_el-NOTFOUND") + if(EXIV2_LIBRARY_DIRS) + message(STATUS "searching for library ${l} in ${EXIV2_LIBRARY_DIRS}") + find_library(_el ${l} PATHS ${EXIV2_LIBRARY_DIRS} NO_DEFAULT_PATH) + if(NOT _el) + message(STATUS " NOT FOUND, searching again in default path") + find_library(_el ${l}) + endif() + else() + message(STATUS "searching for library ${l}") + find_library(_el ${l})# PATHS ${EXIV2_LIBRARY_DIRS}) + endif() + message(STATUS " result: ${_el}") + set(EXIV2_LIBRARIES ${EXIV2_LIBRARIES} ${_el}) +endforeach() + if(WIN32) add_definitions(-DWIN32) add_definitions(-D_WIN32) @@ -540,6 +565,13 @@ if(WITH_MYFILE_MMAP) add_definitions(-DMYFILE_MMAP) endif() +# Atomic is required in some builds: #6821 +find_package(ATOMIC) +if(ATOMIC_FOUND) + target_link_libraries(rth ${ATOMIC_LIBRARIES}) + target_link_libraries(rth-cli ${ATOMIC_LIBRARIES}) +endif() + if(WITH_LTO) # Using LTO with older versions of binutils requires setting extra flags set(BINUTILS_VERSION_MININUM "2.29") @@ -606,6 +638,7 @@ if(OPENMP_FOUND) set(CMAKE_REQUIRED_INCLUDES ${FFTW3F_INCLUDE_DIRS}) set(CMAKE_REQUIRED_LIBRARIES) foreach(l ${FFTW3F_LIBRARIES}) + set(_f "_f-NOTFOUND") find_library(_f ${l} PATHS ${FFTW3F_LIBRARY_DIRS}) set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${_f}) endforeach() @@ -790,13 +823,18 @@ foreach(l ${LENSFUN_LIBRARIES}) # the NO_DEFAULT_PATH is to make sure we find the lensfun version we # want, and not the system's one (e.g. if we have a custom version # installed in a non-standard location) + set(_l "_l-NOTFOUND") + message(STATUS "searching for library ${l} in ${LENSFUN_LIBRARY_DIRS}") find_library(_l ${l} PATHS ${LENSFUN_LIBRARY_DIRS} NO_DEFAULT_PATH) else() # LENSFUN_LIBRARY_DIRS can be empty if lensfun is installed in the # default path. In this case, adding NO_DEFAULT_PATH would make # find_library fail... + set(_l "_l-NOTFOUND") + message(STATUS "searching for library ${l}") find_library(_l ${l}) endif() + message(STATUS " result: ${_l}") set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${_l}) endforeach() check_cxx_source_compiles( @@ -838,7 +876,6 @@ else() CACHE INTERNAL "" FORCE) endif() -add_subdirectory(rtexif) add_subdirectory(rtengine) add_subdirectory(rtgui) add_subdirectory(rtdata) diff --git a/clean.bat b/clean.bat index 6a549821e..7196af4b0 100644 --- a/clean.bat +++ b/clean.bat @@ -4,24 +4,19 @@ del .\install_manifest.txt rmdir /s /q .\CMakeFiles rmdir /s /q .\rtengine\CMakeFiles -rmdir /s /q .\rtexif\CMakeFiles rmdir /s /q .\rtgui\CMakeFiles rmdir /s /q .\rtdata\CMakeFiles del .\cmake_* del .\rtengine\cmake_* -del .\rtexif\cmake_* del .\rtgui\cmake_* del .\rtdata\cmake_* del .\Makefile del .\rtengine\Makefile -del .\rtexif\Makefile del .\rtgui\Makefile del .\rtdata\Makefile del .\rtengine\librtengine.so del .\rtengine\librtengine.a del .\rtgui\rawtherapee -del .\rtexif\librtexif.so -del .\rtexif\librtexif.a diff --git a/cmake/modules/FindATOMIC.cmake b/cmake/modules/FindATOMIC.cmake new file mode 100644 index 000000000..1669983c3 --- /dev/null +++ b/cmake/modules/FindATOMIC.cmake @@ -0,0 +1,36 @@ +include(CheckCXXSourceCompiles) + +set(ATOMIC_CXX_TEST_SOURCE +" +#include +int main() { + std::atomic b(false); + std::atomic i(0); + std::atomic ui(0); + b.exchange(true); + ++i; + return ++ui; +} +") + +set(SAFE_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}") +list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "atomic") + +check_cxx_source_compiles("${ATOMIC_CXX_TEST_SOURCE}" HAVE_CXX_ATOMICS_WITHOUT_LIB) + +if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB) + list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") + check_cxx_source_compiles("${ATOMIC_CXX_TEST_SOURCE}" HAVE_CXX_ATOMICS_WITH_LIB) + if (NOT HAVE_CXX_ATOMICS_WITH_LIB) + message(FATAL_ERROR "libatomic support needed for std::atomic<> but not +found.") + endif() + set(ATOMIC_LIBRARIES "atomic") + set(ATOMIC_FOUND ON) +endif() + +set(CMAKE_REQUIRED_LIBRARIES "${SAFE_CMAKE_REQUIRED_LIBRARIES}") +unset(SAFE_CMAKE_REQUIRED_LIBRARIES) + +mark_as_advanced(ATOMIC_LIBRARIES) +mark_as_advanced(ATOMIC_FOUND) diff --git a/rtdata/images/svg/add.svg b/rtdata/images/svg/add.svg index c45f9f584..41fa7cc39 100644 --- a/rtdata/images/svg/add.svg +++ b/rtdata/images/svg/add.svg @@ -17,7 +17,7 @@ inkscape:export-filename="/tmp/template.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" - inkscape:version="0.92.2 2405546, 2018-03-11" + inkscape:version="0.91 r13725" sodipodi:docname="add.svg"> image/svg+xml - + Maciej Dworak @@ -120,8 +120,8 @@ style="opacity:0.7;fill:none;fill-opacity:0.53333285;fill-rule:nonzero;stroke:#2a7fff;stroke-width:1.99999988;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" /> diff --git a/rtdata/images/svg/box.svg b/rtdata/images/svg/box.svg new file mode 100644 index 000000000..2ebee4b8c --- /dev/null +++ b/rtdata/images/svg/box.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/edit-small.svg b/rtdata/images/svg/edit-small.svg new file mode 100644 index 000000000..6306f06df --- /dev/null +++ b/rtdata/images/svg/edit-small.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/edit.svg b/rtdata/images/svg/edit.svg new file mode 100644 index 000000000..71f3d0b06 --- /dev/null +++ b/rtdata/images/svg/edit.svg @@ -0,0 +1,136 @@ + + + + + + + + + + + + image/svg+xml + + + + + Maciej Dworak + + + + + + + + RawTherapee icon. + + + + + + + + + + + + + + + + + + + + + diff --git a/rtdata/images/svg/tick.svg b/rtdata/images/svg/tick.svg index 8ab7a2e27..dd4ab4bdd 100644 --- a/rtdata/images/svg/tick.svg +++ b/rtdata/images/svg/tick.svg @@ -17,8 +17,8 @@ inkscape:export-filename="/tmp/template.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" - inkscape:version="0.92.2 2405546, 2018-03-11" - sodipodi:docname="tick-large.svg"> + inkscape:version="0.91 r13725" + sodipodi:docname="tick.svg"> image/svg+xml - + Maciej Dworak @@ -103,7 +103,7 @@ sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" id="path2996-6" - d="M 4.6666624,10.166665 8.3333305,13.833335 19.333336,2.833329 23.000006,6.4999972 8.3333305,21.166671 0.99999442,13.833335 Z" + d="M 6.0000005,10.299997 9.0000007,13.533332 18.000004,3.833329 21.000006,7.066663 9.0000007,20 3,13.533332 Z" style="opacity:0.7;fill:#2a7fff;fill-opacity:1;stroke:none;stroke-width:2.30911016" /> diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala index 4485966ff..58621b7d6 100644 --- a/rtdata/languages/Catala +++ b/rtdata/languages/Catala @@ -1,4 +1,6 @@ -#01 2009-10-10 JMG +#001 2009-10-10 JMG +#100 +#101 @LANGUAGE_DISPLAY_NAME=Català ABOUT_TAB_BUILD;Versió ABOUT_TAB_CREDITS;Crèdits @@ -123,19 +125,19 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Mostra imatges etiqueta verda.\nDrecera: Alt- FILEBROWSER_SHOWCOLORLABEL4HINT;Mostra imatges etiqueta blava.\nDrecera: Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;Mostra imatges etiqueta porpra.\nDrecera: Alt-5 FILEBROWSER_SHOWDIRHINT;Neteja tots els filtres.\nDrecera: D -FILEBROWSER_SHOWEDITEDHINT;Mostra imatges editades.\nDrecera: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Mostra imatges no editades.\nDrecera: 6 +FILEBROWSER_SHOWEDITEDHINT;Mostra imatges editades.\nDrecera: Shift-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Mostra imatges no editades.\nDrecera: Shift-6 FILEBROWSER_SHOWEXIFINFO;Mostra dades EXIF.\nDrecera: i -FILEBROWSER_SHOWRANK1HINT;Exposa imatges d' 1 estrella.\nDrecera: 1 -FILEBROWSER_SHOWRANK2HINT;Exposa imatges de 2 estrelles.\nDrecera: 2 -FILEBROWSER_SHOWRANK3HINT;Exposa imatges de 3 estrelles.\nDrecera: 3 -FILEBROWSER_SHOWRANK4HINT;Exposa imatges de 4 estrelles.\nDrecera: 4 -FILEBROWSER_SHOWRANK5HINT;Exposa imatges de 5 estrelles.\nDrecera: 5 +FILEBROWSER_SHOWRANK1HINT;Exposa imatges d' 1 estrella.\nDrecera: Shift-1 +FILEBROWSER_SHOWRANK2HINT;Exposa imatges de 2 estrelles.\nDrecera: Shift-2 +FILEBROWSER_SHOWRANK3HINT;Exposa imatges de 3 estrelles.\nDrecera: Shift-3 +FILEBROWSER_SHOWRANK4HINT;Exposa imatges de 4 estrelles.\nDrecera: Shift-4 +FILEBROWSER_SHOWRANK5HINT;Exposa imatges de 5 estrelles.\nDrecera: Shift-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;Mostra últimes imatges desades.\nDrecera: Alt-7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Mostra imatges no recentment desades.\nDrecera: Alt-6 FILEBROWSER_SHOWTRASHHINT;Veure què hi ha a la paperera.\nDrecera: Ctrl-t FILEBROWSER_SHOWUNCOLORHINT;Mostra imatges sense etiqueta de color.\nDrecera: Alt-0 -FILEBROWSER_SHOWUNRANKHINT;Mostra imatges sense rang.\nDrecera: 0 +FILEBROWSER_SHOWUNRANKHINT;Mostra imatges sense rang.\nDrecera: Shift-0 FILEBROWSER_THUMBSIZE;Tamany minifoto FILEBROWSER_ZOOMINHINT;Engrandir minifoto.\nDrecera: + FILEBROWSER_ZOOMOUTHINT;Reduïr minifoto.\nDrecera: - @@ -906,8 +908,13 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !DYNPROFILEEDITOR_PROFILE;Processing Profile !EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool. !EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve. +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 !EXIFFILTER_IMAGETYPE;Image type -!EXIFPANEL_SHOWALL;Show all +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !EXPORT_BYPASS;Processing steps to bypass !EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels !EXPORT_BYPASS_RAW_LMMSE_ITERATIONS;Bypass [raw] LMMSE Enhancement Steps @@ -938,18 +945,20 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !FILEBROWSER_POPUPRANK5;Rank 5 ***** !FILEBROWSER_POPUPREMOVE;Delete permanently !FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version -!FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: Shift-1 -!FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: Shift-2 -!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3 -!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4 -!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5 +!FILEBROWSER_POPUPSORTBY;Sort Files +!FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: 1 +!FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: 2 +!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: 3 +!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: 4 +!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: 5 !FILEBROWSER_RESETDEFAULTPROFILE;Reset to default !FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash. !FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions. -!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: Shift-0 +!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: 0 !FILECHOOSER_FILTER_ANY;All files !FILECHOOSER_FILTER_COLPROF;Color profiles (*.icc) !FILECHOOSER_FILTER_CURVE;Curve files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !FILECHOOSER_FILTER_LCP;Lens correction profiles !FILECHOOSER_FILTER_PP;Processing profiles !FILECHOOSER_FILTER_SAME;Same format as current photo @@ -963,6 +972,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !GENERAL_EDIT;Edit !GENERAL_HELP;Help !GENERAL_OPEN;Open +!GENERAL_OTHER;Other !GENERAL_RESET;Reset !GENERAL_SAVE_AS;Save as... !GENERAL_SLIDER;Slider @@ -1300,23 +1310,23 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_494;Capture Sharpening !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -1324,7 +1334,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -1383,16 +1393,16 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -1423,7 +1433,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -1446,7 +1456,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -1460,11 +1470,11 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -1477,7 +1487,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -1560,7 +1570,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -1579,19 +1589,19 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -1627,7 +1637,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -1660,7 +1670,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -1685,7 +1695,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -1699,7 +1709,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -1711,10 +1721,10 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -1828,7 +1838,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -1919,7 +1929,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -1971,18 +1981,22 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold !HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual demosaic - Contrast threshold !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input !HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HISTMATCHING;Auto-matched tone curve !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries @@ -2002,6 +2016,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -2047,6 +2063,11 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -2086,6 +2107,23 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !ICCPROFCREATOR_COPYRIGHT;Copyright: !ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to 'RawTherapee, CC0'. @@ -2199,6 +2237,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !PARTIALPASTE_FILMNEGATIVE;Film negative !PARTIALPASTE_FILMSIMULATION;Film simulation !PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_LOCALCONTRAST;Local contrast !PARTIALPASTE_LOCALLAB;Local Adjustments @@ -2220,6 +2259,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_SPOT;Spot removal !PARTIALPASTE_TM_FATTAL;Dynamic range compression +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer !PREFERENCES_APPEARANCE;Appearance !PREFERENCES_APPEARANCE_COLORPICKERFONT;Color picker font !PREFERENCES_APPEARANCE_CROPMASKCOLOR;Crop mask color @@ -2237,6 +2277,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !PREFERENCES_CACHECLEAR_ALLBUTPROFILES;Clear all cached files except for cached processing profiles: !PREFERENCES_CACHECLEAR_ONLYPROFILES;Clear only cached processing profiles: !PREFERENCES_CACHECLEAR_SAFETY;Only files in the cache are cleared. Processing profiles stored alongside the source images are not touched. +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CHUNKSIZES;Tiles per thread !PREFERENCES_CHUNKSIZE_RAW_AMAZE;AMaZE demosaic !PREFERENCES_CHUNKSIZE_RAW_CA;Raw CA correction @@ -2275,6 +2316,11 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Compact toolbars in File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. @@ -2284,7 +2330,16 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. !PREFERENCES_LANG;Language +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -2316,12 +2371,34 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show Filmstrip toolbar !PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_FAVORITES;Favorites !PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling !PROFILEPANEL_GLOBALPROFILES;Bundled profiles !PROFILEPANEL_MODE_TOOLTIP;Processing profile fill mode.\n\nButton pressed: partial profiles will be converted to full profiles; the missing values will be replaced with hard-coded defaults.\n\nButton released: profiles will be applied as they are, altering only those values which they contain. @@ -2350,11 +2427,19 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) !SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -2449,7 +2534,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM corresponds to the color of a stimulus in relation to its own brightness. It differs from L*a*b* and RGB saturation. !TP_COLORAPP_CHROMA_TOOLTIP;Chroma in CIECAM corresponds to the color of a stimulus relative to the clarity of a stimulus that appears white under identical conditions. It differs from L*a*b* and RGB chroma. -!TP_COLORAPP_CIECAT_DEGREE;Adaptation +!TP_COLORAPP_CIECAT_DEGREE;Chromatic Adaptation Scene +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_CONTRAST;Contrast (J) !TP_COLORAPP_CONTRAST_Q;Contrast (Q) !TP_COLORAPP_CONTRAST_Q_TOOLTIP;Contrast (Q) in CIECAM is based on brightness. It differs from L*a*b* and RGB contrast. @@ -2515,6 +2601,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_COLORAPP_TCMODE_LIGHTNESS;Lightness !TP_COLORAPP_TCMODE_SATUR;Saturation !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_TONECIE;Use CIECAM for tone mapping !TP_COLORAPP_TONECIE_TOOLTIP;If this option is disabled, tone mapping is done in L*a*b* space.\nIf this option is enabled, tone mapping is done using CIECAM02.\nThe Tone Mapping tool must be enabled for this setting to take effect. @@ -2671,9 +2758,11 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_FILMNEGATIVE_LABEL;Film Negative !TP_FILMNEGATIVE_OUT_LEVEL;Output level !TP_FILMNEGATIVE_PICK;Pick neutral spots +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_RED;Red ratio !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. !TP_FILMSIMULATION_LABEL;Film Simulation !TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? @@ -2681,6 +2770,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_FILMSIMULATION_ZEROCLUTSFOUND;Set HaldCLUT directory in Preferences !TP_FLATFIELD_CLIPCONTROL;Clip control !TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Clip control avoids clipped highlights caused by applying the flat field. If there are already clipped highlights before applying the flat field, value 0 is used. +!TP_FLATFIELD_FROMMETADATA;From Metadata !TP_GENERAL_11SCALE_TOOLTIP;The effects of this tool are only visible or only accurate at a preview scale of 1:1. !TP_GRADIENT_CENTER;Center !TP_GRADIENT_CENTER_X;Center X @@ -2694,8 +2784,10 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_GRADIENT_LABEL;Graduated Filter !TP_GRADIENT_STRENGTH;Strength !TP_GRADIENT_STRENGTH_TOOLTIP;Filter strength in stops. +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_ENA_TOOLTIP;Could be activated by Auto Levels. !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_APPLYBASELINEEXPOSUREOFFSET;Baseline exposure !TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Employ the embedded DCP baseline exposure offset. The setting is only available if the selected DCP has one. !TP_ICM_APPLYHUESATMAP;Base table @@ -2707,6 +2799,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !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_GAMUT;Gamut control !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_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 !TP_ICM_NEUTRAL;Reset @@ -2748,6 +2841,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -2797,7 +2891,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -2823,7 +2917,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -2856,6 +2950,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -2882,7 +2978,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -2917,8 +3013,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -2945,13 +3041,15 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -2987,7 +3085,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -2995,12 +3093,12 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -3027,6 +3125,11 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3115,6 +3218,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3175,11 +3280,13 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3211,7 +3318,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3236,7 +3343,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3286,7 +3393,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3379,7 +3486,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3391,7 +3498,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3480,6 +3587,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3806,6 +3914,16 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;Dynamic Range Compression !TP_TM_FATTAL_THRESHOLD;Detail +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_WAVELET_1;Level 1 !TP_WAVELET_2;Level 2 !TP_WAVELET_3;Level 3 @@ -4057,15 +4175,66 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_WAVELET_WAVOFFSET;Offset !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement !TP_WBALANCE_EQBLUERED;Blue/Red equalizer !TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behavior of 'white balance' by modulating the blue/red balance.\nThis can be useful when shooting conditions:\na) are far from the standard illuminant (e.g. underwater),\nb) are far from conditions where calibrations were performed,\nc) where the matrices or ICC profiles are unsuitable. +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. !TP_WBALANCE_PICKER;Pick -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. !TP_WBALANCE_TEMPBIAS;AWB temperature bias -!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'. +!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'.\n\nYou can use "Awb temperature bias" to adjust the "Temperature correlation" results. Each movement of this command brings a new calculation of temperature, tint and correlation. !TP_WBALANCE_WATER1;UnderWater 1 !TP_WBALANCE_WATER2;UnderWater 2 !TP_WBALANCE_WATER_HEADER;UnderWater !ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: f +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified) index e4e89fed2..772c03d67 100644 --- a/rtdata/languages/Chinese (Simplified) +++ b/rtdata/languages/Chinese (Simplified) @@ -1,12 +1,14 @@ -#00 Chinese (Simplified) -#01 2008-02-13 Forrest Sun -#02 2008-11-06 Yang Gao (grantyale) -#03 2013-10-20 Jiero -#04 2014-10-24 Jie Luo -#05 2017-09-18 Chongnuo Ji -#06 2020-08-11 十一元人民币 -#07 2021-09-24 十一元人民币 -#08 2022-07-26 十一元人民币 +#000 Chinese (Simplified) +#001 2008-02-13 Forrest Sun +#002 2008-11-06 Yang Gao (grantyale) +#003 2013-10-20 Jiero +#004 2014-10-24 Jie Luo +#005 2017-09-18 Chongnuo Ji +#006 2020-08-11 十一元人民币 +#007 2021-09-24 十一元人民币 +#008 2022-07-26 十一元人民币 +#100 +#101 @LANGUAGE_DISPLAY_NAME=简体中文 ABOUT_TAB_BUILD;版本 ABOUT_TAB_CREDITS;致谢名单 @@ -2436,6 +2438,15 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown +!FILEBROWSER_POPUPSORTBY;Sort Files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files +!GENERAL_OTHER;Other !HISTORY_MSG_112;--unused-- !HISTORY_MSG_137;Black level - Green 1 !HISTORY_MSG_138;Black level - Red @@ -2522,17 +2533,17 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_466;--unused-- !HISTORY_MSG_467;--unused-- !HISTORY_MSG_470;--unused-- -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_517;Local - Enable super !HISTORY_MSG_527;Local - Color Inverse !HISTORY_MSG_532;Local - Exp black @@ -2553,16 +2564,16 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_577;Local - cbdl chroma !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope -!HISTORY_MSG_581;Local - deNoise lum f 1 -!HISTORY_MSG_582;Local - deNoise lum c -!HISTORY_MSG_583;Local - deNoise lum detail -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_598;Local - Local contrast scope @@ -2587,7 +2598,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_634;Local - radius color !HISTORY_MSG_635;Local - radius Exp @@ -2613,11 +2624,11 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -2629,7 +2640,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_672;Local - cbdl mask CL !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -2711,7 +2722,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_769;Local - Grain Scale !HISTORY_MSG_770;Local - Color Mask contrast curve @@ -2728,17 +2739,17 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_799;Local - Color RGB ToneCurve !HISTORY_MSG_800;Local - Color ToneCurve Method @@ -2773,7 +2784,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -2803,7 +2814,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -2828,7 +2839,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -2842,7 +2853,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -2854,10 +2865,10 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_928;Local - Common color mask !HISTORY_MSG_929;Local - Mask common scope @@ -2966,7 +2977,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -3033,7 +3044,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -3058,13 +3069,17 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_BLURWAV;Blur luminance !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries @@ -3079,6 +3094,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_ICM_WORKING_SLOPE;TRC - Slope !HISTORY_MSG_ICM_WORKING_TRC_METHOD;TRC method !HISTORY_MSG_ILLUM;CAL - SC - Illuminant +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_PERSP_CAM_ANGLE;Perspective - Camera !HISTORY_MSG_PERSP_CAM_FL;Perspective - Camera !HISTORY_MSG_PERSP_CAM_SHIFT;Perspective - Camera @@ -3098,6 +3115,11 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_SPOT_ENTRY;Spot removal - Point modif. !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -3132,6 +3154,23 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to 'RawTherapee, CC0'. !ICCPROFCREATOR_DESCRIPTION_ADDPARAM;Append gamma and slope values to the description !ICCPROFCREATOR_DESCRIPTION_TOOLTIP;Leave empty to set the default description. @@ -3199,8 +3238,11 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). !MAIN_MSG_IMAGEUNPROCESSED;This command requires all selected images to be queue-processed first. !MAIN_TOOLTIP_BEFOREAFTERLOCK;Lock / Unlock the Before view\n\nLock: keep the Before view unchanged.\nUseful to evaluate the cumulative effect of multiple tools.\nAdditionally, comparisons can be made to any state in the History.\n\nUnlock: the Before view will follow the After view one step behind, showing the image before the effect of the currently used tool. +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_RETINEX;Retinex +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer !PARTIALPASTE_VIBRANCE;Vibrance +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CHUNKSIZE_RAW_XT;Xtrans demosaic !PREFERENCES_CIE;Ciecam !PREFERENCES_CUSTPROFBUILD;Custom Processing Profile Builder @@ -3210,16 +3252,60 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !PREFERENCES_CUSTPROFBUILDKEYFORMAT_TID;TagID !PREFERENCES_EXTEDITOR_BYPASS_OUTPUT_PROFILE;Bypass output profile !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional +!PREFERENCES_TAB_FAVORITES;Favorites +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PROGRESSDLG_PROFILECHANGEDINBROWSER;Processing profile changed in browser !SAMPLEFORMAT_1;8-bit unsigned !SAMPLEFORMAT_2;16-bit unsigned !SAMPLEFORMAT_4;24-bit LogLuv !SAMPLEFORMAT_8;32-bit LogLuv +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. !SHCSELECTOR_TOOLTIP;Click right mouse button to reset the position of those 3 sliders. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -3243,6 +3329,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_BWMIX_RGB_TOOLTIP;Mix the RGB channels. Use presets for guidance.\nPay attention to negative values that may cause artifacts or erratic behavior. !TP_COLORAPP_ADAPSCEN_TOOLTIP;Corresponds to the luminance in candelas per m2 at the time of shooting, calculated automatically from the exif data. !TP_COLORAPP_CATMET_TOOLTIP;Classic - traditional CIECAM operation. The chromatic adaptation transforms are applied separately on 'Scene conditions' and basic illuminant on the one hand, and on basic illuminant and 'Viewing conditions' on the other.\n\nSymmetric – The chromatic adaptation is based on the white balance. The 'Scene conditions', 'Image adjustments' and 'Viewing conditions' settings are neutralized.\n\nMixed – Same as the 'Classic' option but in this case, the chromatic adaptation is based on the white balance. +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). !TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). !TP_COLORAPP_GEN_TOOLTIP;This module is based on the CIECAM color appearance models, which were designed to better simulate how human vision perceives colors under different lighting conditions, e.g. against different backgrounds. It takes into account the environment of each color and modifies its appearance to get as close as possible to human perception. It also adapts the output to the intended viewing conditions (monitor, TV, projector, printer, etc.) so that the chromatic appearance is preserved across the scene and display environments. @@ -3260,6 +3347,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_COLORAPP_MOD16;CAM16 !TP_COLORAPP_SOURCEF_TOOLTIP;Corresponds to the shooting conditions and how to bring the conditions and data back to a 'normal' area. Normal means average or standard conditions and data, i.e. without taking into account CIECAM corrections. !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. !TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. @@ -3278,7 +3366,12 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_DIRPYREQUALIZER_ALGO_TOOLTIP;Fine: closer to the colors of the skin, minimizing the action on other colors\nLarge: avoid more artifacts. !TP_DIRPYREQUALIZER_HUESKIN_TOOLTIP;This pyramid is for the upper part, so far as the algorithm at its maximum efficiency.\nTo the lower part, the transition zones.\nIf you need to move the area significantly to the left or right - or if there are artifacts: the white balance is incorrect\nYou can slightly reduce the zone to prevent the rest of the image is affected. !TP_DIRPYREQUALIZER_TOOLTIP;Attempts to reduce artifacts in the transitions between skin colors (hue, chroma, luma) and the rest of the image. +!TP_FILMNEGATIVE_PICK_SIZE;Size: +!TP_FILMNEGATIVE_REF_SIZE;Size: +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_APPLYBASELINEEXPOSUREOFFSET;Baseline exposure !TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Employ the embedded DCP baseline exposure offset. The setting is only available if the selected DCP has one. !TP_ICM_APPLYHUESATMAP;Base table @@ -3290,6 +3383,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !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_GAMUT;Gamut control !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_INPUTCAMERAICC_TOOLTIP;Use RawTherapee's camera-specific DCP or ICC input color profiles. These profiles are more precise than simpler matrix ones. They are not available for all cameras. These profiles are stored in the /iccprofiles/input and /dcpprofiles folders and are automatically retrieved based on a file name matching to the exact model name of the camera. !TP_ICM_INPUTCAMERA_TOOLTIP;Use a simple color matrix from dcraw, an enhanced RawTherapee version (whichever is available based on camera model) or one embedded in the DNG. @@ -3330,6 +3424,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 !TP_ICM_WORKING_PRIM_SRGB;sRGB @@ -3359,7 +3454,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_LOCALLAB_ACTIV;Luminance only !TP_LOCALLAB_ADJ;Equalizer Color !TP_LOCALLAB_ARTIF_TOOLTIP;ΔE scope threshold increases the range of ΔE scope. High values are for very wide gamut images.\nIncreasing ΔE decay can improve shape detection, but can also reduce the scope. -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -3376,7 +3471,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_LOCALLAB_BLGUID;Guided Filter !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_BLNORM;Normal -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. !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. @@ -3389,6 +3484,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_LOCALLAB_CAMMODE_CAM16;CAM 16 !TP_LOCALLAB_CAMMODE_JZ;Jz Cz Hz !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. !TP_LOCALLAB_CHROMACB_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -3399,7 +3496,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_LOCALLAB_CIELIGHTCONTFRA;Lighting & Contrast !TP_LOCALLAB_CIELIGHTFRA;Lighting !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_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -3422,8 +3519,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -3444,9 +3541,11 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. -!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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance +!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 (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DETAILFRA;Edge detection - DCT -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_ENABLE_MASK;Enable mask !TP_LOCALLAB_ENABLE_MASKAFT;Use all algorithms Exposure !TP_LOCALLAB_ENARETIMASKTMAP_TOOLTIP;If enabled the Mask uses Restored Data after Transmission Map instead of Original data. @@ -3461,17 +3560,17 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_LOCALLAB_EXPCHROMA_TOOLTIP;Use in association with 'Exposure compensation f' and 'Contrast Attenuator f' to avoid desaturating colors. !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. !TP_LOCALLAB_EXPLAPBAL_TOOLTIP;Changes the transformed/original image blend. !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_FATFRAME_TOOLTIP;PDE Fattal – uses the Fattal Tone-mapping algorithm. !TP_LOCALLAB_FATLEVEL;Sigma !TP_LOCALLAB_FEATH_TOOLTIP;Gradient width as a percentage of the Spot diagonal\nUsed by all graduated filters in all tools.\nNo action if a graduated filter hasn't been activated. @@ -3481,6 +3580,11 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_LOCALLAB_GAMCOL_TOOLTIP;Apply a gamma on Luminance L*a*b* datas.\nIf gamma = 3.0 Luminance 'linear' is used. !TP_LOCALLAB_GAMC_TOOLTIP;Apply a gamma on Luminance L*a*b* datas before and after treatment Pyramid 1 and Pyramid 2.\nIf gamma = 3.0 Luminance 'linear' is used. !TP_LOCALLAB_GAMMASK_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_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADGEN_TOOLTIP;Adjusts luminance gradient strength. !TP_LOCALLAB_GRADSTRAB_TOOLTIP;Adjusts chroma gradient strength. @@ -3544,6 +3648,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LEVELBLUR;Maximum blur levels !TP_LOCALLAB_LEVELWAV_TOOLTIP;The Level is automatically adapted to the size of the spot and the preview.\nFrom level 9 size max 512 to level 1 size max = 4. @@ -3586,8 +3692,10 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_LOCALLAB_LOGSURSOUR_TOOLTIP;Changes tones and colors to take into account the Scene conditions.\n\nAverage: Average light conditions (standard). The image will not change.\n\nDim: Dim conditions. The image will become slightly brighter.\n\nDark: Dark conditions. The image will become more bright. !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_LUM;LL - CC +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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_MASKCOM;Common Color Mask @@ -3616,7 +3724,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3640,7 +3748,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3683,7 +3791,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_LOCALLAB_NLDENOISENLPAT_TOOLTIP;Use this slider to adapt the amount of denoise to the size of the objects to be processed. !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLPAT;Maximum patch size !TP_LOCALLAB_NLRAD;Maximum radius size @@ -3738,7 +3846,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_LOCALLAB_SCOPEMASK;Scope (ΔE image mask) !TP_LOCALLAB_SCOPEMASK_TOOLTIP;Enabled if ΔE Image Mask is enabled.\nLow values avoid retouching selected area. !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SHADHMASK_TOOLTIP;Lowers the highlights of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. @@ -3801,6 +3909,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_LOCALLAB_STYPE_TOOLTIP;You can choose between:\nSymmetrical - left handle linked to right, top handle linked to bottom.\nIndependent - all handles are independent. !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3966,6 +4075,16 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_SPOT_ENTRYCHANGED;Point changed +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH !TP_WAVELET_BALCHROM;Equalizer Color !TP_WAVELET_BALLUM;Denoise equalizer White-Black @@ -4073,11 +4192,62 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键:- !TP_WBALANCE_FLUO12;F12 - Philips TL83 !TP_WBALANCE_GTI;GTI !TP_WBALANCE_HMI;HMI +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). !TP_WBALANCE_JUDGEIII;JudgeIII !TP_WBALANCE_LAMP_HEADER;Lamp !TP_WBALANCE_LED_CRS;CRS SP12 WWMR16 !TP_WBALANCE_LED_LSI;LSI Lumelex 2040 +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. !TP_WBALANCE_SOLUX47;Solux 4700K (vendor) !TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery) -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech index 61e6af4bf..2fd2655a9 100644 --- a/rtdata/languages/Czech +++ b/rtdata/languages/Czech @@ -1,51 +1,53 @@ -#00 Czech -#01 2008-01-20 translated by absolution -#02 2008-02-21 updated by mkyral (typos and some missing strings) -#03 2008-04-24 updated by mkyral (for version 2.4m1) -#04 2008-10-28 updated by mkyral (for version 2.4 beta1) -#05 2010-11-25 updated by mkyral (for version 3.0) -#06 2011-03-06 updated by mkyral (default branch) -#07 2011-03-20 updated by mkyral (default branch) -#08 2011-05-01 updated by mkyral -#09 2011-05-18 updated by mkyral -#10 2011-06-04 updated by mkyral -#11 2011-06-12 updated by mkyral -#12 2011-06-16 updated by mkyral -#13 2011-07-03 updated by mkyral -#14 2011-07-08 updated by mkyral -#15 2011-09-04 updated by mkyral -#16 2011-09-06 updated by mkyral -#17 2011-11-12 updated by mkyral -#18 2011-12-29 updated by mkyral -#19 2012-02-22 updated by mkyral -#20 2012-04-28 updated by mkyral -#21 2012-10-10 updated by mkyral -#22 2012-11-27 updated by mkyral -#23 2013-03-12 updated by mkyral -#24 2013-04-12 updated by mkyral -#25 2013-09-12 updated by mkyral -#26 2013-09-17 updated by mkyral -#27 2013-12-09 updated by mkyral -#28 2014-01-07 updated by mkyral -#29 2014-04-08 updated by mkyral -#30 2014-04-30 updated by mkyral -#31 2014-05-12 updated by mkyral -#32 2014-10-24 updated by mkyral -#33 2015-02-22 updated by mkyral -#34 2015-07-09 updated by mkyral -#35 2015-11-24 updated by mkyral -#36 2016-10-18 updated by mkyral -#37 2017-01-10 updated by mkyral -#38 2017-04-26 updated by mkyral -#39 2017-07-21 updated by mkyral -#40 2017-12-13 updated by mkyral -#41 2018-03-03 updated by mkyral -#42 2018-10-24 updated by mkyral -#43 2018-12-04 updated by mkyral -#44 2018-12-13 updated by mkyral -#45 2020-04-20 updated by mkyral -#46 2020-04-21 updated by mkyral -#47 2020-06-02 updated by mkyral +#000 Czech +#001 2008-01-20 translated by absolution +#002 2008-02-21 updated by mkyral (typos and some missing strings) +#003 2008-04-24 updated by mkyral (for version 2.4m1) +#004 2008-10-28 updated by mkyral (for version 2.4 beta1) +#005 2010-11-25 updated by mkyral (for version 3.0) +#006 2011-03-06 updated by mkyral (default branch) +#007 2011-03-20 updated by mkyral (default branch) +#008 2011-05-01 updated by mkyral +#009 2011-05-18 updated by mkyral +#010 2011-06-04 updated by mkyral +#011 2011-06-12 updated by mkyral +#012 2011-06-16 updated by mkyral +#013 2011-07-03 updated by mkyral +#014 2011-07-08 updated by mkyral +#015 2011-09-04 updated by mkyral +#016 2011-09-06 updated by mkyral +#017 2011-11-12 updated by mkyral +#018 2011-12-29 updated by mkyral +#019 2012-02-22 updated by mkyral +#020 2012-04-28 updated by mkyral +#021 2012-10-10 updated by mkyral +#022 2012-11-27 updated by mkyral +#023 2013-03-12 updated by mkyral +#024 2013-04-12 updated by mkyral +#025 2013-09-12 updated by mkyral +#026 2013-09-17 updated by mkyral +#027 2013-12-09 updated by mkyral +#028 2014-01-07 updated by mkyral +#029 2014-04-08 updated by mkyral +#030 2014-04-30 updated by mkyral +#031 2014-05-12 updated by mkyral +#032 2014-10-24 updated by mkyral +#033 2015-02-22 updated by mkyral +#034 2015-07-09 updated by mkyral +#035 2015-11-24 updated by mkyral +#036 2016-10-18 updated by mkyral +#037 2017-01-10 updated by mkyral +#038 2017-04-26 updated by mkyral +#039 2017-07-21 updated by mkyral +#040 2017-12-13 updated by mkyral +#041 2018-03-03 updated by mkyral +#042 2018-10-24 updated by mkyral +#043 2018-12-04 updated by mkyral +#044 2018-12-13 updated by mkyral +#045 2020-04-20 updated by mkyral +#046 2020-04-21 updated by mkyral +#047 2020-06-02 updated by mkyral +#100 +#101 @LANGUAGE_DISPLAY_NAME=Čeština ABOUT_TAB_BUILD;Verze ABOUT_TAB_CREDITS;Zásluhy @@ -215,11 +217,11 @@ FILEBROWSER_POPUPUNTRASH;Vymazat z koše FILEBROWSER_QUERYBUTTONHINT;Smaže vyhledávací dotaz FILEBROWSER_QUERYHINT;Napište názvy hledaných souborů. Podporuje částečná jména souborů. Hledané termíny oddělte čárkami. Například:\n1001,1004,1199\n\nPro vyřazení výsledků z hledání použijte != před hledaný výraz.\nNapříklad: \n!=1001,1004,1199\n\nZkratky:\nCtrl-F pro přepnutí do pole hledání ,\nEnter pro zahájení hledání,\nEsc pro vyčištění,\nShift-Esc pro zrušení přepnutí. FILEBROWSER_QUERYLABEL; Najít: -FILEBROWSER_RANK1_TOOLTIP;Hodnocení 1 *\nZkratka: Shift-1 -FILEBROWSER_RANK2_TOOLTIP;Hodnocení 2 *\nZkratka: Shift-2 -FILEBROWSER_RANK3_TOOLTIP;Hodnocení 3 *\nZkratka: Shift-3 -FILEBROWSER_RANK4_TOOLTIP;Hodnocení 4 *\nZkratka: Shift-4 -FILEBROWSER_RANK5_TOOLTIP;Hodnocení 5 *\nZkratka: Shift-5 +FILEBROWSER_RANK1_TOOLTIP;Hodnocení 1 *\nZkratka: 1 +FILEBROWSER_RANK2_TOOLTIP;Hodnocení 2 *\nZkratka: 2 +FILEBROWSER_RANK3_TOOLTIP;Hodnocení 3 *\nZkratka: 3 +FILEBROWSER_RANK4_TOOLTIP;Hodnocení 4 *\nZkratka: 4 +FILEBROWSER_RANK5_TOOLTIP;Hodnocení 5 *\nZkratka: 5 FILEBROWSER_RENAMEDLGLABEL;Přejmenování souboru FILEBROWSER_RESETDEFAULTPROFILE;Vrátit se k původnímu FILEBROWSER_SELECTDARKFRAME;Výběr tmavého snímku... @@ -230,23 +232,23 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Ukázat obrázky se zeleným štítkem.\nZkratka FILEBROWSER_SHOWCOLORLABEL4HINT;Ukázat obrázky s modrým štítkem.\nZkratka: Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;Ukázat obrázky s nachovým štítkem.\nZkratka: Alt-5 FILEBROWSER_SHOWDIRHINT;Smazat všechny filtry.\nZkratka: d -FILEBROWSER_SHOWEDITEDHINT;Ukázat upravené obrázky.\nZkratka: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Ukázat neupravené obrázky.\nZkratka: 6 +FILEBROWSER_SHOWEDITEDHINT;Ukázat upravené obrázky.\nZkratka: Shift-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Ukázat neupravené obrázky.\nZkratka: Shift-6 FILEBROWSER_SHOWEXIFINFO;Zobrazit Exif informace.\n\nZkratky:\ni - režim více karet editoru,\nAlt-i - režim jedné karty editoru. FILEBROWSER_SHOWNOTTRASHHINT;Zobrazit pouze snímky které nejsou v koši. FILEBROWSER_SHOWORIGINALHINT;Zobrazí pouze originální obrázky.\n\nPokud existuje několik obrázků se stejným názvem, ale rozdílnými příponami, bude jako originál vybrán ten, jehož přípona je nejvýše v seznamu přípon veVolby > Prohlížeč souborů > Analyzované přípony. -FILEBROWSER_SHOWRANK1HINT;Ukázat obrázky hodnocené jednou hvězdičkou.\nZkratka: 1 -FILEBROWSER_SHOWRANK2HINT;Ukázat obrázky hodnocené dvěma hvězdičkami.\nZkratka: 2 -FILEBROWSER_SHOWRANK3HINT;Ukázat obrázky hodnocené třemi hvězdičkami.\nZkratka: 3 -FILEBROWSER_SHOWRANK4HINT;Ukázat obrázky hodnocené čtyřmi hvězdičkami.\nZkratka: 4 -FILEBROWSER_SHOWRANK5HINT;Ukázat obrázky hodnocené pěti hvězdičkami.\nZkratka: 5 +FILEBROWSER_SHOWRANK1HINT;Ukázat obrázky hodnocené jednou hvězdičkou.\nZkratka: Shift-1 +FILEBROWSER_SHOWRANK2HINT;Ukázat obrázky hodnocené dvěma hvězdičkami.\nZkratka: Shift-2 +FILEBROWSER_SHOWRANK3HINT;Ukázat obrázky hodnocené třemi hvězdičkami.\nZkratka: Shift-3 +FILEBROWSER_SHOWRANK4HINT;Ukázat obrázky hodnocené čtyřmi hvězdičkami.\nZkratka: Shift-4 +FILEBROWSER_SHOWRANK5HINT;Ukázat obrázky hodnocené pěti hvězdičkami.\nZkratka: Shift-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;Ukázat uložené obrázky.\nZkratka: Alt-7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Ukázat neuložené obrázky.\nZkratka: Alt-6 FILEBROWSER_SHOWTRASHHINT;Ukázat obsah koše.\nZkratka: Ctrl-t FILEBROWSER_SHOWUNCOLORHINT;Ukázat obrázky bez barevného štítku.\nZkratka: Alt-0 -FILEBROWSER_SHOWUNRANKHINT;Ukázat nehodnocené obrázky.\nZkratka: 0 +FILEBROWSER_SHOWUNRANKHINT;Ukázat nehodnocené obrázky.\nZkratka: Shift-0 FILEBROWSER_THUMBSIZE;Velikost náhledu -FILEBROWSER_UNRANK_TOOLTIP;Zrušit hodnocení.\nZkratka: Shift - 0 +FILEBROWSER_UNRANK_TOOLTIP;Zrušit hodnocení.\nZkratka: 0 FILEBROWSER_ZOOMINHINT;Zvětšit velikosti náhledů.\n\nZkratky:\n+ - režim více karet editoru,\nAlt-+ - režim jedné karty editoru. FILEBROWSER_ZOOMOUTHINT;Zmenšit velikosti náhledů.\n\nZkratky:\n- - režim více karet editoru,\nAlt-- - režim jedné karty editoru. FILECHOOSER_FILTER_ANY;Všechny soubory @@ -2424,9 +2426,18 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !FILEBROWSER_POPUPINSPECT;Inspect +!FILEBROWSER_POPUPSORTBY;Sort Files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !GENERAL_DELETE_ALL;Delete all !GENERAL_EDIT;Edit +!GENERAL_OTHER;Other !HISTOGRAM_TOOLTIP_CROSSHAIR;Show/Hide indicator crosshair. !HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Toggle visibility of the scope option buttons. !HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Adjust scope brightness. @@ -2454,23 +2465,23 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_470;--unused-- !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -2478,7 +2489,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -2537,16 +2548,16 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -2577,7 +2588,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -2600,7 +2611,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -2614,11 +2625,11 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -2631,7 +2642,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -2714,7 +2725,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -2733,19 +2744,19 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -2781,7 +2792,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -2814,7 +2825,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -2839,7 +2850,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -2853,7 +2864,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -2865,10 +2876,10 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -2982,7 +2993,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -3073,7 +3084,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -3099,15 +3110,19 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_COMPLEX;Wavelet complexity !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_PRESER;Preserve neutral @@ -3115,6 +3130,8 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_ICM_REDY;Primaries Red Y !HISTORY_MSG_ICM_WORKING_ILLUM_METHOD;Illuminant method !HISTORY_MSG_ICM_WORKING_PRIM_METHOD;Primaries method +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_PERSP_CAM_ANGLE;Perspective - Camera !HISTORY_MSG_PERSP_CAM_FL;Perspective - Camera !HISTORY_MSG_PERSP_CAM_SHIFT;Perspective - Camera @@ -3128,6 +3145,11 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_RESIZE_SHORTEDGE;Resize - Short Edge !HISTORY_MSG_SPOT;Spot removal !HISTORY_MSG_SPOT_ENTRY;Spot removal - Point modif. +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_WAVCHR;Blur levels - blur chroma !HISTORY_MSG_WAVDENLH;Level 5 !HISTORY_MSG_WAVDENOISE;Local contrast @@ -3147,14 +3169,34 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !HISTORY_MSG_WAVSTREND;Strength soft !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Theater !ICCPROFCREATOR_PRIM_DCIP3;DCI-P3 !INSPECTOR_WINDOW_TITLE;Inspector !MAIN_TAB_LOCALLAB;Local !MAIN_TAB_LOCALLAB_TOOLTIP;Shortcut: Alt-o +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_LOCALLAB;Local Adjustments !PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings !PARTIALPASTE_SPOT;Spot removal +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CIE;Ciecam !PREFERENCES_CIEARTIF;Avoid artifacts !PREFERENCES_COMPLEXITYLOC;Default complexity for Local Adjustments @@ -3167,9 +3209,53 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_INSPECTORWINDOW;Open inspector in own window or fullscreen +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips +!PREFERENCES_TAB_FAVORITES;Favorites +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -3183,6 +3269,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_COLORAPP_CATMOD;Mode !TP_COLORAPP_CATSYMGEN;Automatic Symmetric !TP_COLORAPP_CATSYMSPE;Mixed +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). !TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). !TP_COLORAPP_GEN;Settings @@ -3194,6 +3281,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_COLORAPP_SOURCEF_TOOLTIP;Corresponds to the shooting conditions and how to bring the conditions and data back to a 'normal' area. Normal means average or standard conditions and data, i.e. without taking into account CIECAM corrections. !TP_COLORAPP_SURROUNDSRC;Surround !TP_COLORAPP_SURSOURCE_TOOLTIP;Changes tones and colors to take into account the surround conditions of the scene lighting. The darker the surround conditions, the brighter the image will become. Image brightness will not be changed when the surround is set to average. +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. !TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. !TP_COLORAPP_YBSCEN_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. @@ -3206,11 +3294,17 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_FILMNEGATIVE_COLORSPACE_WORKING;Working color space !TP_FILMNEGATIVE_GREENBALANCE;Magenta/Green !TP_FILMNEGATIVE_OUT_LEVEL;Output level +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_FBW;Black-and-White +!TP_ICM_GAMUT;Gamut control !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_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 !TP_ICM_NEUTRAL;Reset @@ -3247,6 +3341,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -3266,7 +3361,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -3292,7 +3387,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -3325,6 +3420,8 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -3351,7 +3448,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -3386,8 +3483,8 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -3414,13 +3511,15 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -3456,7 +3555,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -3464,12 +3563,12 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -3496,6 +3595,11 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3584,6 +3688,8 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3644,11 +3750,13 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3680,7 +3788,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3705,7 +3813,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3755,7 +3863,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3848,7 +3956,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3860,7 +3968,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3949,6 +4057,7 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -4074,6 +4183,16 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_SPOT_ENTRYCHANGED;Point changed !TP_SPOT_HINT;Click on this button to be able to operate on the preview area.\n\nTo edit a spot, hover the white mark locating an edited area, making the editing geometry appear.\n\nTo add a spot, press Ctrl and left mouse button, drag the circle (Ctrl key can be released) to a source location, then release the mouse button.\n\nTo move the source or destination spot, hover its center then drag it.\n\nThe inner circle (maximum effect area) and the 'feather' circle can be resized by hovering them (the circle becomes orange) and dragging it (the circle becomes red).\n\nWhen the changes are done, right click outside any spot to end the Spot editing mode, or click on this button again. !TP_SPOT_LABEL;Spot Removal +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_WAVELET_COMPEXPERT;Advanced !TP_WAVELET_COMPLEXLAB;Complexity !TP_WAVELET_COMPLEX_TOOLTIP;Standard: shows a reduced set of tools suitable for most processing operations.\nAdvanced: shows the complete set of tools for advanced processing operations. @@ -4116,3 +4235,54 @@ ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - !TP_WAVELET_STREND;Strength !TP_WAVELET_THRDEN_TOOLTIP;Generates a stepped curve used to guide the noise reduction as a function of local contrast. The denoise will be applied to uniform low local-contrast areas. Areas with detail (higher local contrast) will be preserved. !TP_WAVELET_THREND;Local contrast threshold +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk index 2cfbf4e27..f08d89baf 100644 --- a/rtdata/languages/Dansk +++ b/rtdata/languages/Dansk @@ -1,4 +1,6 @@ -#01 2022-04-21 mogensjaeger (github), initial danish translation +#001 2022-04-21 mogensjaeger (github), initial danish translation +#100 +#101 @LANGUAGE_DISPLAY_NAME=Dansk ABOUT_TAB_BUILD;Version ABOUT_TAB_CREDITS;Credits @@ -2277,9 +2279,18 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !!!!!!!!!!!!!!!!!!!!!!!!! !CURVEEDITOR_CURVES;Curves +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !FILEBROWSER_POPUPINSPECT;Inspect +!FILEBROWSER_POPUPSORTBY;Sort Files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !GENERAL_DELETE_ALL;Delete all !GENERAL_EDIT;Edit +!GENERAL_OTHER;Other !HISTOGRAM_TOOLTIP_CROSSHAIR;Show/Hide indicator crosshair. !HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Toggle visibility of the scope option buttons. !HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Adjust scope brightness. @@ -2307,23 +2318,23 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_470;--unused-- !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -2331,7 +2342,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -2390,16 +2401,16 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -2430,7 +2441,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -2453,7 +2464,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -2467,11 +2478,11 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -2484,7 +2495,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -2567,7 +2578,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -2586,19 +2597,19 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -2634,7 +2645,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -2667,7 +2678,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -2692,7 +2703,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -2706,7 +2717,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -2718,10 +2729,10 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -2835,7 +2846,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -2926,7 +2937,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -2957,15 +2968,19 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_PRESER;Preserve neutral @@ -2974,6 +2989,8 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_ICM_WORKING_ILLUM_METHOD;Illuminant method !HISTORY_MSG_ICM_WORKING_PRIM_METHOD;Primaries method !HISTORY_MSG_ILLUM;CAL - SC - Illuminant +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_PERSP_CAM_ANGLE;Perspective - Camera !HISTORY_MSG_PERSP_CAM_FL;Perspective - Camera !HISTORY_MSG_PERSP_CAM_SHIFT;Perspective - Camera @@ -2996,6 +3013,11 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_SPOT_ENTRY;Spot removal - Point modif. !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -3035,15 +3057,35 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Theater !ICCPROFCREATOR_PRIM_DCIP3;DCI-P3 !INSPECTOR_WINDOW_TITLE;Inspector !MAIN_TAB_LOCALLAB;Local !MAIN_TAB_LOCALLAB_TOOLTIP;Shortcut: Alt-o +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_LOCALLAB;Local Adjustments !PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings !PARTIALPASTE_PREPROCWB;Preprocess White Balance !PARTIALPASTE_SPOT;Spot removal +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CIE;Ciecam !PREFERENCES_CIEARTIF;Avoid artifacts !PREFERENCES_COMPLEXITYLOC;Default complexity for Local Adjustments @@ -3056,9 +3098,53 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_INSPECTORWINDOW;Open inspector in own window or fullscreen +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips +!PREFERENCES_TAB_FAVORITES;Favorites +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -3072,6 +3158,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_COLORAPP_CATMOD;Mode !TP_COLORAPP_CATSYMGEN;Automatic Symmetric !TP_COLORAPP_CATSYMSPE;Mixed +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). !TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). !TP_COLORAPP_GEN;Settings @@ -3094,6 +3181,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_COLORAPP_SURROUNDSRC;Surround !TP_COLORAPP_SURSOURCE_TOOLTIP;Changes tones and colors to take into account the surround conditions of the scene lighting. The darker the surround conditions, the brighter the image will become. Image brightness will not be changed when the surround is set to average. !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. !TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. !TP_COLORAPP_YBSCEN_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. @@ -3106,11 +3194,17 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_FILMNEGATIVE_COLORSPACE_WORKING;Working color space !TP_FILMNEGATIVE_GREENBALANCE;Magenta/Green !TP_FILMNEGATIVE_OUT_LEVEL;Output level +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_FBW;Black-and-White +!TP_ICM_GAMUT;Gamut control !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_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 !TP_ICM_NEUTRAL;Reset @@ -3147,6 +3241,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -3167,7 +3262,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -3193,7 +3288,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -3226,6 +3321,8 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -3252,7 +3349,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -3287,8 +3384,8 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -3315,13 +3412,15 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -3357,7 +3456,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -3365,12 +3464,12 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -3397,6 +3496,11 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3485,6 +3589,8 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3545,11 +3651,13 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3581,7 +3689,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3606,7 +3714,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3656,7 +3764,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3749,7 +3857,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3761,7 +3869,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3850,6 +3958,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3979,6 +4088,16 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_SPOT_ENTRYCHANGED;Point changed !TP_SPOT_HINT;Click on this button to be able to operate on the preview area.\n\nTo edit a spot, hover the white mark locating an edited area, making the editing geometry appear.\n\nTo add a spot, press Ctrl and left mouse button, drag the circle (Ctrl key can be released) to a source location, then release the mouse button.\n\nTo move the source or destination spot, hover its center then drag it.\n\nThe inner circle (maximum effect area) and the 'feather' circle can be resized by hovering them (the circle becomes orange) and dragging it (the circle becomes red).\n\nWhen the changes are done, right click outside any spot to end the Spot editing mode, or click on this button again. !TP_SPOT_LABEL;Spot Removal +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_WAVELET_BALCHROM;Equalizer Color !TP_WAVELET_BALLUM;Denoise equalizer White-Black !TP_WAVELET_BL;Blur levels @@ -4068,6 +4187,57 @@ ZOOMPANEL_ZOOMOUT;Zoom Ud\nGenvej: - !TP_WAVELET_WAVOFFSET;Offset !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index 3a2c2999c..9de59c6f5 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -1,90 +1,92 @@ -#01 keenonkites; Aktualisierte Version für 2.3 beta2 -#02 phberlin; basiert auf keenonkites' Erstübersetzung -#03 2007-12-20 -#04 2007-12-22 -#05 2008-01-08 -#06 2008-01-15 -#07 2008-02-20 -#08 2008-12-19 keenonkites, Anpassungen für 2.4beta4 -#09 2008-09-20 keenonkites, Anpassungen für 2.4m2 -#10 2008-04-04 Anpassungen für 2.4 -#11 Leichte Anpassungen (keenonkites/klonk) -#12 Erweiterung (oduis) -#13 Erweiterung (oduis) -#14 Erweiterung (oduis) -#15 Erweiterung (oduis) -#16 2012-12-05 3.0 alpha: Erweiterung und Korrekturen (Metex) -#17 2012-04-29 Erweiterungen und Korrekturen (MaWe) -#18 Erweiterung (oduis) -#19 Erweiterung (oduis) -#20 2013-02-27 Erweiterung (cytrinox) -#21 2013-12-31 Erweiterung (Ingo) -#22 2015-09-04 komplette Überarbeitung (TooWaBoo) -#23 2015-10-24 Retinexübersetzung und Korrekturen (TooWaBoo) -#24 2015-11-01 Korrekturen (TooWaBoo) RT4.2.450 -#25 2015-11-30 Korrekturen (TooWaBoo) RT4.2.507 -#26 2015-12-13 Korrekturen (TooWaBoo) RT4.2.514 -#26 2015-12-22 Korrekturen (TooWaBoo) RT4.2.536 -#27 2016-02-12 Retinexübersetzung (TooWaBoo) RT4.2.730 -#28 2016-03-19 Erweiterung/Korrekturen (TooWaBoo) RT4.2.880 -#29 2016-05-24 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1005 -#30 2016-09-30 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1234 -#31 2016-12-01 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1408 -#32 2016-12-29 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1464 -#33 2017-01-04 Erweiterung/Korrekturen/Soft-Proofing (TooWaBoo) RT4.2.1477 -#34 2017-01-07 IPTC (TooWaBoo) RT4.2.1492 -#35 2017-02-18 AWB bias (TooWaBoo) RT 5.0 r1 -#36 2017-02-23 Korrekturen (TooWaBoo) RT 5.0 r1 -#37 2017-03-06 Dynamisches Profil (TooWaBoo) RT 5.0 r1 -#38 2017-03-26 Pixel-Shift (TooWaBoo) RT 5.0 r1 -#39 06.04.2017 Fast Export (TooWaBoo) RT 5.0 r1 -#40 30.04.2017 Erweiterung/Korrekturen (TooWaBoo) RT 5.0 r1 -#41 03.05.2017 Erweiterung/Korrekturen (TooWaBoo) RT 5.0 r1 -#42 13.05.2017 Erweiterung (TooWaBoo) RT 5.0 r1 -#43 21.07.2017 Erweiterung (TooWaBoo) RT 5.1 -#44 21.09.2017 Erweiterung (TooWaBoo) RT 5.2 -#45 15.10.2017 Erweiterung (TooWaBoo) RT 5.3 -#46 18.10.2017 Erweiterung (TooWaBoo) RT 5.3 -#47 19.11.2017 HDR-Dynamikkompression (TooWaBoo) RT 5.3 -#48 13.12.2017 Erweiterung (TooWaBoo) RT 5.3 -#49 21.12.2017 Lokaler Kontrast (TooWaBoo) RT 5.3 -#50 07.01.2018 Crop Settings (TooWaBoo) RT 5.3 -#51 10.02.2018 Erweiterung (TooWaBoo) RT 5.3 -#52 10.02.2018 Korrektur (TooWaBoo) RT 5.3 -#53 26.02.2018 Erweiterung (TooWaBoo) RT 5.3 -#54 30.03.2018 Erweiterung (TooWaBoo) RT 5.4 -#55 06.04.2018 Erweiterung (TooWaBoo) RT 5.4 -#56 27.04.2018 Erweiterung (TooWaBoo) RT 5.4 -#57 17.05.2018 Erweiterung (TooWaBoo) RT 5.4 -#58 19.05.2018 Erweiterung (TooWaBoo) RT 5.4 -#59 29.05.2018 Erweiterung (TooWaBoo) RT 5.4 -#60 14.06.2018 Erweiterung (TooWaBoo) RT 5.4 -#61 14.06.2018 Korrektur (TooWaBoo) RT 5.4 -#62 22.06.2018 Korrektur (TooWaBoo) RT 5.4 -#63 24.06.2018 DCB/RCD+VNG4 (TooWaBoo) RT 5.4 -#64 24.06.2018 Erweiterung/Korrektur (TooWaBoo) RT 5.4 -#65 25.06.2018 Korrekturen (TooWaBoo) RT 5.4 -#66 04.07.2018 Erweiterung (TooWaBoo) RT 5.4 -#67 05.07.2018 Erweiterung (TooWaBoo) RT 5.4 -#68 05.07.2018 Erweiterung (TooWaBoo) RT 5.4 -#69 25.07.2018 Erweiterung (TooWaBoo) RT 5.4 -#70 25.07.2018 Korrekturen (TooWaBoo) RT 5.4 -#71 28.09.2018 Korrekturen (TooWaBoo) RT 5.5 -#72 05.10.2018 Korrekturen (TooWaBoo) RT 5.5 -#73 21.11.2018 Erweiterung (TooWaBoo) RT 5.5 -#74 24.11.2018 Erweiterung (TooWaBoo) RT 5.5 -#75 02.12.2018 Erweiterung (TooWaBoo) RT 5.5 -#76 11.12.2018 Erweiterung (TooWaBoo) RT 5.5 -#77 16.12.2018 Korrektur Farbwähler-Tooltip (TooWaBoo) RT 5.5 -#78 19.01.2019 Erweiterung (TooWaBoo) RT 5.5 -#79 24.02.2019 Erweiterung (TooWaBoo) RT 5.5 -#80 25.03.2019 Erweiterung (TooWaBoo) RT 5.6 -#81 15.04.2019 Erweiterung (TooWaBoo) RT 5.6 -#82 25.05.2019 Erweiterung (TooWaBoo) RT 5.6 -#83 06.07.2019 Erweiterung (TooWaBoo) RT 5.6 -#84 06.10.2019 Erweiterung (TooWaBoo) RT 5.7 -#84 18.07.2019 Erweiterung (TooWaBoo) RT 5.6 -#85 29.07.2022 Erweiterung (marter, mozzihh) RT 5.9 +#001 keenonkites; Aktualisierte Version für 2.3 beta2 +#002 phberlin; basiert auf keenonkites' Erstübersetzung +#003 2007-12-20 +#004 2007-12-22 +#005 2008-01-08 +#006 2008-01-15 +#007 2008-02-20 +#008 2008-12-19 keenonkites, Anpassungen für 2.4beta4 +#009 2008-09-20 keenonkites, Anpassungen für 2.4m2 +#010 2008-04-04 Anpassungen für 2.4 +#011 Leichte Anpassungen (keenonkites/klonk) +#012 Erweiterung (oduis) +#013 Erweiterung (oduis) +#014 Erweiterung (oduis) +#015 Erweiterung (oduis) +#016 2012-12-05 3.0 alpha: Erweiterung und Korrekturen (Metex) +#017 2012-04-29 Erweiterungen und Korrekturen (MaWe) +#018 Erweiterung (oduis) +#019 Erweiterung (oduis) +#020 2013-02-27 Erweiterung (cytrinox) +#021 2013-12-31 Erweiterung (Ingo) +#022 2015-09-04 komplette Überarbeitung (TooWaBoo) +#023 2015-10-24 Retinexübersetzung und Korrekturen (TooWaBoo) +#024 2015-11-01 Korrekturen (TooWaBoo) RT4.2.450 +#025 2015-11-30 Korrekturen (TooWaBoo) RT4.2.507 +#026 2015-12-13 Korrekturen (TooWaBoo) RT4.2.514 +#026 2015-12-22 Korrekturen (TooWaBoo) RT4.2.536 +#027 2016-02-12 Retinexübersetzung (TooWaBoo) RT4.2.730 +#028 2016-03-19 Erweiterung/Korrekturen (TooWaBoo) RT4.2.880 +#029 2016-05-24 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1005 +#030 2016-09-30 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1234 +#031 2016-12-01 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1408 +#032 2016-12-29 Erweiterung/Korrekturen (TooWaBoo) RT4.2.1464 +#033 2017-01-04 Erweiterung/Korrekturen/Soft-Proofing (TooWaBoo) RT4.2.1477 +#034 2017-01-07 IPTC (TooWaBoo) RT4.2.1492 +#035 2017-02-18 AWB bias (TooWaBoo) RT 5.0 r1 +#036 2017-02-23 Korrekturen (TooWaBoo) RT 5.0 r1 +#037 2017-03-06 Dynamisches Profil (TooWaBoo) RT 5.0 r1 +#038 2017-03-26 Pixel-Shift (TooWaBoo) RT 5.0 r1 +#039 06.04.2017 Fast Export (TooWaBoo) RT 5.0 r1 +#040 30.04.2017 Erweiterung/Korrekturen (TooWaBoo) RT 5.0 r1 +#041 03.05.2017 Erweiterung/Korrekturen (TooWaBoo) RT 5.0 r1 +#042 13.05.2017 Erweiterung (TooWaBoo) RT 5.0 r1 +#043 21.07.2017 Erweiterung (TooWaBoo) RT 5.1 +#044 21.09.2017 Erweiterung (TooWaBoo) RT 5.2 +#045 15.10.2017 Erweiterung (TooWaBoo) RT 5.3 +#046 18.10.2017 Erweiterung (TooWaBoo) RT 5.3 +#047 19.11.2017 HDR-Dynamikkompression (TooWaBoo) RT 5.3 +#048 13.12.2017 Erweiterung (TooWaBoo) RT 5.3 +#049 21.12.2017 Lokaler Kontrast (TooWaBoo) RT 5.3 +#050 07.01.2018 Crop Settings (TooWaBoo) RT 5.3 +#051 10.02.2018 Erweiterung (TooWaBoo) RT 5.3 +#052 10.02.2018 Korrektur (TooWaBoo) RT 5.3 +#053 26.02.2018 Erweiterung (TooWaBoo) RT 5.3 +#054 30.03.2018 Erweiterung (TooWaBoo) RT 5.4 +#055 06.04.2018 Erweiterung (TooWaBoo) RT 5.4 +#056 27.04.2018 Erweiterung (TooWaBoo) RT 5.4 +#057 17.05.2018 Erweiterung (TooWaBoo) RT 5.4 +#058 19.05.2018 Erweiterung (TooWaBoo) RT 5.4 +#059 29.05.2018 Erweiterung (TooWaBoo) RT 5.4 +#060 14.06.2018 Erweiterung (TooWaBoo) RT 5.4 +#061 14.06.2018 Korrektur (TooWaBoo) RT 5.4 +#062 22.06.2018 Korrektur (TooWaBoo) RT 5.4 +#063 24.06.2018 DCB/RCD+VNG4 (TooWaBoo) RT 5.4 +#064 24.06.2018 Erweiterung/Korrektur (TooWaBoo) RT 5.4 +#065 25.06.2018 Korrekturen (TooWaBoo) RT 5.4 +#066 04.07.2018 Erweiterung (TooWaBoo) RT 5.4 +#067 05.07.2018 Erweiterung (TooWaBoo) RT 5.4 +#068 05.07.2018 Erweiterung (TooWaBoo) RT 5.4 +#069 25.07.2018 Erweiterung (TooWaBoo) RT 5.4 +#070 25.07.2018 Korrekturen (TooWaBoo) RT 5.4 +#071 28.09.2018 Korrekturen (TooWaBoo) RT 5.5 +#072 05.10.2018 Korrekturen (TooWaBoo) RT 5.5 +#073 21.11.2018 Erweiterung (TooWaBoo) RT 5.5 +#074 24.11.2018 Erweiterung (TooWaBoo) RT 5.5 +#075 02.12.2018 Erweiterung (TooWaBoo) RT 5.5 +#076 11.12.2018 Erweiterung (TooWaBoo) RT 5.5 +#077 16.12.2018 Korrektur Farbwähler-Tooltip (TooWaBoo) RT 5.5 +#078 19.01.2019 Erweiterung (TooWaBoo) RT 5.5 +#079 24.02.2019 Erweiterung (TooWaBoo) RT 5.5 +#080 25.03.2019 Erweiterung (TooWaBoo) RT 5.6 +#081 15.04.2019 Erweiterung (TooWaBoo) RT 5.6 +#082 25.05.2019 Erweiterung (TooWaBoo) RT 5.6 +#083 06.07.2019 Erweiterung (TooWaBoo) RT 5.6 +#084 06.10.2019 Erweiterung (TooWaBoo) RT 5.7 +#084 18.07.2019 Erweiterung (TooWaBoo) RT 5.6 +#085 29.07.2022 Erweiterung (marter, mozzihh) RT 5.9 +#100 +#101 @LANGUAGE_DISPLAY_NAME=Deutsch ABOUT_TAB_BUILD;Version ABOUT_TAB_CREDITS;Danksagungen @@ -4150,3 +4152,176 @@ ZOOMPANEL_ZOOMFITCROPSCREEN;Ausschnitt an Bildschirm anpassen.\nTaste: f ZOOMPANEL_ZOOMFITSCREEN;An Bildschirm anpassen.\nTaste: Alt + f ZOOMPANEL_ZOOMIN;Hineinzoomen\nTaste: + ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: - + +!!!!!!!!!!!!!!!!!!!!!!!!! +! Untranslated keys follow; remove the ! prefix after an entry is translated. +!!!!!!!!!!!!!!!!!!!!!!!!! + +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown +!FILEBROWSER_POPUPSORTBY;Sort Files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files +!GENERAL_OTHER;Other +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold +!HISTORY_MSG_ICM_GAMUT;Gamut control +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional +!PREFERENCES_TAB_FAVORITES;Favorites +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. +!TP_FILMNEGATIVE_PICK_SIZE;Size: +!TP_FILMNEGATIVE_REF_SIZE;Size: +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed +!TP_HLREC_HLTH;Gain threshold +!TP_ICM_GAMUT;Gamut control +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK) index 7de3a54cc..37839630d 100644 --- a/rtdata/languages/English (UK) +++ b/rtdata/languages/English (UK) @@ -24,7 +24,7 @@ HISTORY_MSG_322;W - Gamut - Avoid colour shift HISTORY_MSG_385;W - Residual - Colour balance HISTORY_MSG_392;W - Residual - Colour balance HISTORY_MSG_419;Retinex - Colour space -HISTORY_MSG_507;Local Spot centre +HISTORY_MSG_507;Local - Spot - Centre HISTORY_MSG_516;Local - Colour and light HISTORY_MSG_527;Local - Colour Inverse HISTORY_MSG_542;Local - Vib avoid colourshift @@ -62,8 +62,8 @@ HISTORY_MSG_830;Local - Colour gradient strength L HISTORY_MSG_831;Local - Colour gradient angle HISTORY_MSG_832;Local - Colour gradient strength C HISTORY_MSG_834;Local - Colour gradient strength H -HISTORY_MSG_894;Local - Colour Preview dE -HISTORY_MSG_925;Local - Scope colour tools +HISTORY_MSG_894;Local - SD - ΔE preview colour intensity +HISTORY_MSG_925;Local - Scope (colour tools) HISTORY_MSG_928;Local - Common colour mask HISTORY_MSG_980;Local - Log encoding Colourfulness M HISTORY_MSG_996;Local - Colour recovery threshold @@ -80,6 +80,7 @@ HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Colour correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Colour correction HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative colour space HISTORY_MSG_HLBL;Colour propagation - blur +HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Colour Shift HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid colour shift HISTORY_MSG_SH_COLORSPACE;S/H - Colourspace HISTORY_MSG_WAVLABGRID_VALUE;Toning - exclude colours @@ -106,8 +107,13 @@ PREFERENCES_MENUGROUPLABEL;Group 'Colour label' PREFERENCES_MONPROFILE;Default colour profile PREFERENCES_PRTPROFILE;Colour profile PREFERENCES_TAB_COLORMGR;Colour Management +PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colourimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +PREFERENCES_WBANOPURP;No purple colour used +PREFERENCES_WBAPATCH;Number maximum of colours used in picture +PREFERENCES_WBASIZEREF;Size of reference colour compare to size of histogram colour SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colours with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Colour Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. +SORT_BY_LABEL;By Colour Label TOOLBAR_TOOLTIP_COLORPICKER;Lockable Colour Picker\n\nWhen the tool is active:\n- Add a picker: left-click.\n- Drag a picker: left-click and drag.\n- Delete a picker: right-click.\n- Delete all pickers: Ctrl+Shift+right-click.\n- Revert to hand tool: right-click outside any picker. TOOLBAR_TOOLTIP_STRAIGHTEN;Straighten / fine rotation.\nShortcut: s\n\nIndicate the vertical or horizontal by drawing a guide line over the image. Angle of rotation will be shown next to the guide line. Centre of rotation is the geometrical centre of the image. TP_BWMIX_CC_ENABLED;Adjust complementary colour @@ -166,11 +172,9 @@ TP_ICM_INPUTEMBEDDED_TOOLTIP;Use colour profile embedded in non-raw files. TP_ICM_INPUTNONE_TOOLTIP;Use no input colour profile at all.\nUse only in special cases. TP_ICM_LABEL;Colour Management TP_ICM_PRIMILLUM_TOOLTIP;You can change an image from its original mode ('working profile') to a different mode ('destination primaries'). When you choose a different colour mode for an image, you permanently change the colour values in the image.\n\nChanging the 'primaries' is quite complex and difficult to use. It requires a lot of experimenting.\n It is capable of making exotic colour adjustments as Channel Mixer primaries.\n Allows you to modify the camera calibration with Custom (sliders). -TP_LABCURVE_AVOIDCOLORSHIFT;Avoid colour shift -TP_LABCURVE_AVOIDCOLORSHIFT_TOOLTIP;Fit colours into gamut of the working colour space and apply Munsell correction (Uniform Perceptual Lab). TP_LOCALLAB_ADJ;Equalizer Colour TP_LOCALLAB_AVOID;Avoid colour shift -TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colours into gamut of the working colour space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colours into gamut of the working colour space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Colour Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colourimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colourimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colourimetric, Munsell is then applied. TP_LOCALLAB_BLWH_TOOLTIP;Force colour components 'a' and 'b' to zero.\nUseful for black and white processing, or film simulation. TP_LOCALLAB_CENTER_X;Centre X TP_LOCALLAB_CENTER_Y;Centre Y @@ -185,18 +189,18 @@ TP_LOCALLAB_COLORSCOPE;Scope (colour tools) TP_LOCALLAB_COLORSCOPE_TOOLTIP;Common Scope slider for Colour and Light, Shadows/Highlights, Vibrance.\nOther tools have their own scope controls. TP_LOCALLAB_COLOR_CIE;Colour curve TP_LOCALLAB_COLOR_TOOLNAME;Colour & Light -TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colourful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colourful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colourful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colourful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. TP_LOCALLAB_CURVEEDITOR_TONES_TOOLTIP;L=f(L), can be used with L(H) in Colour and Light. TP_LOCALLAB_DEHAZFRAME_TOOLTIP;Removes atmospheric haze. Increases overall saturation and detail.\nCan remove colour casts, but may also introduce a blue cast which can be corrected with other tools. TP_LOCALLAB_DENOIEQUALCHRO_TOOLTIP;Allows you to direct the chroma noise reduction towards either the blue-yellow or red-green colours. -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 colour (ΔE).\nMinimum RT-spot size: 128x128. +TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on colour (ΔE).\nMinimum spot size: 128x128. TP_LOCALLAB_EXCLUF_TOOLTIP;'Excluding' mode prevents adjacent spots from influencing certain parts of the image. Adjusting 'Scope' will extend the range of colours.\n You can also add tools to an Excluding spot and use them in the same way as for a normal spot. TP_LOCALLAB_EXPCHROMA_TOOLTIP;Use in association with 'Exposure compensation f' and 'Contrast Attenuator f' to avoid desaturating colours. TP_LOCALLAB_EXPCOLOR_TOOLTIP;Adjust colour, lightness, contrast and correct small defects such as red-eye, sensor dust etc. TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low colour gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Colour and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. -TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a colour and luminance background (fewer possibilties). +TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a colour and luminance background (fewer possibilties). TP_LOCALLAB_GRIDFRAME_TOOLTIP;You can use this tool as a brush. Use a small spot and adapt the 'Transition value' and 'Transition decay'\nOnly 'Normal' mode and possibly Hue, Saturation, Colour, Luminosity are concerned by Merge background (ΔE). TP_LOCALLAB_GRIDMETH_TOOLTIP;Colour toning: the luminance is taken into account when varying chroma. Equivalent to H=f(H) if the 'white dot' on the grid remains at zero and you only vary the 'black dot'. Equivalent to 'Colour toning' if you vary the 2 dots.\n\nDirect: acts directly on the chroma. TP_LOCALLAB_GRIDONE;Colour Toning @@ -245,7 +249,7 @@ TP_LOCALLAB_RECOTHRES02_TOOLTIP;If the 'Recovery threshold' value is greater tha TP_LOCALLAB_REPARCOL_TOOLTIP;Allows you to adjust the relative strength of the Colour and Light image with respect to the original image. TP_LOCALLAB_RSTPROTECT_TOOLTIP;Red and skin-tone protection affects the Saturation, Chroma and Colourfulness sliders. TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colours to be excluded. -TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the centre of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the centre of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colours similar to those in the centre of the spot.\nHigh values let the tool act on a wider range of colours. 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 colour). TP_LOCALLAB_STRUMASK_TOOLTIP;Structure mask (slider) with the checkbox 'Structure mask as tool' unchecked: In this case a mask showing the structure will be generated even if none of the 3 curves is activated. Structure masks are available for mask (Blur and denoise') and mask(Colour & Light). @@ -271,6 +275,19 @@ TP_WAVELET_DENWAVHUE_TOOLTIP;Amplify or reduce denoising depending on the colour TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centreed on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts. TP_WAVELET_TONFRAME;Excluded colours TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'white balance' by modulating the blue/red balance.\nThis can be useful when shooting conditions:\na) are far from the standard illuminant (e.g. underwater),\nb) are far from conditions where calibrations were performed,\nc) where the matrices or ICC profiles are unsuitable. +TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of colour datas used by algorithm. +TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colours and those in xyY value of the image. A value of 3 seams a good compromise. +TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colourimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple colour +TP_WBALANCE_ITCWB_SIZE;Size of ref. colour compare to histogram +TP_WBALANCE_ITCWB_SIZEPATCH;Size of colour patch +TP_WBALANCE_ITCWB_THRES;Colours used in picture (preset) +TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colourchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colours), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colours that can be used in internal to the algorithm will be more important. +TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colours.\n'Camera XYZ matrix' - uses the matrix directly derived from Colour Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +TP_WBALANCE_OBSERVER10_TOOLTIP;The colour management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colours. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colours due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +TP_WBALANCE_PATCHLABEL;Read colours:%1 Patch: Chroma:%2 Size=%3 +TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colours (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colours are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colours. !!!!!!!!!!!!!!!!!!!!!!!!! ! Untranslated keys follow; remove the ! prefix after an entry is translated. @@ -326,6 +343,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !EDITWINDOW_TITLE;Image Edit !EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool. !EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve. +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 !EXIFFILTER_APERTURE;Aperture !EXIFFILTER_CAMERA;Camera !EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV) @@ -335,12 +353,16 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !EXIFFILTER_ISO;ISO !EXIFFILTER_LENS;Lens !EXIFFILTER_METADATAFILTER;Enable metadata filters +!EXIFFILTER_PATH;File path !EXIFFILTER_SHUTTER;Shutter +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags !EXIFPANEL_ADDEDIT;Add/Edit !EXIFPANEL_ADDEDITHINT;Add new tag or edit tag. !EXIFPANEL_ADDTAGDLG_ENTERVALUE;Enter value !EXIFPANEL_ADDTAGDLG_SELECTTAG;Select tag !EXIFPANEL_ADDTAGDLG_TITLE;Add/Edit Tag +!EXIFPANEL_BASIC_GROUP;Basic !EXIFPANEL_KEEP;Keep !EXIFPANEL_KEEPHINT;Keep the selected tags when writing output file. !EXIFPANEL_REMOVE;Remove @@ -349,8 +371,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !EXIFPANEL_RESETALL;Reset All !EXIFPANEL_RESETALLHINT;Reset all tags to their original values. !EXIFPANEL_RESETHINT;Reset the selected tags to their original values. -!EXIFPANEL_SHOWALL;Show all -!EXIFPANEL_SUBDIRECTORY;Subdirectory +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !EXPORT_BYPASS;Processing steps to bypass !EXPORT_BYPASS_ALL;Select / Unselect All !EXPORT_BYPASS_DEFRINGE;Bypass Defringe @@ -436,17 +457,18 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version !FILEBROWSER_POPUPRENAME;Rename !FILEBROWSER_POPUPSELECTALL;Select all +!FILEBROWSER_POPUPSORTBY;Sort Files !FILEBROWSER_POPUPTRASH;Move to trash !FILEBROWSER_POPUPUNRANK;Unrank !FILEBROWSER_POPUPUNTRASH;Remove from trash !FILEBROWSER_QUERYBUTTONHINT;Clear the Find query !FILEBROWSER_QUERYHINT;Type filenames to search for. Supports partial filenames. Separate the search terms using commas, e.g.\n1001,1004,1199\n\nExclude search terms by prefixing them with !=\ne.g.\n!=1001,1004,1199\n\nShortcuts:\nCtrl-f - focus the Find box,\nEnter - search,\nEsc - clear the Find box,\nShift-Esc - defocus the Find box. !FILEBROWSER_QUERYLABEL; Find: -!FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: Shift-1 -!FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: Shift-2 -!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3 -!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4 -!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5 +!FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: 1 +!FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: 2 +!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: 3 +!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: 4 +!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: 5 !FILEBROWSER_RENAMEDLGLABEL;Rename file !FILEBROWSER_RESETDEFAULTPROFILE;Reset to default !FILEBROWSER_SELECTDARKFRAME;Select dark-frame... @@ -457,26 +479,27 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !FILEBROWSER_SHOWCOLORLABEL4HINT;Show images labeled Blue.\nShortcut: Alt-4 !FILEBROWSER_SHOWCOLORLABEL5HINT;Show images labeled Purple.\nShortcut: Alt-5 !FILEBROWSER_SHOWDIRHINT;Clear all filters.\nShortcut: d -!FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: 7 -!FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: 6 +!FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: Shift-7 +!FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: Shift-6 !FILEBROWSER_SHOWEXIFINFO;Show Exif info.\n\nShortcuts:\ni - Multiple Editor Tabs Mode,\nAlt-i - Single Editor Tab Mode. !FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash. !FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions. -!FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1-star.\nShortcut: 1 -!FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2-star.\nShortcut: 2 -!FILEBROWSER_SHOWRANK3HINT;Show images ranked as 3-star.\nShortcut: 3 -!FILEBROWSER_SHOWRANK4HINT;Show images ranked as 4-star.\nShortcut: 4 -!FILEBROWSER_SHOWRANK5HINT;Show images ranked as 5-star.\nShortcut: 5 +!FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1-star.\nShortcut: Shift-1 +!FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2-star.\nShortcut: Shift-2 +!FILEBROWSER_SHOWRANK3HINT;Show images ranked as 3-star.\nShortcut: Shift-3 +!FILEBROWSER_SHOWRANK4HINT;Show images ranked as 4-star.\nShortcut: Shift-4 +!FILEBROWSER_SHOWRANK5HINT;Show images ranked as 5-star.\nShortcut: Shift-5 !FILEBROWSER_SHOWRECENTLYSAVEDHINT;Show saved images.\nShortcut: Alt-7 !FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Show unsaved images.\nShortcut: Alt-6 !FILEBROWSER_SHOWTRASHHINT;Show contents of trash.\nShortcut: Ctrl-t -!FILEBROWSER_SHOWUNRANKHINT;Show unranked images.\nShortcut: 0 +!FILEBROWSER_SHOWUNRANKHINT;Show unranked images.\nShortcut: Shift-0 !FILEBROWSER_THUMBSIZE;Thumbnail size -!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: Shift-0 +!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: 0 !FILEBROWSER_ZOOMINHINT;Increase thumbnail size.\n\nShortcuts:\n+ - Multiple Editor Tabs Mode,\nAlt-+ - Single Editor Tab Mode. !FILEBROWSER_ZOOMOUTHINT;Decrease thumbnail size.\n\nShortcuts:\n- - Multiple Editor Tabs Mode,\nAlt-- - Single Editor Tab Mode. !FILECHOOSER_FILTER_ANY;All files !FILECHOOSER_FILTER_CURVE;Curve files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !FILECHOOSER_FILTER_LCP;Lens correction profiles !FILECHOOSER_FILTER_PP;Processing profiles !FILECHOOSER_FILTER_SAME;Same format as current photo @@ -504,6 +527,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !GENERAL_NONE;None !GENERAL_OK;OK !GENERAL_OPEN;Open +!GENERAL_OTHER;Other !GENERAL_PORTRAIT;Portrait !GENERAL_RESET;Reset !GENERAL_SAVE;Save @@ -981,29 +1005,29 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_494;Capture Sharpening !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_517;Local - Enable super !HISTORY_MSG_518;Local - Lightness !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -1060,16 +1084,16 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast !HISTORY_MSG_594;Local - Local contrast radius @@ -1093,7 +1117,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_627;Local - Shadow Highlight !HISTORY_MSG_628;Local - SH Highlight @@ -1112,7 +1136,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -1122,11 +1146,11 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_655;Local - SH mask slope !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -1139,7 +1163,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -1221,7 +1245,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -1236,19 +1260,19 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_778;Local - Mask highlights !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_802;Local - Contrast threshold @@ -1271,7 +1295,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_827;Local - Exp gradient angle !HISTORY_MSG_828;Local - SH gradient strength !HISTORY_MSG_829;Local - SH gradient angle -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle !HISTORY_MSG_837;Local - Vib gradient strength C @@ -1303,7 +1327,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -1341,7 +1365,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -1353,7 +1377,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- !HISTORY_MSG_926;Local - Show mask type @@ -1463,7 +1487,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -1549,7 +1573,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -1598,16 +1622,20 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold !HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual demosaic - Contrast threshold !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input !HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HISTMATCHING;Auto-matched tone curve +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries @@ -1627,6 +1655,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -1670,6 +1699,11 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -1708,6 +1742,23 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !HISTORY_NEWSNAPSHOT;Add !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !HISTORY_SNAPSHOT;Snapshot @@ -1807,7 +1858,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b !MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s\nSave current profile (.pp3).\nShortcut: Ctrl+Shift+s !MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor -!MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e +!MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e\nCurrent editor: !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m !MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen !MAIN_FRAME_EDITOR;Editor @@ -1919,6 +1970,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !PARTIALPASTE_FLATFIELDBLURTYPE;Flat-field blur type !PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control !PARTIALPASTE_FLATFIELDFILE;Flat-field file +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer !PARTIALPASTE_IMPULSEDENOISE;Impulse noise reduction @@ -1963,6 +2015,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_SPOT;Spot removal !PARTIALPASTE_TM_FATTAL;Dynamic range compression +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer !PARTIALPASTE_VIBRANCE;Vibrance !PARTIALPASTE_VIGNETTING;Vignetting correction !PARTIALPASTE_WHITEBALANCE;White balance @@ -1986,6 +2039,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !PREFERENCES_CACHEMAXENTRIES;Maximum number of cache entries !PREFERENCES_CACHEOPTS;Cache Options !PREFERENCES_CACHETHUMBHEIGHT;Maximum thumbnail height +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CHUNKSIZES;Tiles per thread !PREFERENCES_CHUNKSIZE_RAW_AMAZE;AMaZE demosaic !PREFERENCES_CHUNKSIZE_RAW_CA;Raw CA correction @@ -2041,6 +2095,11 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output !PREFERENCES_EXTERNALEDITOR;External Editor +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_FBROWSEROPTS;File Browser / Thumbnail Options !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Compact toolbars in File Browser !PREFERENCES_FLATFIELDFOUND;Found @@ -2065,12 +2124,21 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited !PREFERENCES_LANG;Language !PREFERENCES_LANGAUTODETECT;Use system language +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders !PREFERENCES_MENUGROUPEXTPROGS;Group 'Open with' !PREFERENCES_MENUGROUPFILEOPERATIONS;Group 'File operations' !PREFERENCES_MENUGROUPPROFILEOPERATIONS;Group 'Processing profile operations' !PREFERENCES_MENUGROUPRANK;Group 'Rank' !PREFERENCES_MENUOPTIONS;Context Menu Options +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. @@ -2131,6 +2199,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !PREFERENCES_STARTUPIMDIR;Image Directory at Startup !PREFERENCES_TAB_BROWSER;File Browser !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_FAVORITES;Favorites !PREFERENCES_TAB_GENERAL;General !PREFERENCES_TAB_IMPROC;Image Processing !PREFERENCES_TAB_PERFORMANCE;Performance @@ -2139,10 +2208,27 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool !PREFERENCES_TP_LABEL;Tool panel: !PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram !PREFERENCES_WORKFLOW;Layout +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles @@ -2206,6 +2292,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point !SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) !SAVEDLG_FILEFORMAT;File format !SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options @@ -2223,6 +2310,12 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !SAVEDLG_TIFFUNCOMPRESSED;Uncompressed TIFF !SAVEDLG_WARNFILENAME;File will be named !SHCSELECTOR_TOOLTIP;Click right mouse button to reset the position of those 3 sliders. +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -2325,7 +2418,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_COLORAPP_CATSYMSPE;Mixed !TP_COLORAPP_CHROMA;Chroma (C) !TP_COLORAPP_CHROMA_S;Saturation (S) -!TP_COLORAPP_CIECAT_DEGREE;Adaptation +!TP_COLORAPP_CIECAT_DEGREE;Chromatic Adaptation Scene +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_CONTRAST;Contrast (J) !TP_COLORAPP_CONTRAST_Q;Contrast (Q) !TP_COLORAPP_CONTRAST_Q_TOOLTIP;Contrast (Q) in CIECAM is based on brightness. It differs from L*a*b* and RGB contrast. @@ -2382,6 +2476,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_COLORAPP_TCMODE_LIGHTNESS;Lightness !TP_COLORAPP_TCMODE_SATUR;Saturation !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_TONECIE;Use CIECAM for tone mapping !TP_COLORAPP_TONECIE_TOOLTIP;If this option is disabled, tone mapping is done in L*a*b* space.\nIf this option is enabled, tone mapping is done using CIECAM02.\nThe Tone Mapping tool must be enabled for this setting to take effect. @@ -2572,9 +2667,11 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_FILMNEGATIVE_LABEL;Film Negative !TP_FILMNEGATIVE_OUT_LEVEL;Output level !TP_FILMNEGATIVE_PICK;Pick neutral spots +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_RED;Red ratio !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. !TP_FILMSIMULATION_LABEL;Film Simulation !TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? @@ -2589,6 +2686,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_FLATFIELD_BT_VERTICAL;Vertical !TP_FLATFIELD_CLIPCONTROL;Clip control !TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Clip control avoids clipped highlights caused by applying the flat field. If there are already clipped highlights before applying the flat field, value 0 is used. +!TP_FLATFIELD_FROMMETADATA;From Metadata !TP_FLATFIELD_LABEL;Flat-Field !TP_GENERAL_11SCALE_TOOLTIP;The effects of this tool are only visible or only accurate at a preview scale of 1:1. !TP_GRADIENT_CENTER_X_TOOLTIP;Shift gradient to the left (negative values) or right (positive values). @@ -2602,8 +2700,10 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_GRADIENT_STRENGTH_TOOLTIP;Filter strength in stops. !TP_HLREC_BLEND;Blend !TP_HLREC_CIELAB;CIELab Blending +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_ENA_TOOLTIP;Could be activated by Auto Levels. !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_HLREC_LABEL;Highlight reconstruction !TP_HLREC_LUMINANCE;Luminance Recovery !TP_HLREC_METHOD;Method: @@ -2623,6 +2723,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !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_GAMUT;Gamut control !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 @@ -2675,6 +2776,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -2780,7 +2882,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -2810,6 +2912,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_LOCALLAB_CBDL_THRES_TOOLTIP;Prevents the sharpening of noise. !TP_LOCALLAB_CBDL_TOOLNAME;Contrast by Detail Levels !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -2832,7 +2936,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_LOCALLAB_CIEMODE_WAV;Wavelet !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -2883,12 +2987,14 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !TP_LOCALLAB_DENOI_EXP;Denoise !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -2920,7 +3026,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_LOCALLAB_EXPCOMP;Exposure compensation ƒ !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPLAPBAL_TOOLTIP;Changes the transformed/original image blend. @@ -2931,7 +3037,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -2958,6 +3064,11 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3042,6 +3153,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3093,9 +3206,11 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !TP_LOCALLAB_LUMAWHITESEST;Lightest !TP_LOCALLAB_LUMFRA;L*a*b* standard +!TP_LOCALLAB_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3114,7 +3229,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKRECOTHRES;Recovery threshold !TP_LOCALLAB_MASKREEXP_TOOLTIP;Used to modulate the effect of the 'Dynamic range and Exposure' settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the 'Dynamic range and Exposure' settings \n In between these two areas, the full value of the 'Dynamic range and Exposure' settings will be applied. @@ -3126,7 +3241,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3173,7 +3288,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3272,7 +3387,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3359,6 +3474,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3745,6 +3861,16 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;Dynamic Range Compression !TP_TM_FATTAL_THRESHOLD;Detail +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH !TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones !TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE1;Red/Purple @@ -4010,7 +4136,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_WBALANCE_AUTO;Auto !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement !TP_WBALANCE_CAMERA;Camera !TP_WBALANCE_CLOUDY;Cloudy !TP_WBALANCE_CUSTOM;Custom @@ -4036,6 +4162,36 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_WBALANCE_GREEN;Tint !TP_WBALANCE_GTI;GTI !TP_WBALANCE_HMI;HMI +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). !TP_WBALANCE_JUDGEIII;JudgeIII !TP_WBALANCE_LABEL;White Balance !TP_WBALANCE_LAMP_HEADER;Lamp @@ -4043,6 +4199,11 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_WBALANCE_LED_HEADER;LED !TP_WBALANCE_LED_LSI;LSI Lumelex 2040 !TP_WBALANCE_METHOD;Method +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. !TP_WBALANCE_PICKER;Pick !TP_WBALANCE_SHADE;Shade !TP_WBALANCE_SIZE;Size: @@ -4051,10 +4212,12 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !TP_WBALANCE_SOLUX47;Solux 4700K (vendor) !TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery) !TP_WBALANCE_SPOTWB;Use the pipette to pick the white balance from a neutral patch in the preview. -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. !TP_WBALANCE_TEMPBIAS;AWB temperature bias -!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'. +!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'.\n\nYou can use "Awb temperature bias" to adjust the "Temperature correlation" results. Each movement of this command brings a new calculation of temperature, tint and correlation. !TP_WBALANCE_TEMPERATURE;Temperature !TP_WBALANCE_TUNGSTEN;Tungsten !TP_WBALANCE_WATER1;UnderWater 1 @@ -4067,3 +4230,4 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of 'wh !ZOOMPANEL_ZOOMFITSCREEN;Fit whole image to screen\nShortcut: Alt-f !ZOOMPANEL_ZOOMIN;Zoom In\nShortcut: + !ZOOMPANEL_ZOOMOUT;Zoom Out\nShortcut: - +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US) index 40ad9c57b..a2ff103c0 100644 --- a/rtdata/languages/English (US) +++ b/rtdata/languages/English (US) @@ -53,6 +53,7 @@ !EDITWINDOW_TITLE;Image Edit !EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool. !EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve. +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 !EXIFFILTER_APERTURE;Aperture !EXIFFILTER_CAMERA;Camera !EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV) @@ -62,12 +63,16 @@ !EXIFFILTER_ISO;ISO !EXIFFILTER_LENS;Lens !EXIFFILTER_METADATAFILTER;Enable metadata filters +!EXIFFILTER_PATH;File path !EXIFFILTER_SHUTTER;Shutter +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags !EXIFPANEL_ADDEDIT;Add/Edit !EXIFPANEL_ADDEDITHINT;Add new tag or edit tag. !EXIFPANEL_ADDTAGDLG_ENTERVALUE;Enter value !EXIFPANEL_ADDTAGDLG_SELECTTAG;Select tag !EXIFPANEL_ADDTAGDLG_TITLE;Add/Edit Tag +!EXIFPANEL_BASIC_GROUP;Basic !EXIFPANEL_KEEP;Keep !EXIFPANEL_KEEPHINT;Keep the selected tags when writing output file. !EXIFPANEL_REMOVE;Remove @@ -76,8 +81,7 @@ !EXIFPANEL_RESETALL;Reset All !EXIFPANEL_RESETALLHINT;Reset all tags to their original values. !EXIFPANEL_RESETHINT;Reset the selected tags to their original values. -!EXIFPANEL_SHOWALL;Show all -!EXIFPANEL_SUBDIRECTORY;Subdirectory +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !EXPORT_BYPASS;Processing steps to bypass !EXPORT_BYPASS_ALL;Select / Unselect All !EXPORT_BYPASS_DEFRINGE;Bypass Defringe @@ -166,17 +170,18 @@ !FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version !FILEBROWSER_POPUPRENAME;Rename !FILEBROWSER_POPUPSELECTALL;Select all +!FILEBROWSER_POPUPSORTBY;Sort Files !FILEBROWSER_POPUPTRASH;Move to trash !FILEBROWSER_POPUPUNRANK;Unrank !FILEBROWSER_POPUPUNTRASH;Remove from trash !FILEBROWSER_QUERYBUTTONHINT;Clear the Find query !FILEBROWSER_QUERYHINT;Type filenames to search for. Supports partial filenames. Separate the search terms using commas, e.g.\n1001,1004,1199\n\nExclude search terms by prefixing them with !=\ne.g.\n!=1001,1004,1199\n\nShortcuts:\nCtrl-f - focus the Find box,\nEnter - search,\nEsc - clear the Find box,\nShift-Esc - defocus the Find box. !FILEBROWSER_QUERYLABEL; Find: -!FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: Shift-1 -!FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: Shift-2 -!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3 -!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4 -!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5 +!FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: 1 +!FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: 2 +!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: 3 +!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: 4 +!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: 5 !FILEBROWSER_RENAMEDLGLABEL;Rename file !FILEBROWSER_RESETDEFAULTPROFILE;Reset to default !FILEBROWSER_SELECTDARKFRAME;Select dark-frame... @@ -187,28 +192,29 @@ !FILEBROWSER_SHOWCOLORLABEL4HINT;Show images labeled Blue.\nShortcut: Alt-4 !FILEBROWSER_SHOWCOLORLABEL5HINT;Show images labeled Purple.\nShortcut: Alt-5 !FILEBROWSER_SHOWDIRHINT;Clear all filters.\nShortcut: d -!FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: 7 -!FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: 6 +!FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: Shift-7 +!FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: Shift-6 !FILEBROWSER_SHOWEXIFINFO;Show Exif info.\n\nShortcuts:\ni - Multiple Editor Tabs Mode,\nAlt-i - Single Editor Tab Mode. !FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash. !FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions. -!FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1-star.\nShortcut: 1 -!FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2-star.\nShortcut: 2 -!FILEBROWSER_SHOWRANK3HINT;Show images ranked as 3-star.\nShortcut: 3 -!FILEBROWSER_SHOWRANK4HINT;Show images ranked as 4-star.\nShortcut: 4 -!FILEBROWSER_SHOWRANK5HINT;Show images ranked as 5-star.\nShortcut: 5 +!FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1-star.\nShortcut: Shift-1 +!FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2-star.\nShortcut: Shift-2 +!FILEBROWSER_SHOWRANK3HINT;Show images ranked as 3-star.\nShortcut: Shift-3 +!FILEBROWSER_SHOWRANK4HINT;Show images ranked as 4-star.\nShortcut: Shift-4 +!FILEBROWSER_SHOWRANK5HINT;Show images ranked as 5-star.\nShortcut: Shift-5 !FILEBROWSER_SHOWRECENTLYSAVEDHINT;Show saved images.\nShortcut: Alt-7 !FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Show unsaved images.\nShortcut: Alt-6 !FILEBROWSER_SHOWTRASHHINT;Show contents of trash.\nShortcut: Ctrl-t !FILEBROWSER_SHOWUNCOLORHINT;Show images without a color label.\nShortcut: Alt-0 -!FILEBROWSER_SHOWUNRANKHINT;Show unranked images.\nShortcut: 0 +!FILEBROWSER_SHOWUNRANKHINT;Show unranked images.\nShortcut: Shift-0 !FILEBROWSER_THUMBSIZE;Thumbnail size -!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: Shift-0 +!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: 0 !FILEBROWSER_ZOOMINHINT;Increase thumbnail size.\n\nShortcuts:\n+ - Multiple Editor Tabs Mode,\nAlt-+ - Single Editor Tab Mode. !FILEBROWSER_ZOOMOUTHINT;Decrease thumbnail size.\n\nShortcuts:\n- - Multiple Editor Tabs Mode,\nAlt-- - Single Editor Tab Mode. !FILECHOOSER_FILTER_ANY;All files !FILECHOOSER_FILTER_COLPROF;Color profiles (*.icc) !FILECHOOSER_FILTER_CURVE;Curve files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !FILECHOOSER_FILTER_LCP;Lens correction profiles !FILECHOOSER_FILTER_PP;Processing profiles !FILECHOOSER_FILTER_SAME;Same format as current photo @@ -236,6 +242,7 @@ !GENERAL_NONE;None !GENERAL_OK;OK !GENERAL_OPEN;Open +!GENERAL_OTHER;Other !GENERAL_PORTRAIT;Portrait !GENERAL_RESET;Reset !GENERAL_SAVE;Save @@ -734,23 +741,23 @@ !HISTORY_MSG_494;Capture Sharpening !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -758,7 +765,7 @@ !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -817,16 +824,16 @@ !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -857,7 +864,7 @@ !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -880,7 +887,7 @@ !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -894,11 +901,11 @@ !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -911,7 +918,7 @@ !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -994,7 +1001,7 @@ !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -1013,19 +1020,19 @@ !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -1061,7 +1068,7 @@ !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -1094,7 +1101,7 @@ !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -1119,7 +1126,7 @@ !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -1133,7 +1140,7 @@ !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -1145,10 +1152,10 @@ !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -1262,7 +1269,7 @@ !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -1353,7 +1360,7 @@ !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -1405,18 +1412,22 @@ !HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold !HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual demosaic - Contrast threshold !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input !HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HISTMATCHING;Auto-matched tone curve !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries @@ -1436,6 +1447,8 @@ !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -1481,6 +1494,11 @@ !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -1520,6 +1538,23 @@ !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !HISTORY_NEWSNAPSHOT;Add !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s !HISTORY_SNAPSHOT;Snapshot @@ -1619,7 +1654,7 @@ !MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Put current image to processing queue.\nShortcut: Ctrl+b !MAIN_BUTTON_SAVE_TOOLTIP;Save current image.\nShortcut: Ctrl+s\nSave current profile (.pp3).\nShortcut: Ctrl+Shift+s !MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor -!MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e +!MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Edit current image in external editor.\nShortcut: Ctrl+e\nCurrent editor: !MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Show/hide all side panels.\nShortcut: m !MAIN_BUTTON_UNFULLSCREEN;Exit fullscreen !MAIN_FRAME_EDITOR;Editor @@ -1739,6 +1774,7 @@ !PARTIALPASTE_FLATFIELDBLURTYPE;Flat-field blur type !PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control !PARTIALPASTE_FLATFIELDFILE;Flat-field file +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_GRADIENT;Graduated filter !PARTIALPASTE_HSVEQUALIZER;HSV equalizer !PARTIALPASTE_ICMSETTINGS;Color management settings @@ -1786,6 +1822,7 @@ !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_SPOT;Spot removal !PARTIALPASTE_TM_FATTAL;Dynamic range compression +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer !PARTIALPASTE_VIBRANCE;Vibrance !PARTIALPASTE_VIGNETTING;Vignetting correction !PARTIALPASTE_WHITEBALANCE;White balance @@ -1814,6 +1851,7 @@ !PREFERENCES_CACHEMAXENTRIES;Maximum number of cache entries !PREFERENCES_CACHEOPTS;Cache Options !PREFERENCES_CACHETHUMBHEIGHT;Maximum thumbnail height +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CHUNKSIZES;Tiles per thread !PREFERENCES_CHUNKSIZE_RAW_AMAZE;AMaZE demosaic !PREFERENCES_CHUNKSIZE_RAW_CA;Raw CA correction @@ -1869,6 +1907,11 @@ !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output !PREFERENCES_EXTERNALEDITOR;External Editor +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_FBROWSEROPTS;File Browser / Thumbnail Options !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Compact toolbars in File Browser !PREFERENCES_FLATFIELDFOUND;Found @@ -1896,6 +1939,10 @@ !PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited !PREFERENCES_LANG;Language !PREFERENCES_LANGAUTODETECT;Use system language +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders !PREFERENCES_MENUGROUPEXTPROGS;Group 'Open with' !PREFERENCES_MENUGROUPFILEOPERATIONS;Group 'File operations' @@ -1903,6 +1950,11 @@ !PREFERENCES_MENUGROUPPROFILEOPERATIONS;Group 'Processing profile operations' !PREFERENCES_MENUGROUPRANK;Group 'Rank' !PREFERENCES_MENUOPTIONS;Context Menu Options +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -1966,6 +2018,7 @@ !PREFERENCES_TAB_BROWSER;File Browser !PREFERENCES_TAB_COLORMGR;Color Management !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_FAVORITES;Favorites !PREFERENCES_TAB_GENERAL;General !PREFERENCES_TAB_IMPROC;Image Processing !PREFERENCES_TAB_PERFORMANCE;Performance @@ -1974,10 +2027,31 @@ !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool !PREFERENCES_TP_LABEL;Tool panel: !PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar !PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram !PREFERENCES_WORKFLOW;Layout +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling !PROFILEPANEL_COPYPPASTE;Parameters to copy !PROFILEPANEL_GLOBALPROFILES;Bundled profiles @@ -2041,6 +2115,7 @@ !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point !SAVEDLG_AUTOSUFFIX;Automatically add a suffix if the file already exists +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) !SAVEDLG_FILEFORMAT;File format !SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_FORCEFORMATOPTS;Force saving options @@ -2060,6 +2135,13 @@ !SHCSELECTOR_TOOLTIP;Click right mouse button to reset the position of those 3 sliders. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -2176,7 +2258,8 @@ !TP_COLORAPP_CHROMA_S;Saturation (S) !TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM corresponds to the color of a stimulus in relation to its own brightness. It differs from L*a*b* and RGB saturation. !TP_COLORAPP_CHROMA_TOOLTIP;Chroma in CIECAM corresponds to the color of a stimulus relative to the clarity of a stimulus that appears white under identical conditions. It differs from L*a*b* and RGB chroma. -!TP_COLORAPP_CIECAT_DEGREE;Adaptation +!TP_COLORAPP_CIECAT_DEGREE;Chromatic Adaptation Scene +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_CONTRAST;Contrast (J) !TP_COLORAPP_CONTRAST_Q;Contrast (Q) !TP_COLORAPP_CONTRAST_Q_TOOLTIP;Contrast (Q) in CIECAM is based on brightness. It differs from L*a*b* and RGB contrast. @@ -2242,6 +2325,7 @@ !TP_COLORAPP_TCMODE_LIGHTNESS;Lightness !TP_COLORAPP_TCMODE_SATUR;Saturation !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_TONECIE;Use CIECAM for tone mapping !TP_COLORAPP_TONECIE_TOOLTIP;If this option is disabled, tone mapping is done in L*a*b* space.\nIf this option is enabled, tone mapping is done using CIECAM02.\nThe Tone Mapping tool must be enabled for this setting to take effect. @@ -2456,9 +2540,11 @@ !TP_FILMNEGATIVE_LABEL;Film Negative !TP_FILMNEGATIVE_OUT_LEVEL;Output level !TP_FILMNEGATIVE_PICK;Pick neutral spots +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_RED;Red ratio !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. !TP_FILMSIMULATION_LABEL;Film Simulation !TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? @@ -2473,6 +2559,7 @@ !TP_FLATFIELD_BT_VERTICAL;Vertical !TP_FLATFIELD_CLIPCONTROL;Clip control !TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Clip control avoids clipped highlights caused by applying the flat field. If there are already clipped highlights before applying the flat field, value 0 is used. +!TP_FLATFIELD_FROMMETADATA;From Metadata !TP_FLATFIELD_LABEL;Flat-Field !TP_GENERAL_11SCALE_TOOLTIP;The effects of this tool are only visible or only accurate at a preview scale of 1:1. !TP_GRADIENT_CENTER;Center @@ -2490,8 +2577,10 @@ !TP_HLREC_BLEND;Blend !TP_HLREC_CIELAB;CIELab Blending !TP_HLREC_COLOR;Color Propagation +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_ENA_TOOLTIP;Could be activated by Auto Levels. !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_HLREC_LABEL;Highlight reconstruction !TP_HLREC_LUMINANCE;Luminance Recovery !TP_HLREC_METHOD;Method: @@ -2511,6 +2600,7 @@ !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_GAMUT;Gamut control !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 @@ -2570,6 +2660,7 @@ !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -2588,8 +2679,6 @@ !TP_ICM_WORKING_TRC_TOOLTIP;Only for built-in profiles. !TP_IMPULSEDENOISE_LABEL;Impulse Noise Reduction !TP_IMPULSEDENOISE_THRESH;Threshold -!TP_LABCURVE_AVOIDCOLORSHIFT;Avoid color shift -!TP_LABCURVE_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab). !TP_LABCURVE_BRIGHTNESS;Lightness !TP_LABCURVE_CHROMATICITY;Chromaticity !TP_LABCURVE_CHROMA_TOOLTIP;To apply B&W toning, set Chromaticity to -100. @@ -2654,7 +2743,7 @@ !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -2680,7 +2769,7 @@ !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -2713,6 +2802,8 @@ !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -2739,7 +2830,7 @@ !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -2774,8 +2865,8 @@ !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -2802,13 +2893,15 @@ !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -2844,7 +2937,7 @@ !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -2852,12 +2945,12 @@ !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -2884,6 +2977,11 @@ !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -2972,6 +3070,8 @@ !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3032,11 +3132,13 @@ !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3068,7 +3170,7 @@ !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3093,7 +3195,7 @@ !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3143,7 +3245,7 @@ !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3236,7 +3338,7 @@ !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3248,7 +3350,7 @@ !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3337,6 +3439,7 @@ !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3733,6 +3836,16 @@ !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;Dynamic Range Compression !TP_TM_FATTAL_THRESHOLD;Detail +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_VIBRANCE_AVOIDCOLORSHIFT;Avoid color shift !TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH !TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones @@ -4009,7 +4122,7 @@ !TP_WBALANCE_AUTO;Auto !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement !TP_WBALANCE_CAMERA;Camera !TP_WBALANCE_CLOUDY;Cloudy !TP_WBALANCE_CUSTOM;Custom @@ -4036,6 +4149,45 @@ !TP_WBALANCE_GREEN;Tint !TP_WBALANCE_GTI;GTI !TP_WBALANCE_HMI;HMI +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). !TP_WBALANCE_JUDGEIII;JudgeIII !TP_WBALANCE_LABEL;White Balance !TP_WBALANCE_LAMP_HEADER;Lamp @@ -4043,6 +4195,14 @@ !TP_WBALANCE_LED_HEADER;LED !TP_WBALANCE_LED_LSI;LSI Lumelex 2040 !TP_WBALANCE_METHOD;Method +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. !TP_WBALANCE_PICKER;Pick !TP_WBALANCE_SHADE;Shade !TP_WBALANCE_SIZE;Size: @@ -4051,10 +4211,12 @@ !TP_WBALANCE_SOLUX47;Solux 4700K (vendor) !TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery) !TP_WBALANCE_SPOTWB;Use the pipette to pick the white balance from a neutral patch in the preview. -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. !TP_WBALANCE_TEMPBIAS;AWB temperature bias -!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'. +!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'.\n\nYou can use "Awb temperature bias" to adjust the "Temperature correlation" results. Each movement of this command brings a new calculation of temperature, tint and correlation. !TP_WBALANCE_TEMPERATURE;Temperature !TP_WBALANCE_TUNGSTEN;Tungsten !TP_WBALANCE_WATER1;UnderWater 1 @@ -4067,3 +4229,5 @@ !ZOOMPANEL_ZOOMFITSCREEN;Fit whole image to screen\nShortcut: Alt-f !ZOOMPANEL_ZOOMIN;Zoom In\nShortcut: + !ZOOMPANEL_ZOOMOUT;Zoom Out\nShortcut: - +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Espanol (Castellano) b/rtdata/languages/Espanol (Castellano) index ede64894f..428acf7cf 100644 --- a/rtdata/languages/Espanol (Castellano) +++ b/rtdata/languages/Espanol (Castellano) @@ -1,5 +1,7 @@ -#01 Español - Castellano -#02 2022-10-08 Francisco Lorés y Javier Bartol, para la versión 5.9 +#001 Español - Castellano +#002 2022-10-08 Francisco Lorés y Javier Bartol, para la versión 5.9 +#100 +#101 @LANGUAGE_DISPLAY_NAME=Español (Castellano) ABOUT_TAB_BUILD;Versión ABOUT_TAB_CREDITS;Reconocimientos @@ -170,11 +172,11 @@ FILEBROWSER_POPUPUNTRASH;Sacar de la papelera FILEBROWSER_QUERYBUTTONHINT;Borrar la búsqueda FILEBROWSER_QUERYHINT;Aquí se escriben los nombres de archivo que se desea buscar. También se puede indicar sólo una parte del nombre del archivo. Los términos de la búsqueda se separan mediante comas (por ej.1001,1004,1199)\nLos términos de búsqueda no deseados se pueden excluir añadiendo el prefijo !=\npor ej. !=1001,1004,1199\n\nAtajos de teclado:\nCtrl-f - lleva el foco al cuadro de texto Buscar:\nIntro - realiza la búsqueda,\nEsc - borra el cuadro de texto Buscar:\nMayús-Esc - quita el foco del cuadro de texto Buscar:. FILEBROWSER_QUERYLABEL;Buscar: -FILEBROWSER_RANK1_TOOLTIP;Rango 1 *\nAtajo de teclado: Mayús-1 -FILEBROWSER_RANK2_TOOLTIP;Rango 2 **\nAtajo de teclado: Mayús-2 -FILEBROWSER_RANK3_TOOLTIP;Rango 3 ***\nAtajo de teclado: Mayús-3 -FILEBROWSER_RANK4_TOOLTIP;Rango 4 ****\nAtajo de teclado: Mayús-4 -FILEBROWSER_RANK5_TOOLTIP;Rango 5 *****\nAtajo de teclado: Mayús-5 +FILEBROWSER_RANK1_TOOLTIP;Rango 1 *\nAtajo de teclado: 1 +FILEBROWSER_RANK2_TOOLTIP;Rango 2 **\nAtajo de teclado: 2 +FILEBROWSER_RANK3_TOOLTIP;Rango 3 ***\nAtajo de teclado: 3 +FILEBROWSER_RANK4_TOOLTIP;Rango 4 ****\nAtajo de teclado: 4 +FILEBROWSER_RANK5_TOOLTIP;Rango 5 *****\nAtajo de teclado: 5 FILEBROWSER_RENAMEDLGLABEL;Renombrar el archivo FILEBROWSER_RESETDEFAULTPROFILE;Restablecer el perfil a los valores predeterminados FILEBROWSER_SELECTDARKFRAME;Seleccionar Foto Negra... @@ -185,23 +187,23 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Muestra imágenes etiquetadas con color verde.\n FILEBROWSER_SHOWCOLORLABEL4HINT;Muestra imágenes etiquetadas con color azul.\nAtajo de teclado: Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;Muestra imágenes etiquetadas con color morado.\nAtajo de teclado: Alt-5 FILEBROWSER_SHOWDIRHINT;Quita todos los filtros.\nAtajo de teclado: d -FILEBROWSER_SHOWEDITEDHINT;Muestra las imágenes editadas.\nAtajo de teclado: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Muestra las imágenes no editadas.\nAtajo de teclado: 6 +FILEBROWSER_SHOWEDITEDHINT;Muestra las imágenes editadas.\nAtajo de teclado: Mayús-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Muestra las imágenes no editadas.\nAtajo de teclado: Mayús-6 FILEBROWSER_SHOWEXIFINFO;Muestra los datos Exif.\n\nAtajos de teclado:\ni - Modo de Editor de pestañas múltiples,\nAlt-i - Modo de Editor de pestaña única. FILEBROWSER_SHOWNOTTRASHHINT;Muestra sólo las imágenes no borradas. FILEBROWSER_SHOWORIGINALHINT;Muestra sólo las imágenes originales.\n\nCuando existen varias imágenes con el mismo nombre de archivo pero con diferentes extensiones, la que se considera original es aquella cuya extensión está más cerca de la parte superior de la lista de extensiones analizadas en Preferencias > Navegador de archivos > Extensiones analizadas. -FILEBROWSER_SHOWRANK1HINT;Muestra las imágenes con 1 estrella.\nAtajo de teclado: 1 -FILEBROWSER_SHOWRANK2HINT;Muestra las imágenes con 2 estrellas.\nAtajo de teclado: 2 -FILEBROWSER_SHOWRANK3HINT;Muestra las imágenes con 3 estrellas.\nAtajo de teclado: 3 -FILEBROWSER_SHOWRANK4HINT;Muestra las imágenes con 4 estrellas.\nAtajo de teclado: 4 -FILEBROWSER_SHOWRANK5HINT;Muestra las imágenes con 5 estrellas.\nAtajo de teclado: 5 +FILEBROWSER_SHOWRANK1HINT;Muestra las imágenes con 1 estrella.\nAtajo de teclado: Mayús-1 +FILEBROWSER_SHOWRANK2HINT;Muestra las imágenes con 2 estrellas.\nAtajo de teclado: Mayús-2 +FILEBROWSER_SHOWRANK3HINT;Muestra las imágenes con 3 estrellas.\nAtajo de teclado: Mayús-3 +FILEBROWSER_SHOWRANK4HINT;Muestra las imágenes con 4 estrellas.\nAtajo de teclado: Mayús-4 +FILEBROWSER_SHOWRANK5HINT;Muestra las imágenes con 5 estrellas.\nAtajo de teclado: Mayús-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;Muestra las imágenes guardadas recientemente.\nAtajo de teclado: Alt-7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Muestra las imágenes que no se han guardado recientemente.\nAtajo de teclado: Alt-6 FILEBROWSER_SHOWTRASHHINT;Muestra el contenido de la papelera.\nAtajo de teclado: Ctrl-t FILEBROWSER_SHOWUNCOLORHINT;Muestra las imágenes sin etiqueta de color.\nAtajo de teclado: Alt-0 -FILEBROWSER_SHOWUNRANKHINT;Muestra las imágenes sin rango.\nAtajo de teclado: 0 +FILEBROWSER_SHOWUNRANKHINT;Muestra las imágenes sin rango.\nAtajo de teclado: Mayús-0 FILEBROWSER_THUMBSIZE;Tamaño de las miniaturas -FILEBROWSER_UNRANK_TOOLTIP;Borra el rango.\nAtajo de teclado:May - 0 +FILEBROWSER_UNRANK_TOOLTIP;Borra el rango.\nAtajo de teclado:0 FILEBROWSER_ZOOMINHINT;Aumenta las miniaturas.\nAtajos de teclado:\n+ - Modo de Editor de pestañas múltiples,\nAlt-+ - Modo de Editor de Pestaña Única FILEBROWSER_ZOOMOUTHINT;Reduce las miniaturas.\nAtajos de teclado:\n- - Modo de Editor de pestañas múltiples,\nAlt-- - Modo de Editor de pestaña única FILECHOOSER_FILTER_ANY;Todos los archivos @@ -4066,3 +4068,175 @@ ZOOMPANEL_ZOOMFITSCREEN;Encajar la imagen entera en la vista previa\nAtajo de te ZOOMPANEL_ZOOMIN;Acercar\nAtajo de teclado: + ZOOMPANEL_ZOOMOUT;Alejar\nAtajo de teclado: - +!!!!!!!!!!!!!!!!!!!!!!!!! +! Untranslated keys follow; remove the ! prefix after an entry is translated. +!!!!!!!!!!!!!!!!!!!!!!!!! + +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown +!FILEBROWSER_POPUPSORTBY;Sort Files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files +!GENERAL_OTHER;Other +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold +!HISTORY_MSG_ICM_GAMUT;Gamut control +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional +!PREFERENCES_TAB_FAVORITES;Favorites +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. +!TP_FILMNEGATIVE_PICK_SIZE;Size: +!TP_FILMNEGATIVE_REF_SIZE;Size: +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed +!TP_HLREC_HLTH;Gain threshold +!TP_ICM_GAMUT;Gamut control +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Espanol (Latin America) b/rtdata/languages/Espanol (Latin America) index 56a73d30f..ddba24e8f 100644 --- a/rtdata/languages/Espanol (Latin America) +++ b/rtdata/languages/Espanol (Latin America) @@ -1,66 +1,68 @@ -#01 Latin America - Spanish -#02 Conventions used to keep the same writing style along new texts and versions -#03 -#04 Abreviaturas (Abbreviations) -#05 ----------------------------- -#06 AC: Aberración cromática (fringe) -#07 B&N: Blanco y Negro (Black & White) -#08 CV: Corrección de Viñeteado (Vignette Filter: in Transform tab) -#09 FG: Filtro Graduado (Gradient Filter) -#10 FV: Filtrar Viñeteado (Vignette Filter: in Exposure tab) -#11 MC: Mezclador de canales (Channel Mixer) -#12 RGB: Modelo de color Rojo Verde Azul (Red Green Blue) -#13 WB: Balance de blancos (White Balance) -#14 -#15 Convención de traducción de términos importantes, -#16 sin equivalente estándar o poco conocidos en español: -#17 --------------------------------------------- -#18 Artifacts: Elementos extraños -#19 Brightness: Brillo -#20 Checkbox: Casilla (seleccionada/desmarcada) -#21 Chroma: Crominancia (**, definida en es.wikipedia) -#22 Chromatic: Cromática (*) -#23 Chromaticity: Cromaticidad (**) -#24 Colorfulness: Colorido -#25 Cyan: Cian (*) -#26 Dark Frame: Toma Negra -#27 Dim: Luz tenue -#28 Feather: Difuminado -#29 Illuminant: Iluminante -#30 Lightness: Claridad -#31 Luminance: Luminancia (*) -#32 Luminosity: Luminosidad -#33 Mapping: Mapeo (*) -#34 Sharpening: Enfoque -#35 Slider: Control deslizante -#36 Tone Curve: Curva tonal -#37 Vibrance: Vibranza -#38 -#39 (*) Término incluido en diccionario RAE -#40 (**) Término no incluido en diccionario RAE -#41 -#42 Términos conservados en Inglés por no tener traducción breve -#43 al español en el sentido usado por RT/fotografía digital -#44 ----------------------------------------------------- -#45 ICM (Image Color Management) -#46 Gamut -#47 Gamma -#48 Raw -#49 -#50 2008-01-15 keenonkites, first translation -#51 2008-03-03 Ioritz Ibarguren, corrections -#52 2008-04-05 keenonkites, completed for 2.4m1 -#53 2008-04-09 Ramon, partly corrected (part of 2.3) -#54 2008-04-29 Ramon, small correction -#55 2008-06-09 Ramon, Adaptions regarding 2.4m1 and others -#56 2008-09-20 keenonkites, first version for 2.4m2 -#57 2008-12-19 keenonkites, first version for 2.4beta4 -#58 2010-12-07 rickydh, some translations of untranslated keys for 3.0 alpha1 -#59 2011-12-25 plores, translation improvement, translation of untranslated strings -#60 2013-01-03 OdeLama, translation for v4.0.12 of untranslated/changed strings -#61 2014-01-14 mapelo, bug correction and small enhancements. -#62 2014-10-10 fotger -#63 2018-12-09 Faber777 +#001 Latin America - Spanish +#002 Conventions used to keep the same writing style along new texts and versions +#003 +#004 Abreviaturas (Abbreviations) +#005 ----------------------------- +#006 AC: Aberración cromática (fringe) +#007 B&N: Blanco y Negro (Black & White) +#008 CV: Corrección de Viñeteado (Vignette Filter: in Transform tab) +#009 FG: Filtro Graduado (Gradient Filter) +#010 FV: Filtrar Viñeteado (Vignette Filter: in Exposure tab) +#011 MC: Mezclador de canales (Channel Mixer) +#012 RGB: Modelo de color Rojo Verde Azul (Red Green Blue) +#013 WB: Balance de blancos (White Balance) +#014 +#015 Convención de traducción de términos importantes, +#016 sin equivalente estándar o poco conocidos en español: +#017 --------------------------------------------- +#018 Artifacts: Elementos extraños +#019 Brightness: Brillo +#020 Checkbox: Casilla (seleccionada/desmarcada) +#021 Chroma: Crominancia (**, definida en es.wikipedia) +#022 Chromatic: Cromática (*) +#023 Chromaticity: Cromaticidad (**) +#024 Colorfulness: Colorido +#025 Cyan: Cian (*) +#026 Dark Frame: Toma Negra +#027 Dim: Luz tenue +#028 Feather: Difuminado +#029 Illuminant: Iluminante +#030 Lightness: Claridad +#031 Luminance: Luminancia (*) +#032 Luminosity: Luminosidad +#033 Mapping: Mapeo (*) +#034 Sharpening: Enfoque +#035 Slider: Control deslizante +#036 Tone Curve: Curva tonal +#037 Vibrance: Vibranza +#038 +#039 (*) Término incluido en diccionario RAE +#040 (**) Término no incluido en diccionario RAE +#041 +#042 Términos conservados en Inglés por no tener traducción breve +#043 al español en el sentido usado por RT/fotografía digital +#044 ----------------------------------------------------- +#045 ICM (Image Color Management) +#046 Gamut +#047 Gamma +#048 Raw +#049 +#050 2008-01-15 keenonkites, first translation +#051 2008-03-03 Ioritz Ibarguren, corrections +#052 2008-04-05 keenonkites, completed for 2.4m1 +#053 2008-04-09 Ramon, partly corrected (part of 2.3) +#054 2008-04-29 Ramon, small correction +#055 2008-06-09 Ramon, Adaptions regarding 2.4m1 and others +#056 2008-09-20 keenonkites, first version for 2.4m2 +#057 2008-12-19 keenonkites, first version for 2.4beta4 +#058 2010-12-07 rickydh, some translations of untranslated keys for 3.0 alpha1 +#059 2011-12-25 plores, translation improvement, translation of untranslated strings +#060 2013-01-03 OdeLama, translation for v4.0.12 of untranslated/changed strings +#061 2014-01-14 mapelo, bug correction and small enhancements. +#062 2014-10-10 fotger +#063 2018-12-09 Faber777 +#100 +#101 @LANGUAGE_DISPLAY_NAME=Español (Latinoamericano) ABOUT_TAB_BUILD;Versión ABOUT_TAB_CREDITS;Créditos @@ -222,11 +224,11 @@ FILEBROWSER_POPUPUNTRASH;Sacar de la papelera FILEBROWSER_QUERYBUTTONHINT;Borrar la búsqueda FILEBROWSER_QUERYHINT;Escriba parte del nombre del archivo a buscar, o una lista separada con comas.\nP.ej. 1001,1004,1199\n\nCtrl-F Para poner el foco en el campo Buscar.\nEnter Para iniciar la búsqueda.\nEsc Para limpiar.\nShift-Esc Para quitar el foco. FILEBROWSER_QUERYLABEL; Buscar: -FILEBROWSER_RANK1_TOOLTIP;Rango 1 *\nTecla de AtajoShift-1 -FILEBROWSER_RANK2_TOOLTIP;Rango 2 **\nTecla de AtajoShift-2 -FILEBROWSER_RANK3_TOOLTIP;Rango 3 ***\nTecla de AtajoShift-3 -FILEBROWSER_RANK4_TOOLTIP;Rango 4 ****\nTecla de AtajoShift-4 -FILEBROWSER_RANK5_TOOLTIP;Rango 5 *****\nTecla de AtajoShift-5 +FILEBROWSER_RANK1_TOOLTIP;Rango 1 *\nTecla de Atajo1 +FILEBROWSER_RANK2_TOOLTIP;Rango 2 **\nTecla de Atajo2 +FILEBROWSER_RANK3_TOOLTIP;Rango 3 ***\nTecla de Atajo3 +FILEBROWSER_RANK4_TOOLTIP;Rango 4 ****\nTecla de Atajo4 +FILEBROWSER_RANK5_TOOLTIP;Rango 5 *****\nTecla de Atajo5 FILEBROWSER_RENAMEDLGLABEL;Renombrar archivo FILEBROWSER_RESETDEFAULTPROFILE;Restablecen a los predeterminados FILEBROWSER_SELECTDARKFRAME;Seleccionar Toma Negra… @@ -237,22 +239,22 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Mostrar imágenes etiquetadas con Verde Alt-3 FILEBROWSER_SHOWCOLORLABEL4HINT;Mostrar imágenes etiquetadas con Azul Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;Mostrar imágenes etiquetadas con Púrpura Alt-5 FILEBROWSER_SHOWDIRHINT;Quitar todos los filtros.\nTecla de Atajo: d -FILEBROWSER_SHOWEDITEDHINT;Mostrar imágenes editadas.\nTecla de Atajo: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Mostrar imágenes no editadas.\nTecla de Atajo: 6 +FILEBROWSER_SHOWEDITEDHINT;Mostrar imágenes editadas.\nTecla de Atajo: Shift-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Mostrar imágenes no editadas.\nTecla de Atajo: Shift-6 FILEBROWSER_SHOWEXIFINFO;Mostrar datos Exif.\nTecla de Atajo: i\n\nTecla de Atajo en modo editor simple: Alt-I FILEBROWSER_SHOWORIGINALHINT;Muestre solo imágenes originales. \nCuando existen varias imágenes con el mismo nombre de archivo pero con diferentes extensiones, la que se considera original es aquella cuya extensión está más cerca de la parte superior de la lista de extensiones analizadas en Preferencias> Explorador de archivos> Extensiones analizadas. -FILEBROWSER_SHOWRANK1HINT;Mostrar imágenes con 1 estrella.\nTecla de Atajo: 1 -FILEBROWSER_SHOWRANK2HINT;Mostrar imágenes con 2 estrellas.\nTecla de Atajo: 2 -FILEBROWSER_SHOWRANK3HINT;Mostrar imágenes con 3 estrellas.\nTecla de Atajo: 3 -FILEBROWSER_SHOWRANK4HINT;Mostrar imágenes con 4 estrellas.\nTecla de Atajo: 4 -FILEBROWSER_SHOWRANK5HINT;Mostrar imágenes con 5 estrellas.\nTecla de Atajo: 5 +FILEBROWSER_SHOWRANK1HINT;Mostrar imágenes con 1 estrella.\nTecla de Atajo: Shift-1 +FILEBROWSER_SHOWRANK2HINT;Mostrar imágenes con 2 estrellas.\nTecla de Atajo: Shift-2 +FILEBROWSER_SHOWRANK3HINT;Mostrar imágenes con 3 estrellas.\nTecla de Atajo: Shift-3 +FILEBROWSER_SHOWRANK4HINT;Mostrar imágenes con 4 estrellas.\nTecla de Atajo: Shift-4 +FILEBROWSER_SHOWRANK5HINT;Mostrar imágenes con 5 estrellas.\nTecla de Atajo: Shift-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;Mostrar imágenes guardadas recientemente.\nTecla de Atajo: Alt-7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Mostrar imágenes no guardadas recientemente.\nTecla de Atajo: Alt-6 FILEBROWSER_SHOWTRASHHINT;Mostrar el contenido de la papelera.\nTecla de Atajo: Ctrl-t FILEBROWSER_SHOWUNCOLORHINT;Mostrar imágenes sin etiqueta de color.\nTecla de Atajo: Alt-0 -FILEBROWSER_SHOWUNRANKHINT;Mostrar imágenes sin rango.\nTecla de Atajo: 0 +FILEBROWSER_SHOWUNRANKHINT;Mostrar imágenes sin rango.\nTecla de Atajo: Shift-0 FILEBROWSER_THUMBSIZE;Tamaño miniatura -FILEBROWSER_UNRANK_TOOLTIP;Sin Rango\nTecla de AtajoShift - 0 +FILEBROWSER_UNRANK_TOOLTIP;Sin Rango\nTecla de Atajo0 FILEBROWSER_ZOOMINHINT;Agrandar miniatura.\nTecla de Atajo: +\n\nTecla de Atajo en modo editor simple: Alt-+ FILEBROWSER_ZOOMOUTHINT;Reducir miniatura.\nTecla de Atajo: -\n\nTecla de Atajo en modo editor simple: Alt-- FILECHOOSER_FILTER_ANY;Todos los archivos @@ -2286,6 +2288,12 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !!!!!!!!!!!!!!!!!!!!!!!!! !CURVEEDITOR_CATMULLROM;Flexible +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply 'find' keywords. !FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to permanently delete all %1 files in trash? !FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to permanently delete the selected %1 files? @@ -2294,10 +2302,13 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !FILEBROWSER_POPUPINSPECT;Inspect !FILEBROWSER_POPUPREMOVE;Delete permanently !FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version +!FILEBROWSER_POPUPSORTBY;Sort Files !FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash. +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !GENERAL_DELETE_ALL;Delete all !GENERAL_EDIT;Edit !GENERAL_HELP;Help +!GENERAL_OTHER;Other !HISTOGRAM_TOOLTIP_CROSSHAIR;Show/Hide indicator crosshair. !HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Toggle visibility of the scope option buttons. !HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Adjust scope brightness. @@ -2326,23 +2337,23 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_494;Capture Sharpening !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -2350,7 +2361,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -2409,16 +2420,16 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -2449,7 +2460,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -2472,7 +2483,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -2486,11 +2497,11 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -2503,7 +2514,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -2586,7 +2597,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -2605,19 +2616,19 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -2653,7 +2664,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -2686,7 +2697,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -2711,7 +2722,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -2725,7 +2736,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -2737,10 +2748,10 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -2854,7 +2865,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -2945,7 +2956,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -2976,17 +2987,21 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input !HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_PRESER;Preserve neutral @@ -2995,6 +3010,8 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_ICM_WORKING_ILLUM_METHOD;Illuminant method !HISTORY_MSG_ICM_WORKING_PRIM_METHOD;Primaries method !HISTORY_MSG_ILLUM;CAL - SC - Illuminant +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold !HISTORY_MSG_PDSHARPEN_AUTO_RADIUS;CS - Auto radius !HISTORY_MSG_PDSHARPEN_CHECKITER;CS - Auto limit iterations @@ -3025,6 +3042,11 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_SPOT_ENTRY;Spot removal - Point modif. !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -3064,6 +3086,23 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Theater !ICCPROFCREATOR_PRIM_DCIP3;DCI-P3 !INSPECTOR_WINDOW_TITLE;Inspector @@ -3073,11 +3112,14 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !MAIN_TAB_LOCALLAB;Local !MAIN_TAB_LOCALLAB_TOOLTIP;Shortcut: Alt-o !PARTIALPASTE_FILMNEGATIVE;Film negative +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_LOCALLAB;Local Adjustments !PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings !PARTIALPASTE_PREPROCWB;Preprocess White Balance !PARTIALPASTE_SPOT;Spot removal +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer !PREFERENCES_APPEARANCE_PSEUDOHIDPI;Pseudo-HiDPI mode +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CHUNKSIZES;Tiles per thread !PREFERENCES_CHUNKSIZE_RAW_AMAZE;AMaZE demosaic !PREFERENCES_CHUNKSIZE_RAW_CA;Raw CA correction @@ -3096,10 +3138,46 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_INSPECTORWINDOW;Open inspector in own window or fullscreen +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_PERFORMANCE_MEASURE;Measure !PREFERENCES_PERFORMANCE_MEASURE_HINT;Logs processing times in console !PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips +!PREFERENCES_TAB_FAVORITES;Favorites +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling !PROGRESSBAR_DECODING;Decoding... !PROGRESSBAR_GREENEQUIL;Green equilibration... @@ -3108,6 +3186,14 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !PROGRESSBAR_LINEDENOISE;Line noise filter... !PROGRESSBAR_RAWCACORR;Raw CA correction... !QUEUE_LOCATION_TITLE;Output Location +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -3121,6 +3207,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_COLORAPP_CATMOD;Mode !TP_COLORAPP_CATSYMGEN;Automatic Symmetric !TP_COLORAPP_CATSYMSPE;Mixed +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). !TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). !TP_COLORAPP_GEN;Settings @@ -3143,6 +3230,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_COLORAPP_SURROUNDSRC;Surround !TP_COLORAPP_SURSOURCE_TOOLTIP;Changes tones and colors to take into account the surround conditions of the scene lighting. The darker the surround conditions, the brighter the image will become. Image brightness will not be changed when the surround is set to average. !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. !TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. !TP_COLORAPP_YBSCEN_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. @@ -3161,12 +3249,18 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_FILMNEGATIVE_LABEL;Film Negative !TP_FILMNEGATIVE_OUT_LEVEL;Output level !TP_FILMNEGATIVE_PICK;Pick neutral spots +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_RED;Red ratio !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_FBW;Black-and-White +!TP_ICM_GAMUT;Gamut control !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_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 !TP_ICM_NEUTRAL;Reset @@ -3203,6 +3297,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -3229,7 +3324,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -3255,7 +3350,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -3288,6 +3383,8 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -3314,7 +3411,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -3349,8 +3446,8 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -3377,13 +3474,15 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -3419,7 +3518,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -3427,12 +3526,12 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -3459,6 +3558,11 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3547,6 +3651,8 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3607,11 +3713,13 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3643,7 +3751,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3668,7 +3776,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3718,7 +3826,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3811,7 +3919,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3823,7 +3931,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3912,6 +4020,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -4048,6 +4157,16 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_SPOT_ENTRYCHANGED;Point changed !TP_SPOT_HINT;Click on this button to be able to operate on the preview area.\n\nTo edit a spot, hover the white mark locating an edited area, making the editing geometry appear.\n\nTo add a spot, press Ctrl and left mouse button, drag the circle (Ctrl key can be released) to a source location, then release the mouse button.\n\nTo move the source or destination spot, hover its center then drag it.\n\nThe inner circle (maximum effect area) and the 'feather' circle can be resized by hovering them (the circle becomes orange) and dragging it (the circle becomes red).\n\nWhen the changes are done, right click outside any spot to end the Spot editing mode, or click on this button again. !TP_SPOT_LABEL;Spot Removal +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_WAVELET_BALCHROM;Equalizer Color !TP_WAVELET_BALLUM;Denoise equalizer White-Black !TP_WAVELET_BL;Blur levels @@ -4137,6 +4256,57 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !TP_WAVELET_WAVOFFSET;Offset !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index b7b2c7ec7..39811840e 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -1,4 +1,6 @@ -#01 2008-03-01 Initial translation by Hombre +#001 2008-03-01 Initial translation by Hombre +#100 +#101 @LANGUAGE_DISPLAY_NAME=Français ABOUT_TAB_BUILD;Version ABOUT_TAB_CREDITS;Crédits @@ -161,11 +163,11 @@ FILEBROWSER_POPUPUNTRASH;Retirer de la corbeille FILEBROWSER_QUERYBUTTONHINT;Effacer la recherche FILEBROWSER_QUERYHINT;Taper la partie du nom du fichier à chercher ou une liste spéarée par des virgules.\nEx: 1001.1004.1199\n\nCtrl-F pour placer le curseur dans le champ de saisie.\nEntrée pour lancer la recherche\nEsc pour effacer.\nShift-Esc pour enlever le focus. FILEBROWSER_QUERYLABEL;Chercher: -FILEBROWSER_RANK1_TOOLTIP;Rang 1 *\nRaccourci: Shift-1 -FILEBROWSER_RANK2_TOOLTIP;Rang 2 *\nRaccourci: Shift-2 -FILEBROWSER_RANK3_TOOLTIP;Rang 3 *\nRaccourci: Shift-3 -FILEBROWSER_RANK4_TOOLTIP;Rang 4 *\nRaccourci: Shift-4 -FILEBROWSER_RANK5_TOOLTIP;Rang 5 *\nRaccourci: Shift-5 +FILEBROWSER_RANK1_TOOLTIP;Rang 1 *\nRaccourci: 1 +FILEBROWSER_RANK2_TOOLTIP;Rang 2 *\nRaccourci: 2 +FILEBROWSER_RANK3_TOOLTIP;Rang 3 *\nRaccourci: 3 +FILEBROWSER_RANK4_TOOLTIP;Rang 4 *\nRaccourci: 4 +FILEBROWSER_RANK5_TOOLTIP;Rang 5 *\nRaccourci: 5 FILEBROWSER_RENAMEDLGLABEL;Renommage du fichier FILEBROWSER_RESETDEFAULTPROFILE;Réinitialise au traitement par défaut FILEBROWSER_SELECTDARKFRAME;Choisir une image de Trame Noire... @@ -176,22 +178,22 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Afficher les images avec un label Vert\nRaccourc FILEBROWSER_SHOWCOLORLABEL4HINT;Afficher les images avec un label Bleu\nRaccourci: Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;Afficher les images avec un label Pourpre\nRaccourci: Alt-5 FILEBROWSER_SHOWDIRHINT;Voir toutes les images du dossier\nRaccourci: d -FILEBROWSER_SHOWEDITEDHINT;Afficher les images éditées\nRaccourci: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Afficher les images non éditées\nRaccourci: 6 +FILEBROWSER_SHOWEDITEDHINT;Afficher les images éditées\nRaccourci: Shift-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Afficher les images non éditées\nRaccourci: Shift-6 FILEBROWSER_SHOWEXIFINFO;Montrer les infos EXIF.\nRaccourci: i\n\nRaccourcis dans le mode Éditeur Unique: Alt-i FILEBROWSER_SHOWORIGINALHINT;Voir seulement les images originales.\n\nQuand plusieurs images éxistent avec le même nom de fichier mais des extensions différentes, celle considéré originale est celle dont l'extention est au plus dans la liste des extensions dans Préférences > Navigateur de fichiers > Extensions considérées. -FILEBROWSER_SHOWRANK1HINT;Voir les images 1 étoile\nRaccourci: 1 -FILEBROWSER_SHOWRANK2HINT;Voir les images 2 étoiles\nRaccourci: 2 -FILEBROWSER_SHOWRANK3HINT;Voir les images 3 étoiles\nRaccourci: 3 -FILEBROWSER_SHOWRANK4HINT;Voir les images 4 étoiles\nRaccourci: 4 -FILEBROWSER_SHOWRANK5HINT;Voir les images 5 étoiles\nRaccourci: 5 +FILEBROWSER_SHOWRANK1HINT;Voir les images 1 étoile\nRaccourci: Shift-1 +FILEBROWSER_SHOWRANK2HINT;Voir les images 2 étoiles\nRaccourci: Shift-2 +FILEBROWSER_SHOWRANK3HINT;Voir les images 3 étoiles\nRaccourci: Shift-3 +FILEBROWSER_SHOWRANK4HINT;Voir les images 4 étoiles\nRaccourci: Shift-4 +FILEBROWSER_SHOWRANK5HINT;Voir les images 5 étoiles\nRaccourci: Shift-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;Afficher les images sauvegardées récemment\nRaccourci: Alt-7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT; Afficher les images non sauvegardées récemment\nRaccourci: Alt-6 FILEBROWSER_SHOWTRASHHINT;Voir le contenu de la corbeille\nRaccourci: Ctrl-t FILEBROWSER_SHOWUNCOLORHINT;Afficher les images sans label de couleur\nRaccourci: Alt-0 -FILEBROWSER_SHOWUNRANKHINT;Voir les images sans étoile\nRaccourci: 0 +FILEBROWSER_SHOWUNRANKHINT;Voir les images sans étoile\nRaccourci: Shift-0 FILEBROWSER_THUMBSIZE;Taille vign. -FILEBROWSER_UNRANK_TOOLTIP;Effacer le rang\nRaccourci: Shift-0 +FILEBROWSER_UNRANK_TOOLTIP;Effacer le rang\nRaccourci: 0 FILEBROWSER_ZOOMINHINT;Augmenter la taille des vignettes.\nRaccourci: +\n\nRaccourcis dans le mode Éditeur Unique: Alt-+ FILEBROWSER_ZOOMOUTHINT;Diminuer la taille des vignettes.\nRaccourci: -\n\nRaccourcis dans le mode Éditeur Unique: Alt-- FILECHOOSER_FILTER_ANY;Tous les fichiers @@ -2732,8 +2734,8 @@ TP_RGBCURVES_BLUE;B TP_RGBCURVES_CHANNEL;Canal TP_RGBCURVES_GREEN;V TP_RGBCURVES_LABEL;Courbes RVB -TP_RGBCURVES_LUMAMODE;Mode Lominosité -TP_RGBCURVES_LUMAMODE_TOOLTIP;Mode Lominosité permet de faire varier la contribution des canaux R, V et B à la luminosité de l'image, sans altérer les couleurs de l'image. +TP_RGBCURVES_LUMAMODE;Mode Luminosité +TP_RGBCURVES_LUMAMODE_TOOLTIP;Mode Luminosité permet de faire varier la contribution des canaux R, V et B à la luminosité de l'image, sans altérer les couleurs de l'image. TP_RGBCURVES_RED;R TP_ROTATE_DEGREE;Degré TP_ROTATE_LABEL;Rotation @@ -3032,6 +3034,12 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply 'find' keywords. !FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to permanently delete all %1 files in trash? !FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to permanently delete the selected %1 files? @@ -3040,10 +3048,13 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !FILEBROWSER_POPUPINSPECT;Inspect !FILEBROWSER_POPUPREMOVE;Delete permanently !FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version +!FILEBROWSER_POPUPSORTBY;Sort Files !FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash. +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !GENERAL_DELETE_ALL;Delete all !GENERAL_EDIT;Edit !GENERAL_HELP;Help +!GENERAL_OTHER;Other !HISTOGRAM_TOOLTIP_CROSSHAIR;Show/Hide indicator crosshair. !HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Toggle visibility of the scope option buttons. !HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Adjust scope brightness. @@ -3072,23 +3083,23 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_494;Capture Sharpening !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -3096,7 +3107,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -3155,16 +3166,16 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -3195,7 +3206,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -3218,7 +3229,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -3232,11 +3243,11 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -3249,7 +3260,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -3332,7 +3343,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -3351,19 +3362,19 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -3399,7 +3410,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -3432,7 +3443,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -3457,7 +3468,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -3471,7 +3482,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -3483,10 +3494,10 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -3600,7 +3611,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -3691,7 +3702,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -3722,12 +3733,16 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_PRESER;Preserve neutral @@ -3736,6 +3751,8 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_ICM_WORKING_ILLUM_METHOD;Illuminant method !HISTORY_MSG_ICM_WORKING_PRIM_METHOD;Primaries method !HISTORY_MSG_ILLUM;CAL - SC - Illuminant +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold !HISTORY_MSG_PDSHARPEN_AUTO_RADIUS;CS - Auto radius !HISTORY_MSG_PDSHARPEN_CHECKITER;CS - Auto limit iterations @@ -3763,6 +3780,11 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_SIGMATON;Toning Attenuation response !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -3802,12 +3824,32 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Theater !ICCPROFCREATOR_PRIM_DCIP3;DCI-P3 !INSPECTOR_WINDOW_TITLE;Inspector !MAIN_FRAME_PLACES_DEL;Remove !PARTIALPASTE_FILMNEGATIVE;Film negative +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_PREPROCWB;Preprocess White Balance +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CIE;Ciecam !PREFERENCES_CIEARTIF;Avoid artifacts !PREFERENCES_COMPLEXITYLOC;Default complexity for Local Adjustments @@ -3820,8 +3862,44 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_INSPECTORWINDOW;Open inspector in own window or fullscreen +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips +!PREFERENCES_TAB_FAVORITES;Favorites +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling !PROGRESSBAR_DECODING;Decoding... !PROGRESSBAR_GREENEQUIL;Green equilibration... @@ -3830,6 +3908,14 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !PROGRESSBAR_LINEDENOISE;Line noise filter... !PROGRESSBAR_RAWCACORR;Raw CA correction... !QUEUE_LOCATION_TITLE;Output Location +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -3842,6 +3928,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !TP_COLORAPP_CATMOD;Mode !TP_COLORAPP_CATSYMGEN;Automatic Symmetric !TP_COLORAPP_CATSYMSPE;Mixed +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). !TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). !TP_COLORAPP_GEN;Settings @@ -3864,12 +3951,19 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !TP_COLORAPP_SURROUNDSRC;Surround !TP_COLORAPP_SURSOURCE_TOOLTIP;Changes tones and colors to take into account the surround conditions of the scene lighting. The darker the surround conditions, the brighter the image will become. Image brightness will not be changed when the surround is set to average. !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. !TP_CROP_GTCENTEREDSQUARE;Centered square !TP_CROP_PPI;PPI !TP_DEHAZE_SATURATION;Saturation +!TP_FILMNEGATIVE_PICK_SIZE;Size: +!TP_FILMNEGATIVE_REF_SIZE;Size: +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_FBW;Black-and-White +!TP_ICM_GAMUT;Gamut control !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_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 !TP_ICM_NEUTRAL;Reset @@ -3906,6 +4000,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -3924,26 +4019,39 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !TP_LENSPROFILE_USE_GEOMETRIC;Geometric distortion !TP_LENSPROFILE_USE_HEADER;Correct !TP_LOCALLAB_AUTOGRAYCIE;Auto -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius !TP_LOCALLAB_CATAD;Chromatic adaptation/Cat16 +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROML;Chroma (C) !TP_LOCALLAB_COLOR_CIE;Color curve !TP_LOCALLAB_CURVES_CIE;Tone curve !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_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_GAMC;Gamma !TP_LOCALLAB_GAMCOL_TOOLTIP;Apply a gamma on Luminance L*a*b* datas.\nIf gamma = 3.0 Luminance 'linear' is used. !TP_LOCALLAB_GAMC_TOOLTIP;Apply a gamma on Luminance L*a*b* datas before and after treatment Pyramid 1 and Pyramid 2.\nIf gamma = 3.0 Luminance 'linear' is used. +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRAINFRA2;Coarseness !TP_LOCALLAB_HUECIE;Hue !TP_LOCALLAB_INVBL;Inverse !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMFRA;L*a*b* standard +!TP_LOCALLAB_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASKDEINV_TOOLTIP;Reverses the way the algorithm interprets the mask.\nIf checked black and very light areas will be decreased. !TP_LOCALLAB_MASKLCTHR2;Light area luma threshold !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold @@ -3956,6 +4064,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !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_RGBCURVE_TOOLTIP;In RGB mode you have 4 choices : Standard, Weighted standard, Luminance & Film-like. !TP_LOCALLAB_SATURV;Saturation (s) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_TOOLMASK_2;Wavelets !TP_LOCALLAB_WAVHUE_TOOLTIP;Allows you to reduce or increase the denoise based on hue. !TP_LOCALLAB_ZCAMFRA;ZCAM Image Adjustments @@ -3983,6 +4092,16 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !TP_RESIZE_SHORT;Short Edge !TP_SHARPENING_ITERCHECK;Auto limit iterations !TP_SHARPENING_RADIUS_BOOST;Corner radius boost +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_WAVELET_BALCHROM;Equalizer Color !TP_WAVELET_BALLUM;Denoise equalizer White-Black !TP_WAVELET_BL;Blur levels @@ -4069,6 +4188,57 @@ ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - !TP_WAVELET_WAVOFFSET;Offset !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano index e4447f7f6..1a771e8b9 100644 --- a/rtdata/languages/Italiano +++ b/rtdata/languages/Italiano @@ -1,8 +1,10 @@ -#01 2008-01-19 v2.3 breek -#02 2008-11-01 v2.4 pantaraf, chelidon, roberto -#03 2011-08-26 v3.0 joker, chelidon, ffsup2 -#04 2011-08-31 v4.0 chelidon, ffsup2 -#05 2014-04-21 crx +#001 2008-01-19 v2.3 breek +#002 2008-11-01 v2.4 pantaraf, chelidon, roberto +#003 2011-08-26 v3.0 joker, chelidon, ffsup2 +#004 2011-08-31 v4.0 chelidon, ffsup2 +#005 2014-04-21 crx +#100 +#101 @LANGUAGE_DISPLAY_NAME=Italiano ABOUT_TAB_BUILD;Versione ABOUT_TAB_CREDITS;Riconoscimenti @@ -134,11 +136,11 @@ FILEBROWSER_POPUPUNTRASH;Rimuovi dal cestino FILEBROWSER_QUERYBUTTONHINT;Azzera la ricerca FILEBROWSER_QUERYHINT;Scrivi il nome del file da cercare. Supporta nomi parziali. Separa i termini di ricerca con una virgola, ad esempio:\n1001,1004,1199\n\nScorciatoie:\nCtrl-f - Posiziona sulla Casella di Ricerca,\nInvio - ricerca,\nEsc<\b> - cancellare la Casella di Ricerca,\nShift-Esc - Toglie il fuoco dalla Casella di Ricerca. FILEBROWSER_QUERYLABEL; Cerca: -FILEBROWSER_RANK1_TOOLTIP;Punteggio 1 *\nScorciatoia: Shift-1 -FILEBROWSER_RANK2_TOOLTIP;Punteggio 2 *\nScorciatoia: Shift-2 -FILEBROWSER_RANK3_TOOLTIP;Punteggio 3 *\nScorciatoia: Shift-3 -FILEBROWSER_RANK4_TOOLTIP;Punteggio 4 *\nScorciatoia: Shift-4 -FILEBROWSER_RANK5_TOOLTIP;Punteggio 5 *\nScorciatoia: Shift-5 +FILEBROWSER_RANK1_TOOLTIP;Punteggio 1 *\nScorciatoia: 1 +FILEBROWSER_RANK2_TOOLTIP;Punteggio 2 *\nScorciatoia: 2 +FILEBROWSER_RANK3_TOOLTIP;Punteggio 3 *\nScorciatoia: 3 +FILEBROWSER_RANK4_TOOLTIP;Punteggio 4 *\nScorciatoia: 4 +FILEBROWSER_RANK5_TOOLTIP;Punteggio 5 *\nScorciatoia: 5 FILEBROWSER_RENAMEDLGLABEL;Rinomina il file FILEBROWSER_SELECTDARKFRAME;Seleziona un Dark Frame... FILEBROWSER_SELECTFLATFIELD;Seleziona un Flat Field... @@ -148,21 +150,21 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Mostra le immagini con etichetta Verde.\nScorcia FILEBROWSER_SHOWCOLORLABEL4HINT;Mostra le immagini con etichetta Blu.\nScorciatoia: Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;Mostra le immagini con etichetta Viola.\nScorciatoia: Alt-5 FILEBROWSER_SHOWDIRHINT;Rimuovi tutti i filtri.\nScorciatoia: d -FILEBROWSER_SHOWEDITEDHINT;Mostra immagini modificate.\nScorciatoia: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Mostra immagini non modificate.\nScorciatoia: 6 +FILEBROWSER_SHOWEDITEDHINT;Mostra immagini modificate.\nScorciatoia: Shift-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Mostra immagini non modificate.\nScorciatoia: Shift-6 FILEBROWSER_SHOWEXIFINFO;Mostra informazioni Exif.\nScorciatoie:\ni - Modalità a Schede Multiple,\nAlt-i - Modalità a Schede Singole. -FILEBROWSER_SHOWRANK1HINT;Mostra le immagini classificate con 1 stella.\nScorciatoia: 1 -FILEBROWSER_SHOWRANK2HINT;Mostra le immagini classificate con 2 stelle.\nScorciatoia: 2 -FILEBROWSER_SHOWRANK3HINT;Mostra le immagini classificate con 3 stelle.\nScorciatoia: 3 -FILEBROWSER_SHOWRANK4HINT;Mostra le immagini classificate con 4 stelle.\nScorciatoia: 4 -FILEBROWSER_SHOWRANK5HINT;Mostra le immagini classificate con 5 stelle.\nScorciatoia: 5 +FILEBROWSER_SHOWRANK1HINT;Mostra le immagini classificate con 1 stella.\nScorciatoia: Shift-1 +FILEBROWSER_SHOWRANK2HINT;Mostra le immagini classificate con 2 stelle.\nScorciatoia: Shift-2 +FILEBROWSER_SHOWRANK3HINT;Mostra le immagini classificate con 3 stelle.\nScorciatoia: Shift-3 +FILEBROWSER_SHOWRANK4HINT;Mostra le immagini classificate con 4 stelle.\nScorciatoia: Shift-4 +FILEBROWSER_SHOWRANK5HINT;Mostra le immagini classificate con 5 stelle.\nScorciatoia: Shift-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;Mostra le immagini salvate.\nScorciatoia: Alt-7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Mostra le immagini non salvate.\nScorciatoia: Alt-6 FILEBROWSER_SHOWTRASHHINT;Mostra il contenuto del cestino.\nScorciatoia: Ctrl-t FILEBROWSER_SHOWUNCOLORHINT;Mostra le immagini senza etichetta colorata.\nScorciatoia: Alt-0 -FILEBROWSER_SHOWUNRANKHINT;Mostra le immagini non classificate.\nScorciatoia: 0 +FILEBROWSER_SHOWUNRANKHINT;Mostra le immagini non classificate.\nScorciatoia: Shift-0 FILEBROWSER_THUMBSIZE;Dimensione miniature -FILEBROWSER_UNRANK_TOOLTIP;Nessun Punteggio.\nScorciatoia: Shift-0 +FILEBROWSER_UNRANK_TOOLTIP;Nessun Punteggio.\nScorciatoia: 0 FILEBROWSER_ZOOMINHINT;Aumenta la dimensione delle miniature.\n\nScorciatoie:\n+ - Modalità a Schede Multiple,\nAlt-+ - Modalità a Schede Singole. FILEBROWSER_ZOOMOUTHINT;Diminuisci la dimensione delle miniature.\n\nScorciatoie:\n- - Modalità a Schede Multiple,\nAlt-- - Modalità a Schede Singole. GENERAL_ABOUT;Informazioni @@ -1234,8 +1236,13 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !DYNPROFILEEDITOR_NEW;New !DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule !DYNPROFILEEDITOR_PROFILE;Processing Profile +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 !EXIFFILTER_IMAGETYPE;Image type -!EXIFPANEL_SHOWALL;Show all +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !EXPORT_BYPASS;Processing steps to bypass !EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels !EXPORT_PIPELINE;Processing pipeline @@ -1252,12 +1259,14 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !FILEBROWSER_POPUPINSPECT;Inspect !FILEBROWSER_POPUPREMOVE;Delete permanently !FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version +!FILEBROWSER_POPUPSORTBY;Sort Files !FILEBROWSER_RESETDEFAULTPROFILE;Reset to default !FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash. !FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions. !FILECHOOSER_FILTER_ANY;All files !FILECHOOSER_FILTER_COLPROF;Color profiles (*.icc) !FILECHOOSER_FILTER_CURVE;Curve files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !FILECHOOSER_FILTER_LCP;Lens correction profiles !FILECHOOSER_FILTER_PP;Processing profiles !FILECHOOSER_FILTER_SAME;Same format as current photo @@ -1269,6 +1278,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !GENERAL_EDIT;Edit !GENERAL_HELP;Help !GENERAL_OPEN;Open +!GENERAL_OTHER;Other !GENERAL_RESET;Reset !GENERAL_SAVE_AS;Save as... !GENERAL_SLIDER;Slider @@ -1524,23 +1534,23 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_494;Capture Sharpening !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -1548,7 +1558,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -1607,16 +1617,16 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -1647,7 +1657,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -1670,7 +1680,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -1684,11 +1694,11 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -1701,7 +1711,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -1784,7 +1794,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -1803,19 +1813,19 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -1851,7 +1861,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -1884,7 +1894,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -1909,7 +1919,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -1923,7 +1933,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -1935,10 +1945,10 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -2052,7 +2062,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -2143,7 +2153,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -2195,18 +2205,22 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold !HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual demosaic - Contrast threshold !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input !HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HISTMATCHING;Auto-matched tone curve !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries @@ -2226,6 +2240,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -2271,6 +2287,11 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -2310,6 +2331,23 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !ICCPROFCREATOR_COPYRIGHT;Copyright: !ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to 'RawTherapee, CC0'. !ICCPROFCREATOR_CUSTOM;Custom @@ -2403,6 +2441,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !PARTIALPASTE_FILMNEGATIVE;Film negative !PARTIALPASTE_FILMSIMULATION;Film simulation !PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_LOCALCONTRAST;Local contrast !PARTIALPASTE_LOCALLAB;Local Adjustments !PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings @@ -2421,6 +2460,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_SPOT;Spot removal !PARTIALPASTE_TM_FATTAL;Dynamic range compression +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer !PREFERENCES_APPEARANCE;Appearance !PREFERENCES_APPEARANCE_COLORPICKERFONT;Color picker font !PREFERENCES_APPEARANCE_CROPMASKCOLOR;Crop mask color @@ -2433,6 +2473,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !PREFERENCES_CACHECLEAR_ALLBUTPROFILES;Clear all cached files except for cached processing profiles: !PREFERENCES_CACHECLEAR_ONLYPROFILES;Clear only cached processing profiles: !PREFERENCES_CACHECLEAR_SAFETY;Only files in the cache are cleared. Processing profiles stored alongside the source images are not touched. +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CHUNKSIZES;Tiles per thread !PREFERENCES_CHUNKSIZE_RAW_AMAZE;AMaZE demosaic !PREFERENCES_CHUNKSIZE_RAW_CA;Raw CA correction @@ -2468,6 +2509,11 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Compact toolbars in File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. @@ -2476,7 +2522,16 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. !PREFERENCES_LANG;Language +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -2508,11 +2563,33 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show Filmstrip toolbar !PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_FAVORITES;Favorites !PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling !PROFILEPANEL_PDYNAMIC;Dynamic !PROGRESSBAR_DECODING;Decoding... @@ -2534,10 +2611,18 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) !SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -2560,6 +2645,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_COLORAPP_CATMOD;Mode !TP_COLORAPP_CATSYMGEN;Automatic Symmetric !TP_COLORAPP_CATSYMSPE;Mixed +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). !TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). !TP_COLORAPP_FREE;Free temp + tint + CAT02/16 +[output] @@ -2586,6 +2672,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_COLORAPP_SURROUNDSRC;Surround !TP_COLORAPP_SURSOURCE_TOOLTIP;Changes tones and colors to take into account the surround conditions of the scene lighting. The darker the surround conditions, the brighter the image will become. Image brightness will not be changed when the surround is set to average. !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. !TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. @@ -2723,9 +2810,11 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_FILMNEGATIVE_LABEL;Film Negative !TP_FILMNEGATIVE_OUT_LEVEL;Output level !TP_FILMNEGATIVE_PICK;Pick neutral spots +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_RED;Red ratio !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. !TP_FILMSIMULATION_LABEL;Film Simulation !TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? @@ -2733,7 +2822,10 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_FILMSIMULATION_ZEROCLUTSFOUND;Set HaldCLUT directory in Preferences !TP_FLATFIELD_CLIPCONTROL;Clip control !TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Clip control avoids clipped highlights caused by applying the flat field. If there are already clipped highlights before applying the flat field, value 0 is used. +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_APPLYBASELINEEXPOSUREOFFSET;Baseline exposure !TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Employ the embedded DCP baseline exposure offset. The setting is only available if the selected DCP has one. !TP_ICM_APPLYHUESATMAP;Base table @@ -2742,6 +2834,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_ICM_APPLYLOOKTABLE_TOOLTIP;Employ the embedded DCP look table. The setting is only available if the selected DCP has one. !TP_ICM_BPC;Black Point Compensation !TP_ICM_FBW;Black-and-White +!TP_ICM_GAMUT;Gamut control !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_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 !TP_ICM_NEUTRAL;Reset @@ -2782,6 +2875,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -2823,7 +2917,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -2849,7 +2943,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -2882,6 +2976,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -2908,7 +3004,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -2943,8 +3039,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -2971,13 +3067,15 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -3013,7 +3111,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -3021,12 +3119,12 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -3053,6 +3151,11 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3141,6 +3244,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3201,11 +3306,13 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3237,7 +3344,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3262,7 +3369,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3312,7 +3419,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3405,7 +3512,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3417,7 +3524,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3506,6 +3613,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3815,6 +3923,16 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;Dynamic Range Compression !TP_TM_FATTAL_THRESHOLD;Detail +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_WAVELET_1;Level 1 !TP_WAVELET_2;Level 2 !TP_WAVELET_3;Level 3 @@ -4066,10 +4184,61 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_WAVELET_WAVOFFSET;Offset !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. !TP_WBALANCE_PICKER;Pick -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. !TP_WBALANCE_TEMPBIAS;AWB temperature bias -!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'. +!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'.\n\nYou can use "Awb temperature bias" to adjust the "Temperature correlation" results. Each movement of this command brings a new calculation of temperature, tint and correlation. !ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: f +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese index 0f35036db..1ff7a78b6 100644 --- a/rtdata/languages/Japanese +++ b/rtdata/languages/Japanese @@ -1,4 +1,6 @@ -#Last update 10-12-2022 +#001 Last update 10-12-2022 +#100 +#101 @LANGUAGE_DISPLAY_NAME=日本語 ABOUT_TAB_BUILD;バージョン ABOUT_TAB_CREDITS;クレジット @@ -169,11 +171,11 @@ FILEBROWSER_POPUPUNTRASH;ゴミ箱から移動 FILEBROWSER_QUERYBUTTONHINT;検索ボックス内のヒントをクリア FILEBROWSER_QUERYHINT;ファイルを検索する。ファイル名の一部でも可。複数の場合は、ファイル名をカンマで区切る\n例 1001,1004,1199\n\n入力した名前以外のファイルを検索する場合は、先頭に!=を入れる\n例 !=1001,1004,1199\n\nショートカット:\nCtrl-F 検索ボックスをフォーカスにする\nEnter 検索を開始\nEsc クリア\nShift-Escフォーカスを解除 FILEBROWSER_QUERYLABEL; 検索: -FILEBROWSER_RANK1_TOOLTIP;ランク 1 *\nショートカット: Shift-1 -FILEBROWSER_RANK2_TOOLTIP;ランク 2 *\nショートカット: Shift-2 -FILEBROWSER_RANK3_TOOLTIP;ランク 3 *\nショートカット: Shift-3 -FILEBROWSER_RANK4_TOOLTIP;ランク 4 *\nショートカット: Shift-4 -FILEBROWSER_RANK5_TOOLTIP;ランク 5 *\nショートカット: Shift-5 +FILEBROWSER_RANK1_TOOLTIP;ランク 1 *\nショートカット: 1 +FILEBROWSER_RANK2_TOOLTIP;ランク 2 *\nショートカット: 2 +FILEBROWSER_RANK3_TOOLTIP;ランク 3 *\nショートカット: 3 +FILEBROWSER_RANK4_TOOLTIP;ランク 4 *\nショートカット: 4 +FILEBROWSER_RANK5_TOOLTIP;ランク 5 *\nショートカット: 5 FILEBROWSER_RENAMEDLGLABEL;ファイル名変更 FILEBROWSER_RESETDEFAULTPROFILE;デフォルトにリセット FILEBROWSER_SELECTDARKFRAME;ダークフレームの選択... @@ -184,23 +186,23 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;グリーン・ラベルの画像を表示\nシ FILEBROWSER_SHOWCOLORLABEL4HINT;ブルー・ラベルの画像を表示\nショートカット: Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;パープル・ラベルの画像を表示\nショートカット: Alt-5 FILEBROWSER_SHOWDIRHINT;全ての絞り込みをクリア\nショートカット: d -FILEBROWSER_SHOWEDITEDHINT;編集済み画像を表示\nショートカット: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;未編集画像を表示\nショートカット: 6 +FILEBROWSER_SHOWEDITEDHINT;編集済み画像を表示\nショートカット: Shift-7 +FILEBROWSER_SHOWEDITEDNOTHINT;未編集画像を表示\nショートカット: Shift-6 FILEBROWSER_SHOWEXIFINFO;EXIF情報を表示\nショートカット: i\n\nシングル編集タブのショートカット: Alt-i FILEBROWSER_SHOWNOTTRASHHINT;ゴミ箱の中にある画像だけを表示 FILEBROWSER_SHOWORIGINALHINT;元画像だけを表示\n\nファイル名は同じだが拡張子が異なる画像がある場合は、環境設定の中のファイルブラウザタブにある拡張子リストの上位に位置する拡張子を持った画像を元画像とする。 -FILEBROWSER_SHOWRANK1HINT;1つ星ランクを表示\nショートカット: 1 -FILEBROWSER_SHOWRANK2HINT;2つ星ランクを表示\nショートカット: 2 -FILEBROWSER_SHOWRANK3HINT;3つ星ランクを表示\nショートカット: 3 -FILEBROWSER_SHOWRANK4HINT;4つ星ランクを表示\nショートカット: 4 -FILEBROWSER_SHOWRANK5HINT;5つ星ランクを表示\nショートカット: 5 +FILEBROWSER_SHOWRANK1HINT;1つ星ランクを表示\nショートカット: Shift-1 +FILEBROWSER_SHOWRANK2HINT;2つ星ランクを表示\nショートカット: Shift-2 +FILEBROWSER_SHOWRANK3HINT;3つ星ランクを表示\nショートカット: Shift-3 +FILEBROWSER_SHOWRANK4HINT;4つ星ランクを表示\nショートカット: Shift-4 +FILEBROWSER_SHOWRANK5HINT;5つ星ランクを表示\nショートカット: Shift-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;最近保存された画像を表示\nショートカット: Alt-7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;最近保存されていない画像を表示\nショートカット: Alt-6 FILEBROWSER_SHOWTRASHHINT;ゴミ箱の内容を表示\nショートカット: Ctrl-t FILEBROWSER_SHOWUNCOLORHINT;カラー・ラベルのない画像を表示\nショートカット: Alt-0 -FILEBROWSER_SHOWUNRANKHINT;ランクなし画像を表示\nショートカット: 0 +FILEBROWSER_SHOWUNRANKHINT;ランクなし画像を表示\nショートカット: Shift-0 FILEBROWSER_THUMBSIZE;サムネイルのサイズ -FILEBROWSER_UNRANK_TOOLTIP;ランクなし\nショートカット: Shift-0 +FILEBROWSER_UNRANK_TOOLTIP;ランクなし\nショートカット: 0 FILEBROWSER_ZOOMINHINT;サムネイルサイズの拡大\nショートカット: +\n\nシングル編集タブのショートカット: Alt-+ FILEBROWSER_ZOOMOUTHINT;サムネイルサイズの縮小\nショートカット: -\n\nシングル編集タブのショートカット: Alt-- FILECHOOSER_FILTER_ANY;全てのファイル @@ -4069,4 +4071,172 @@ ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown +!FILEBROWSER_POPUPSORTBY;Sort Files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files +!GENERAL_OTHER;Other +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold +!HISTORY_MSG_ICM_GAMUT;Gamut control +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional +!PREFERENCES_TAB_FAVORITES;Favorites +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. +!TP_FILMNEGATIVE_PICK_SIZE;Size: +!TP_FILMNEGATIVE_REF_SIZE;Size: +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed +!TP_HLREC_HLTH;Gain threshold +!TP_ICM_GAMUT;Gamut control +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_NEUTRAL_TOOLTIP;Resets exposure sliders to neutral values.\nApplies to the same controls that Auto Levels applies to, regardless of whether you used Auto Levels or not. +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar index 6283dbe4b..5d9196542 100644 --- a/rtdata/languages/Magyar +++ b/rtdata/languages/Magyar @@ -1,15 +1,82 @@ -#01 2010-11-20 RT 3.0 alpha 1 rev. 597:fb291bf74c by Dr. Gyurkó M. 'dualon' Dávid +#01 Hungarian +#02 Conventions used to keep the same writing style along new texts and versions +#03 +#04 Rövidítések (Abbreviations) +#05 ----------------------------- +#06 KA: Kromatikus Aberráció (fringe) +#07 F&F: Fekete-Fehér (Black & White) +#08 VK: Vignetta Korrekció (Vignette Filter: in Transform tab) +#09 ÁSz: Átmenetes Szűrő (Gradient Filter) +#10 VSz: Vignetta Szűrő (Vignette Filter: in Exposure tab) +#11 CsK: Csatorna Keverő (Channel Mixer) +#12 RGB: Színmodell Piros Zöld Kék (Red Green Blue) +#13 FE: Fehéregyensúly (White Balance) +#14 ZCs: Zajcsökkentés +#15 SzMM: Színmegjelenés és Megvilágítás +#16 HDR: Magas Dinamikatartomány +#17 +#18 Fordítási konvenció a fontos kifejezésekhez: +#19 --------------------------------------------- +#20 Artifacts: Artifaktumok (from: http://home.mit.bme.hu/~hadhazi/Oktatas/OKD/diak/Kepjellemzok.pdf) +#21 Brightness: Fényerősség +#22 Checkbox: Jelölőnégyzet (kiválaszt/felold) +#23 Chroma: Színintenzitás (from: http://home.mit.bme.hu/~hadhazi/Oktatas/OKD/diak/Kepjellemzok.pdf) +#24 Chromatic: Kromatikus +#25 Chromaticity: Kromacitás +#26 Colorfulness: Színesség +#27 Cyan: Cián +#28 Dark Frame: Feketekép +#29 Dim: Sötétítés +#30 Feather: Elmosás +#31 Illuminant: Megvilágító +#32 Lightness: Világosság +#33 Luminance: Luminancia +#34 Luminosity: Fényesség +#35 Mapping: Leképezés +#36 Sharpening: Élesítés +#37 Slider: Csúszka +#38 Tone Curve: Tónusgörbe +#39 Vibrance: Vibrancia +#40 Gamut: Színskála +#41 Raw: Nyers +#42 Demosaicing: Mozaiktalanítás +#43 Inspector: Vizsgáló +#44 Filmstrip: Filmszalag +#45 Dynamic Profile Rules: Dinamikus Profilszabályok +#46 Bundled profiles: Csomagolt Profilok +#47 Inspector: Vizsgáló +#48 Preset: Előbeállítás +#49 Hue: Színárnyalat +#50 +#51 Angolról nem lefordítható kifejezések a +#52 RT/digitális fotográfiában használt formájuknak megfelelően: +#53 ----------------------------------------------------- +#54 ICM (Image Color Management) +#55 Gamma +#56 L*a*b* +#57 Pixel Shift +#58 Retinex +#59 +#60 ------------------------------------------------------ +#61 Credits: +#62 2010-11-20 RT 3.0 alpha 1 rev. 597:fb291bf74c by Dr. Gyurkó M. 'dualon' Dávid +#63 2023-08-31 RawTherapee, version nightly-github-actions-229-g5f8290140 (5.10) by Battyányi Dániel +#100 +#101 @LANGUAGE_DISPLAY_NAME=Magyar ABOUT_TAB_BUILD;Verzió ABOUT_TAB_CREDITS;Szerzők ABOUT_TAB_LICENSE;Licensz ABOUT_TAB_RELEASENOTES;Kiadási megjegyzések ABOUT_TAB_SPLASH;Splash +ADJUSTER_RESET_TO_DEFAULT;Klikk - alapértelmezett érték visszaállítása.\nCtrl+Klikk - eredeti érték visszaállítása. BATCH_PROCESSING;Kötegelt feldolgozás +CURVEEDITOR_CATMULLROM;Rugalmas CURVEEDITOR_CURVE;Görbe CURVEEDITOR_CURVES;Görbék CURVEEDITOR_CUSTOM;Egyedi CURVEEDITOR_DARKS;Sötétek +CURVEEDITOR_EDITPOINT_HINT;Csúcsok ki-/be értékeinek szerkesztésének engedélyezése.\n\nJobb-Klikk egy csúcsra a kijelöléshez.\nJobb-Klikk üres területre a csúcs kijelölésének feloldásához. CURVEEDITOR_HIGHLIGHTS;Csúcsfények CURVEEDITOR_LIGHTS;Középfények CURVEEDITOR_LINEAR;Lineáris @@ -26,6 +93,18 @@ CURVEEDITOR_TOOLTIPPASTE;Görbe beillesztése a vágólapról CURVEEDITOR_TOOLTIPSAVE;Görbe mentése CURVEEDITOR_TYPE;Típus: DIRBROWSER_FOLDERS;Mappák +DONT_SHOW_AGAIN;Ne jelenjen meg újból ez az üzenet. +DYNPROFILEEDITOR_DELETE;Törlés +DYNPROFILEEDITOR_EDIT;Szerkesztés +DYNPROFILEEDITOR_EDIT_RULE;Dinamikus Profilszabályok szerkesztése +DYNPROFILEEDITOR_ENTRY_TOOLTIP;Az egyezéskeresés kis-nagybetű érzékeny.\nHasználd a 're:' előjelet\na reguláris kifejezés bevitelére. +DYNPROFILEEDITOR_IMGTYPE_ANY;Bármely +DYNPROFILEEDITOR_IMGTYPE_HDR;HDR (Magas Dinamikatartomány) +DYNPROFILEEDITOR_MOVE_DOWN;Mozgás lefele +DYNPROFILEEDITOR_MOVE_UP;Mozgás felfele +DYNPROFILEEDITOR_NEW;Új +DYNPROFILEEDITOR_NEW_RULE;Új Dinamikus Profilszabály +DYNPROFILEEDITOR_PROFILE;Feldolgozási Profil EDITWINDOW_TITLE;Kép szerkesztése EXIFFILTER_APERTURE;Rekesz EXIFFILTER_CAMERA;Fényképezőgép @@ -71,28 +150,49 @@ EXPORT_MAXHEIGHT;Maximum magasság: EXPORT_MAXWIDTH;Maximum szélesség: EXPORT_PUTTOQUEUEFAST; Feldolgozási sorba helyezés expressz exportáláshoz EXPORT_RAW_DMETHOD;Interpoláció algoritmusa +EXPORT_USE_FAST_PIPELINE_TOOLTIP;Dedikált feldolgozási pipeline használata Gyors Export módban lévő képeken, amely a sebességet minőségre cseréli. A kép átméretezése a lehető leghamarabb történik ahelyett, hogy végén történne a normál pipeline szerint. A gyorsítás jelentős lehet, de előfordulhatnak artifaktumok és a kimenet minőségének általános degradációja. +EXPORT_USE_NORMAL_PIPELINE;Standard (Pár lépés átugrása, átméretezés a végén) +EXTPROGTARGET_1;nyers +EXTPROGTARGET_2;sorfeldolgozott FILEBROWSER_APPLYPROFILE;Feldolgozási paraméter hozzárendelése FILEBROWSER_APPLYPROFILE_PARTIAL;Profil alkalmazása (részleges) FILEBROWSER_AUTODARKFRAME;Auto referencia feketekép (dark frame) FILEBROWSER_AUTOFLATFIELD;Auto Flat Field +FILEBROWSER_BROWSEPATHBUTTONHINT;Kattints a megadott útvonal megnyitásához, a mappa újratöltéséhez és a 'find' kulcsszavak alkalmazásához. FILEBROWSER_BROWSEPATHHINT;Gépeld be az elérni kívánt útvonalat.\nCtrl-O-val tudod a fókuszt a beviteli mezőre vinni.\nEnter / Ctrl-Enter (az állományböngészőben) az ottani böngészéshez;\n\nÚtvonalrövidítések:\n ~ - felhasználói fiók (home) könyvtára\n - a felhasználó képkönyvtára FILEBROWSER_CACHE;Gyorsítótár +FILEBROWSER_CACHECLEARFROMFULL;Összes törlése, a gyorsítótárban lévő profilokkal együtt +FILEBROWSER_CACHECLEARFROMPARTIAL;Összes törlése, a gyorsítótárban lévő profilokat kivéve FILEBROWSER_CLEARPROFILE;Feldolgozási paraméter törlése +FILEBROWSER_COLORLABEL_TOOLTIP;Színcímke.\n\nHasználj leugró menüt vagy gyorsbillentyűket:\nShift-Ctrl-0 Nincs szín\nShift-Ctrl-1 Piros\nShift-Ctrl-2 Sárga\nShift-Ctrl-3 Zöld\nShift-Ctrl-4 Kék\nShift-Ctrl-5 Lila FILEBROWSER_COPYPROFILE;Feldolgozási paraméterek másolása FILEBROWSER_CURRENT_NAME;Aktuális név: FILEBROWSER_DARKFRAME;Referencia feketekép (dark frame) +FILEBROWSER_DELETEDIALOG_ALL;Biztos vagy benne, hogy véglegesen törölni akarsz minden %1 fájlt a kukában? FILEBROWSER_DELETEDIALOG_HEADER;Állománytörlés megerősítése +FILEBROWSER_DELETEDIALOG_SELECTED;Biztos vagy benne, hogy véglegesen törölni akarod a kiválasztott %1 fájlokat? +FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Biztos vagy benne, hogy véglegesen törölni akarod a kiválasztott %1 fájlokat beleértve egy sorfeldolgozott verziót? FILEBROWSER_EMPTYTRASH;Kuka ürítése +FILEBROWSER_EMPTYTRASHHINT;Összes kukában lévő fájl törlése Véglegesen. +FILEBROWSER_EXTPROGMENU;Társítás FILEBROWSER_FLATFIELD;Flat Field FILEBROWSER_MOVETODARKFDIR;Mozgatás a 'dark frame' könyvtárba FILEBROWSER_MOVETOFLATFIELDDIR;Flat Fields könyvtárba mozgatás FILEBROWSER_NEW_NAME;Új név: +FILEBROWSER_OPENDEFAULTVIEWER;Windows alapértelmezett nézegető (sorfeldolgozott) FILEBROWSER_PARTIALPASTEPROFILE;Részleges beillesztés FILEBROWSER_PASTEPROFILE;Feldolgozási paraméterek beillesztése FILEBROWSER_POPUPCANCELJOB;Eltávolítás a sorból FILEBROWSER_POPUPCOLORLABEL;Színcímke +FILEBROWSER_POPUPCOLORLABEL0;Label: Nincs +FILEBROWSER_POPUPCOLORLABEL1;Label: Piros +FILEBROWSER_POPUPCOLORLABEL2;Label: Sárga +FILEBROWSER_POPUPCOLORLABEL3;Label: Zöld +FILEBROWSER_POPUPCOLORLABEL4;Label: Kék +FILEBROWSER_POPUPCOLORLABEL5;Label: Lila FILEBROWSER_POPUPCOPYTO;Másolás máshová... FILEBROWSER_POPUPFILEOPERATIONS;Állományműveletek +FILEBROWSER_POPUPINSPECT;Vizsgálat FILEBROWSER_POPUPMOVEEND;Végére mozgatás FILEBROWSER_POPUPMOVEHEAD;Elejére mozgatás FILEBROWSER_POPUPMOVETO;Mozgatás máshová... @@ -101,6 +201,15 @@ FILEBROWSER_POPUPOPENINEDITOR;Open in Szerkesztő FILEBROWSER_POPUPPROCESS;Feldolgozási sorba helyezés FILEBROWSER_POPUPPROCESSFAST;Feldolgozási sorba helyez (expressz export) FILEBROWSER_POPUPPROFILEOPERATIONS;Profilműveletek +FILEBROWSER_POPUPRANK;Rangsorolás +FILEBROWSER_POPUPRANK0;Rang eltávolítása +FILEBROWSER_POPUPRANK1;Rang 1 * +FILEBROWSER_POPUPRANK2;Rang 2 ** +FILEBROWSER_POPUPRANK3;Rang 3 *** +FILEBROWSER_POPUPRANK4;Rang 4 **** +FILEBROWSER_POPUPRANK5;Rang 5 ***** +FILEBROWSER_POPUPREMOVE;Törlés véglegesen +FILEBROWSER_POPUPREMOVEINCLPROC;Törlés véglegesen, a sorfeldolgozott verzióval együtt. FILEBROWSER_POPUPRENAME;Átnevezés FILEBROWSER_POPUPSELECTALL;Mindent kijelöl FILEBROWSER_POPUPTRASH;Kukába dobás @@ -109,7 +218,13 @@ FILEBROWSER_POPUPUNTRASH;Visszaállítás a kukából FILEBROWSER_QUERYBUTTONHINT;Találati lista ürítése FILEBROWSER_QUERYHINT;Írd be a keresett állomány nevét vagy abból egy töredéket.\nCtrl-F megnyomásával (az állományböngészőben) a fókuszt a keresőmezőre helyezheted.\nEnter indítja a keresést. FILEBROWSER_QUERYLABEL; Keresés: +FILEBROWSER_RANK1_TOOLTIP;Rang 1 *\nGyorsbillentyű: 1 +FILEBROWSER_RANK2_TOOLTIP;Rang 2 *\nGyorsbillentyű: 2 +FILEBROWSER_RANK3_TOOLTIP;Rang 3 *\nGyorsbillentyű: 3 +FILEBROWSER_RANK4_TOOLTIP;Rang 4 *\nGyorsbillentyű: 4 +FILEBROWSER_RANK5_TOOLTIP;Rang 5 *\nGyorsbillentyű: 5 FILEBROWSER_RENAMEDLGLABEL;Fájl átnevezése +FILEBROWSER_RESETDEFAULTPROFILE;Alapértelmezett visszaállítása FILEBROWSER_SELECTDARKFRAME;Referencia feketekép kiválasztása... FILEBROWSER_SELECTFLATFIELD;Flat field kép kiválasztása FILEBROWSER_SHOWCOLORLABEL1HINT;Piros címkéjű képek megjelenítése.\nGyorsbillentyű: Alt-1 @@ -118,9 +233,11 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Zöld címkéjű képek megjelenítése.\nGyorsb FILEBROWSER_SHOWCOLORLABEL4HINT;Kék címkéjű képek megjelenítése.\nGyorsbillentyű: Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;Lila címkéjű képek megjelenítése.\nGyorsbillentyű: Alt-5 FILEBROWSER_SHOWDIRHINT;A könyvtárban lévő összes kép mutatása -FILEBROWSER_SHOWEDITEDHINT;Szerkesztett képek megjelenítése.\nGyorsbillentyű: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Még nem szerkesztett képek megjelenítése.\nGyorsbillentyű: 6 +FILEBROWSER_SHOWEDITEDHINT;Szerkesztett képek megjelenítése.\nGyorsbillentyű: Shift-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Még nem szerkesztett képek megjelenítése.\nGyorsbillentyű: Shift-6 FILEBROWSER_SHOWEXIFINFO;EXIF info megjelenítése: i +FILEBROWSER_SHOWNOTTRASHHINT;Csak a kukából hiányzó képek mutatása. +FILEBROWSER_SHOWORIGINALHINT;Csak eredeti képek mutatása.\n\nAmikor több azonos nevű kép létezik, de kiterjesztéseikben különböznek, az számít az eredetinek, amely kiterjesztése a legközelebb van a felismert kiterjesztések lista tetejéhez a Beállítások > Fájl böngésző > Felismert Kiterjesztések -ben. FILEBROWSER_SHOWRANK1HINT;1 csillaggal jelölt képek mutatása FILEBROWSER_SHOWRANK2HINT;2 csillaggal jelölt képek mutatása FILEBROWSER_SHOWRANK3HINT;3 csillaggal jelölt képek mutatása @@ -132,30 +249,62 @@ FILEBROWSER_SHOWTRASHHINT;A kuka tartalmának mutatása FILEBROWSER_SHOWUNCOLORHINT;Színcímke nélküli képek megjelenítése.\nGyorsbillentyű: Alt-0 FILEBROWSER_SHOWUNRANKHINT;Meg nem jelölt képek mutatása FILEBROWSER_THUMBSIZE;Bélyegméret +FILEBROWSER_UNRANK_TOOLTIP;Rang eltávolítása.\nGyorsbillentyű: 0 FILEBROWSER_ZOOMINHINT;Növelés FILEBROWSER_ZOOMOUTHINT;Csökkentés +FILECHOOSER_FILTER_ANY;Minden fájl +FILECHOOSER_FILTER_COLPROF;Színprofilok (*.icc) +FILECHOOSER_FILTER_CURVE;Görbefájlok +FILECHOOSER_FILTER_LCP;Objektívkorrekciós profilok +FILECHOOSER_FILTER_PP;Feldolgozási profilok +FILECHOOSER_FILTER_SAME;A jelenlegi fotó formátuma +FILECHOOSER_FILTER_TIFF;TIFF fájlok GENERAL_ABOUT;Névjegy GENERAL_AFTER;Utána +GENERAL_APPLY;Alkalmazás +GENERAL_ASIMAGE;Mint Kép +GENERAL_AUTO;Automatikus GENERAL_BEFORE;Előtte GENERAL_CANCEL;Mégsem +GENERAL_CLOSE;Bezárás +GENERAL_CURRENT;Jelenlegi +GENERAL_DELETE_ALL;Összes törlése GENERAL_DISABLE;Kikapcsol GENERAL_DISABLED;Kikapcsolva +GENERAL_EDIT;Szerkesztés GENERAL_ENABLE;Engedélyez GENERAL_ENABLED;Engedélyezve GENERAL_FILE;Állomány +GENERAL_HELP;Segítség GENERAL_LANDSCAPE;Fekvő GENERAL_NA;n/a GENERAL_NO;Nem GENERAL_NONE;Nincs GENERAL_OK;OK +GENERAL_OPEN;Megnyitás GENERAL_PORTRAIT;Álló +GENERAL_RESET;Visszaállítás GENERAL_SAVE;Mentés +GENERAL_SAVE_AS;Mentés másként +GENERAL_SLIDER;Csúszka GENERAL_UNCHANGED;(Változatlan) -HISTOGRAM_TOOLTIP_B;Kék csatorna hisztogrammja (mutat/elrejt) +GENERAL_WARNING;Figyelem +GIMP_PLUGIN_INFO;Üdvözlünk a RawTherapee GIMP plugin-ban!\nAmikor végeztél a szerkesztéssel, egyszerűen zárd be a fő RawTherapee ablakot, és a kép automatikusan importálódik a GIMP-be. +HISTOGRAM_TOOLTIP_B;Kék csatorna hisztogramja (mutat/elrejt) HISTOGRAM_TOOLTIP_BAR;RGB jelzősáv megjelenítése/elrejtése.\nKattints jobb gombbal a kép előnézetére a fagyasztáshoz / feloldáshoz. -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_CHRO;Kromacitás hisztogram (mutat/elrejt). +HISTOGRAM_TOOLTIP_CROSSHAIR;Indikátor célkereszt (mutat/elrejt). +HISTOGRAM_TOOLTIP_G;Zöld csatorna hisztogramja (mutat/elrejt) +HISTOGRAM_TOOLTIP_L;CIELAB Luminancia hisztogram (mutat/elrejt) +HISTOGRAM_TOOLTIP_MODE;Váltás lineáris, logaritmikus-lineáris és logaritmikus-logaritmikus hisztogramskálázás között. +HISTOGRAM_TOOLTIP_R;Piros csatorna hisztogramja (mutat/elrejt) +HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Szkóp opciógombok (mutat/elrejt). +HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Szkóp világosság állítása. +HISTOGRAM_TOOLTIP_TYPE_HISTOGRAM;Hisztogram +HISTOGRAM_TOOLTIP_TYPE_HISTOGRAM_RAW;Raw hisztogram +HISTOGRAM_TOOLTIP_TYPE_VECTORSCOPE_HC;Színárnyalat-Színintenzitás Vektorszkóp +HISTOGRAM_TOOLTIP_TYPE_VECTORSCOPE_HS;Színárnyalat-Színtelítettség Vektorszkóp +HISTOGRAM_TOOLTIP_TYPE_WAVEFORM;Hullámformátum HISTORY_CHANGED;Változott HISTORY_CUSTOMCURVE;Saját görbe HISTORY_FROMCLIPBOARD;Vágólapról @@ -306,27 +455,243 @@ HISTORY_MSG_162;Tónustérképezés HISTORY_MSG_163;RGB görbék - R HISTORY_MSG_164;RGB görbék - G HISTORY_MSG_165;RGB görbék - B +HISTORY_MSG_166;Exponálás - Visszaállítás +HISTORY_MSG_167;Mozaikmentesítési módszer +HISTORY_MSG_168;L*a*b* - KK görbe +HISTORY_MSG_169;L*a*b* - KH görbe +HISTORY_MSG_170;Vibrancia - HH görbe +HISTORY_MSG_171;L*a*b* - LK görbe +HISTORY_MSG_172;L*a*b* - LK korlátozás +HISTORY_MSG_173;ZCs - Részlet visszaállítás +HISTORY_MSG_174;Szín Megjelenés & Megvilágítás +HISTORY_MSG_175;SzMM - SC - Alkalmazkodás +HISTORY_MSG_177;SzMM - SC - Abszolút luminancia +HISTORY_MSG_178;SzMM - VC - Abszolút luminancia +HISTORY_MSG_179;SzMM - SC - WP modell +HISTORY_MSG_180;SzMM - IA - Világosság (J) +HISTORY_MSG_182;SzMM - SC - Auto alkalmazkodás +HISTORY_MSG_183;SzMM - IA - Kontraszt (J) +HISTORY_MSG_185;SzMM - Színskála kontroll +HISTORY_MSG_186;SzMM - IA - Algoritmus +HISTORY_MSG_187;SzMM - IA - Piros/bőr védelem +HISTORY_MSG_188;SzMM - IA - Világosság (Q) +HISTORY_MSG_189;SzMM - IA - Kontraszt (Q) +HISTORY_MSG_190;SzMM - IA - Színtelítettség (S) +HISTORY_MSG_191;SzMM - IA - Színesség (M) +HISTORY_MSG_193;SzMM - IA - Tónus görbe 1 +HISTORY_MSG_194;SzMM - IA - Tónus görbe 2 +HISTORY_MSG_195;SzMM - IA - Tónus görbe 1 mód +HISTORY_MSG_196;SzMM - IA - Tónus görbe 2 mód +HISTORY_MSG_197;SzMM - IA - Színgörbe +HISTORY_MSG_198;SzMM - IA - Színgörbe mód +HISTORY_MSG_199;SzMM - IA - CAM kimenet használata hisztogramokhoz. +HISTORY_MSG_200;SzMM - IA - CAM használata tónustérképezéshez. +HISTORY_MSG_201;ZCs - Krominancia - P&Z +HISTORY_MSG_202;ZCs - Krominancia - K&S +HISTORY_MSG_203;ZCs - Színtér +HISTORY_MSG_204;LMMSE feljavító lépések +HISTORY_MSG_205;SzMM - Hot/bad pixel szűrő +HISTORY_MSG_206;SzMM - SC - Auto abszolút luminancia +HISTORY_MSG_207;Szegélyelmosás - Hue görbe +HISTORY_MSG_210;ÁSz - Szög +HISTORY_MSG_211;Átmenetes szűrő +HISTORY_MSG_212;VF - Erősség +HISTORY_MSG_214;Fekete-Fehér +HISTORY_MSG_215;Fekete&Fehér - CM - Piros +HISTORY_MSG_216;Fekete&Fehér - CM - Zöld +HISTORY_MSG_217;Fekete&Fehér - CM - Kék +HISTORY_MSG_218;Fekete&Fehér - Gamma - Piros +HISTORY_MSG_219;Fekete&Fehér - Gamma - Zöld +HISTORY_MSG_220;Fekete&Fehér - Gamma - Kék +HISTORY_MSG_221;Fekete&Fehér - Színszűrő +HISTORY_MSG_223;Fekete&Fehér - CM - Narancssárga +HISTORY_MSG_224;Fekete&Fehér - CM - Citromsárga +HISTORY_MSG_225;Fekete&Fehér - CM - Cián +HISTORY_MSG_226;Fekete&Fehér - CM - Magenta +HISTORY_MSG_227;Fekete&Fehér - CM - Lila +HISTORY_MSG_228;Fekete&Fehér - Luminancia kiegyenlítő +HISTORY_MSG_229;Fekete&Fehér - Luminancia kiegyenlítő +HISTORY_MSG_230;Fekete&Fehér - Mód +HISTORY_MSG_231;Fekete&Fehér - 'Előtte' görbe +HISTORY_MSG_232;Fekete&Fehér - 'Előtte' görbe típusa +HISTORY_MSG_233;Fekete&Fehér - 'Utána' görbe +HISTORY_MSG_234;Fekete&Fehér - 'Utána' görbe típusa +HISTORY_MSG_235;Fekete&Fehér - CM - Auto +HISTORY_MSG_237;Fekete&Fehér - CM +HISTORY_MSG_238;GF - Pehely +HISTORY_MSG_239;ÁSz - Erősség +HISTORY_MSG_240;ÁSz - Közép +HISTORY_MSG_242;VF - Kerekség +HISTORY_MSG_243;VC - Sugár +HISTORY_MSG_244;VC - Erősség +HISTORY_MSG_245;VC - Közép +HISTORY_MSG_246;L*a*b* - KL görbe +HISTORY_MSG_247;L*a*b* - LH görbe +HISTORY_MSG_248;L*a*b* - HH görbe +HISTORY_MSG_249;CbDL - Határ +HISTORY_MSG_251;Fekete&Fehér - Algoritmus +HISTORY_MSG_253;CbDL - Artifaktumok csökkentése +HISTORY_MSG_254;CbDL - Bőr hue +HISTORY_MSG_255;ZSz - Medián Szűrő +HISTORY_MSG_256;ZSz - Medián - Típus +HISTORY_MSG_257;Szín Tónusozás +HISTORY_MSG_258;SzT - Színgörbe +HISTORY_MSG_259;SzT - Átlátszatlanság görbe +HISTORY_MSG_260;SzT - a*[b*] átlátszatlanság +HISTORY_MSG_261;SzT - Metódus +HISTORY_MSG_262;SzT - b* átlátszatlanság +HISTORY_MSG_263;SzT - Árnyékok - Piros +HISTORY_MSG_264;SzT - Árnyékok - Zöld +HISTORY_MSG_265;SzT - Árnyékok - Kék +HISTORY_MSG_266;SzT - Közepes - Piros +HISTORY_MSG_267;SzT - Közepes - Zöld +HISTORY_MSG_268;SzT - Közepes - Kék +HISTORY_MSG_269;SzT - Magas - Piros +HISTORY_MSG_270;SzT - Magas - Zöld +HISTORY_MSG_271;SzT - Magas - Kék +HISTORY_MSG_272;SzT - Egyensúlyozás +HISTORY_MSG_273;SzT - Színegyensúly ÁKM +HISTORY_MSG_276;SzT - Átlátszatlanság +HISTORY_MSG_278;SzT - Luminancia megőrzése +HISTORY_MSG_279;SzT - Árnyékok +HISTORY_MSG_280;SzT - Csúcsfények +HISTORY_MSG_281;SzT - Színtelítettség erősség +HISTORY_MSG_282;SzT - Színtelítettség küszöb +HISTORY_MSG_283;SzT - Erősség +HISTORY_MSG_284;SzT - Auto színtelítettség védelem +HISTORY_MSG_285;ZCs - Medián - Metódus +HISTORY_MSG_286;ZCs - Medián - Típus +HISTORY_MSG_287;ZCs - Medián - Iterációk +HISTORY_MSG_290;Fekete Szint - Piros +HISTORY_MSG_291;Fekete Szint - Zöld +HISTORY_MSG_292;Fekete Szint - Kék +HISTORY_MSG_293;Filmszimuláció +HISTORY_MSG_294;Filmszimuláció - Erősség +HISTORY_MSG_295;Filmszimuláció - Film +HISTORY_MSG_296;ZCs - Luminancia görbe +HISTORY_MSG_297;ZCs - Mód +HISTORY_MSG_298;Halott pixel szűrő +HISTORY_MSG_299;ZCs - Krominancia görbe +HISTORY_MSG_301;ZCs - Luma kontroll +HISTORY_MSG_302;ZCs - Színintenzitás metódusa +HISTORY_MSG_303;ZCs - Színintenzitás metódusa +HISTORY_MSG_304;W - Kontraszt szintek +HISTORY_MSG_305;Wavelet Szintek +HISTORY_MSG_306;W - Folyamat +HISTORY_MSG_307;W - Folyamat +HISTORY_MSG_308;W - Folyamatirány +HISTORY_MSG_309;W - ES - Részlet +HISTORY_MSG_311;W - Wavelet szintek +HISTORY_MSG_314;W - Színskála - Artifaktumok csökkentése +HISTORY_MSG_317;W - Színskála - Bőr hue +HISTORY_MSG_318;W - Kontraszt - Finomabb szintek +HISTORY_MSG_319;W - Kontraszt - Finomabb tartomány +HISTORY_MSG_320;W - Kontraszt - Durvább tartomány +HISTORY_MSG_321;W - Kontraszt - Durvább szintek +HISTORY_MSG_322;W - Színskála - Színeltolódás elkerülése +HISTORY_MSG_323;W - ES - Helyi kontraszt +HISTORY_MSG_324;W - Színintenzitás - Pasztell +HISTORY_MSG_325;W - Színintenzitás - Telített +HISTORY_MSG_326;W - Színintenzitás - Metódus +HISTORY_MSG_327;W - Kontraszt - Alkalmazás rá +HISTORY_MSG_328;W - Színintenzitás - Link erősség +HISTORY_MSG_329;W - Tónusozás - Átlátszatlanság PZ +HISTORY_MSG_330;W - Tónusozás - Átlátszatlanság KS +HISTORY_MSG_331;W - Kontraszt szintek - Extra HISTORY_NEWSNAPSHOT;Új HISTORY_SNAPSHOT;Pillanatkép HISTORY_SNAPSHOTS;Pillanatképek +ICCPROFCREATOR_COPYRIGHT;Szerzői jog: +ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Visszaállítás az alapértelmezett szerzői jogra, amely 'RawTherapee, CC0'-nak van megadva. +ICCPROFCREATOR_CUSTOM;Egyedi +ICCPROFCREATOR_DESCRIPTION;Leírás: +ICCPROFCREATOR_DESCRIPTION_ADDPARAM;Gamma- és lejtőértékek illesztése a leírás végére. +ICCPROFCREATOR_DESCRIPTION_TOOLTIP;Hagyd üresen az alapértelmezett leírás használatához. +ICCPROFCREATOR_GAMMA;Gamma +ICCPROFCREATOR_ICCVERSION;ICC verzió: +ICCPROFCREATOR_ILL;Megvilágító: +ICCPROFCREATOR_ILL_41;D41 +ICCPROFCREATOR_ILL_50;D50 +ICCPROFCREATOR_ILL_55;D55 +ICCPROFCREATOR_ILL_60;D60 +ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Színház +ICCPROFCREATOR_ILL_65;D65 +ICCPROFCREATOR_ILL_80;D80 +ICCPROFCREATOR_ILL_DEF;Alapértelmezett +ICCPROFCREATOR_ILL_INC;StdA 2856K +ICCPROFCREATOR_ILL_TOOLTIP;Beállíthatod a megvilágítót ICC v4 és ICC v2 profiloknál. +ICCPROFCREATOR_PRIMARIES;Elsődlegesek: +ICCPROFCREATOR_PRIM_ACESP0;ACES AP0 +ICCPROFCREATOR_PRIM_ACESP1;ACES AP1 +ICCPROFCREATOR_PRIM_ADOBE;Adobe RGB (1998) +ICCPROFCREATOR_PRIM_BEST;BestRGB +ICCPROFCREATOR_PRIM_BETA;BetaRGB +ICCPROFCREATOR_PRIM_BLUX;Kék X +ICCPROFCREATOR_PRIM_BLUY;Kék Y +ICCPROFCREATOR_PRIM_BRUCE;BruceRGB +ICCPROFCREATOR_PRIM_DCIP3;DCI-P3 +ICCPROFCREATOR_PRIM_GREX;Zöld X +ICCPROFCREATOR_PRIM_GREY;Zöld Y +ICCPROFCREATOR_PRIM_PROPH;Prophoto +ICCPROFCREATOR_PRIM_REC2020;Rec2020 +ICCPROFCREATOR_PRIM_REDX;Piros X +ICCPROFCREATOR_PRIM_REDY;Piros Y +ICCPROFCREATOR_PRIM_SRGB;sRGB +ICCPROFCREATOR_PRIM_TOOLTIP;Beállíthatsz egyedi elsődlegeseket ICC v4 és ICC v2 profiloknál. +ICCPROFCREATOR_PRIM_WIDEG;Széles színskála (Widegamut) +ICCPROFCREATOR_PROF_V2;ICC v2 +ICCPROFCREATOR_PROF_V4;ICC v4 +ICCPROFCREATOR_SAVEDIALOG_TITLE;ICC profil mentése másként +ICCPROFCREATOR_SLOPE;Lejtő +ICCPROFCREATOR_TRC_PRESET;Tónus válaszgörbe. +INSPECTOR_WINDOW_TITLE;Vizsgáló IPTCPANEL_CATEGORY;Kategória +IPTCPANEL_CATEGORYHINT;Azonosítja a kép tárgyát a ellátó véleménye szerint. IPTCPANEL_CITY;Város +IPTCPANEL_CITYHINT;Add meg a képen szereplő város nevét. IPTCPANEL_COPYHINT;IPTC beállítások másolása a vágólapra +IPTCPANEL_COPYRIGHT;Szerzői jogi megjegyzés +IPTCPANEL_COPYRIGHTHINT;Adj meg egy megjegyzést a kép szerzői jogának jelenlegi tulajdonosáról (pl.: ©2008 Jane Doe). IPTCPANEL_COUNTRY;Ország +IPTCPANEL_COUNTRYHINT;Add meg a képen szereplő ország nevét. +IPTCPANEL_CREATOR;Készítő +IPTCPANEL_CREATORHINT;Add meg a képet készítő személy nevét. +IPTCPANEL_CREATORJOBTITLE;Készítő munkatitulusa +IPTCPANEL_CREATORJOBTITLEHINT;Add meg a Készítő pontban megadott személy munkatitulusát. IPTCPANEL_CREDIT;Rendelkező IPTCPANEL_CREDITHINT;A kép kibocsájtójának neve (nem feltétlenül a szerző) (Credit) IPTCPANEL_DATECREATED;Dátum +IPTCPANEL_DATECREATEDHINT;Add meg a kép készítésének dátumát. +IPTCPANEL_DESCRIPTION;Leírás +IPTCPANEL_DESCRIPTIONHINT;Adj meg egy 'képaláírást' amely leírja, hogy kivel, mi, miért történik a képen. Ide tartozhatnak emberek nevei, és/vagy a szerepük a képen történő éseményekben. +IPTCPANEL_DESCRIPTIONWRITER;Leírás írója +IPTCPANEL_DESCRIPTIONWRITERHINT;Add meg annak a nevét, akinek szerepe volt a kép leírásának írásában, szerkesztésében, javításában. IPTCPANEL_EMBEDDED;Beágyazott IPTCPANEL_EMBEDDEDHINT;A betöltött képbe ágyazott információk kiolvasása IPTCPANEL_HEADLINE;Főcím +IPTCPANEL_HEADLINEHINT;Adj meg egy rövid, kiadható vázlatot vagy összegzést a kép tartalmáról. IPTCPANEL_INSTRUCTIONS;Útmutatás +IPTCPANEL_INSTRUCTIONSHINT;Adj meg információkat embargókról és egyéb korlátozásokról, amelyeket nem tartalmaz a Szerzői jog pont. IPTCPANEL_KEYWORDS;Kulcsszavak +IPTCPANEL_KEYWORDSHINT;Adj meg bármennyi kulcsszavat, fogalmat vagy kifejezést, amelyekkel a kép témája leírható. IPTCPANEL_PASTEHINT;IPTC beállítások beillesztése a vágólapról +IPTCPANEL_PROVINCE;Tartomány vagy állam +IPTCPANEL_PROVINCEHINT;Add meg a képen szereplő tartomány vagy állam nevét. IPTCPANEL_RESET;Visszaállítás IPTCPANEL_RESETHINT;Visszatérés az aktuális profil alapértékéhez IPTCPANEL_SOURCE;Forrás +IPTCPANEL_SOURCEHINT;Add meg vagy szerkeszd annak a személynek a nevét, akinek szerepe van az tartalom ellátási láncában (pl.: személy/entitás akitől ezt a képet kaptad). +IPTCPANEL_SUPPCATEGORIES;Kiegészítő kategóriák +IPTCPANEL_SUPPCATEGORIESHINT;Tovább finomítja a kép tárgyát. IPTCPANEL_TITLE;Címke +IPTCPANEL_TITLEHINT;Adj meg egy rövid, sokat mondó és ember által olvasható nevet a képnek, ez akár a fájlnév is lehet. +IPTCPANEL_TRANSREFERENCE;Munkaazonosító +IPTCPANEL_TRANSREFERENCEHINT;Adj meg egy számot vagy azonosítót, amely szükséges a munkafolyamat irányításához vagy nyomon követéséhez. MAIN_BUTTON_FULLSCREEN;Teljes képernyő +MAIN_BUTTON_ICCPROFCREATOR;ICC Profilkészítő +MAIN_BUTTON_NAVNEXT_TOOLTIP;A Szerkesztőben megnyitott képet követő képhez navigálás.\nGyorsbillentyű: Shift-F4\n\nA Fájl böngészőben vagy Filmszalagban jelenleg kijelölt ikont követő képhez navigálás.\nGyorsbillentyű: F4 +MAIN_BUTTON_NAVPREV_TOOLTIP;A Szerkesztőben megnyitott képet megelőző képhez navigálás.\nGyorsbillentyű: Shift-F3\n\nA Fájl böngészőben vagy Filmszalagban jelenleg kijelölt ikont megelőző képhez navigálás.\nGyorsbillentyű: F3 +MAIN_BUTTON_NAVSYNC_TOOLTIP;A Fájl böngészőben vagy Filmszalag szinkronizálása a Szerkesztővel a jelenleg megnyitott kép ikonjának felfedéséért, és minden aktív szűrő törlése.\nGyorsbillentyű: x\n\nMint fentebb, de az aktív szűrők törlése nélkül.\nGyorsbillentyű: y\n(Vedd figyelembe, hogy a megnyitott kép ikonja nem fog megjelenni, amennyiben az ki van szűrve). MAIN_BUTTON_PREFERENCES;Beállítások MAIN_BUTTON_PUTTOQUEUE;Feldolgozási sorba helyez MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Add hozzá a kiválasztott képet a feldolgozási sorhoz Ctrl+B @@ -342,6 +707,7 @@ MAIN_FRAME_FILEBROWSER;Állományböngésző MAIN_FRAME_FILEBROWSER_TOOLTIP; Állományböngésző.\nGyorsbillentyű: Ctrl-F2 MAIN_FRAME_PLACES;Helyek MAIN_FRAME_PLACES_ADD;Hozzáadás +MAIN_FRAME_PLACES_DEL;Eltávolítás MAIN_FRAME_QUEUE;Kötegelt feldolgozási sor MAIN_FRAME_QUEUE_TOOLTIP; Feldolgozási sor.\nGyorsbillentyű: Ctrl-F3 MAIN_FRAME_RECENT;Legutóbbi könyvtárak @@ -351,8 +717,16 @@ MAIN_MSG_CANNOTSAVE;Hiba történt az állomány mentése közben! MAIN_MSG_CANNOTSTARTEDITOR;A megadott külső program nem indítható. MAIN_MSG_CANNOTSTARTEDITOR_SECONDARY;Állítsa be a helyes elérési utat a "Beállítások" ablakban. MAIN_MSG_EMPTYFILENAME;Üres állománynév +MAIN_MSG_IMAGEUNPROCESSED;Ez a parancs előbb az összes kiválasztott kép sorfeldolgozását igényli. MAIN_MSG_NAVIGATOR;Navigátor +MAIN_MSG_OPERATIONCANCELLED;Művelet megszakítva +MAIN_MSG_PATHDOESNTEXIST;Az elérési út\n\n%1\n\nnem létezik. Adj meg egy helyes utat a Beállításokban. MAIN_MSG_QOVERWRITE;Felülírjam? +MAIN_MSG_SETPATHFIRST;Előbb be kell állítanod egy célútvonalat a Beállításokban ennek a funkciónak a használatához! +MAIN_MSG_TOOMANYOPENEDITORS;Túl sok szerkesztő van megnyitva.\nZárj be egy szerkesztőt a folytatáshoz. +MAIN_MSG_WRITEFAILED;Sikertelen írás\n'%1'\n\nBizonyosodj meg róla, hogy a mappa létezik, és ahhoz írási jogosultsággal rendelkezel. +MAIN_TAB_ADVANCED;Haladó +MAIN_TAB_ADVANCED_TOOLTIP;Gyorsbillentyű: Alt-a MAIN_TAB_COLOR;Színek MAIN_TAB_COLOR_TOOLTIP;Gyorsbillentyű: Alt-C MAIN_TAB_DETAIL;Részletek @@ -362,14 +736,23 @@ MAIN_TAB_EXIF;EXIF MAIN_TAB_EXPORT; Exportálás MAIN_TAB_EXPOSURE;Expozíció MAIN_TAB_EXPOSURE_TOOLTIP;Gyorsbillentyű: Alt-E +MAIN_TAB_FAVORITES;Kedvencek +MAIN_TAB_FAVORITES_TOOLTIP;Gyorsbillentyű: Alt-u MAIN_TAB_FILTER;Szűrők +MAIN_TAB_INSPECT;Vizsgálat MAIN_TAB_IPTC;IPTC +MAIN_TAB_LOCALLAB;Helyi +MAIN_TAB_LOCALLAB_TOOLTIP;Gyorsbillentyű: Alt-o MAIN_TAB_METADATA;Metaadatok MAIN_TAB_METADATA_TOOLTIP;Gyorsbillentyű: Alt-M MAIN_TAB_RAW;Raw MAIN_TAB_RAW_TOOLTIP;Gyorsbillentyű: Alt-R MAIN_TAB_TRANSFORM;Transzformáció MAIN_TAB_TRANSFORM_TOOLTIP;Gyorsbillentyű: Alt-T +MAIN_TOOLTIP_BACKCOLOR0;Előnézet háttérszíne: téma alapú\nGyorsbillentyű: 9 +MAIN_TOOLTIP_BACKCOLOR1;Előnézet háttérszíne: fekete\nnGyorsbillentyű: 9 +MAIN_TOOLTIP_BACKCOLOR2;Előnézet háttérszíne: fehér\nnGyorsbillentyű: 9 +MAIN_TOOLTIP_BACKCOLOR3;Előnézet háttérszíne: középszürke\nnGyorsbillentyű: 9 MAIN_TOOLTIP_BEFOREAFTERLOCK;Zárolás / Feloldás az Előtte nézetben\n\nZárolás: az Előtte nézet változatlanul tartása.\nHasznos több eszköz összeadódó hatásának megítélésére.\nSegítségével az előzményekben szereplő bármely állapot összehasonlítható a zárolttal.\n\nFeloldás: az Előtte nézet egy lépéssel követi az Utánanézetet, vagyis a legutoljára használt eszköz előtti állapotot mutatja. MAIN_TOOLTIP_HIDEHP;Az előzményeket is tartalmazó bal panel elrejtése/megjelenítése (Gyorsbillentyű: H) MAIN_TOOLTIP_INDCLIPPEDH;Túlexponált területek jelzése @@ -379,76 +762,170 @@ MAIN_TOOLTIP_PREVIEWFOCUSMASK;A fókuszmaszk előnézete.\nGyorsbillenty MAIN_TOOLTIP_PREVIEWG;A Green csatorna előnézete.\nGyorsbillentyű: g MAIN_TOOLTIP_PREVIEWL;A luminencia (luminosity) előnézete.\nGyorsbillentyű: v\n\n0.299*R + 0.587*G + 0.114*B MAIN_TOOLTIP_PREVIEWR;A vörös csatorna előnézete.\nGyorsbillentyű: r +MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the sharpening contrast mask.\nnGyorsbillentyű: p\n\nCsak akkor működik, ha az élesítés be van kapcsolva, és a zoom >=100%. MAIN_TOOLTIP_QINFO;Néhány fontos információ megjelenítése a képről MAIN_TOOLTIP_SHOWHIDELP1;Bal oldali panel megjelenítése/elrejtése.\nGyorsbillentyű: l MAIN_TOOLTIP_SHOWHIDERP1;Jobb oldali panel megjelenítése/elrejtése.\nGyorsbillentyű: Alt-L MAIN_TOOLTIP_SHOWHIDETP1;Felső panel megjelenítése/elrejtése.\nGyorsbillentyű: Shift-L MAIN_TOOLTIP_THRESHOLD;Küszöb MAIN_TOOLTIP_TOGGLE;Előtte/utána nézet be- és kikapcsolása B +MONITOR_PROFILE_SYSTEM;Rendszer alapértelmezettje +NAVIGATOR_B;Kék: +NAVIGATOR_G;Zöld: +NAVIGATOR_H;H: +NAVIGATOR_LAB_A;a*: +NAVIGATOR_LAB_B;b*: +NAVIGATOR_LAB_L;L*: +NAVIGATOR_NA; -- +NAVIGATOR_R;Piros: +NAVIGATOR_S;S: +NAVIGATOR_V;V: +NAVIGATOR_XY_FULL;Szélesség: %1, Magasság: %2 NAVIGATOR_XY_NA;x = n/a, y = n/a +OPTIONS_BUNDLED_MISSING;A csomagolt profilok '%1' nem találhatóak!\n\nA telepített másolatod sérült lehet.\n\nAz alapértelmezett belsős értékek lesznek használva helyettük. +OPTIONS_DEFIMG_MISSING;Az alapértelmezett profil a nem nyers fotókhoz nem található, vagy nincsen beállítva.\n\nEllenőrizd a profilok könyvtárát. Lehet hogy hiányzik, vagy sérült.\n\n'%1' lesz használva helyette. +OPTIONS_DEFRAW_MISSING;Az alapértelmezett profil a nyers fotókhoz nem található, vagy nincsen beállítva.\n\nEllenőrizd a profilok könyvtárát. Lehet hogy hiányzik, vagy sérült.\n\n'%1' lesz használva helyette. +PARTIALPASTE_ADVANCEDGROUP;Haladó Beállítások PARTIALPASTE_BASICGROUP;Alapbeállítások PARTIALPASTE_CACORRECTION;Kromatikus aberráció PARTIALPASTE_CHANNELMIXER;Színkeverő +PARTIALPASTE_CHANNELMIXERBW;Fekete-Fehér PARTIALPASTE_COARSETRANS;90 fokonkénti forgatás/tükrözés +PARTIALPASTE_COLORAPP;Színmegjelenés és Megvilágítás PARTIALPASTE_COLORGROUP;Színeket érintő beállítások +PARTIALPASTE_COLORTONING;Színtónusozás PARTIALPASTE_COMMONTRANSFORMPARAMS;Automatikus bejelölés PARTIALPASTE_COMPOSITIONGROUP;Kompozíciós beállítások PARTIALPASTE_CROP;Vágás PARTIALPASTE_DARKFRAMEAUTOSELECT;Referencia feketekép (dark frame) automatikus kiválasztása PARTIALPASTE_DARKFRAMEFILE;Referencia feketekép (dark frame) állomány PARTIALPASTE_DEFRINGE;Színihiba-javítás (defringe) +PARTIALPASTE_DEHAZE;Ködeltávolítás PARTIALPASTE_DETAILGROUP;Képrészlet-beállítások PARTIALPASTE_DIALOGLABEL;Feldolgozási beállítások részleges alkalmazása PARTIALPASTE_DIRPYRDENOISE;Zajszűrés PARTIALPASTE_DIRPYREQUALIZER;Kontraszt részletek szerint PARTIALPASTE_DISTORTION;Torzítás PARTIALPASTE_EPD;Tónustérképezés +PARTIALPASTE_EQUALIZER;Wavelet szintek PARTIALPASTE_EVERYTHING;Minden PARTIALPASTE_EXIFCHANGES;EXIF változtatások PARTIALPASTE_EXPOSURE;Expozíció +PARTIALPASTE_FILMNEGATIVE;Film negatív +PARTIALPASTE_FILMSIMULATION;Film szimuláció PARTIALPASTE_FLATFIELDAUTOSELECT;FF automatikus kiválasztása PARTIALPASTE_FLATFIELDBLURRADIUS;FF elmosás sugara PARTIALPASTE_FLATFIELDBLURTYPE;FF elmosás típusa +PARTIALPASTE_FLATFIELDCLIPCONTROL;FF klip kontroll PARTIALPASTE_FLATFIELDFILE;Flat field (FF) állomány +PARTIALPASTE_GRADIENT;Átmenetes szűrő PARTIALPASTE_HSVEQUALIZER;HSV Equalizer PARTIALPASTE_ICMSETTINGS;ICM beállítások PARTIALPASTE_IMPULSEDENOISE;Impulse zajszűrés PARTIALPASTE_IPTCINFO;IPTC információk PARTIALPASTE_LABCURVE;Lab görbe PARTIALPASTE_LENSGROUP;Objektív optikai hibáinak javítása +PARTIALPASTE_LENSPROFILE;Profilozott Objektívkorrekció +PARTIALPASTE_LOCALCONTRAST;Helyi kontraszt +PARTIALPASTE_LOCALLAB;Helyi Igazítások +PARTIALPASTE_LOCALLABGROUP;Helyi Igazítás Beállítások +PARTIALPASTE_METADATA;Metaadat mód PARTIALPASTE_METAGROUP;Metaadat +PARTIALPASTE_PCVIGNETTE;Vignetta Szűrő PARTIALPASTE_PERSPECTIVE;Perspektíva +PARTIALPASTE_PREPROCESS_DEADPIXFILT;Halottpixel szűrő PARTIALPASTE_PREPROCESS_GREENEQUIL;Zöldegyensúly +PARTIALPASTE_PREPROCESS_HOTPIXFILT;Forrópixel szűrő PARTIALPASTE_PREPROCESS_LINEDENOISE;Soronkénti zajszűrés +PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF vonalszűrő +PARTIALPASTE_PREPROCWB;Fehéregyensúly előfeldolgozása +PARTIALPASTE_PRSHARPENING;Átméretezés utáni élesítés PARTIALPASTE_RAWCACORR_AUTO;CA autokorrekció +PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;KA színeltolódás elkerülése +PARTIALPASTE_RAWCACORR_CAREDBLUE;KA piros & kék PARTIALPASTE_RAWEXPOS_BLACK;Feketeszint PARTIALPASTE_RAWEXPOS_LINEAR;Raw fehérszint lineáris korrekciós faktor (FÉ) PARTIALPASTE_RAWGROUP;Raw beállítások +PARTIALPASTE_RAW_BORDER;Nyers határ PARTIALPASTE_RAW_DCBENHANCE;DCB javítási lépés alkalmazása PARTIALPASTE_RAW_DCBITERATIONS;DCB iterációk száma PARTIALPASTE_RAW_DMETHOD;Interpoláció algoritmusa PARTIALPASTE_RAW_FALSECOLOR;Interpolációs hamis szín javítási lépések +PARTIALPASTE_RAW_IMAGENUM;Szubkép +PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE feljavító lépések +PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift PARTIALPASTE_RESIZE;Átméretezés +PARTIALPASTE_RETINEX;Retinex PARTIALPASTE_RGBCURVES;RGB görbék PARTIALPASTE_ROTATION;Forgatás PARTIALPASTE_SHADOWSHIGHLIGHTS;Árnyékos/Világos részek PARTIALPASTE_SHARPENEDGE;Élek PARTIALPASTE_SHARPENING;Élesítés PARTIALPASTE_SHARPENMICRO;Mikrokontraszt +PARTIALPASTE_SOFTLIGHT;Szórt fény +PARTIALPASTE_SPOT;Folteltávolítás +PARTIALPASTE_TM_FATTAL;Magas Dinamikatartomány (HDR) PARTIALPASTE_VIBRANCE;Vibrancia PARTIALPASTE_VIGNETTING;Peremsötétedés PARTIALPASTE_WHITEBALANCE;Fehéregyensúly PREFERENCES_ADD;Hozzáadás +PREFERENCES_APPEARANCE;Megjelenés +PREFERENCES_APPEARANCE_COLORPICKERFONT;Színválasztó betűtípusa +PREFERENCES_APPEARANCE_CROPMASKCOLOR;Vágómaszk színe +PREFERENCES_APPEARANCE_MAINFONT;Főbetűtípus +PREFERENCES_APPEARANCE_NAVGUIDECOLOR;Navigátor útmutató színe +PREFERENCES_APPEARANCE_PSEUDOHIDPI;Pszeudo-magasDPI mód +PREFERENCES_APPEARANCE_THEME;Téma PREFERENCES_APPLNEXTSTARTUP;újraindítás után érvényes PREFERENCES_AUTOMONPROFILE;Oprendszerben beállított monitor-színprofil automatikus használata +PREFERENCES_AUTOSAVE_TP_OPEN;Mentő eszköz összezárt/szétnyílt állapota kilépéskor PREFERENCES_BATCH_PROCESSING;Kötegelt feldolgozás +PREFERENCES_BEHADDALL;Mindet 'Hozzáadás'-ra +PREFERENCES_BEHADDALLHINT;Minden paraméter Hozzáadás módra állítása.\nA paraméterek állítása a csoport eszközpanelen delta értékeket eredményez. PREFERENCES_BEHAVIOR;Viselkedés +PREFERENCES_BEHSETALL;Mindet 'Beállít'-ra +PREFERENCES_BEHSETALLHINT;Minden paraméter Beállít módra állítása.\nA paraméterek állítása a csoport eszközpanelen abszolút értékeket eredményez, a valós értékek jelennek meg. +PREFERENCES_CACHECLEAR;Törlés +PREFERENCES_CACHECLEAR_ALL;Összes fájl törlése a gyorsítótárból: +PREFERENCES_CACHECLEAR_ALLBUTPROFILES;Összes fájl törlése a gyorsítótárból a feldolgozási profilok kivételével: +PREFERENCES_CACHECLEAR_ONLYPROFILES;Kizárólag a feldolgozási profilok törlése a gyorsítótárból: +PREFERENCES_CACHECLEAR_SAFETY;Kizárólag a gyorsítótárban lévő fájlok törlődnek. A forrásfájlok mellett tárolt feldolgozási profilok érintetlenül maradnak. PREFERENCES_CACHEMAXENTRIES;Gyorsítótárban tárolt képek max. száma PREFERENCES_CACHEOPTS;Gyorsítótár beállítások PREFERENCES_CACHETHUMBHEIGHT;Előnézeti kép maximális magassága +PREFERENCES_CHUNKSIZES;Csempe / Szál +PREFERENCES_CHUNKSIZE_RAW_AMAZE;AMaZE mozaiktalanítás +PREFERENCES_CHUNKSIZE_RAW_CA;Nyers KA korrekció +PREFERENCES_CHUNKSIZE_RAW_RCD;RCD mozaiktalanítás +PREFERENCES_CHUNKSIZE_RAW_XT;Xtrans mozaiktalanítás +PREFERENCES_CHUNKSIZE_RGB;RGB Feldolgozás +PREFERENCES_CIE;Ciecam +PREFERENCES_CIEARTIF;Artifaktumok elkerülése PREFERENCES_CLIPPINGIND;Kiégett és bebukott részek jelzése +PREFERENCES_CLUTSCACHE;HaldCLUT Gyorsítótár +PREFERENCES_CLUTSCACHE_LABEL;Gyorsítótárban lévő CLUT-ok maximális száma +PREFERENCES_CLUTSDIR;HaldCLUT könyvtár +PREFERENCES_CMMBPC;Feketepont kompenzáció +PREFERENCES_COMPLEXITYLOC;Alapértelmezett komplexitás Helyi Igazításhoz +PREFERENCES_COMPLEXITY_EXP;Haladó +PREFERENCES_COMPLEXITY_NORM;Standard +PREFERENCES_COMPLEXITY_SIMP;Alap +PREFERENCES_CROP;Vágás szerkesztés +PREFERENCES_CROP_AUTO_FIT;Automatikus közelítés vágáshoz illesztéshez. +PREFERENCES_CROP_GUIDES;Megjelenített útmutatók a vágás szerkesztésén kívül +PREFERENCES_CROP_GUIDES_FRAME;Keret +PREFERENCES_CROP_GUIDES_FULL;Eredeti +PREFERENCES_CROP_GUIDES_NONE;Üres +PREFERENCES_CURVEBBOXPOS;A görbe másolás & beillesztés gombok helye +PREFERENCES_CURVEBBOXPOS_ABOVE;Fent +PREFERENCES_CURVEBBOXPOS_BELOW;Lent +PREFERENCES_CURVEBBOXPOS_LEFT;Bal +PREFERENCES_CURVEBBOXPOS_RIGHT;Jobb PREFERENCES_CUSTPROFBUILD;Egyedi profil készítő PREFERENCES_CUSTPROFBUILDHINT;Executable (or script) file called when a new initial profile should be generated for an image.\nReceives command line params to allow a rules based .pp3 generation:\n[Path raw/JPG] [Path default profile] [f-no] [exposure in secs] [focal length in mm] [ISO] [Lens] [Camera] +PREFERENCES_CUSTPROFBUILDKEYFORMAT;Kulcsformátum +PREFERENCES_CUSTPROFBUILDKEYFORMAT_NAME;Név +PREFERENCES_CUSTPROFBUILDKEYFORMAT_TID;Címke azonosító PREFERENCES_CUSTPROFBUILDPATH;Indítóállomány útvonala PREFERENCES_DARKFRAMEFOUND;Találat PREFERENCES_DARKFRAMESHOTS;kép @@ -456,58 +933,106 @@ PREFERENCES_DARKFRAMETEMPLATES;sablonok PREFERENCES_DATEFORMAT;Dátumformátum PREFERENCES_DATEFORMATHINT;A következő jeleket lehet használni:\n%y : év\n%m : hónap\n%d : nap\n\nPéldául a magyar dátumformátum:\n%y/%m/%d PREFERENCES_DIRDARKFRAMES;Dark frame könyvtára +PREFERENCES_DIRECTORIES;Könyvtárak PREFERENCES_DIRHOME;Saját könyvtár PREFERENCES_DIRLAST;Utoljára látogatott könyvtár PREFERENCES_DIROTHER;Más PREFERENCES_DIRSELECTDLG;Képek könyvtára induláskor... PREFERENCES_DIRSOFTWARE;Telepítés helye +PREFERENCES_EDITORCMDLINE;Egyedi parancssor PREFERENCES_EDITORLAYOUT;Szerkesztési mód +PREFERENCES_EXTEDITOR_BYPASS_OUTPUT_PROFILE;Kimeneti profil átugrása +PREFERENCES_EXTEDITOR_DIR;Kimeneti könyvtár +PREFERENCES_EXTEDITOR_DIR_CURRENT;A bemeneti képpel megegyező +PREFERENCES_EXTEDITOR_DIR_CUSTOM;Egyedi +PREFERENCES_EXTEDITOR_DIR_TEMP;Operációs Rendszer átmeneti könyvtára +PREFERENCES_EXTEDITOR_FLOAT32;32-bit lebegőpontos TIFF kimenet PREFERENCES_EXTERNALEDITOR;Külső képszerkesztő program PREFERENCES_FBROWSEROPTS;Állományböngésző beállításai +PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Kompakt eszköztár a Fájl böngészőben PREFERENCES_FLATFIELDFOUND;Találat PREFERENCES_FLATFIELDSDIR;Flat Fields könyvtár PREFERENCES_FLATFIELDSHOTS;kép PREFERENCES_FLATFIELDTEMPLATES;sablonok PREFERENCES_FORIMAGE;Egyéb képekhez PREFERENCES_FORRAW;RAW állományokhoz +PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Azonos ikonmagasság a Filmszalag és a Fájl böngésző között +PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Különböző ikonméretek használata több feldolgozási időt fog igénybe venni minden alkalommal, amikor az egyedi Szerkesztő fül és a Fájl böngésző között váltassz. PREFERENCES_GIMPPATH;GIMP telepítési könyvtára PREFERENCES_HISTOGRAMPOSITIONLEFT;Hisztogram a bal oldali panelen +PREFERENCES_HISTOGRAM_TOOLTIP;He be van kapcsolva, a munkaprofil lesz használva a fő hisztogram és a Navigátorpanel számításához. Máskülönben a gamma-javított kimenet használatos. PREFERENCES_HLTHRESHOLD;Küszöbérték kiégett területekhez PREFERENCES_ICCDIR;ICC profilok könyvtára PREFERENCES_IMPROCPARAMS;Alapértelmezett feldolgozási paraméterek +PREFERENCES_INSPECTORWINDOW;A vizsgáló megnyitása a saját ablakában vagy teljes képernyős módban +PREFERENCES_INSPECT_LABEL;Vizsgálat +PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Gyorsítótárban tárolt képek max. száma +PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;A gyorsítótárban lévő képek maximális számának beállítása amikor a kurzor felettük van a Fájlböngészőben. Kevés RAM-al (2GB) rendelkező rendszer esetén ezt az értéket 1-re vagy 2-re érdemes állítani. PREFERENCES_INTENT_ABSOLUTE;Abszolút kolorimetrikus PREFERENCES_INTENT_PERCEPTUAL;Perceptuális PREFERENCES_INTENT_RELATIVE;Relatív kolorimetrikus PREFERENCES_INTENT_SATURATION;Színtelítettség PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Nyers beágyazott előnézeti kép megjelenése, amíg szerkesztetlen a kép +PREFERENCES_LANG;Nyelv PREFERENCES_LANGAUTODETECT;Oprendszer nyelvének használata +PREFERENCES_MAXRECENTFOLDERS;A legutóbbi mappák maximális száma. +PREFERENCES_MENUGROUPEXTPROGS;Csoportos 'Megnyitás mással' PREFERENCES_MENUGROUPFILEOPERATIONS;Állományműveletek csoportosítása PREFERENCES_MENUGROUPLABEL;Címkézés csoportosítása PREFERENCES_MENUGROUPPROFILEOPERATIONS;Profilműveletek csoportosítása PREFERENCES_MENUGROUPRANK;Értékelés csoportosítása PREFERENCES_MENUOPTIONS;Menübeállítások +PREFERENCES_MONINTENT;Alapértelmezett renderelési szándék +PREFERENCES_MONITOR;Monitor +PREFERENCES_MONPROFILE;Alapértelmezett színprofil +PREFERENCES_MONPROFILE_WARNOSX;MayOS korlátozásoknak köszönhetően kizárólag sRGB támogatott. PREFERENCES_MULTITAB;Több szerkesztőfül PREFERENCES_MULTITABDUALMON;Több fül mód második kijelzővel (ha elérhető) +PREFERENCES_NAVIGATIONFRAME;Navigáció PREFERENCES_OVERLAY_FILENAMES;Állománynevek megjelenítése az előnézeti képeken +PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Fájlnevek megjelenítése a szerkesztőpanel ikonjain PREFERENCES_OVERWRITEOUTPUTFILE;A már létező kimeneti állományok felülírása PREFERENCES_PANFACTORLABEL;Faktor PREFERENCES_PARSEDEXT;Felismert kiterjesztések PREFERENCES_PARSEDEXTADD;Kiterjesztés hozzáadása PREFERENCES_PARSEDEXTADDHINT;A kiterjesztés beírása után ez a gomb felveszi a listára PREFERENCES_PARSEDEXTDELHINT;A kiválasztott sor törlése a listából +PREFERENCES_PARSEDEXTDOWNHINT;A kiválasztott kiterjesztések lefele mozgatása a listán. +PREFERENCES_PARSEDEXTUPHINT;A kiválasztott kiterjesztések felfele mozgatása a listán. +PREFERENCES_PERFORMANCE_MEASURE;Mérés +PREFERENCES_PERFORMANCE_MEASURE_HINT;A feldolgozási időket a konzolon naplózza. +PREFERENCES_PERFORMANCE_THREADS;Szálak +PREFERENCES_PERFORMANCE_THREADS_LABEL;A Zajcsökkentéshez és a Wavelet szintekhez használt szálak maximális száma (0 = Automatikus) +PREFERENCES_PREVDEMO;Előnézet mozaiktalanítási módszere +PREFERENCES_PREVDEMO_FAST;Gyors +PREFERENCES_PREVDEMO_LABEL;Az előnézethez használt mozaiktalanítási módszer <100%-os zoom--nál: +PREFERENCES_PREVDEMO_SIDECAR;Mint a PP3-ban PREFERENCES_PROFILEHANDLING;Feldolgozási paraméterek kezelése PREFERENCES_PROFILELOADPR;Ha mindkét helyen van feldolgozási paraméter PREFERENCES_PROFILEPRCACHE;A gyorsítótárban lévőt használja PREFERENCES_PROFILEPRFILE;A kép mellettit használja +PREFERENCES_PROFILESAVEBOTH;Feldolgozási profil mentése mind a gyorsítótárba mind a bemeneti fájl mellé. PREFERENCES_PROFILESAVECACHE;Feldolgozási paraméterek mentése a gyorsítótárba PREFERENCES_PROFILESAVEINPUT;Feldolgozási paraméterek mentése a kép mellé +PREFERENCES_PROFILESAVELOCATION;Feldolgozási profil mentésének helye +PREFERENCES_PROFILE_NONE;Nincs PREFERENCES_PROPERTY;Property +PREFERENCES_PRTINTENT;Renderelési szándék +PREFERENCES_PRTPROFILE;Színprofil PREFERENCES_PSPATH;Adobe Photoshop telepítési könyvtára +PREFERENCES_REMEMBERZOOMPAN;A zoom % és a pásztázási eltolás megjegyzése +PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;A jelenlegi kép zoom %-ának és az pásztázási eltolásának megjegyzése új kép megnyitásakor.\n\nEz a beállítás kizárólag az 'Egyetlen Szerkesztőfül Mód'-ban működik amikor a 'Az előnézethez használt mozaiktalanítási módszer <100%-os zoom-nál' beállítás értéke 'Mint a PP3-ban' +PREFERENCES_SAVE_TP_OPEN_NOW;A mentési eszköz összecsukott/kinyitott jelenlegi állapota PREFERENCES_SELECTLANG;Nyelv kiválasztása +PREFERENCES_SERIALIZE_TIFF_READ;TIFF Beolvasási beállítások +PREFERENCES_SERIALIZE_TIFF_READ_LABEL;TIFF fájlok beolvasásának sorozatosítása +PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;Ennek bekapcsolásával a tömörítetlen TIFF fájlokat tartalmazó mappák feldolgozásakor az ikongenerálás teljesítménye javulhat. PREFERENCES_SET;Beállítás PREFERENCES_SHOWBASICEXIF;Fontosabb EXIF információk megjelenítése PREFERENCES_SHOWDATETIME;Felvétel dátumának és idejének megjelenítése PREFERENCES_SHOWEXPOSURECOMPENSATION;Expozíciókompenzáció megjelenítése +PREFERENCES_SHOWFILMSTRIPTOOLBAR;Filmszalag eszköztárának megjelenítése +PREFERENCES_SHOWTOOLTIP;A Helyi igazítások tanácsok megjelenítése PREFERENCES_SHTHRESHOLD;Küszöbérték bebukott árnyékokhoz PREFERENCES_SINGLETAB;Egyetlen szerkesztőfül PREFERENCES_SINGLETABVERTAB;Egyetlen fül mód, függőleges előnézeti képek @@ -518,19 +1043,32 @@ PREFERENCES_SND_THRESHOLDSECS;másodperc után PREFERENCES_STARTUPIMDIR;Képek könyvtára induláskor PREFERENCES_TAB_BROWSER;Fájl böngésző PREFERENCES_TAB_COLORMGR;Színkezelés +PREFERENCES_TAB_DYNAMICPROFILE;Dinamikus Profilszabályok PREFERENCES_TAB_GENERAL;Általános PREFERENCES_TAB_IMPROC;Képfeldolgozás +PREFERENCES_TAB_PERFORMANCE;Teljesítmény PREFERENCES_TAB_SOUND;Hangok -PREFERENCES_TP_LABEL;Eszközök panel: +PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Beágyazott JPEG előnézet +PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Megjelenítendő kép +PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Semleges nyers renderelés +PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Természetes JPEG, ha teljes méretű, máskülönben semleges nyers +PREFERENCES_TP_LABEL;Eszközpanel: PREFERENCES_TP_VSCROLLBAR;Függőleges görgetősáv elrejtése +PREFERENCES_USEBUNDLEDPROFILES;Csomagolt Profilok használata PREFERENCES_WORKFLOW;Munkamenet +PREFERENCES_ZOOMONSCROLL;Képek zoomolása görgetéssel PROFILEPANEL_COPYPPASTE;Másolandó paraméterek +PROFILEPANEL_GLOBALPROFILES;Csomagolt profilok PROFILEPANEL_LABEL;Feldolgozási beállítások PROFILEPANEL_LOADDLGLABEL;Feldolgozási beállítások betöltése... PROFILEPANEL_LOADPPASTE;Betöltendő paraméterek +PROFILEPANEL_MODE_TOOLTIP;Feldolgozási profilok kitöltési módja.\n\nGomblenyomásra: a részleges profilok teljes profilokká lesznek alakítva; a hiányzó értékek beépített alapértelmezettekre lesznek cserélve.\n\nGombfelengedésre: a profilok úgy lesznek alkalmazva ahogy vannak, csak azok az értékek változnak meg, amelyeket a profilok tartalmaznak. +PROFILEPANEL_MYPROFILES;Profiljaim PROFILEPANEL_PASTEPPASTE;Beillesztendő paraméterek PROFILEPANEL_PCUSTOM;Egyedi +PROFILEPANEL_PDYNAMIC;Dinamikus PROFILEPANEL_PFILE;Fáljból +PROFILEPANEL_PINTERNAL;Semleges PROFILEPANEL_PLASTSAVED;Legutóbb használt PROFILEPANEL_SAVEDLGLABEL;Feldolgozási beállítások mentése... PROFILEPANEL_SAVEPPASTE;Mentendő paraméterek @@ -538,41 +1076,150 @@ PROFILEPANEL_TOOLTIPCOPY;Feldolgozási beállítások vágólapra mentése PROFILEPANEL_TOOLTIPLOAD;Feldolgozási beállítások betöltése PROFILEPANEL_TOOLTIPPASTE;Feldolgozási beállítások beillesztése a vágólapról PROFILEPANEL_TOOLTIPSAVE;Feldolgozási beállítások mentése +PROGRESSBAR_DECODING;Dekódolás... +PROGRESSBAR_GREENEQUIL;Zöld-kiegyensúlyozás... +PROGRESSBAR_HLREC;Csúcsfény-rekonstrukció... +PROGRESSBAR_HOTDEADPIXELFILTER;Forró-/halottpixel-szűrő... +PROGRESSBAR_LINEDENOISE;Sorzajszűrő... PROGRESSBAR_LOADING;Kép betöltése... PROGRESSBAR_LOADINGTHUMBS;Előnézeti képek betöltése... PROGRESSBAR_LOADJPEG;JPEG fájl betöltése... PROGRESSBAR_LOADPNG;PNG fájl betöltése... PROGRESSBAR_LOADTIFF;TIFF fájl betöltése... +PROGRESSBAR_NOIMAGES;Nem találhatóak képek PROGRESSBAR_PROCESSING;Kép feldolgozása... +PROGRESSBAR_PROCESSING_PROFILESAVED;Feldolgozási profil mentve +PROGRESSBAR_RAWCACORR;Nyers KA korrekció... PROGRESSBAR_READY;Kész PROGRESSBAR_SAVEJPEG;JPEG fájl mentése... PROGRESSBAR_SAVEPNG;PNG fájl mentése... PROGRESSBAR_SAVETIFF;TIFF fájl mentése... +PROGRESSBAR_SNAPSHOT_ADDED;Pillanatkép hozzáadva PROGRESSDLG_PROFILECHANGEDINBROWSER;A profil az állományböngészőben megváltozott +QINFO_FRAMECOUNT;%2 képkocka +QINFO_HDR;HDR / %2 képkocka QINFO_ISO;ISO QINFO_NOEXIF;EXIF adat nem áll rendelkezésre. +QINFO_PIXELSHIFT;Pixel Shift / %2 képkocka QUEUE_AUTOSTART;Auto start QUEUE_AUTOSTART_TOOLTIP;Új kép érkezése esetén a feldolgozás automatikus indítása. +QUEUE_DESTFILENAME;Elérési út és fájlnév QUEUE_FORMAT_TITLE;Állományformátum QUEUE_LOCATION_FOLDER;Mentés ebbe a könyvtárba: QUEUE_LOCATION_TEMPLATE;Sablon használata QUEUE_LOCATION_TEMPLATE_TOOLTIP;A következő jeleket lehet használni:\n%f, %d1, %d2, ..., %p1, %p2, ...\n\nEzek a jelek a megnyitott kép elérési útvonalának részeire vonatkoznak.\n\nPéldául, ha a /home/tom/image/02-09-2006/dsc0012.nef képet nyitjuk meg, ezek a jelek a következőket jelentik:\n%f=dsc0012, %d1=02-09-2006, %d2=image, ...\n%p1=/home/tom/image/02-09-2006, %p2=/home/tom/image, p3=/home/tom, ...\n\nHa oda kívánja menteni a kész képet, ahol az eredeti volt, az alábbiakat kell beírni:\n%p1/%f\n\nHa a kész képet az eredeti könyvtárán belül egy "converted" alkönyvtárba kívánja menteni, az alábbiakat kell beírni:\n%p1/converted/%f\n\nHa a kész képeket a '/home/tom/converted' könyvtárba kívánja menteni az eredeti, dátumot tartalmazó alkönyvtár megtartásával, írja ezt:\n%p2/converted/%d1/%f +QUEUE_LOCATION_TITLE;Kimeneti hely +QUEUE_STARTSTOP_TOOLTIP;A sorban lévő képek feldolgozásának elindítása vagy megállítása.\n\nGyorsbillentyű: Ctrl+s +SAMPLEFORMAT_0;Ismeretlen adatformátum +SAMPLEFORMAT_1;8-bites előjel nélküli +SAMPLEFORMAT_2;16-bites előjel nélküli +SAMPLEFORMAT_4;24-bited LogLuv +SAMPLEFORMAT_8;32-bites LogLuv +SAMPLEFORMAT_16;16-bites lebegőpontos +SAMPLEFORMAT_32;24-bites lebegőpontos +SAMPLEFORMAT_64;32-bites lebegőpontos SAVEDLG_AUTOSUFFIX;Utótag hozzáadása automatikusan, ha az állomány már létezik SAVEDLG_FILEFORMAT;Állományformátum +SAVEDLG_FILEFORMAT_FLOAT; lebegőpontos +SAVEDLG_FORCEFORMATOPTS;Mentési beállítások kényszerítése SAVEDLG_JPEGQUAL;JPEG Minőség SAVEDLG_PUTTOQUEUE;Feldolgozási sorba helyezés SAVEDLG_PUTTOQUEUEHEAD;Feldolgozási sorba helyezés az első helyre SAVEDLG_PUTTOQUEUETAIL;Feldolgozási sorba helyezés az utolsó helyre SAVEDLG_SAVEIMMEDIATELY;Mentés azonnal SAVEDLG_SAVESPP;Feldolgozási paraméterek mentése a kép mellé +SAVEDLG_SUBSAMP;Alulmintavételezés +SAVEDLG_SUBSAMP_1;Legjobb tömörítés +SAVEDLG_SUBSAMP_2;Kiegyensúlyozott +SAVEDLG_SUBSAMP_3;Legjobb minőség +SAVEDLG_SUBSAMP_TOOLTIP;Legjobb tömörítés:\nJ:a:b 4:2:0\nh/v 2/2\nSzínintenzitás vízszintesen és függőlegesen megfelezve.\n\nKiegyensúlyozott:\nJ:a:b 4:2:2\nh/v 2/1\nSzínintenzitás vízszintesen megfelezve.\n\nLegjobb minőség:\nJ:a:b 4:4:4\nh/v 1/1\nNincs színintenzitás alul mintavételezés. SAVEDLG_TIFFUNCOMPRESSED;Tömörítetlen TIFF +SAVEDLG_WARNFILENAME;A fájl leendő neve +SHCSELECTOR_TOOLTIP;Jobb klikk a 3 csúszka helyzetének visszaállításához. +TC_PRIM_BLUX;Kék x +TC_PRIM_BLUY;Kék y +TC_PRIM_GREX;Zöld x +TC_PRIM_GREY;Zöld y +TC_PRIM_REDX;Piros x +TC_PRIM_REDY;Piros y +THRESHOLDSELECTOR_B;Alsó +THRESHOLDSELECTOR_BL;Bal alsó +THRESHOLDSELECTOR_BR;Jobb alsó +THRESHOLDSELECTOR_HINT;Tarts a Shift billentyűt lenyomva egy-egy kontrollpont mozgatásához. +THRESHOLDSELECTOR_T;Felső +THRESHOLDSELECTOR_TL;Bal felső +THRESHOLDSELECTOR_TR;Jobb alsó +TOOLBAR_TOOLTIP_COLORPICKER;Zárolható színválasztó\n\nAmikor az eszköz aktív:\n- Választó hozzáadása: bal klikk.\n- Egy választó mozgatása: bal klikk és mozgatás.\n- Választó törlése: jobb klikk.\n- Összes választó törlése: Ctrl+Shift+jobb klikk.\n- Kézeszközre visszaállás: jobb klikk választókon kívülre. TOOLBAR_TOOLTIP_CROP;Vágás (Gyorsbillentyű: C) TOOLBAR_TOOLTIP_HAND;"Kéz" eszköz (Gyorsbillentyű: N) +TOOLBAR_TOOLTIP_PERSPECTIVE;Perspektíva korrekció\n\nSzerkeszd a kontrollvonalakat a perspektíva torzítás korrigálásához. Kattints újból erre a gombra a korrekció alkalmazásához. TOOLBAR_TOOLTIP_STRAIGHTEN;Vízszintes/függőleges vonal kijelölése (Gyorsbillentyű: S) TOOLBAR_TOOLTIP_WB;Fehéregyensúly kijelölés (Gyorsbillentyű: W) +TP_BWMIX_ALGO;OYCPM algoritmus +TP_BWMIX_ALGO_LI;Lineáris +TP_BWMIX_ALGO_SP;Speciális effektek +TP_BWMIX_ALGO_TOOLTIP;Lineáris: normál lineáris reakciót fog eredményezni.\nSpeciális effektek: speciális effekteket fog eredményezni a csatornák nem lineáris keverésével. +TP_BWMIX_AUTOCH;Automatikus +TP_BWMIX_CC_ENABLED;Színkomplemens állítása +TP_BWMIX_CC_TOOLTIP;Színkomplemensek ROYGCBPM módban történő automatikus állításának bekapcsolása. +TP_BWMIX_CHANNEL;Luminancia kiegyenlítő +TP_BWMIX_CURVEEDITOR1;'Előtte' görbe +TP_BWMIX_CURVEEDITOR2;'Utána' görbe +TP_BWMIX_CURVEEDITOR_AFTER_TOOLTIP;Tónusgörbe a F&F-re konvertálás után, a kezelés legvégén. +TP_BWMIX_CURVEEDITOR_BEFORE_TOOLTIP;Tónusgörbe közvetlen a F&F-re konvertálás előtt.\nFigyelembe veheti a színkomponenseket. +TP_BWMIX_CURVEEDITOR_LH_TOOLTIP;Luminancia a színtelítettség szerint L=f(színtelítettség).\nFigyelj az extrém értékekre, mivel azok artifaktumokat okozhatnak. +TP_BWMIX_FILTER;Színszűrő +TP_BWMIX_FILTER_BLUE;Kék +TP_BWMIX_FILTER_BLUEGREEN;Kék-Zöld +TP_BWMIX_FILTER_GREEN;Zöld +TP_BWMIX_FILTER_GREENYELLOW;Kék-Sárga +TP_BWMIX_FILTER_NONE;Nincs +TP_BWMIX_FILTER_PURPLE;Lila +TP_BWMIX_FILTER_RED;Piros +TP_BWMIX_FILTER_REDYELLOW;Piros-Sárga +TP_BWMIX_FILTER_TOOLTIP;A színszűrő olyan képet szimulál, mely készítésekor színezett szűrő volt az objektíven. A színezett szűrők csökkentik a fény átvitelét bizonyos színtartományokban, ezzel hatást gyakorolva azok világosságára (pl.: a piros szűrő a kék eget elsötétíti) +TP_BWMIX_FILTER_YELLOW;Sárga +TP_BWMIX_GAMMA;Gamma Korrekció +TP_BWMIX_GAM_TOOLTIP;Korrigálja mindegyik színcsatorna gammáját. +TP_BWMIX_LABEL;Fekete-Fehér +TP_BWMIX_MET;Metódus +TP_BWMIX_MET_CHANMIX;Csatornakeverő +TP_BWMIX_MET_DESAT;Halványító +TP_BWMIX_MET_LUMEQUAL;Luminancia kiegyenlítő +TP_BWMIX_MIXC;Csatornakeverő +TP_BWMIX_NEUTRAL;Visszaállítás +TP_BWMIX_RGBLABEL;Piros: %1%% Zöld: %2%% Kék: %3%% Összesen: %4%% +TP_BWMIX_RGBLABEL_HINT;A végső (RGB) csatornák faktorai, amelyek az összes keverő opcióért felelnek.\n'Összes' Az összes csatornaérték összege:\n- mindig 100% relatív módban\n- magasabb (világosabb) vagy alacsonyabb (sötétebb) mint 100% abszolút módban. +TP_BWMIX_RGB_TOOLTIP;Az RGB csatornák keverése. Használd az előbeállításokat útmutatásként.\nFigyelj az olyan negatív értékekre, amelyek artifaktumokat vagy rendellenes viselkedést eredményezhetnek. +TP_BWMIX_SETTING;Előbeállítások +TP_BWMIX_SETTING_TOOLTIP;Különböző előbeállítások (film, tájkép, stb.) vagy kézi Csatornakeverő beállítások. +TP_BWMIX_SET_HIGHCONTAST;Magas kontraszt +TP_BWMIX_SET_HIGHSENSIT;Magas érzékenység +TP_BWMIX_SET_HYPERPANCHRO;Hiperpanakromatikus +TP_BWMIX_SET_INFRARED;Infravörös +TP_BWMIX_SET_LANDSCAPE;Tájkép +TP_BWMIX_SET_LOWSENSIT;Alacsony érzékenység +TP_BWMIX_SET_LUMINANCE;Luminancia +TP_BWMIX_SET_NORMCONTAST;Normálkontraszt +TP_BWMIX_SET_ORTHOCHRO;Ortokromatikus +TP_BWMIX_SET_PANCHRO;Panakromatikus +TP_BWMIX_SET_PORTRAIT;Portré +TP_BWMIX_SET_RGBABS;Abszolút RGB +TP_BWMIX_SET_RGBREL;Relatív RGB +TP_BWMIX_SET_ROYGCBPMABS;Abszolút ROYGCBPM +TP_BWMIX_SET_ROYGCBPMREL;Relatív ROYGCBPM +TP_BWMIX_TCMODE_FILMLIKE;Fekete-Fehér Film szerű +TP_BWMIX_TCMODE_SATANDVALBLENDING;Fekete-Fehér Színtelítettség- és Értékhajlítás +TP_BWMIX_TCMODE_STANDARD;Fekete-Fehér Sztenderd +TP_BWMIX_TCMODE_WEIGHTEDSTD;Fekete-Fehér Súlyozott Sztenderd +TP_BWMIX_VAL;L TP_CACORRECTION_BLUE;Kék TP_CACORRECTION_LABEL;Kromatikus aberráció TP_CACORRECTION_RED;Vörös +TP_CBDL_AFT;Fekete-Fehér Után +TP_CBDL_BEF;Fekete-Fehér Előtt +TP_CBDL_METHOD;Folyamatazonosított +TP_CBDL_METHOD_TOOLTIP;Válaszd ki, hogy a Kontraszt Részletszintek Szerint eszköz a Fekete-Fehér eszköz után legyen-e helyezve, amitől L*a*b* térben működik, vagy elé, amitől RGB térben működik. TP_CHMIXER_BLUE;Kék TP_CHMIXER_GREEN;Zöld TP_CHMIXER_LABEL;Színkeverő @@ -581,6 +1228,103 @@ TP_COARSETRAF_TOOLTIP_HFLIP;Vizszintes tükrözés TP_COARSETRAF_TOOLTIP_ROTLEFT;Forgatás balra TP_COARSETRAF_TOOLTIP_ROTRIGHT;Forgatás jobbra TP_COARSETRAF_TOOLTIP_VFLIP;Függőleges tükrözés +TP_COLORAPP_ABSOLUTELUMINANCE;Abszolút luminancia +TP_COLORAPP_ADAPSCEN_TOOLTIP;A fényképezéskori luminanciának felel meg kandela / m2-ben, ami automatikusan, az exif adatok alapján kerül kiszámításra. +TP_COLORAPP_ALGO;Algoritmus +TP_COLORAPP_ALGO_ALL;Mind +TP_COLORAPP_ALGO_JC;Világosság + Színintenzitás (JC) +TP_COLORAPP_ALGO_JS;Világosság + Színtelítettség (JS) +TP_COLORAPP_ALGO_QM;Fényerősség + Színesség (QM) +TP_COLORAPP_ALGO_TOOLTIP;Választhatsz paraméterek részhalmazai és minden paraméter között. +TP_COLORAPP_BADPIXSL;Forró/Rossz pixel szűrő +TP_COLORAPP_BADPIXSL_TOOLTIP;A forró/rossz (világos színű) pixelek elnyomása.\n0 = Nincs effekt\n1 = Median\n2 = Gauss.\nAlternatívaként, állíthatsz a képen, hogy elkerüld a nagyon sötét árnyékokat.\n\nEzek az artifaktumok a CIECAM02 korlátozásainak következményei. +TP_COLORAPP_BRIGHT;Fényerősség (Q) +TP_COLORAPP_BRIGHT_TOOLTIP;Fényerősség CIECAM-ben az annak a fénynek az érzékelt mennyisége, amely az élénkítőből származik. Különbözik a L*a*b* és RGB fényerősségtől. +TP_COLORAPP_CAT02ADAPTATION_TOOLTIP;Kézi beállítás esetén 65-feletti értékek ajánlottak. +TP_COLORAPP_CATCLASSIC;Klasszikus +TP_COLORAPP_CATMET_TOOLTIP;Klasszikus - hagyományos CIACAM működés. A kromatikus adaptáció transzformációk külön kerülnek alkalmazásra. Egyfelől a 'Színhelykörülmények'-re és az alap megvilágítóra, másfelől az alap megvilágítóra és a 'Megtekintési körülmények'-re.\n\nSzimmetrikus - A kromatikus adaptáció a fehéregyensúlyon alapszik. A 'Színhelykörülmények', a 'Képigazítások' és a 'Megtekintési körülmények' beállítások semlegesítve vannak.\n\nKevert – Ugyan az, mint a 'Klasszikus' opció, csak kis-nagybetű érzékeny. A kromatikus adaptáció a fehéregyensúlyon alapszik. +TP_COLORAPP_CATMOD;Mód +TP_COLORAPP_CATSYMGEN;Autómatikus Szimmetrikus +TP_COLORAPP_CATSYMSPE;Kevert +TP_COLORAPP_CHROMA;Színintenzitás (C) +TP_COLORAPP_CHROMA_M;Színesség (M) +TP_COLORAPP_CHROMA_M_TOOLTIP;A színesség CIECAM-ben az érzékelt színárnyalat (hue) mértéke a szürkéhez viszonyítva, egy indikátor, amely azt jelzi, hogy az élénkítő többé kevésbé színesnek tűnik. +TP_COLORAPP_CHROMA_S;Színtelítettség (S) +TP_COLORAPP_CHROMA_S_TOOLTIP;A színtelítettség CIECAM-ben megfelel az élénkítő színe és fényerőssége közti viszonynak. Különbözik a L*a*b* és RGB színtelítettségtől. +TP_COLORAPP_CHROMA_TOOLTIP;A színintenzitás CIECAM-ben megfelel egy élénkítő színének egy másik, azonos körülmények között fehérnek látszó élénkítő tisztaságához relatívan. Különbözik a L*a*b* és RGB színintenzitástól. +TP_COLORAPP_CIECAT_DEGREE;Adaptáció +TP_COLORAPP_CONTRAST;Kontraszt (J) +TP_COLORAPP_CONTRAST_Q;Kontraszt (Q) +TP_COLORAPP_CONTRAST_Q_TOOLTIP;A kontraszt (Q) CIECAM-ben a fényerősségen alapszik. Különbözik a L*a*b* és RGB kontraszttól. +TP_COLORAPP_CONTRAST_TOOLTIP;A kontraszt (J) CIECAM-ben a világosságon alapszik. Különbözik a L*a*b* és RGB kontraszttól. +TP_COLORAPP_CURVEEDITOR1;Tónusgörbe 1 +TP_COLORAPP_CURVEEDITOR1_TOOLTIP;Az L* (L*a*b*) hisztogramját mutatja CIECAM előtt.\nHa a 'CIECAM kimenet megjelenítése SzMM görbéken' jelölőnégyzet be van kapcsolva, J hisztogramját mutatja CIECAM után.\n\nJ nem jelenik meg a fő hisztogram panelen.\n\nA végső kimenethez lásd a fő hisztogram panelt. +TP_COLORAPP_CURVEEDITOR2;Tónusgörbe 2 +TP_COLORAPP_CURVEEDITOR2_TOOLTIP;Ugyan úgy használatos, mint az első J(J) tónusgörbe. +TP_COLORAPP_CURVEEDITOR3;Színgörbe +TP_COLORAPP_CURVEEDITOR3_TOOLTIP;Állítsd a színintenzitást, a színtelítettséget vagy a színességet.\n\nA színintenzitás (L*a*b*) hisztogramját mutatja CIECAM előtt.\nHa a 'CIECAM kimenet megjelenítése SzMM görbéken' jelölőnégyzet be van kapcsolva, a C, S vagy M hisztogramját mutatja CIECAM után\n\nC, S és M nem jelennek meg a fő hisztogram panelen.\nA végső kimenethez lásd a fő hisztogram panelt. +TP_COLORAPP_DATACIE;CIECAM kimenet megjelenítése SzMM görbéken +TP_COLORAPP_DATACIE_TOOLTIP;A Színmegjelenés és Megvilágítás görbéknél látható hisztogramra van hatással. Nincs hatással a RawTherapee fő hisztogramjára.\n\nBekapcsolva: J és C, S vagy M becsült értékeit mutatja CIECAM módosítások után\nKikapcsolva: L*a*b értékek jelennek meg CIECAM módosítások előtt. +TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 egy kromatikus adaptáció. Egy megadott megvilágító (pl.: D65) fehérpontjával rendelkező kép értékeit konvertálja át új értékekké, amelyek fehérpontja egy másik (pl.: D50 vagy D55) megvilágítóié - lásd: fehérpont modell. +TP_COLORAPP_DEGREOUT_TOOLTIP;;CAT02/16 egy kromatikus adaptáció. Egy megadott megvilágító (pl.: D50) fehérpontjával rendelkező kép értékeit konvertálja át új értékekké, amelyek fehérpontja egy másik (pl.: D75) megvilágítóié - lásd: fehérpont modell. +TP_COLORAPP_FREE;Szabad hő + színezet + CAT02/16 +[kimenet] +TP_COLORAPP_GAMUT;Színskála-irányítás használata L*a*b* módban +TP_COLORAPP_GEN;Beállítások +TP_COLORAPP_GEN_TOOLTIP;Ez a modul a CIECAM színmegjelenés modelleken alapszik, amelyeket arra terveztek, hogy jobban szimulálják azt, hogy hogyan érzékeli az emberi látás a színeket különböző megvilágítási körülmények között, például különbőző hátterek előtt. Figyelembe veszi minden egyes szín környezetét és úgy módosítja a megjelenését, hogy a lehető legközelebb kerüljön az emberi érzékeléshez. Emellet a kimenetet a szándékozott megtekintési körülményekhez adaptálja (monitor, TV, projektor, nyomtató, stb.) úgy, hogy a kromatikus megjelenés megőrződjön a kép és a megjelenítési környezet között. +TP_COLORAPP_HUE;Színárnyalat (h) +TP_COLORAPP_HUE_TOOLTIP;A színárnyalat (h) az a fokozat, amely az élénkítő a pirossal, zölddel, kékkel és sárgával leírható színhez való hasonlóságát adja meg. +TP_COLORAPP_IL41;D41 +TP_COLORAPP_IL50;D50 +TP_COLORAPP_IL55;D55 +TP_COLORAPP_IL60;D60 +TP_COLORAPP_IL65;D65 +TP_COLORAPP_IL75;D75 +TP_COLORAPP_ILA;Izzó StdA 2856K +TP_COLORAPP_ILFREE;Szabad +TP_COLORAPP_ILLUM;Megvilágító +TP_COLORAPP_ILLUM_TOOLTIP;Válaszd ki a fényképezési körülményekhez legközelebb álló megvilágítót.\nÁltalánosságban D50, de időtől és szélességi foktól függően változhat. +TP_COLORAPP_LABEL;Színmegjelenés és Megvilágítás +TP_COLORAPP_LABEL_CAM02;Képigazítások +TP_COLORAPP_LABEL_SCENE;Színhelykörülmények +TP_COLORAPP_LABEL_VIEWING;Megtekintési körülmények +TP_COLORAPP_LIGHT;Világosság (J) +TP_COLORAPP_LIGHT_TOOLTIP;A világosság CIECAM-ben az egy élénkítő tisztasága a relatívan egy hasonló megtekintési körülmények között fehérnek tűnő élénkítő tisztaságához. Különbözik a L*a*b* és az RGB világosságtól. +TP_COLORAPP_MEANLUMINANCE;Átlag luminancia (Yb%) +TP_COLORAPP_MOD02;CAM02 +TP_COLORAPP_MOD16;CAM16 +TP_COLORAPP_MODEL;Fehérpont modell +TP_COLORAPP_MODELCAT;CAM +TP_COLORAPP_MODELCAT_TOOLTIP;Lehetővé teszi, hogy válassz CAM02 és CAM16 között.\nCAM02 néha pontosabb lehet.\nCAM16 kevesebb artifaktumot generálhat. +TP_COLORAPP_MODEL_TOOLTIP;Fehérpont modell.\n\nFE [RT] + [kimenet]: RT fehéregyensúlya van a színhelyre alkalmazva, CIECAM D50-re van állítva, és a kimeneti eszköz fehéregyensúlya a Megtekintési körülményekben van megadva.\n\nFE [RT+CAT02/16] + [kimenet]: RT fehéregyensúly beállításait használja a CAT02, és a kimeneti eszköz fehéregyensúlya a Megtekintési körülményekben van megadva\n\nSzabad hő + színezet + CAT02/16 + [kimenet]: a hőt és a színezetet a felhasználó választja ki, a kimeneti eszköz fehéregyensúlya a Megtekintési körülményekben van megadva. +TP_COLORAPP_NEUTRAL;Visszaállítás +TP_COLORAPP_NEUTRAL_TOOLTIP;Az összes csúszka, jelölőnégyzet és görbe értékét az alapértelmezettre állítja. +TP_COLORAPP_RSTPRO;Piros & bőrtónus védelem +TP_COLORAPP_RSTPRO_TOOLTIP;A piros és bőrtónus védelem hatással van a csúszkákra és a görbékre is. +TP_COLORAPP_SOURCEF_TOOLTIP;Megfelel a fényképezési körülményeknek és annak, hogy hogyan lehet a körülményeket és az adatokat visszahozni egy 'normális' területre. A 'normális' átlag vagy sztenderd körülményeket és adatokat jelent (pl.: CIECAM korrekciók figyelembevétele nélkül). +TP_COLORAPP_SURROUND_AVER;Átlag +TP_COLORAPP_SURROUND_DARK;Sötét +TP_COLORAPP_SURROUND_DIM;Homályos +TP_COLORAPP_SURROUND_EXDARK;Extrémen Sötét (Vágólap) +TP_COLORAPP_SURROUND_TOOLTIP;Megváltoztatja a tónusokat és a színeket, hogy vegyék figyelembe a megtekintési körülményeket és a kimeneti eszközt. Minél sötétebbek a megtekintési körülmények, annál sötétebb lesz a kép. A kép fényerőssége nem lesz megváltoztatva, amikor a megtekintési körülmények 'átlagos'-ra vannak állítva. +TP_COLORAPP_SURSOURCE_TOOLTIP;Megváltoztatja a tónusokat és a színeket úgy, hogy figyelembe vegyék a helyszín megvilágítása körüli körülményeket. Minél sötétebbek a körülmények, annál világosabb lesz a kép. A kép fényerőssége nem lesz megváltoztatva, amikor a 'surround' 'átlagos'-ra van állítva. +TP_COLORAPP_TCMODE_BRIGHTNESS;Fényerősség +TP_COLORAPP_TCMODE_CHROMA;Színintenzitás +TP_COLORAPP_TCMODE_COLORF;Színesség +TP_COLORAPP_TCMODE_LABEL1;Görbe mód 1 +TP_COLORAPP_TCMODE_LABEL2;Görbe mód 2 +TP_COLORAPP_TCMODE_LABEL3;Görbe mód +TP_COLORAPP_TCMODE_LIGHTNESS;Világosság +TP_COLORAPP_TCMODE_SATUR;Színtelítettség +TP_COLORAPP_TEMP2_TOOLTIP;Bármely szimmetrikus hőmérséklet = Fehéregyensúly mód.\nVálaszd ki bármely megvilágítót (színezet mindig = 1).\n\nA hőmérséklet=2856\nD41 hőmérséklet=4100\D50 hőmérséklet=5003\nD55 hőmérséklet=5503\nD60 hőmérséklet=6000\nD65 hőmérséklet=6504\nD75 hőmérséklet=7504 +TP_COLORAPP_TEMP_TOOLTIP;Egy megvilágító kiválasztásához mindig állíts színezetet = 1 -et.\n\nA hőmérséklet=2856\nD41 hőmérséklet=4100\nD50 hőmérséklet=5003\nD55 hőmérséklet=5503\nD60 hőmérséklet=6000\nD65 hőmérséklet=6504\nD75 hőmérséklet=7504 +TP_COLORAPP_TONECIE;CIECAM használata tónustérképezéshez +TP_COLORAPP_TONECIE_TOOLTIP;Ha ez az opció ki van kapcsolva, akkor a tónustérképezés L*a*b* térben történik.\nHa ez az opció be van kapcsolva, akkor a tónustérképezés CIECAM02 használatával történik.\nA Tónustérképezés eszköznek bekapcsolva kell lennie ahhoz, hogy ez a beállítás hatásba lépjen. +TP_COLORAPP_VIEWINGF_TOOLTIP;Figyelembe veszi a támogatást, amin a amelyen a végső kép meg lesz tekintve (monitor, TV, projektor, nyomtató, etc.), és annak környezetét. Ez a folyamat a 'Kép Igazítások' folyamatból jövő adatokat fogja felhasználni, és 'behozza' a támogatóba úgy, hogy a megtekintési körülmények és a környezete is figyelembe van véve. +TP_COLORAPP_VIEWING_ABSOLUTELUMINANCE_TOOLTIP;A megtekintési környezet abszolút luminanciája\n(általában 16 cd/m²). +TP_COLORAPP_WBCAM;WB [RT+CAT02/16] + [kimenet] +TP_COLORAPP_WBRT;WB [RT] + [kimenet] +TP_COLORAPP_YBOUT_TOOLTIP;Yb a háttér relatív luminaniája szürke %-ában kifejezve. 18% szürke megfelel egy 50%-os háttérluminanciának CIE L-ben kifejezve.\nAz adat a kép középluminanciáján alapszik. +TP_COLORAPP_YBSCEN_TOOLTIP;Yb a háttér relatív luminaniája szürke %-ában kifejezve. 18% szürke megfelel egy 50%-os háttérluminanciának CIE L-ben kifejezve.\nAz adat a kép középluminanciáján alapszik. TP_CROP_FIXRATIO;Rögzített oldalarány TP_CROP_GTDIAGONALS;Diagonál módszer TP_CROP_GTEPASSPORT;Biometric Passport @@ -809,268 +1553,48 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! -!ADJUSTER_RESET_TO_DEFAULT;Click - reset to default value.\nCtrl+click - reset to initial value. !CURVEEDITOR_AXIS_IN;I: !CURVEEDITOR_AXIS_LEFT_TAN;LT: !CURVEEDITOR_AXIS_OUT;O: !CURVEEDITOR_AXIS_RIGHT_TAN;RT: -!CURVEEDITOR_CATMULLROM;Flexible -!CURVEEDITOR_EDITPOINT_HINT;Enable edition of node in/out values.\n\nRight-click on a node to select it.\nRight-click on empty space to de-select the node. -!DONT_SHOW_AGAIN;Don't show this message again. -!DYNPROFILEEDITOR_DELETE;Delete -!DYNPROFILEEDITOR_EDIT;Edit -!DYNPROFILEEDITOR_EDIT_RULE;Edit Dynamic Profile Rule -!DYNPROFILEEDITOR_ENTRY_TOOLTIP;The matching is case insensitive.\nUse the 're:' prefix to enter\na regular expression. -!DYNPROFILEEDITOR_IMGTYPE_ANY;Any -!DYNPROFILEEDITOR_IMGTYPE_HDR;HDR !DYNPROFILEEDITOR_IMGTYPE_PS;Pixel Shift !DYNPROFILEEDITOR_IMGTYPE_STD;Standard -!DYNPROFILEEDITOR_MOVE_DOWN;Move Down -!DYNPROFILEEDITOR_MOVE_UP;Move Up -!DYNPROFILEEDITOR_NEW;New -!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule -!DYNPROFILEEDITOR_PROFILE;Processing Profile !EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool. !EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve. +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 !EXIFFILTER_IMAGETYPE;Image type -!EXIFPANEL_SHOWALL;Show all +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !EXPORT_BYPASS;Processing steps to bypass !EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels !EXPORT_BYPASS_RAW_LMMSE_ITERATIONS;Bypass [raw] LMMSE Enhancement Steps !EXPORT_PIPELINE;Processing pipeline !EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image) -!EXPORT_USE_FAST_PIPELINE_TOOLTIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality. -!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end) -!EXTPROGTARGET_1;raw -!EXTPROGTARGET_2;queue-processed -!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply 'find' keywords. -!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles -!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles -!FILEBROWSER_COLORLABEL_TOOLTIP;Color label.\n\nUse dropdown menu or shortcuts:\nShift-Ctrl-0 No Color\nShift-Ctrl-1 Red\nShift-Ctrl-2 Yellow\nShift-Ctrl-3 Green\nShift-Ctrl-4 Blue\nShift-Ctrl-5 Purple -!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to permanently delete all %1 files in trash? -!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to permanently delete the selected %1 files? -!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to permanently delete the selected %1 files, including a queue-processed version? -!FILEBROWSER_EMPTYTRASHHINT;Permanently delete all files in trash. -!FILEBROWSER_EXTPROGMENU;Open with -!FILEBROWSER_OPENDEFAULTVIEWER;Windows default viewer (queue-processed) -!FILEBROWSER_POPUPCOLORLABEL0;Label: None -!FILEBROWSER_POPUPCOLORLABEL1;Label: Red -!FILEBROWSER_POPUPCOLORLABEL2;Label: Yellow -!FILEBROWSER_POPUPCOLORLABEL3;Label: Green -!FILEBROWSER_POPUPCOLORLABEL4;Label: Blue -!FILEBROWSER_POPUPCOLORLABEL5;Label: Purple -!FILEBROWSER_POPUPINSPECT;Inspect -!FILEBROWSER_POPUPRANK;Rank -!FILEBROWSER_POPUPRANK0;Unrank -!FILEBROWSER_POPUPRANK1;Rank 1 * -!FILEBROWSER_POPUPRANK2;Rank 2 ** -!FILEBROWSER_POPUPRANK3;Rank 3 *** -!FILEBROWSER_POPUPRANK4;Rank 4 **** -!FILEBROWSER_POPUPRANK5;Rank 5 ***** -!FILEBROWSER_POPUPREMOVE;Delete permanently -!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version -!FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: Shift-1 -!FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: Shift-2 -!FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3 -!FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4 -!FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5 -!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default -!FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash. -!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions. -!FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: Shift-0 -!FILECHOOSER_FILTER_ANY;All files -!FILECHOOSER_FILTER_COLPROF;Color profiles (*.icc) -!FILECHOOSER_FILTER_CURVE;Curve files -!FILECHOOSER_FILTER_LCP;Lens correction profiles -!FILECHOOSER_FILTER_PP;Processing profiles -!FILECHOOSER_FILTER_SAME;Same format as current photo -!FILECHOOSER_FILTER_TIFF;TIFF files -!GENERAL_APPLY;Apply -!GENERAL_ASIMAGE;As Image -!GENERAL_AUTO;Automatic -!GENERAL_CLOSE;Close -!GENERAL_CURRENT;Current -!GENERAL_DELETE_ALL;Delete all -!GENERAL_EDIT;Edit -!GENERAL_HELP;Help -!GENERAL_OPEN;Open -!GENERAL_RESET;Reset -!GENERAL_SAVE_AS;Save as... -!GENERAL_SLIDER;Slider -!GENERAL_WARNING;Warning -!GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. -!HISTOGRAM_TOOLTIP_CHRO;Show/Hide chromaticity histogram. -!HISTOGRAM_TOOLTIP_CROSSHAIR;Show/Hide indicator crosshair. -!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. -!HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Toggle visibility of the scope option buttons. -!HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Adjust scope brightness. -!HISTOGRAM_TOOLTIP_TYPE_HISTOGRAM;Histogram -!HISTOGRAM_TOOLTIP_TYPE_HISTOGRAM_RAW;Raw Histogram +!FILEBROWSER_POPUPSORTBY;Sort Files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files +!GENERAL_OTHER;Other !HISTOGRAM_TOOLTIP_TYPE_PARADE;RGB Parade -!HISTOGRAM_TOOLTIP_TYPE_VECTORSCOPE_HC;Hue-Chroma Vectorscope -!HISTOGRAM_TOOLTIP_TYPE_VECTORSCOPE_HS;Hue-Saturation Vectorscope -!HISTOGRAM_TOOLTIP_TYPE_WAVEFORM;Waveform -!HISTORY_MSG_166;Exposure - Reset -!HISTORY_MSG_167;Demosaicing method -!HISTORY_MSG_168;L*a*b* - CC curve -!HISTORY_MSG_169;L*a*b* - CH curve -!HISTORY_MSG_170;Vibrance - HH curve -!HISTORY_MSG_171;L*a*b* - LC curve -!HISTORY_MSG_172;L*a*b* - Restrict LC -!HISTORY_MSG_173;NR - Detail recovery -!HISTORY_MSG_174;Color Appearance & Lighting -!HISTORY_MSG_175;CAL - SC - Adaptation !HISTORY_MSG_176;CAL - VC - Surround -!HISTORY_MSG_177;CAL - SC - Absolute luminance -!HISTORY_MSG_178;CAL - VC - Absolute luminance -!HISTORY_MSG_179;CAL - SC - WP model -!HISTORY_MSG_180;CAL - IA - Lightness (J) !HISTORY_MSG_181;CAL - IA - Chroma (C) -!HISTORY_MSG_182;CAL - SC - Auto adaptation -!HISTORY_MSG_183;CAL - IA - Contrast (J) !HISTORY_MSG_184;CAL - SC - Surround -!HISTORY_MSG_185;CAL - Gamut control -!HISTORY_MSG_186;CAL - IA - Algorithm -!HISTORY_MSG_187;CAL - IA - Red/skin protection -!HISTORY_MSG_188;CAL - IA - Brightness (Q) -!HISTORY_MSG_189;CAL - IA - Contrast (Q) -!HISTORY_MSG_190;CAL - IA - Saturation (S) -!HISTORY_MSG_191;CAL - IA - Colorfulness (M) !HISTORY_MSG_192;CAL - IA - Hue (h) -!HISTORY_MSG_193;CAL - IA - Tone curve 1 -!HISTORY_MSG_194;CAL - IA - Tone curve 2 -!HISTORY_MSG_195;CAL - IA - Tone curve 1 mode -!HISTORY_MSG_196;CAL - IA - Tone curve 2 mode -!HISTORY_MSG_197;CAL - IA - Color curve -!HISTORY_MSG_198;CAL - IA - Color curve mode -!HISTORY_MSG_199;CAL - IA - Use CAM output for histograms -!HISTORY_MSG_200;CAL - IA - Use CAM for tone mapping -!HISTORY_MSG_201;NR - Chrominance - R&G -!HISTORY_MSG_202;NR - Chrominance - B&Y -!HISTORY_MSG_203;NR - Color space -!HISTORY_MSG_204;LMMSE enhancement steps -!HISTORY_MSG_205;CAL - Hot/bad pixel filter -!HISTORY_MSG_206;CAL - SC - Auto absolute luminance -!HISTORY_MSG_207;Defringe - Hue curve !HISTORY_MSG_208;WB - B/R equalizer -!HISTORY_MSG_210;GF - Angle -!HISTORY_MSG_211;Graduated Filter -!HISTORY_MSG_212;VF - Strength !HISTORY_MSG_213;Vignette Filter -!HISTORY_MSG_214;Black-and-White -!HISTORY_MSG_215;B&W - CM - Red -!HISTORY_MSG_216;B&W - CM - Green -!HISTORY_MSG_217;B&W - CM - Blue -!HISTORY_MSG_218;B&W - Gamma - Red -!HISTORY_MSG_219;B&W - Gamma - Green -!HISTORY_MSG_220;B&W - Gamma - Blue -!HISTORY_MSG_221;B&W - Color filter !HISTORY_MSG_222;B&W - Presets -!HISTORY_MSG_223;B&W - CM - Orange -!HISTORY_MSG_224;B&W - CM - Yellow -!HISTORY_MSG_225;B&W - CM - Cyan -!HISTORY_MSG_226;B&W - CM - Magenta -!HISTORY_MSG_227;B&W - CM - Purple -!HISTORY_MSG_228;B&W - Luminance equalizer -!HISTORY_MSG_229;B&W - Luminance equalizer -!HISTORY_MSG_230;B&W - Mode -!HISTORY_MSG_231;B&W - 'Before' curve -!HISTORY_MSG_232;B&W - 'Before' curve type -!HISTORY_MSG_233;B&W - 'After' curve -!HISTORY_MSG_234;B&W - 'After' curve type -!HISTORY_MSG_235;B&W - CM - Auto !HISTORY_MSG_236;--unused-- -!HISTORY_MSG_237;B&W - CM -!HISTORY_MSG_238;GF - Feather -!HISTORY_MSG_239;GF - Strength -!HISTORY_MSG_240;GF - Center !HISTORY_MSG_241;VF - Feather -!HISTORY_MSG_242;VF - Roundness -!HISTORY_MSG_243;VC - Radius -!HISTORY_MSG_244;VC - Strength -!HISTORY_MSG_245;VC - Center -!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_251;B&W - Algorithm !HISTORY_MSG_252;CbDL - Skin tar/prot -!HISTORY_MSG_253;CbDL - Reduce artifacts -!HISTORY_MSG_254;CbDL - Skin hue -!HISTORY_MSG_255;NR - Median filter -!HISTORY_MSG_256;NR - Median - Type -!HISTORY_MSG_257;Color Toning -!HISTORY_MSG_258;CT - Color curve -!HISTORY_MSG_259;CT - Opacity curve -!HISTORY_MSG_260;CT - a*[b*] opacity -!HISTORY_MSG_261;CT - Method -!HISTORY_MSG_262;CT - b* opacity -!HISTORY_MSG_263;CT - Shadows - Red -!HISTORY_MSG_264;CT - Shadows - Green -!HISTORY_MSG_265;CT - Shadows - Blue -!HISTORY_MSG_266;CT - Mid - Red -!HISTORY_MSG_267;CT - Mid - Green -!HISTORY_MSG_268;CT - Mid - Blue -!HISTORY_MSG_269;CT - High - Red -!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_276;CT - Opacity !HISTORY_MSG_277;--unused-- -!HISTORY_MSG_278;CT - Preserve luminance -!HISTORY_MSG_279;CT - Shadows -!HISTORY_MSG_280;CT - Highlights -!HISTORY_MSG_281;CT - Sat. strength -!HISTORY_MSG_282;CT - Sat. threshold -!HISTORY_MSG_283;CT - Strength -!HISTORY_MSG_284;CT - Auto sat. protection -!HISTORY_MSG_285;NR - Median - Method -!HISTORY_MSG_286;NR - Median - Type -!HISTORY_MSG_287;NR - Median - Iterations !HISTORY_MSG_288;Flat-Field - Clip control !HISTORY_MSG_289;Flat-Field - Clip control - Auto -!HISTORY_MSG_290;Black Level - Red -!HISTORY_MSG_291;Black Level - Green -!HISTORY_MSG_292;Black Level - Blue -!HISTORY_MSG_293;Film Simulation -!HISTORY_MSG_294;Film Simulation - Strength -!HISTORY_MSG_295;Film Simulation - Film -!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_301;NR - Luma control -!HISTORY_MSG_302;NR - Chroma method -!HISTORY_MSG_303;NR - Chroma method -!HISTORY_MSG_304;W - Contrast levels -!HISTORY_MSG_305;Wavelet Levels -!HISTORY_MSG_306;W - Process -!HISTORY_MSG_307;W - Process -!HISTORY_MSG_308;W - Process direction -!HISTORY_MSG_309;W - ES - Detail !HISTORY_MSG_310;W - Residual - Sky tar/prot -!HISTORY_MSG_311;W - Wavelet levels !HISTORY_MSG_312;W - Residual - Shadows threshold !HISTORY_MSG_313;W - Chroma - Sat/past -!HISTORY_MSG_314;W - Gamut - Reduce artifacts !HISTORY_MSG_315;W - Residual - Contrast !HISTORY_MSG_316;W - Gamut - Skin tar/prot -!HISTORY_MSG_317;W - Gamut - Skin hue -!HISTORY_MSG_318;W - Contrast - Finer levels -!HISTORY_MSG_319;W - Contrast - Finer range -!HISTORY_MSG_320;W - Contrast - Coarser range -!HISTORY_MSG_321;W - Contrast - Coarser levels -!HISTORY_MSG_322;W - Gamut - Avoid color shift -!HISTORY_MSG_323;W - ES - Local contrast -!HISTORY_MSG_324;W - Chroma - Pastel -!HISTORY_MSG_325;W - Chroma - Saturated -!HISTORY_MSG_326;W - Chroma - Method -!HISTORY_MSG_327;W - Contrast - Apply to -!HISTORY_MSG_328;W - Chroma - Link strength -!HISTORY_MSG_329;W - Toning - Opacity RG -!HISTORY_MSG_330;W - Toning - Opacity BY -!HISTORY_MSG_331;W - Contrast levels - Extra !HISTORY_MSG_332;W - Tiling method !HISTORY_MSG_333;W - Residual - Shadows !HISTORY_MSG_334;W - Residual - Chroma @@ -1234,23 +1758,23 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_494;Capture Sharpening !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -1258,7 +1782,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -1317,16 +1841,16 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -1357,7 +1881,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -1380,7 +1904,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -1394,11 +1918,11 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -1411,7 +1935,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -1494,7 +2018,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -1513,19 +2037,19 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -1561,7 +2085,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -1594,7 +2118,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -1619,7 +2143,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -1633,7 +2157,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -1645,10 +2169,10 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -1762,7 +2286,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -1853,7 +2377,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -1905,18 +2429,22 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold !HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual demosaic - Contrast threshold !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input !HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HISTMATCHING;Auto-matched tone curve !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries @@ -1936,6 +2464,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -1981,6 +2511,11 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -2020,464 +2555,78 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s -!ICCPROFCREATOR_COPYRIGHT;Copyright: -!ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to 'RawTherapee, CC0'. -!ICCPROFCREATOR_CUSTOM;Custom -!ICCPROFCREATOR_DESCRIPTION;Description: -!ICCPROFCREATOR_DESCRIPTION_ADDPARAM;Append gamma and slope values to the description -!ICCPROFCREATOR_DESCRIPTION_TOOLTIP;Leave empty to set the default description. -!ICCPROFCREATOR_GAMMA;Gamma -!ICCPROFCREATOR_ICCVERSION;ICC version: -!ICCPROFCREATOR_ILL;Illuminant: -!ICCPROFCREATOR_ILL_41;D41 -!ICCPROFCREATOR_ILL_50;D50 -!ICCPROFCREATOR_ILL_55;D55 -!ICCPROFCREATOR_ILL_60;D60 -!ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Theater -!ICCPROFCREATOR_ILL_65;D65 -!ICCPROFCREATOR_ILL_80;D80 -!ICCPROFCREATOR_ILL_DEF;Default -!ICCPROFCREATOR_ILL_INC;StdA 2856K -!ICCPROFCREATOR_ILL_TOOLTIP;You can set the illuminant for ICC v4 profiles and also for ICC v2 profiles. -!ICCPROFCREATOR_PRIMARIES;Primaries: -!ICCPROFCREATOR_PRIM_ACESP0;ACES AP0 -!ICCPROFCREATOR_PRIM_ACESP1;ACES AP1 -!ICCPROFCREATOR_PRIM_ADOBE;Adobe RGB (1998) -!ICCPROFCREATOR_PRIM_BEST;BestRGB -!ICCPROFCREATOR_PRIM_BETA;BetaRGB -!ICCPROFCREATOR_PRIM_BLUX;Blue X -!ICCPROFCREATOR_PRIM_BLUY;Blue Y -!ICCPROFCREATOR_PRIM_BRUCE;BruceRGB -!ICCPROFCREATOR_PRIM_DCIP3;DCI-P3 -!ICCPROFCREATOR_PRIM_GREX;Green X -!ICCPROFCREATOR_PRIM_GREY;Green Y -!ICCPROFCREATOR_PRIM_PROPH;Prophoto -!ICCPROFCREATOR_PRIM_REC2020;Rec2020 -!ICCPROFCREATOR_PRIM_REDX;Red X -!ICCPROFCREATOR_PRIM_REDY;Red Y -!ICCPROFCREATOR_PRIM_SRGB;sRGB -!ICCPROFCREATOR_PRIM_TOOLTIP;You can set custom primaries for ICC v4 profiles and also for ICC v2 profiles. -!ICCPROFCREATOR_PRIM_WIDEG;Widegamut -!ICCPROFCREATOR_PROF_V2;ICC v2 -!ICCPROFCREATOR_PROF_V4;ICC v4 -!ICCPROFCREATOR_SAVEDIALOG_TITLE;Save ICC profile as... -!ICCPROFCREATOR_SLOPE;Slope -!ICCPROFCREATOR_TRC_PRESET;Tone response curve -!INSPECTOR_WINDOW_TITLE;Inspector -!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. -!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image. -!IPTCPANEL_COPYRIGHT;Copyright notice -!IPTCPANEL_COPYRIGHTHINT;Enter a Notice on the current owner of the Copyright for this image, such as ©2008 Jane Doe. -!IPTCPANEL_COUNTRYHINT;Enter the name of the country pictured in this image. -!IPTCPANEL_CREATOR;Creator -!IPTCPANEL_CREATORHINT;Enter the name of the person that created this image. -!IPTCPANEL_CREATORJOBTITLE;Creator's job title -!IPTCPANEL_CREATORJOBTITLEHINT;Enter the Job Title of the person listed in the Creator field. -!IPTCPANEL_DATECREATEDHINT;Enter the Date the image was taken. -!IPTCPANEL_DESCRIPTION;Description -!IPTCPANEL_DESCRIPTIONHINT;Enter a 'caption' describing the who, what, and why of what is happening in this image, this might include names of people, and/or their role in the action that is taking place within the image. -!IPTCPANEL_DESCRIPTIONWRITER;Description writer -!IPTCPANEL_DESCRIPTIONWRITERHINT;Enter the name of the person involved in writing, editing or correcting the description of the image. -!IPTCPANEL_HEADLINEHINT;Enter a brief publishable synopsis or summary of the contents of the image. -!IPTCPANEL_INSTRUCTIONSHINT;Enter information about embargoes, or other restrictions not covered by the Copyright field. -!IPTCPANEL_KEYWORDSHINT;Enter any number of keywords, terms or phrases used to express the subject matter in the image. -!IPTCPANEL_PROVINCE;Province or state -!IPTCPANEL_PROVINCEHINT;Enter the name of the province or state pictured in this image. -!IPTCPANEL_SOURCEHINT;Enter or edit the name of a person or party who has a role in the content supply chain, such as a person or entity from whom you received this image from. -!IPTCPANEL_SUPPCATEGORIES;Supplemental categories -!IPTCPANEL_SUPPCATEGORIESHINT;Further refines the subject of the image. -!IPTCPANEL_TITLEHINT;Enter a short verbal and human readable name for the image, this may be the file name. -!IPTCPANEL_TRANSREFERENCE;Job ID -!IPTCPANEL_TRANSREFERENCEHINT;Enter a number or identifier needed for workflow control or tracking. -!MAIN_BUTTON_ICCPROFCREATOR;ICC Profile Creator -!MAIN_BUTTON_NAVNEXT_TOOLTIP;Navigate to the next image relative to image opened in the Editor.\nShortcut: Shift-F4\n\nTo navigate to the next image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F4 -!MAIN_BUTTON_NAVPREV_TOOLTIP;Navigate to the previous image relative to image opened in the Editor.\nShortcut: Shift-F3\n\nTo navigate to the previous image relative to the currently selected thumbnail in the File Browser or Filmstrip:\nShortcut: F3 -!MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronize the File Browser or Filmstrip with the Editor to reveal the thumbnail of the currently opened image, and clear any active filters.\nShortcut: x\n\nAs above, but without clearing active filters:\nShortcut: y\n(Note that the thumbnail of the opened image will not be shown if filtered out). -!MAIN_FRAME_PLACES_DEL;Remove -!MAIN_MSG_IMAGEUNPROCESSED;This command requires all selected images to be queue-processed first. -!MAIN_MSG_OPERATIONCANCELLED;Operation cancelled -!MAIN_MSG_PATHDOESNTEXIST;The path\n\n%1\n\ndoes not exist. Please set a correct path in Preferences. -!MAIN_MSG_SETPATHFIRST;You first have to set a target path in Preferences in order to use this function! -!MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue. -!MAIN_MSG_WRITEFAILED;Failed to write\n'%1'\n\nMake sure that the folder exists and that you have write permission to it. -!MAIN_TAB_ADVANCED;Advanced -!MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-a -!MAIN_TAB_FAVORITES;Favorites -!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u -!MAIN_TAB_INSPECT; Inspect -!MAIN_TAB_LOCALLAB;Local -!MAIN_TAB_LOCALLAB_TOOLTIP;Shortcut: Alt-o -!MAIN_TOOLTIP_BACKCOLOR0;Background color of the preview: theme-based\nShortcut: 9 -!MAIN_TOOLTIP_BACKCOLOR1;Background color of the preview: black\nShortcut: 9 -!MAIN_TOOLTIP_BACKCOLOR2;Background color of the preview: white\nShortcut: 9 -!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: middle grey\nShortcut: 9 -!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the sharpening contrast mask.\nShortcut: p\n\nOnly works when sharpening is enabled and zoom >= 100%. -!MONITOR_PROFILE_SYSTEM;System default -!NAVIGATOR_B;B: -!NAVIGATOR_G;G: -!NAVIGATOR_H;H: -!NAVIGATOR_LAB_A;a*: -!NAVIGATOR_LAB_B;b*: -!NAVIGATOR_LAB_L;L*: -!NAVIGATOR_NA; -- -!NAVIGATOR_R;R: -!NAVIGATOR_S;S: -!NAVIGATOR_V;V: -!NAVIGATOR_XY_FULL;Width: %1, Height: %2 -!OPTIONS_BUNDLED_MISSING;The bundled profile '%1' could not be found!\n\nYour installation could be damaged.\n\nDefault internal values will be used instead. -!OPTIONS_DEFIMG_MISSING;The default profile for non-raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\n'%1' will be used instead. -!OPTIONS_DEFRAW_MISSING;The default profile for raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\n'%1' will be used instead. -!PARTIALPASTE_ADVANCEDGROUP;Advanced Settings -!PARTIALPASTE_CHANNELMIXERBW;Black-and-white -!PARTIALPASTE_COLORAPP;Color Appearance & Lighting -!PARTIALPASTE_COLORTONING;Color toning -!PARTIALPASTE_DEHAZE;Haze removal -!PARTIALPASTE_EQUALIZER;Wavelet levels -!PARTIALPASTE_FILMNEGATIVE;Film negative -!PARTIALPASTE_FILMSIMULATION;Film simulation -!PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control -!PARTIALPASTE_GRADIENT;Graduated filter -!PARTIALPASTE_LENSPROFILE;Profiled lens correction -!PARTIALPASTE_LOCALCONTRAST;Local contrast -!PARTIALPASTE_LOCALLAB;Local Adjustments -!PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings -!PARTIALPASTE_METADATA;Metadata mode -!PARTIALPASTE_PCVIGNETTE;Vignette filter -!PARTIALPASTE_PREPROCESS_DEADPIXFILT;Dead pixel filter -!PARTIALPASTE_PREPROCESS_HOTPIXFILT;Hot pixel filter -!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter -!PARTIALPASTE_PREPROCWB;Preprocess White Balance -!PARTIALPASTE_PRSHARPENING;Post-resize sharpening -!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift -!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue -!PARTIALPASTE_RAW_BORDER;Raw border -!PARTIALPASTE_RAW_IMAGENUM;Sub-image -!PARTIALPASTE_RAW_LMMSEITERATIONS;LMMSE enhancement steps -!PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift -!PARTIALPASTE_RETINEX;Retinex -!PARTIALPASTE_SOFTLIGHT;Soft light -!PARTIALPASTE_SPOT;Spot removal -!PARTIALPASTE_TM_FATTAL;Dynamic range compression -!PREFERENCES_APPEARANCE;Appearance -!PREFERENCES_APPEARANCE_COLORPICKERFONT;Color picker font -!PREFERENCES_APPEARANCE_CROPMASKCOLOR;Crop mask color -!PREFERENCES_APPEARANCE_MAINFONT;Main font -!PREFERENCES_APPEARANCE_NAVGUIDECOLOR;Navigator guide color -!PREFERENCES_APPEARANCE_PSEUDOHIDPI;Pseudo-HiDPI mode -!PREFERENCES_APPEARANCE_THEME;Theme -!PREFERENCES_AUTOSAVE_TP_OPEN;Save tool collapsed/expanded state on exit -!PREFERENCES_BEHADDALL;All to 'Add' -!PREFERENCES_BEHADDALLHINT;Set all parameters to the Add mode.\nAdjustments of parameters in the batch tool panel will be deltas to the stored values. -!PREFERENCES_BEHSETALL;All to 'Set' -!PREFERENCES_BEHSETALLHINT;Set all parameters to the Set mode.\nAdjustments of parameters in the batch tool panel will be absolute, the actual values will be displayed. -!PREFERENCES_CACHECLEAR;Clear -!PREFERENCES_CACHECLEAR_ALL;Clear all cached files: -!PREFERENCES_CACHECLEAR_ALLBUTPROFILES;Clear all cached files except for cached processing profiles: -!PREFERENCES_CACHECLEAR_ONLYPROFILES;Clear only cached processing profiles: -!PREFERENCES_CACHECLEAR_SAFETY;Only files in the cache are cleared. Processing profiles stored alongside the source images are not touched. -!PREFERENCES_CHUNKSIZES;Tiles per thread -!PREFERENCES_CHUNKSIZE_RAW_AMAZE;AMaZE demosaic -!PREFERENCES_CHUNKSIZE_RAW_CA;Raw CA correction -!PREFERENCES_CHUNKSIZE_RAW_RCD;RCD demosaic -!PREFERENCES_CHUNKSIZE_RAW_XT;Xtrans demosaic -!PREFERENCES_CHUNKSIZE_RGB;RGB processing -!PREFERENCES_CIE;Ciecam -!PREFERENCES_CIEARTIF;Avoid artifacts -!PREFERENCES_CLUTSCACHE;HaldCLUT Cache -!PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs -!PREFERENCES_CLUTSDIR;HaldCLUT directory -!PREFERENCES_CMMBPC;Black point compensation -!PREFERENCES_COMPLEXITYLOC;Default complexity for Local Adjustments -!PREFERENCES_COMPLEXITY_EXP;Advanced -!PREFERENCES_COMPLEXITY_NORM;Standard -!PREFERENCES_COMPLEXITY_SIMP;Basic -!PREFERENCES_CROP;Crop Editing -!PREFERENCES_CROP_AUTO_FIT;Automatically zoom to fit the crop -!PREFERENCES_CROP_GUIDES;Guides shown when not editing the crop -!PREFERENCES_CROP_GUIDES_FRAME;Frame -!PREFERENCES_CROP_GUIDES_FULL;Original -!PREFERENCES_CROP_GUIDES_NONE;None -!PREFERENCES_CURVEBBOXPOS;Position of curve copy & paste buttons -!PREFERENCES_CURVEBBOXPOS_ABOVE;Above -!PREFERENCES_CURVEBBOXPOS_BELOW;Below -!PREFERENCES_CURVEBBOXPOS_LEFT;Left -!PREFERENCES_CURVEBBOXPOS_RIGHT;Right -!PREFERENCES_CUSTPROFBUILDKEYFORMAT;Keys format -!PREFERENCES_CUSTPROFBUILDKEYFORMAT_NAME;Name -!PREFERENCES_CUSTPROFBUILDKEYFORMAT_TID;TagID -!PREFERENCES_DIRECTORIES;Directories -!PREFERENCES_EDITORCMDLINE;Custom command line -!PREFERENCES_EXTEDITOR_BYPASS_OUTPUT_PROFILE;Bypass output profile -!PREFERENCES_EXTEDITOR_DIR;Output directory -!PREFERENCES_EXTEDITOR_DIR_CURRENT;Same as input image -!PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom -!PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir -!PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output -!PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Compact toolbars in File Browser -!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser -!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. -!PREFERENCES_HISTOGRAM_TOOLTIP;If enabled, the working profile is used for rendering the main histogram and the Navigator panel, otherwise the gamma-corrected output profile is used. -!PREFERENCES_INSPECTORWINDOW;Open inspector in own window or fullscreen -!PREFERENCES_INSPECT_LABEL;Inspect -!PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images -!PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. -!PREFERENCES_LANG;Language -!PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MENUGROUPEXTPROGS;Group 'Open with' -!PREFERENCES_MONINTENT;Default rendering intent -!PREFERENCES_MONITOR;Monitor -!PREFERENCES_MONPROFILE;Default color profile -!PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. -!PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel -!PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. -!PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. -!PREFERENCES_PERFORMANCE_MEASURE;Measure -!PREFERENCES_PERFORMANCE_MEASURE_HINT;Logs processing times in console -!PREFERENCES_PERFORMANCE_THREADS;Threads -!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) -!PREFERENCES_PREVDEMO;Preview Demosaic Method -!PREFERENCES_PREVDEMO_FAST;Fast -!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: -!PREFERENCES_PREVDEMO_SIDECAR;As in PP3 +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_PRINTER;Printer (Soft-Proofing) -!PREFERENCES_PROFILESAVEBOTH;Save processing profile both to the cache and next to the input file -!PREFERENCES_PROFILESAVELOCATION;Processing profile saving location -!PREFERENCES_PROFILE_NONE;None -!PREFERENCES_PRTINTENT;Rendering intent -!PREFERENCES_PRTPROFILE;Color profile -!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset -!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in 'Single Editor Tab Mode' and when 'Demosaicing method used for the preview at <100% zoom' is set to 'As in PP3'. -!PREFERENCES_SAVE_TP_OPEN_NOW;Save tool collapsed/expanded state now -!PREFERENCES_SERIALIZE_TIFF_READ;TIFF Read Settings -!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize reading of TIFF files -!PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;Enabling this option when working with folders containing uncompressed TIFF files can increase performance of thumbnail generation. -!PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show Filmstrip toolbar -!PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips -!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules -!PREFERENCES_TAB_PERFORMANCE;Performance -!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview -!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show -!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering -!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles -!PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling -!PROFILEPANEL_GLOBALPROFILES;Bundled profiles -!PROFILEPANEL_MODE_TOOLTIP;Processing profile fill mode.\n\nButton pressed: partial profiles will be converted to full profiles; the missing values will be replaced with hard-coded defaults.\n\nButton released: profiles will be applied as they are, altering only those values which they contain. -!PROFILEPANEL_MYPROFILES;My profiles -!PROFILEPANEL_PDYNAMIC;Dynamic -!PROFILEPANEL_PINTERNAL;Neutral -!PROGRESSBAR_DECODING;Decoding... -!PROGRESSBAR_GREENEQUIL;Green equilibration... -!PROGRESSBAR_HLREC;Highlight reconstruction... -!PROGRESSBAR_HOTDEADPIXELFILTER;Hot/dead pixel filter... -!PROGRESSBAR_LINEDENOISE;Line noise filter... -!PROGRESSBAR_NOIMAGES;No images found -!PROGRESSBAR_PROCESSING_PROFILESAVED;Processing profile saved -!PROGRESSBAR_RAWCACORR;Raw CA correction... -!PROGRESSBAR_SNAPSHOT_ADDED;Snapshot added -!QINFO_FRAMECOUNT;%2 frames -!QINFO_HDR;HDR / %2 frame(s) -!QINFO_PIXELSHIFT;Pixel Shift / %2 frame(s) -!QUEUE_DESTFILENAME;Path and file name -!QUEUE_LOCATION_TITLE;Output Location -!QUEUE_STARTSTOP_TOOLTIP;Start or stop processing the images in the queue.\n\nShortcut: Ctrl+s -!SAMPLEFORMAT_0;Unknown data format -!SAMPLEFORMAT_1;8-bit unsigned -!SAMPLEFORMAT_2;16-bit unsigned -!SAMPLEFORMAT_4;24-bit LogLuv -!SAMPLEFORMAT_8;32-bit LogLuv -!SAMPLEFORMAT_16;16-bit floating-point -!SAMPLEFORMAT_32;24-bit floating-point -!SAMPLEFORMAT_64;32-bit floating-point -!SAVEDLG_FILEFORMAT_FLOAT; floating-point -!SAVEDLG_FORCEFORMATOPTS;Force saving options -!SAVEDLG_SUBSAMP;Subsampling -!SAVEDLG_SUBSAMP_1;Best compression -!SAVEDLG_SUBSAMP_2;Balanced -!SAVEDLG_SUBSAMP_3;Best quality -!SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. -!SAVEDLG_WARNFILENAME;File will be named -!SHCSELECTOR_TOOLTIP;Click right mouse button to reset the position of those 3 sliders. +!PREFERENCES_TAB_FAVORITES;Favorites +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. -!TC_PRIM_BLUX;Bx -!TC_PRIM_BLUY;By -!TC_PRIM_GREX;Gx -!TC_PRIM_GREY;Gy -!TC_PRIM_REDX;Rx -!TC_PRIM_REDY;Ry -!THRESHOLDSELECTOR_B;Bottom -!THRESHOLDSELECTOR_BL;Bottom-left -!THRESHOLDSELECTOR_BR;Bottom-right -!THRESHOLDSELECTOR_HINT;Hold the Shift key to move individual control points. -!THRESHOLDSELECTOR_T;Top -!THRESHOLDSELECTOR_TL;Top-left -!THRESHOLDSELECTOR_TR;Top-right -!TOOLBAR_TOOLTIP_COLORPICKER;Lockable Color Picker\n\nWhen the tool is active:\n- Add a picker: left-click.\n- Drag a picker: left-click and drag.\n- Delete a picker: right-click.\n- Delete all pickers: Ctrl+Shift+right-click.\n- Revert to hand tool: right-click outside any picker. -!TOOLBAR_TOOLTIP_PERSPECTIVE;Perspective Correction\n\nEdit control lines to correct perspective distortion. Click this button again to apply correction. -!TP_BWMIX_ALGO;Algorithm OYCPM -!TP_BWMIX_ALGO_LI;Linear -!TP_BWMIX_ALGO_SP;Special effects -!TP_BWMIX_ALGO_TOOLTIP;Linear: will produce a normal linear response.\nSpecial effects: will produce special effects by mixing channels non-linearly. -!TP_BWMIX_AUTOCH;Auto -!TP_BWMIX_CC_ENABLED;Adjust complementary color -!TP_BWMIX_CC_TOOLTIP;Enable to allow automatic adjustment of complementary colors in ROYGCBPM mode. -!TP_BWMIX_CHANNEL;Luminance equalizer -!TP_BWMIX_CURVEEDITOR1;'Before' curve -!TP_BWMIX_CURVEEDITOR2;'After' curve -!TP_BWMIX_CURVEEDITOR_AFTER_TOOLTIP;Tone curve, after B&W conversion, at the end of treatment. -!TP_BWMIX_CURVEEDITOR_BEFORE_TOOLTIP;Tone curve, just before B&W conversion.\nMay take into account the color components. -!TP_BWMIX_CURVEEDITOR_LH_TOOLTIP;Luminance according to hue L=f(H).\nPay attention to extreme values as they may cause artifacts. -!TP_BWMIX_FILTER;Color Filter -!TP_BWMIX_FILTER_BLUE;Blue -!TP_BWMIX_FILTER_BLUEGREEN;Blue-Green -!TP_BWMIX_FILTER_GREEN;Green -!TP_BWMIX_FILTER_GREENYELLOW;Green-Yellow -!TP_BWMIX_FILTER_NONE;None -!TP_BWMIX_FILTER_PURPLE;Purple -!TP_BWMIX_FILTER_RED;Red -!TP_BWMIX_FILTER_REDYELLOW;Red-Yellow -!TP_BWMIX_FILTER_TOOLTIP;The color filter simulates shots taken with a colored filter placed in front of the lens. Colored filters reduce the transmission of specific color ranges and therefore affect their lightness. E.g. a red filter darkens blue skies. -!TP_BWMIX_FILTER_YELLOW;Yellow -!TP_BWMIX_GAMMA;Gamma Correction -!TP_BWMIX_GAM_TOOLTIP;Correct gamma for each RGB channel. -!TP_BWMIX_LABEL;Black-and-White -!TP_BWMIX_MET;Method -!TP_BWMIX_MET_CHANMIX;Channel Mixer -!TP_BWMIX_MET_DESAT;Desaturation -!TP_BWMIX_MET_LUMEQUAL;Luminance Equalizer -!TP_BWMIX_MIXC;Channel Mixer -!TP_BWMIX_NEUTRAL;Reset -!TP_BWMIX_RGBLABEL;R: %1%% G: %2%% B: %3%% Total: %4%% -!TP_BWMIX_RGBLABEL_HINT;Final RGB factors that take care of all the mixer options.\n'Total' displays the sum of the RGB values:\n- always 100% in relative mode\n- higher (lighter) or lower (darker) than 100% in absolute mode. -!TP_BWMIX_RGB_TOOLTIP;Mix the RGB channels. Use presets for guidance.\nPay attention to negative values that may cause artifacts or erratic behavior. -!TP_BWMIX_SETTING;Presets -!TP_BWMIX_SETTING_TOOLTIP;Different presets (film, landscape, etc.) or manual Channel Mixer settings. -!TP_BWMIX_SET_HIGHCONTAST;High contrast -!TP_BWMIX_SET_HIGHSENSIT;High Sensitivity -!TP_BWMIX_SET_HYPERPANCHRO;Hyper Panchromatic -!TP_BWMIX_SET_INFRARED;Infrared -!TP_BWMIX_SET_LANDSCAPE;Landscape -!TP_BWMIX_SET_LOWSENSIT;Low Sensitivity -!TP_BWMIX_SET_LUMINANCE;Luminance -!TP_BWMIX_SET_NORMCONTAST;Normal Contrast -!TP_BWMIX_SET_ORTHOCHRO;Orthochromatic -!TP_BWMIX_SET_PANCHRO;Panchromatic -!TP_BWMIX_SET_PORTRAIT;Portrait -!TP_BWMIX_SET_RGBABS;Absolute RGB -!TP_BWMIX_SET_RGBREL;Relative RGB -!TP_BWMIX_SET_ROYGCBPMABS;Absolute ROYGCBPM -!TP_BWMIX_SET_ROYGCBPMREL;Relative ROYGCBPM -!TP_BWMIX_TCMODE_FILMLIKE;B&W Film-like -!TP_BWMIX_TCMODE_SATANDVALBLENDING;B&W Saturation and Value Blending -!TP_BWMIX_TCMODE_STANDARD;B&W Standard -!TP_BWMIX_TCMODE_WEIGHTEDSTD;B&W Weighted Standard -!TP_BWMIX_VAL;L -!TP_CBDL_AFT;After Black-and-White -!TP_CBDL_BEF;Before Black-and-White -!TP_CBDL_METHOD;Process located -!TP_CBDL_METHOD_TOOLTIP;Choose whether the Contrast by Detail Levels tool is to be positioned after the Black-and-White tool, which makes it work in L*a*b* space, or before it, which makes it work in RGB space. -!TP_COLORAPP_ABSOLUTELUMINANCE;Absolute luminance -!TP_COLORAPP_ADAPSCEN_TOOLTIP;Corresponds to the luminance in candelas per m2 at the time of shooting, calculated automatically from the exif data. -!TP_COLORAPP_ALGO;Algorithm -!TP_COLORAPP_ALGO_ALL;All -!TP_COLORAPP_ALGO_JC;Lightness + Chroma (JC) -!TP_COLORAPP_ALGO_JS;Lightness + Saturation (JS) -!TP_COLORAPP_ALGO_QM;Brightness + Colorfulness (QM) -!TP_COLORAPP_ALGO_TOOLTIP;Lets you choose between parameter subsets or all parameters. -!TP_COLORAPP_BADPIXSL;Hot/bad pixel filter -!TP_COLORAPP_BADPIXSL_TOOLTIP;Suppression of hot/bad (brightly colored) pixels.\n0 = No effect\n1 = Median\n2 = Gaussian.\nAlternatively, adjust the image to avoid very dark shadows.\n\nThese artifacts are due to limitations of CIECAM02. -!TP_COLORAPP_BRIGHT;Brightness (Q) -!TP_COLORAPP_BRIGHT_TOOLTIP;Brightness in CIECAM is the amount of perceived light emanating from a stimulus. It differs from L*a*b* and RGB brightness. -!TP_COLORAPP_CAT02ADAPTATION_TOOLTIP;When setting manually, values above 65 are recommended. -!TP_COLORAPP_CATCLASSIC;Classic -!TP_COLORAPP_CATMET_TOOLTIP;Classic - traditional CIECAM operation. The chromatic adaptation transforms are applied separately on 'Scene conditions' and basic illuminant on the one hand, and on basic illuminant and 'Viewing conditions' on the other.\n\nSymmetric – The chromatic adaptation is based on the white balance. The 'Scene conditions', 'Image adjustments' and 'Viewing conditions' settings are neutralized.\n\nMixed – Same as the 'Classic' option but in this case, the chromatic adaptation is based on the white balance. -!TP_COLORAPP_CATMOD;Mode -!TP_COLORAPP_CATSYMGEN;Automatic Symmetric -!TP_COLORAPP_CATSYMSPE;Mixed -!TP_COLORAPP_CHROMA;Chroma (C) -!TP_COLORAPP_CHROMA_M;Colorfulness (M) -!TP_COLORAPP_CHROMA_M_TOOLTIP;Colorfulness in CIECAM is the perceived amount of hue in relation to gray, an indicator that a stimulus appears to be more or less colored. -!TP_COLORAPP_CHROMA_S;Saturation (S) -!TP_COLORAPP_CHROMA_S_TOOLTIP;Saturation in CIECAM corresponds to the color of a stimulus in relation to its own brightness. It differs from L*a*b* and RGB saturation. -!TP_COLORAPP_CHROMA_TOOLTIP;Chroma in CIECAM corresponds to the color of a stimulus relative to the clarity of a stimulus that appears white under identical conditions. It differs from L*a*b* and RGB chroma. -!TP_COLORAPP_CIECAT_DEGREE;Adaptation -!TP_COLORAPP_CONTRAST;Contrast (J) -!TP_COLORAPP_CONTRAST_Q;Contrast (Q) -!TP_COLORAPP_CONTRAST_Q_TOOLTIP;Contrast (Q) in CIECAM is based on brightness. It differs from L*a*b* and RGB contrast. -!TP_COLORAPP_CONTRAST_TOOLTIP;Contrast (J) in CIECAM is based on lightness. It differs from L*a*b* and RGB contrast. -!TP_COLORAPP_CURVEEDITOR1;Tone curve 1 -!TP_COLORAPP_CURVEEDITOR1_TOOLTIP;Shows the histogram of L* (L*a*b*) before CIECAM.\nIf the 'Show CIECAM output histograms in CAL curves' checkbox is enabled, shows the histogram of J after CIECAM.\n\nJ is not shown in the main histogram panel.\n\nFor final output refer to the main histogram panel. -!TP_COLORAPP_CURVEEDITOR2;Tone curve 2 -!TP_COLORAPP_CURVEEDITOR2_TOOLTIP;Same usage as with the first J(J) tone curve. -!TP_COLORAPP_CURVEEDITOR3;Color curve -!TP_COLORAPP_CURVEEDITOR3_TOOLTIP;Adjust either chroma, saturation or colorfulness.\n\nShows the histogram of chromaticity (L*a*b*) before CIECAM.\nIf the 'Show CIECAM output histograms in CAL curves' checkbox is enabled, shows the histogram of C, S or M after CIECAM.\n\nC, S and M are not shown in the main histogram panel.\nFor final output refer to the main histogram panel. -!TP_COLORAPP_DATACIE;Show CIECAM output histograms in CAL curves -!TP_COLORAPP_DATACIE_TOOLTIP;Affects histograms shown in Color Appearance & Lightning curves. Does not affect RawTherapee's main histogram.\n\nEnabled: show approximate values for J and C, S or M after the CIECAM adjustments.\nDisabled: show L*a*b* values before CIECAM adjustments. -!TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). -!TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). -!TP_COLORAPP_FREE;Free temp + tint + CAT02/16 +[output] -!TP_COLORAPP_GAMUT;Use gamut control in L*a*b* mode -!TP_COLORAPP_GEN;Settings -!TP_COLORAPP_GEN_TOOLTIP;This module is based on the CIECAM color appearance models, which were designed to better simulate how human vision perceives colors under different lighting conditions, e.g. against different backgrounds. It takes into account the environment of each color and modifies its appearance to get as close as possible to human perception. It also adapts the output to the intended viewing conditions (monitor, TV, projector, printer, etc.) so that the chromatic appearance is preserved across the scene and display environments. -!TP_COLORAPP_HUE;Hue (h) -!TP_COLORAPP_HUE_TOOLTIP;Hue (h) is the degree to which a stimulus can be described as similar to a color described as red, green, blue and yellow. -!TP_COLORAPP_IL41;D41 -!TP_COLORAPP_IL50;D50 -!TP_COLORAPP_IL55;D55 -!TP_COLORAPP_IL60;D60 -!TP_COLORAPP_IL65;D65 -!TP_COLORAPP_IL75;D75 -!TP_COLORAPP_ILA;Incandescent StdA 2856K -!TP_COLORAPP_ILFREE;Free -!TP_COLORAPP_ILLUM;Illuminant -!TP_COLORAPP_ILLUM_TOOLTIP;Select the illuminant closest to the shooting conditions.\nIn general D50, but it can change depending on the time and latitude. -!TP_COLORAPP_LABEL;Color Appearance & Lighting -!TP_COLORAPP_LABEL_CAM02;Image Adjustments -!TP_COLORAPP_LABEL_SCENE;Scene Conditions -!TP_COLORAPP_LABEL_VIEWING;Viewing Conditions -!TP_COLORAPP_LIGHT;Lightness (J) -!TP_COLORAPP_LIGHT_TOOLTIP;Lightness in CIECAM is the clarity of a stimulus relative to the clarity of a stimulus that appears white under similar viewing conditions. It differs from L*a*b* and RGB lightness. -!TP_COLORAPP_MEANLUMINANCE;Mean luminance (Yb%) -!TP_COLORAPP_MOD02;CAM02 -!TP_COLORAPP_MOD16;CAM16 -!TP_COLORAPP_MODEL;WP model -!TP_COLORAPP_MODELCAT;CAM -!TP_COLORAPP_MODELCAT_TOOLTIP;Allows you to choose between CAM02 or CAM16.\nCAM02 will sometimes be more accurate.\nCAM16 should generate fewer artifacts. -!TP_COLORAPP_MODEL_TOOLTIP;White-Point Model.\n\nWB [RT] + [output]: RT's white balance is used for the scene, CIECAM is set to D50, and the output device's white balance is set in Viewing Conditions.\n\nWB [RT+CAT02/16] + [output]: RT's white balance settings are used by CAT02 and the output device's white balance is set in Viewing Conditions.\n\nFree temp + tint + CAT02/16 + [output]: temp and tint are selected by the user, the output device's white balance is set in Viewing Conditions. -!TP_COLORAPP_NEUTRAL;Reset -!TP_COLORAPP_NEUTRAL_TOOLTIP;Reset all sliders checkbox and curves to their default values. -!TP_COLORAPP_RSTPRO;Red & skin-tones protection -!TP_COLORAPP_RSTPRO_TOOLTIP;Red & skin-tones protection affects both sliders and curves. -!TP_COLORAPP_SOURCEF_TOOLTIP;Corresponds to the shooting conditions and how to bring the conditions and data back to a 'normal' area. Normal means average or standard conditions and data, i.e. without taking into account CIECAM corrections. +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_SURROUND;Surround !TP_COLORAPP_SURROUNDSRC;Surround -!TP_COLORAPP_SURROUND_AVER;Average -!TP_COLORAPP_SURROUND_DARK;Dark -!TP_COLORAPP_SURROUND_DIM;Dim -!TP_COLORAPP_SURROUND_EXDARK;Extremly Dark (Cutsheet) -!TP_COLORAPP_SURROUND_TOOLTIP;Changes tones and colors to take into account the viewing conditions of the output device. The darker the viewing conditions, the darker the image will become. Image brightness will not be changed when the viewing conditions are set to average. -!TP_COLORAPP_SURSOURCE_TOOLTIP;Changes tones and colors to take into account the surround conditions of the scene lighting. The darker the surround conditions, the brighter the image will become. Image brightness will not be changed when the surround is set to average. -!TP_COLORAPP_TCMODE_BRIGHTNESS;Brightness -!TP_COLORAPP_TCMODE_CHROMA;Chroma -!TP_COLORAPP_TCMODE_COLORF;Colorfulness -!TP_COLORAPP_TCMODE_LABEL1;Curve mode 1 -!TP_COLORAPP_TCMODE_LABEL2;Curve mode 2 -!TP_COLORAPP_TCMODE_LABEL3;Curve chroma mode -!TP_COLORAPP_TCMODE_LIGHTNESS;Lightness -!TP_COLORAPP_TCMODE_SATUR;Saturation -!TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 -!TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 -!TP_COLORAPP_TONECIE;Use CIECAM for tone mapping -!TP_COLORAPP_TONECIE_TOOLTIP;If this option is disabled, tone mapping is done in L*a*b* space.\nIf this option is enabled, tone mapping is done using CIECAM02.\nThe Tone Mapping tool must be enabled for this setting to take effect. -!TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. -!TP_COLORAPP_VIEWING_ABSOLUTELUMINANCE_TOOLTIP;Absolute luminance of the viewing environment\n(usually 16 cd/m²). -!TP_COLORAPP_WBCAM;WB [RT+CAT02/16] + [output] -!TP_COLORAPP_WBRT;WB [RT] + [output] -!TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. -!TP_COLORAPP_YBSCEN_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORTONING_AB;o C/L !TP_COLORTONING_AUTOSAT;Automatic !TP_COLORTONING_BALANCE;Balance @@ -2636,9 +2785,11 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_FILMNEGATIVE_LABEL;Film Negative !TP_FILMNEGATIVE_OUT_LEVEL;Output level !TP_FILMNEGATIVE_PICK;Pick neutral spots +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_RED;Red ratio !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. !TP_FILMSIMULATION_LABEL;Film Simulation !TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? @@ -2646,6 +2797,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_FILMSIMULATION_ZEROCLUTSFOUND;Set HaldCLUT directory in Preferences !TP_FLATFIELD_CLIPCONTROL;Clip control !TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Clip control avoids clipped highlights caused by applying the flat field. If there are already clipped highlights before applying the flat field, value 0 is used. +!TP_FLATFIELD_FROMMETADATA;From Metadata !TP_GENERAL_11SCALE_TOOLTIP;The effects of this tool are only visible or only accurate at a preview scale of 1:1. !TP_GRADIENT_CENTER;Center !TP_GRADIENT_CENTER_X;Center X @@ -2659,8 +2811,10 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_GRADIENT_LABEL;Graduated Filter !TP_GRADIENT_STRENGTH;Strength !TP_GRADIENT_STRENGTH_TOOLTIP;Filter strength in stops. +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_ENA_TOOLTIP;Could be activated by Auto Levels. !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_APPLYBASELINEEXPOSUREOFFSET;Baseline exposure !TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Employ the embedded DCP baseline exposure offset. The setting is only available if the selected DCP has one. !TP_ICM_APPLYHUESATMAP;Base table @@ -2672,6 +2826,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !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_GAMUT;Gamut control !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_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 !TP_ICM_NEUTRAL;Reset @@ -2715,6 +2870,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -2731,8 +2887,6 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_ICM_WORKING_TRC_SLOPE;Slope !TP_ICM_WORKING_TRC_SRGB;sRGB g=2.4 s=12.92 !TP_ICM_WORKING_TRC_TOOLTIP;Only for built-in profiles. -!TP_LABCURVE_AVOIDCOLORSHIFT;Avoid color shift -!TP_LABCURVE_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab). !TP_LABCURVE_CHROMATICITY;Chromaticity !TP_LABCURVE_CHROMA_TOOLTIP;To apply B&W toning, set Chromaticity to -100. !TP_LABCURVE_CURVEEDITOR_A_RANGE1;Green Saturated @@ -2790,7 +2944,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -2816,7 +2970,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -2849,6 +3003,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -2875,7 +3031,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -2910,8 +3066,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -2938,13 +3094,15 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -2980,7 +3138,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -2988,12 +3146,12 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -3020,6 +3178,11 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3108,6 +3271,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3168,11 +3333,13 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3204,7 +3371,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3229,7 +3396,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3279,7 +3446,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3372,7 +3539,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3384,7 +3551,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3473,6 +3640,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3799,6 +3967,16 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;Dynamic Range Compression !TP_TM_FATTAL_THRESHOLD;Detail +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH !TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Skin-tones !TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE1;Red/Purple @@ -4060,15 +4238,66 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_WAVELET_WAVOFFSET;Offset !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement !TP_WBALANCE_EQBLUERED;Blue/Red equalizer !TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behavior of 'white balance' by modulating the blue/red balance.\nThis can be useful when shooting conditions:\na) are far from the standard illuminant (e.g. underwater),\nb) are far from conditions where calibrations were performed,\nc) where the matrices or ICC profiles are unsuitable. +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. !TP_WBALANCE_PICKER;Pick -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. !TP_WBALANCE_TEMPBIAS;AWB temperature bias -!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'. +!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'.\n\nYou can use "Awb temperature bias" to adjust the "Temperature correlation" results. Each movement of this command brings a new calculation of temperature, tint and correlation. !TP_WBALANCE_WATER1;UnderWater 1 !TP_WBALANCE_WATER2;UnderWater 2 !TP_WBALANCE_WATER_HEADER;UnderWater !ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: f +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands index 63eaeccc6..327cb0131 100644 --- a/rtdata/languages/Nederlands +++ b/rtdata/languages/Nederlands @@ -1,20 +1,22 @@ -#01 2007-12-26 Rens Duijsens en Brent Huisman -#02 2008-03-14 updated by reggybe -#03 2009-02-01 updated to RT2.4-RC by paul.matthijsse -#04 2010-05-02 updated to rt3a1 by paul.matthijsse -#05 2011-03-03 updated to rt3a2 by paul.matthijsse -#06 2011-10-10 updated to rt4.0 by wim ter meer -#07 2011-11-28 updated by pm -#08 2012-05-17 updated to rt4.0.8 by wim ter meer -#09 2013-03-27 updated to rt4.0.10 by wim ter meer -#10 2013-11-27 updated to rt4.0.11 by wim ter meer -#11 2014-03-24 updated to rt4.1 by wim ter meer -#12 2014-10-19 updated to rt4.1.92 by wim ter meer -#13 2015-03-03 updated to rt4.2.102 by wim ter meer -#14 2015-11-23 update by wim ter meer -#15 2016-07-21 update by wim ter meer -#16 2017-04-21 update by wim ter meer -#17 2020-06-05 update by dheijl +#001 2007-12-26 Rens Duijsens en Brent Huisman +#002 2008-03-14 updated by reggybe +#003 2009-02-01 updated to RT2.4-RC by paul.matthijsse +#004 2010-05-02 updated to rt3a1 by paul.matthijsse +#005 2011-03-03 updated to rt3a2 by paul.matthijsse +#006 2011-10-10 updated to rt4.0 by wim ter meer +#007 2011-11-28 updated by pm +#008 2012-05-17 updated to rt4.0.8 by wim ter meer +#009 2013-03-27 updated to rt4.0.10 by wim ter meer +#010 2013-11-27 updated to rt4.0.11 by wim ter meer +#011 2014-03-24 updated to rt4.1 by wim ter meer +#012 2014-10-19 updated to rt4.1.92 by wim ter meer +#013 2015-03-03 updated to rt4.2.102 by wim ter meer +#014 2015-11-23 update by wim ter meer +#015 2016-07-21 update by wim ter meer +#016 2017-04-21 update by wim ter meer +#017 2020-06-05 update by dheijl +#100 +#101 @LANGUAGE_DISPLAY_NAME=Nederlands ABOUT_TAB_BUILD;Versie ABOUT_TAB_CREDITS;Credits @@ -184,11 +186,11 @@ FILEBROWSER_POPUPUNTRASH;Haal terug uit prullenbak FILEBROWSER_QUERYBUTTONHINT;Wis zoekopdracht FILEBROWSER_QUERYHINT;Zoeken op bestandsnamen. Ondersteund gedeeltelijke bestandsnamen. Scheidt de zoektermen door komma's, bv.\n1001,1004,1199\n\nSluit zoektermen uit door ze te prefixen met != bv.\n!=1001,1004,1199 \n\nSneltoets:\nCtrl-f - focus het zoekveld,\nEnter - zoek,\nEsc - verwijder zoekresultaat, \nShift-Esc - verwijder focus van het zoekveld. FILEBROWSER_QUERYLABEL; Zoeken: -FILEBROWSER_RANK1_TOOLTIP;Waardering 1 *\nSneltoets: Shift-1 -FILEBROWSER_RANK2_TOOLTIP;Waardering 2 *\nSneltoets: Shift-2 -FILEBROWSER_RANK3_TOOLTIP;Waardering 3 *\nSneltoets: Shift-3 -FILEBROWSER_RANK4_TOOLTIP;Waardering 4 *\nSneltoets: Shift-4 -FILEBROWSER_RANK5_TOOLTIP;Waardering 5 *\nSneltoets: Shift-5 +FILEBROWSER_RANK1_TOOLTIP;Waardering 1 *\nSneltoets: 1 +FILEBROWSER_RANK2_TOOLTIP;Waardering 2 *\nSneltoets: 2 +FILEBROWSER_RANK3_TOOLTIP;Waardering 3 *\nSneltoets: 3 +FILEBROWSER_RANK4_TOOLTIP;Waardering 4 *\nSneltoets: 4 +FILEBROWSER_RANK5_TOOLTIP;Waardering 5 *\nSneltoets: 5 FILEBROWSER_RENAMEDLGLABEL;Hernoem bestand FILEBROWSER_RESETDEFAULTPROFILE;Terugzetten naar standaardwaarde FILEBROWSER_SELECTDARKFRAME;Selecteer donkerframe... @@ -199,23 +201,23 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Toon foto's met label Groen\nSneltoets: Alt-3 FILEBROWSER_SHOWCOLORLABEL4HINT;Toon foto's met label Blauw\nSneltoets: Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;Toon foto's met label Paars\nSneltoets: Alt-5 FILEBROWSER_SHOWDIRHINT;Verwijder alle filters.\nSneltoets: d -FILEBROWSER_SHOWEDITEDHINT;Toon bewerkte foto's\nSneltoets: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Toon niet-bewerkte foto's\nSneltoets: 6 +FILEBROWSER_SHOWEDITEDHINT;Toon bewerkte foto's\nSneltoets: Shift-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Toon niet-bewerkte foto's\nSneltoets: Shift-6 FILEBROWSER_SHOWEXIFINFO;Toon EXIF-info FILEBROWSER_SHOWNOTTRASHHINT;Toon alleen niet-verwijderde afbeeldingen. FILEBROWSER_SHOWORIGINALHINT;Toon alleen originele afbeelding.\n\nAls er meerdere afbeeldingen zijn met dezelfde naam maar verschillende extensies, dan wordt de afbeelding waarvan de extensie het hoogst staat in de lijst met extensies in Voorkeuren > Bestandsnavigator > Extensies -FILEBROWSER_SHOWRANK1HINT;Toon foto's met 1 ster.\nSneltoets: 1 -FILEBROWSER_SHOWRANK2HINT;Toon foto's met 2 sterren.\nSneltoets: 2 -FILEBROWSER_SHOWRANK3HINT;Toon foto's met 3 sterren.\nSneltoets: 3 -FILEBROWSER_SHOWRANK4HINT;Toon foto's met 4 sterren.\nSneltoets: 4 -FILEBROWSER_SHOWRANK5HINT;Toon foto's met 5 sterren.\nSneltoets: 5 +FILEBROWSER_SHOWRANK1HINT;Toon foto's met 1 ster.\nSneltoets: Shift-1 +FILEBROWSER_SHOWRANK2HINT;Toon foto's met 2 sterren.\nSneltoets: Shift-2 +FILEBROWSER_SHOWRANK3HINT;Toon foto's met 3 sterren.\nSneltoets: Shift-3 +FILEBROWSER_SHOWRANK4HINT;Toon foto's met 4 sterren.\nSneltoets: Shift-4 +FILEBROWSER_SHOWRANK5HINT;Toon foto's met 5 sterren.\nSneltoets: Shift-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;Toon recent opgeslagen/verwerkte foto's.\nSneltoets: Alt-7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Toon niet-opgeslagen/verwerkte foto's.\nSneltoets: Alt-6 FILEBROWSER_SHOWTRASHHINT;Toon inhoud prullenbak\nSneltoets: Ctrl-t FILEBROWSER_SHOWUNCOLORHINT;Toon foto's zonder kleurlabel.\nSneltoets: Alt-0 -FILEBROWSER_SHOWUNRANKHINT;Toon foto's zonder sterwaardering.\nSneltoets: 0 +FILEBROWSER_SHOWUNRANKHINT;Toon foto's zonder sterwaardering.\nSneltoets: Shift-0 FILEBROWSER_THUMBSIZE;Miniaturen -FILEBROWSER_UNRANK_TOOLTIP;Verwijder sterwaardering\nSneltoets: Shift-0 +FILEBROWSER_UNRANK_TOOLTIP;Verwijder sterwaardering\nSneltoets: 0 FILEBROWSER_ZOOMINHINT;Groter FILEBROWSER_ZOOMOUTHINT;Kleiner FILECHOOSER_FILTER_ANY;Alle bestanden @@ -2298,9 +2300,18 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !FILEBROWSER_POPUPINSPECT;Inspect +!FILEBROWSER_POPUPSORTBY;Sort Files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !GENERAL_DELETE_ALL;Delete all !GENERAL_EDIT;Edit +!GENERAL_OTHER;Other !HISTOGRAM_TOOLTIP_CROSSHAIR;Show/Hide indicator crosshair. !HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Toggle visibility of the scope option buttons. !HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Adjust scope brightness. @@ -2328,23 +2339,23 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_470;--unused-- !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -2352,7 +2363,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -2411,16 +2422,16 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -2451,7 +2462,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -2474,7 +2485,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -2488,11 +2499,11 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -2505,7 +2516,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -2588,7 +2599,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -2607,19 +2618,19 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -2655,7 +2666,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -2688,7 +2699,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -2713,7 +2724,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -2727,7 +2738,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -2739,10 +2750,10 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -2856,7 +2867,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -2947,7 +2958,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -2978,15 +2989,19 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_PRESER;Preserve neutral @@ -2995,6 +3010,8 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_ICM_WORKING_ILLUM_METHOD;Illuminant method !HISTORY_MSG_ICM_WORKING_PRIM_METHOD;Primaries method !HISTORY_MSG_ILLUM;CAL - SC - Illuminant +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_PERSP_CAM_ANGLE;Perspective - Camera !HISTORY_MSG_PERSP_CAM_FL;Perspective - Camera !HISTORY_MSG_PERSP_CAM_SHIFT;Perspective - Camera @@ -3017,6 +3034,11 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_SPOT_ENTRY;Spot removal - Point modif. !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance !HISTORY_MSG_WAVBL;Blur levels @@ -3055,15 +3077,35 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Theater !ICCPROFCREATOR_PRIM_DCIP3;DCI-P3 !INSPECTOR_WINDOW_TITLE;Inspector !MAIN_TAB_LOCALLAB;Local !MAIN_TAB_LOCALLAB_TOOLTIP;Shortcut: Alt-o +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_LOCALLAB;Local Adjustments !PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings !PARTIALPASTE_PREPROCWB;Preprocess White Balance !PARTIALPASTE_SPOT;Spot removal +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CIE;Ciecam !PREFERENCES_CIEARTIF;Avoid artifacts !PREFERENCES_COMPLEXITYLOC;Default complexity for Local Adjustments @@ -3076,9 +3118,53 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_INSPECTORWINDOW;Open inspector in own window or fullscreen +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips +!PREFERENCES_TAB_FAVORITES;Favorites +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -3092,6 +3178,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_COLORAPP_CATMOD;Mode !TP_COLORAPP_CATSYMGEN;Automatic Symmetric !TP_COLORAPP_CATSYMSPE;Mixed +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). !TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). !TP_COLORAPP_GEN;Settings @@ -3114,6 +3201,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_COLORAPP_SURROUNDSRC;Surround !TP_COLORAPP_SURSOURCE_TOOLTIP;Changes tones and colors to take into account the surround conditions of the scene lighting. The darker the surround conditions, the brighter the image will become. Image brightness will not be changed when the surround is set to average. !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. !TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. !TP_COLORAPP_YBSCEN_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. @@ -3126,11 +3214,17 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_FILMNEGATIVE_COLORSPACE_WORKING;Working color space !TP_FILMNEGATIVE_GREENBALANCE;Magenta/Green !TP_FILMNEGATIVE_OUT_LEVEL;Output level +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_FBW;Black-and-White +!TP_ICM_GAMUT;Gamut control !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_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 !TP_ICM_NEUTRAL;Reset @@ -3167,6 +3261,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -3186,7 +3281,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -3212,7 +3307,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -3245,6 +3340,8 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -3271,7 +3368,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -3306,8 +3403,8 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -3334,13 +3431,15 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -3376,7 +3475,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -3384,12 +3483,12 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -3416,6 +3515,11 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3504,6 +3608,8 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3564,11 +3670,13 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3600,7 +3708,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3625,7 +3733,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3675,7 +3783,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3768,7 +3876,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3780,7 +3888,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3869,6 +3977,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3998,6 +4107,16 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_SPOT_ENTRYCHANGED;Point changed !TP_SPOT_HINT;Click on this button to be able to operate on the preview area.\n\nTo edit a spot, hover the white mark locating an edited area, making the editing geometry appear.\n\nTo add a spot, press Ctrl and left mouse button, drag the circle (Ctrl key can be released) to a source location, then release the mouse button.\n\nTo move the source or destination spot, hover its center then drag it.\n\nThe inner circle (maximum effect area) and the 'feather' circle can be resized by hovering them (the circle becomes orange) and dragging it (the circle becomes red).\n\nWhen the changes are done, right click outside any spot to end the Spot editing mode, or click on this button again. !TP_SPOT_LABEL;Spot Removal +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_WAVELET_BALCHROM;Equalizer Color !TP_WAVELET_BALLUM;Denoise equalizer White-Black !TP_WAVELET_BL;Blur levels @@ -4087,6 +4206,57 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_WAVELET_WAVOFFSET;Offset !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish index 06ed63aba..503cfc897 100644 --- a/rtdata/languages/Polish +++ b/rtdata/languages/Polish @@ -1,16 +1,18 @@ -#01 2007-12-24 Mateusz Ludwin -#02 2010-01-08 Bartosz "Simek" Kaszubowski -#03 2011-09-06 Dariusz 'Salvadhor' Duma -#04 2011-11-30 DrSlony -#05 2012-01-14 DrSlony -#06 2012-01-30 DrSlony -#07 2012-04-02 DrSlony -#08 2013-05-21 DrSlony -#09 2014-10-16 DrSlony -#10 2020-02-02 Bartłomiej Wiśniowski -#11 2020-02-02 Bartłomiej Wiśniowski -#12 2020-02-15 Bartłomiej Wiśniowski -#13 2020-02-17 Bartłomiej Wiśniowski +#001 2007-12-24 Mateusz Ludwin +#002 2010-01-08 Bartosz "Simek" Kaszubowski +#003 2011-09-06 Dariusz 'Salvadhor' Duma +#004 2011-11-30 DrSlony +#005 2012-01-14 DrSlony +#006 2012-01-30 DrSlony +#007 2012-04-02 DrSlony +#008 2013-05-21 DrSlony +#009 2014-10-16 DrSlony +#010 2020-02-02 Bartłomiej Wiśniowski +#011 2020-02-02 Bartłomiej Wiśniowski +#012 2020-02-15 Bartłomiej Wiśniowski +#013 2020-02-17 Bartłomiej Wiśniowski +#100 +#101 @LANGUAGE_DISPLAY_NAME=Polski ABOUT_TAB_BUILD;Wersja ABOUT_TAB_CREDITS;Zasługi @@ -28,6 +30,7 @@ CURVEEDITOR_CURVE;Krzywa CURVEEDITOR_CURVES;Krzywe CURVEEDITOR_CUSTOM;Własna CURVEEDITOR_DARKS;Ciemne +CURVEEDITOR_EDITPOINT_HINT;Włącz edycję wartości węzła.\n\nKliknij prawym przyciskiem myszy w węzeł, aby go wybrać.\nKliknij prawym przyciskiem myszy w pustą przestrzeń, aby odznaczyć węzeł. CURVEEDITOR_HIGHLIGHTS;Najjaśniejsze CURVEEDITOR_LIGHTS;Jasne CURVEEDITOR_LINEAR;Liniowa @@ -47,16 +50,21 @@ DIRBROWSER_FOLDERS;Katalogi DONT_SHOW_AGAIN;Nie pokazuj tej wiadomości ponownie. DYNPROFILEEDITOR_DELETE;Usuń DYNPROFILEEDITOR_EDIT;Edytuj +DYNPROFILEEDITOR_EDIT_RULE;Edytuj regułę dynamicznego profilu +DYNPROFILEEDITOR_ENTRY_TOOLTIP;Wyszukiwanie nie uwzględnia wielkości liter.\nUżyj przedrostka "re:" aby wprowadzić wyrażenie regularne. DYNPROFILEEDITOR_IMGTYPE_ANY;Każdy DYNPROFILEEDITOR_IMGTYPE_HDR;HDR +DYNPROFILEEDITOR_IMGTYPE_PS;Pixel Shift DYNPROFILEEDITOR_IMGTYPE_STD;Standardowy DYNPROFILEEDITOR_MOVE_DOWN;Przesuń w dół DYNPROFILEEDITOR_MOVE_UP;Przesuń w górę DYNPROFILEEDITOR_NEW;Nowy +DYNPROFILEEDITOR_NEW_RULE;Nowa reguła dynamicznego profilu DYNPROFILEEDITOR_PROFILE;Profil przetwarzania EDITWINDOW_TITLE;Edytor obrazu EDIT_OBJECT_TOOLTIP;Wyświetla widżet na podglądzie który ułatwia ustawienie narzędzia. EDIT_PIPETTE_TOOLTIP;Aby dodać punkt do krzywej należy trzymac wciśnięty klawisz Ctrl podczas kliknięcia lewym guzikiem myszki na danym obszarze głównego podglądu.\nAby zmienic ustawienie już istniejącego punktu, należy trzymać wduszony klawisz Ctrl podczas kliknięcia lewym guzikiem myszki na danym obszarze głównego podglądu, następnie należy puścić klawisz Ctrl (chyba że chodzi nam o bardzo precyzyjne ustawienie dzieki spowolnieniu jakie trzymanie klawisza Ctrl nam daje) i podczas trzymania lewego guzika myszki należy myszką ruszać w pionie aby odpowiednio manipulować punktem w pionie. +ERROR_MSG_METADATA_VALUE;Metadane: błąd ustawiania %1 na %2 EXIFFILTER_APERTURE;Przysłona EXIFFILTER_CAMERA;Aparat EXIFFILTER_EXPOSURECOMPENSATION;Korekcja ekspozycji (EV) @@ -66,12 +74,16 @@ EXIFFILTER_IMAGETYPE;Typ obrazu EXIFFILTER_ISO;ISO EXIFFILTER_LENS;Obiektyw EXIFFILTER_METADATAFILTER;Włącz filtry metadanych +EXIFFILTER_PATH;Ścieżka pliku EXIFFILTER_SHUTTER;Migawka +EXIFPANEL_ACTIVATE_ALL_HINT;Zaznacz wszystkie tagi +EXIFPANEL_ACTIVATE_NONE_HINT;Odznacz wszystkie tagi EXIFPANEL_ADDEDIT;Dodaj/Edytuj EXIFPANEL_ADDEDITHINT;Dodaje nową etykietę lub edytuje etykietę EXIFPANEL_ADDTAGDLG_ENTERVALUE;Wpisz wartość EXIFPANEL_ADDTAGDLG_SELECTTAG;Wybierz etykietę EXIFPANEL_ADDTAGDLG_TITLE;Dodaj/Edytuj etykietę +EXIFPANEL_BASIC_GROUP;Podstawowy EXIFPANEL_KEEP;Zapamiętaj EXIFPANEL_KEEPHINT;Zapamiętuje wybrane etykiety podczas zapisywania pliku wyjściowego EXIFPANEL_REMOVE;Usuń @@ -82,10 +94,13 @@ EXIFPANEL_RESETALLHINT;Przywraca orginalne wartości etykiet EXIFPANEL_RESETHINT;Przywraca orginalne wartości wybranych etykiet EXIFPANEL_SHOWALL;Pokaż wszystkie EXIFPANEL_SUBDIRECTORY;Podkatalog +EXIFPANEL_VALUE_NOT_SHOWN;Nie wyświetlane +EXPORT_BYPASS;Kroki przetwarzania do pominięcia EXPORT_BYPASS_ALL;Zaznacz / Odznacz wszystkie EXPORT_BYPASS_DEFRINGE;Pomiń usuwanie widma EXPORT_BYPASS_DIRPYRDENOISE;Pomiń redukcję szumów EXPORT_BYPASS_DIRPYREQUALIZER;Pomiń kontrast wg. poziomu detali +EXPORT_BYPASS_EQUALIZER;Omiń poziomy falkowe EXPORT_BYPASS_RAW_CA;Pomiń redukcję aberracji chromatycznej (raw) EXPORT_BYPASS_RAW_CCSTEPS;Pomiń tłumienie fałszowania koloru (raw) EXPORT_BYPASS_RAW_DCB_ENHANCE;Pomiń poprawę DCB (raw) @@ -102,14 +117,19 @@ EXPORT_FASTEXPORTOPTIONS;Opcje szybkiego eksportu EXPORT_INSTRUCTIONS;Opcje szybkiego eksportu umożliwiają pominięcie pewnych narzędzi które mogą być dość wymagające na procesor oraz mogą znacznie przedłużyc czas przetwarzania podczas eksportowania zdjęć. Ta metoda jest zalecana w razie potrzeby szybkiego uzyskania zdjęć o niższej rozdzielczości oraz jakości kiedy zależy nam na czasie a nie chcemy modyfikować plików PP3. EXPORT_MAXHEIGHT;Maksymalna wysokość: EXPORT_MAXWIDTH;Maksymalna szerokość: +EXPORT_PIPELINE;Rurociąg przetwarzania EXPORT_PUTTOQUEUEFAST; Dodaj do kolejki szybkiego eksportu EXPORT_RAW_DMETHOD;Algorytm demozaikowania +EXPORT_USE_FAST_PIPELINE;Dedykowane (pełne przetwarzanie na zmniejszonym obrazie) +EXPORT_USE_FAST_PIPELINE_TOOLTIP;Użyj dedykowanego rurociągu przetwarzania obrazu w trybie Szybkiego Eksportu, co przyspieszy proces kosztem jakości. Skalowanie obrazu odbywa się jak najwcześniej, zamiast na końcu, jak w normalnym przetwarzaniu. Przyspieszenie może być znaczne, ale przygotuj się na występowanie artefaktów i ogólną degradację jakości wyjściowej. +EXPORT_USE_NORMAL_PIPELINE;Standardowe (pominięcie niektórych kroków, skalowanie na końcu) EXTPROGTARGET_1;raw EXTPROGTARGET_2;wywołane w kolejce FILEBROWSER_APPLYPROFILE;Zastosuj profil FILEBROWSER_APPLYPROFILE_PARTIAL;Zastosuj częściowy profil FILEBROWSER_AUTODARKFRAME;Automatyczne użycie czarnej klatki FILEBROWSER_AUTOFLATFIELD;Automatyczne użycie klatki typu puste pole +FILEBROWSER_BROWSEPATHBUTTONHINT;Kliknij, aby otworzyć wskazaną ścieżkę, odświeżyć folder i zastosować poszukiwane słowa kluczowe. FILEBROWSER_BROWSEPATHHINT;Umożliwia przeglądanie wprowadzonej ścieżki\nCtrl-o zaznaczenie\nEnter, Ctrl-Enter (w menedżerze plików) przeglądanie\nSkróty:\n ~ - katalog domowy użytkownika\n ! - katalog z obrazami użytkownia FILEBROWSER_CACHE;Pamięć podręczna FILEBROWSER_CACHECLEARFROMFULL;Wyczyść wszystkie profile @@ -119,7 +139,10 @@ FILEBROWSER_COLORLABEL_TOOLTIP;Kolorowe etykiety\n\nUżyj za pomocą rozwijanej FILEBROWSER_COPYPROFILE;Kopiuj profil FILEBROWSER_CURRENT_NAME;Obecna nazwa: FILEBROWSER_DARKFRAME;Czarna klatka +FILEBROWSER_DELETEDIALOG_ALL;Czy na pewno chcesz trwale usunąć wszystkie pliki %1 w koszu? FILEBROWSER_DELETEDIALOG_HEADER;Potwierdzenie usunięcia pliku +FILEBROWSER_DELETEDIALOG_SELECTED;Czy na pewno chcesz trwale usunąć wybrane pliki %1? +FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Czy na pewno chcesz trwale usunąć wybrane pliki %1, włącznie z wersją przetworzoną w kolejce? FILEBROWSER_EMPTYTRASH;Wyczyść kosz FILEBROWSER_EMPTYTRASHHINT;Usuwa na zawsze pliki znajdujące się w koszu. FILEBROWSER_EXTPROGMENU;Otwórz za pomocą @@ -140,6 +163,7 @@ FILEBROWSER_POPUPCOLORLABEL4;Etykieta: Niebieska FILEBROWSER_POPUPCOLORLABEL5;Etykieta: Purpurowa FILEBROWSER_POPUPCOPYTO;Skopiuj do... FILEBROWSER_POPUPFILEOPERATIONS;Operacje na plikach +FILEBROWSER_POPUPINSPECT;Inspekcja FILEBROWSER_POPUPMOVEEND;Przenieś na koniec kolejki FILEBROWSER_POPUPMOVEHEAD;Przenieś na początek kolejki FILEBROWSER_POPUPMOVETO;Przenieś do... @@ -156,19 +180,21 @@ FILEBROWSER_POPUPRANK3;Ocena 3 *** FILEBROWSER_POPUPRANK4;Ocena 4 **** FILEBROWSER_POPUPRANK5;Ocena 5 ***** FILEBROWSER_POPUPREMOVE;Usuń na zawsze +FILEBROWSER_POPUPREMOVEINCLPROC;Usuń trwale, włącznie z wersją przetworzoną w kolejce FILEBROWSER_POPUPRENAME;Zmień nazwę FILEBROWSER_POPUPSELECTALL;Zaznacz wszystkie +FILEBROWSER_POPUPSORTBY;Sortuj pliki FILEBROWSER_POPUPTRASH;Przenieś do kosza FILEBROWSER_POPUPUNRANK;Usuń ocenę FILEBROWSER_POPUPUNTRASH;Usuń z kosza FILEBROWSER_QUERYBUTTONHINT;Wyczyść hasło szukania FILEBROWSER_QUERYHINT;Wprowadź część nazwy, by zlokalizować plik. Oddziel hasła przecinkami, np.\n1001,1004,1199\n\nWyklucz hasła poprzedzając je znakiem !=\nnp.\n!=1001,1004,1199\n\nSkróty:\nCtrl-f - przejdź do pola "Znajdź",\nEnter - szukaj,\nEsc - wyczyść pole "Znajdź",\nShift-Esc - wyjdź z pola "Znajdź". FILEBROWSER_QUERYLABEL; Znajdź: -FILEBROWSER_RANK1_TOOLTIP;Oceń 1 *\nSkrót: Shift-1 -FILEBROWSER_RANK2_TOOLTIP;Oceń 2 *\nSkrót: Shift-2 -FILEBROWSER_RANK3_TOOLTIP;Oceń 3 *\nSkrót: Shift-3 -FILEBROWSER_RANK4_TOOLTIP;Oceń 4 *\nSkrót: Shift-4 -FILEBROWSER_RANK5_TOOLTIP;Oceń 5 *\nSkrót: Shift-5 +FILEBROWSER_RANK1_TOOLTIP;Oceń 1 *\nSkrót: 1 +FILEBROWSER_RANK2_TOOLTIP;Oceń 2 *\nSkrót: 2 +FILEBROWSER_RANK3_TOOLTIP;Oceń 3 *\nSkrót: 3 +FILEBROWSER_RANK4_TOOLTIP;Oceń 4 *\nSkrót: 4 +FILEBROWSER_RANK5_TOOLTIP;Oceń 5 *\nSkrót: 5 FILEBROWSER_RENAMEDLGLABEL;Zmień nazwę pliku FILEBROWSER_RESETDEFAULTPROFILE;Przywróć domyślne FILEBROWSER_SELECTDARKFRAME;Wybierz czarną klatkę... @@ -179,27 +205,29 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Pokazuje zdjęcia z zieloną etykietą.\nSkrót: FILEBROWSER_SHOWCOLORLABEL4HINT;Pokazuje zdjęcia z niebieską etykietą.\nSkrót: Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;Pokazuje zdjęcia z purpurową etykietą.\nSkrót: Alt-5 FILEBROWSER_SHOWDIRHINT;Wyłącza wyszstkie filtry.\nSkrót: d -FILEBROWSER_SHOWEDITEDHINT;Pokazuje edytowane zdjęcia.\nSkrót: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Pokazuje nieedytowane zdjęcia.\nSkrót: 6 +FILEBROWSER_SHOWEDITEDHINT;Pokazuje edytowane zdjęcia.\nSkrót: Shift-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Pokazuje nieedytowane zdjęcia.\nSkrót: Shift-6 FILEBROWSER_SHOWEXIFINFO;Pokaż dane Exif.\n\nSkróty:\ni - Tryb wielu zakładek,\nAlt-i - Tryb jednej zakładki. FILEBROWSER_SHOWNOTTRASHHINT;Pokazuj tylko obrazy które nie znajdują się w koszu. -FILEBROWSER_SHOWRANK1HINT;Pokazuje zdjęcia ocenione na 1 gwiazdkę.\nSkrót: 1 -FILEBROWSER_SHOWRANK2HINT;Pokazuje zdjęcia ocenione na 2 gwiazdki.\nSkrót: 2 -FILEBROWSER_SHOWRANK3HINT;Pokazuje zdjęcia ocenione na 3 gwiazdki.\nSkrót: 3 -FILEBROWSER_SHOWRANK4HINT;Pokazuje zdjęcia ocenione na 4 gwiazdki.\nSkrót: 4 -FILEBROWSER_SHOWRANK5HINT;Pokazuje zdjęcia ocenione na 5 gwiazdek.\nSkrót: 5 +FILEBROWSER_SHOWORIGINALHINT;Pokaż tylko oryginalne obrazy.\n\nJeśli istnieje wiele obrazów o tej samej nazwie pliku, ale o różnych rozszerzeniach, uważa się za oryginalny ten, którego rozszerzenie jest najbliżej góry listy przetwarzanych rozszerzeń w Preferencje > Przeglądarka plików > Przetwarzane rozszerzenia. +FILEBROWSER_SHOWRANK1HINT;Pokazuje zdjęcia ocenione na 1 gwiazdkę.\nSkrót: Shift-1 +FILEBROWSER_SHOWRANK2HINT;Pokazuje zdjęcia ocenione na 2 gwiazdki.\nSkrót: Shift-2 +FILEBROWSER_SHOWRANK3HINT;Pokazuje zdjęcia ocenione na 3 gwiazdki.\nSkrót: Shift-3 +FILEBROWSER_SHOWRANK4HINT;Pokazuje zdjęcia ocenione na 4 gwiazdki.\nSkrót: Shift-4 +FILEBROWSER_SHOWRANK5HINT;Pokazuje zdjęcia ocenione na 5 gwiazdek.\nSkrót: Shift-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;Pokazuje zapisane zdjęcia.\nSkrót: Alt-7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Pokazuje niezapisane zdjęcia.\nSkrót: Alt-6 FILEBROWSER_SHOWTRASHHINT;Pokazuje zawartość kosza.\nSkrót: Ctrl-t FILEBROWSER_SHOWUNCOLORHINT;Pokazuje zdjęcia bez kolorowej etykiety.\nSkrót: Alt-0 -FILEBROWSER_SHOWUNRANKHINT;Pokazuje nieocenione zdjęcia.\nSkrót: 0 +FILEBROWSER_SHOWUNRANKHINT;Pokazuje nieocenione zdjęcia.\nSkrót: Shift-0 FILEBROWSER_THUMBSIZE;Rozmiar minaturek -FILEBROWSER_UNRANK_TOOLTIP;Usuń ocenę.\nSkrót: Shift-0 +FILEBROWSER_UNRANK_TOOLTIP;Usuń ocenę.\nSkrót: 0 FILEBROWSER_ZOOMINHINT;Zwiększa rozmiar miniaturek.\n\nSkróty:\n+ - Tryb wielu zakładek,\nAlt-+ - Tryb pojedyńczej zakładki. FILEBROWSER_ZOOMOUTHINT;Zmniejsza rozmiar miniaturek.\n\nSkróty:\n- - Tryb wielu zakładek,\nAlt-- - Tryb pojedyńczej zakładki. FILECHOOSER_FILTER_ANY;Wszystkie pliki FILECHOOSER_FILTER_COLPROF;Profile kolorów (*.icc) FILECHOOSER_FILTER_CURVE;Pliki krzywych +FILECHOOSER_FILTER_EXECUTABLE;Pliki wykonywalne FILECHOOSER_FILTER_LCP;Profile korekcyjne obiektywów FILECHOOSER_FILTER_PP;Profile przetwarzania FILECHOOSER_FILTER_SAME;Taki sam format jak aktualnego zdjęcia @@ -213,8 +241,10 @@ GENERAL_BEFORE;Przed GENERAL_CANCEL;Anuluj GENERAL_CLOSE;Zamknij GENERAL_CURRENT;Obecny +GENERAL_DELETE_ALL;Usuń wszystko GENERAL_DISABLE;Wyłącz GENERAL_DISABLED;Wyłączone +GENERAL_EDIT;Edytuj GENERAL_ENABLE;Włącz GENERAL_ENABLED;Włączone GENERAL_FILE;Plik @@ -225,6 +255,7 @@ GENERAL_NO;Nie GENERAL_NONE;Żaden GENERAL_OK;OK GENERAL_OPEN;Otwórz +GENERAL_OTHER;Inne GENERAL_PORTRAIT;Pionowo GENERAL_RESET;Resetuj GENERAL_SAVE;Zapisz @@ -232,12 +263,23 @@ GENERAL_SAVE_AS;Zapisz jako... GENERAL_SLIDER;Suwak GENERAL_UNCHANGED;(Niezmienione) GENERAL_WARNING;Uwaga +GIMP_PLUGIN_INFO;Witaj w wtyczce RawTherapee dla GIMP!\nPo zakończeniu edycji, po prostu zamknij główne okno RawTherapee, a obraz zostanie automatycznie zaimportowany do GIMP. HISTOGRAM_TOOLTIP_B;Pokaż/Ukryj histogram błękitów. HISTOGRAM_TOOLTIP_BAR;Pokazuje/Ukrywa wskaźnik RGB.\nKliknięcie prawym przyciskiem myszy na podglądzie zdjęcia blokuje/odblokowuje. HISTOGRAM_TOOLTIP_CHRO;Pokaż/Ukryj histogram chromatyczności. +HISTOGRAM_TOOLTIP_CROSSHAIR;Pokaż/Ukryj wskaźnik krzyżowy. HISTOGRAM_TOOLTIP_G;Pokaż/Ukryj histogram zieleni. HISTOGRAM_TOOLTIP_L;Pokaż/Ukryj histogram luminancji CIELab. +HISTOGRAM_TOOLTIP_MODE;Przełącz między liniową, logarytmiczną-liniową i logarytmiczną-logarytmiczną skalą histogramu. HISTOGRAM_TOOLTIP_R;Pokaż/Ukryj histogram czerwieni. +HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Przełącz widoczność przycisków opcji widoku. +HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Dostosuj jasność widoku. +HISTOGRAM_TOOLTIP_TYPE_HISTOGRAM;Histogram +HISTOGRAM_TOOLTIP_TYPE_HISTOGRAM_RAW;Histogram raw +HISTOGRAM_TOOLTIP_TYPE_PARADE;Parada RGB +HISTOGRAM_TOOLTIP_TYPE_VECTORSCOPE_HC;Wektorskop barwa-chrominancja +HISTOGRAM_TOOLTIP_TYPE_VECTORSCOPE_HS;Wektorskop barwa-nasycenie +HISTOGRAM_TOOLTIP_TYPE_WAVEFORM;Wykres przebiegu HISTORY_CHANGED;Zmieniono HISTORY_CUSTOMCURVE;Krzywa własna HISTORY_FROMCLIPBOARD;Ze schowka @@ -341,7 +383,7 @@ HISTORY_MSG_108;Próg kompresji prześwietleń HISTORY_MSG_109;Zmiana rozmiaru - Wymiary obwodu HISTORY_MSG_110;Zmiana rozmiaru dotyczy HISTORY_MSG_111;L*a*b* - Unikaj przycinania koloru -HISTORY_MSG_112;- +HISTORY_MSG_112;--nieużywane-- HISTORY_MSG_113;L*a*b* - Ograniczenie nasyczenia HISTORY_MSG_114;DCB - Liczba powtórzeń HISTORY_MSG_115;DCB - Zapobieganie fałszowaniu koloru @@ -456,7 +498,9 @@ HISTORY_MSG_231;B&W - Krzywa 'Przed' HISTORY_MSG_232;B&W - Rodzaj krzywej 'Przed' HISTORY_MSG_233;B&W - Krzywa 'Po' HISTORY_MSG_234;B&W - Rodzaj krzywej 'Po' -HISTORY_MSG_236;- +HISTORY_MSG_235;B&W - CM - Auto +HISTORY_MSG_236;--nieużywane-- +HISTORY_MSG_237;B&W - CM HISTORY_MSG_238;FP - Wtapianie HISTORY_MSG_239;FP - Siła HISTORY_MSG_240;FP - Środek @@ -491,8 +535,9 @@ HISTORY_MSG_269;Koloryzacja - Podświetlenia - Czerwone HISTORY_MSG_270;Koloryzacja - Podświetlenia - Zielona HISTORY_MSG_271;Koloryzacja - Podświetlenia - Niebieskie HISTORY_MSG_272;Koloryzacja - Balans +HISTORY_MSG_273;CT - Balans kolorów SMH HISTORY_MSG_276;Koloryzacja - Przezroczystość -HISTORY_MSG_277;--unused-- +HISTORY_MSG_277;--nieużywane-- HISTORY_MSG_278;Koloryzacja - Zachowaj luminancję HISTORY_MSG_279;Koloryzacja - Cienie HISTORY_MSG_280;Koloryzacja - Tony jasne @@ -519,12 +564,18 @@ HISTORY_MSG_301;NR - Kontrola luminancji HISTORY_MSG_302;NR - Metoda chrominancji HISTORY_MSG_303;NR - Metoda chrominancji HISTORY_MSG_304;W - Poziomy kontrastu +HISTORY_MSG_305;Poziomy falkowe HISTORY_MSG_306;W - Proces HISTORY_MSG_307;W - Proces HISTORY_MSG_308;W - Kierunek procesu HISTORY_MSG_309;W - ES - Detale +HISTORY_MSG_310;W - Pozostałe - Ochrona/celowanie odcieni nieba +HISTORY_MSG_311;W - Poziomy falkowe HISTORY_MSG_312;W - Residual - Próg cieni +HISTORY_MSG_313;W - Chroma - Nasycone/pastelowe +HISTORY_MSG_314;W - Gamut - Redukcja artefaktów HISTORY_MSG_315;W - Residual - Kontrast +HISTORY_MSG_316;W - Gamut - Ochrona/celowanie odcieni skóry HISTORY_MSG_317;W - Gamut - Odcień skóry HISTORY_MSG_318;W - Kontrast - Poziom podświetleń HISTORY_MSG_319;W - Kontrast - Zakres podświetleń @@ -535,6 +586,12 @@ HISTORY_MSG_323;W - ES - Kontrast lokalny HISTORY_MSG_324;W - Chroma - Pastelowe HISTORY_MSG_325;W - Chroma - Nasycone HISTORY_MSG_326;W - Chroma - Metoda +HISTORY_MSG_327;W - Kontrast - Zastosuj do +HISTORY_MSG_328;W - Chroma - Siła łączenia +HISTORY_MSG_329;W - Odcienie - Przezroczystość RG +HISTORY_MSG_330;W - Odcienie - Przezroczystość BY +HISTORY_MSG_331;W - Poziomy kontrastu - Dodatkowe +HISTORY_MSG_332;W - Metoda kafelkowania HISTORY_MSG_333;W - Residual - Cienie HISTORY_MSG_334;W - Residual - Chrominancja HISTORY_MSG_335;W - Residual - Podświetlenia @@ -543,69 +600,162 @@ HISTORY_MSG_337;W - Residual - Odcień nieba HISTORY_MSG_338;W - ES - Promień HISTORY_MSG_339;W - ES - Siła HISTORY_MSG_340;W - Siła +HISTORY_MSG_341;W - Wydajność krawędzi +HISTORY_MSG_342;W - ES - Pierwszy poziom HISTORY_MSG_343;W - Poziomy chrominancji +HISTORY_MSG_344;W - Metoda chroma sl/cur HISTORY_MSG_345;W - ES - Kontrast lokalny HISTORY_MSG_346;W - ES - Tryb kontrastu lokalnego HISTORY_MSG_347;W - Odszumianie - Poziom 1 HISTORY_MSG_348;W - Odszumianie - Poziom 2 HISTORY_MSG_349;W - Odszumianie - Poziom 3 +HISTORY_MSG_350;W - ES - Wykrywanie krawędzi +HISTORY_MSG_351;W - Pozostałe - Krzywa HH HISTORY_MSG_352;W - Tło +HISTORY_MSG_353;W - ES - Czułość gradientu +HISTORY_MSG_354;W - ES - Rozszerzone HISTORY_MSG_355;W - ES - Niski próg HISTORY_MSG_356;W - ES - Wysoki próg +HISTORY_MSG_357;W - Redukcja szumów - Połącz z ES +HISTORY_MSG_358;W - Gamut - CH HISTORY_MSG_359;Hot/Dead - Próg +HISTORY_MSG_360;TM - Gamma +HISTORY_MSG_361;W - Ostateczne - Balans chrominancji HISTORY_MSG_362;W - Residual - Metoda kompresji HISTORY_MSG_363;W - Residual - Siła kompersji HISTORY_MSG_364;W - Final - Balans kontrastu +HISTORY_MSG_365;W - Ostateczne - Balans delta +HISTORY_MSG_366;W - Pozostałe - Gamma kompresji +HISTORY_MSG_367;W - Ostateczne - Krzywa kontrastu 'Po' HISTORY_MSG_368;W - Final - Balans kontrastu HISTORY_MSG_369;W - Final - Metoda balansu HISTORY_MSG_370;W - Final - Krzywa lokalnego kontrastu +HISTORY_MSG_371;Wyostrzanie po zmianie rozmiaru HISTORY_MSG_372;PRS USM - Promień HISTORY_MSG_373;PRS USM - Ilość HISTORY_MSG_374;PRS USM - Próg +HISTORY_MSG_375;PRS USM - Wyostrzanie tylko krawędzi HISTORY_MSG_376;PRS USM - Promień wykrywania krawędzi HISTORY_MSG_377;PRS USM - Tolerancja krawędzi +HISTORY_MSG_378;PRS USM - Kontrola aureoli +HISTORY_MSG_379;PRS USM - Wartość kontroli aureoli HISTORY_MSG_380;PRS - Metoda HISTORY_MSG_381;PRS RLD - Promień HISTORY_MSG_382;PRS RLD - Ilość +HISTORY_MSG_383;PRS RLD - Tłumienie HISTORY_MSG_384;PRS RLD - Iteracje HISTORY_MSG_385;W - Residual - Balans kolorów +HISTORY_MSG_386;W - Pozostałe - Zielony wyższy balans CB +HISTORY_MSG_387;W - Pozostałe - Niebieski wyższy balans CB +HISTORY_MSG_388;W - Pozostałe - Zielony średni balans CB +HISTORY_MSG_389;W - Pozostałe - Niebieski średni balans CB +HISTORY_MSG_390;W - Pozostałe - Zielony niższy balans CB +HISTORY_MSG_391;W - Pozostałe - Niebieski niższy balans CB HISTORY_MSG_392;W - Residual - Balans kolorów +HISTORY_MSG_393;DCP - Tabela wyglądu +HISTORY_MSG_394;DCP - Ekspozycja bazowa +HISTORY_MSG_395;DCP - Tabela bazowa +HISTORY_MSG_396;W - Narzędzie do kontrastu +HISTORY_MSG_397;W - Narzędzie do chrominancji +HISTORY_MSG_398;W - Narzędzie ES +HISTORY_MSG_399;W - Narzędzie pozostałe +HISTORY_MSG_400;W - Narzędzie ostateczne +HISTORY_MSG_401;W - Narzędzie do tonowania +HISTORY_MSG_402;W - Narzędzie redukcji szumów +HISTORY_MSG_403;W - ES - Czułość krawędzi +HISTORY_MSG_404;W - ES - Wzmocnienie bazowe HISTORY_MSG_405;W - Odszumianie - Poziom 4 +HISTORY_MSG_406;W - ES - Sąsiednie piksele HISTORY_MSG_407;Retinex - Metoda HISTORY_MSG_408;Retinex - Promień HISTORY_MSG_410;Retinex - Przesunięcie HISTORY_MSG_411;Retinex - Siła +HISTORY_MSG_412;Retinex - Gradient Gaussa HISTORY_MSG_413;Retinex - Kontrast +HISTORY_MSG_414;Retinex - Histogram - Lab +HISTORY_MSG_415;Retinex - Transmisja +HISTORY_MSG_416;Retinex +HISTORY_MSG_417;Retinex - Mediana transmisji HISTORY_MSG_418;Retinex - Próg HISTORY_MSG_419;Retinex - Przestrzeń kolorów +HISTORY_MSG_420;Retinex - Histogram - HSL HISTORY_MSG_421;Retinex - Gamma HISTORY_MSG_422;Retinex - Gamma +HISTORY_MSG_423;Retinex - Pochylenie gamma +HISTORY_MSG_424;Retinex - Prog HL +HISTORY_MSG_425;--nieużywane-- HISTORY_MSG_426;Retinex - Wyrównywanie odcieni +HISTORY_MSG_427;Sposób renderowania wynikowego +HISTORY_MSG_428;Sposób renderowania na monitorze HISTORY_MSG_429;Retinex - Iteracje +HISTORY_MSG_430;Retinex - Gradient transmisji +HISTORY_MSG_431;Retinex - Gradient siły HISTORY_MSG_432;Retinex - M - Podświetlenia +HISTORY_MSG_433;Retinex - M - Wysokie światła TW HISTORY_MSG_434;Retinex - M - Cienie +HISTORY_MSG_435;Retinex - M - Cienie TW HISTORY_MSG_436;Retinex - M - Promień HISTORY_MSG_437;Retinex - M - Metoda HISTORY_MSG_438;Retinex - M - Wyrównywanie HISTORY_MSG_439;Retinex - Proces HISTORY_MSG_440;CbDL - Metoda +HISTORY_MSG_441;Retinex - Wzmocnienie transmisji HISTORY_MSG_442;Retinex - Skala +HISTORY_MSG_443;Kompensacja czerni wyjściowej +HISTORY_MSG_444;WB - Odchylenie temperatury +HISTORY_MSG_445;Podobraz raw +HISTORY_MSG_446;--nieużywane-- +HISTORY_MSG_447;--nieużywane-- +HISTORY_MSG_448;--nieużywane-- HISTORY_MSG_449;PS - Adaptacja ISO +HISTORY_MSG_450;--nieużywane-- +HISTORY_MSG_451;--nieużywane-- HISTORY_MSG_452;PS - Pokaż ruch HISTORY_MSG_453;PS - Pokaż tylko maskę +HISTORY_MSG_454;--nieużywane-- +HISTORY_MSG_455;--nieużywane-- +HISTORY_MSG_456;--nieużywane-- +HISTORY_MSG_457;PS Sprawdź czerwony/niebieski +HISTORY_MSG_458;--nieużywane-- +HISTORY_MSG_459;--nieużywane-- +HISTORY_MSG_460;--nieużywane-- +HISTORY_MSG_461;--nieużywane-- +HISTORY_MSG_462;PS Sprawdź zielony +HISTORY_MSG_463;--nieużywane-- +HISTORY_MSG_464;PS Rozmyj maskę ruchu HISTORY_MSG_465;PS - Promień rozmycia +HISTORY_MSG_466;--nieużywane-- +HISTORY_MSG_467;--nieużywane-- HISTORY_MSG_468;PS - Wypełnij dziury +HISTORY_MSG_469;PS Mediana +HISTORY_MSG_470;--nieużywane-- HISTORY_MSG_471;PS - Korekcja ruchu HISTORY_MSG_472;PS - Miękkie przejścia HISTORY_MSG_474;PS - Wyrównaj HISTORY_MSG_475;PS - Wyrównaj kanał +HISTORY_MSG_476;KAL - VC - Temperatura +HISTORY_MSG_477;KAL - VC - Odcień +HISTORY_MSG_478;KAL - VC - Średnia luminancja +HISTORY_MSG_479;KAL - VC - Adaptacja +HISTORY_MSG_480;KAL - VC - Automatyczna adaptacja +HISTORY_MSG_481;KAL - SC - Temperatura +HISTORY_MSG_482;KAL - SC - Odcień +HISTORY_MSG_483;KAL - SC - Średnia luminancja +HISTORY_MSG_484;KAL - SC - Automatyczna średnia luminancja HISTORY_MSG_485;Korekcja obiektywu HISTORY_MSG_486;Korekcja obiektywu - Aparat HISTORY_MSG_487;Korekcja obiektywu - Obiektyw +HISTORY_MSG_488;Kompresja zakresu dynamicznego HISTORY_MSG_489;DRC - Detal HISTORY_MSG_490;DRC - Ilość HISTORY_MSG_491;Balans bieli HISTORY_MSG_492;Krzywe RGB +HISTORY_MSG_493;Korekty w przestrzeni barw L*a*b* +HISTORY_MSG_494;Wyostrzanie po przechwyceniu +HISTORY_MSG_496;Usunięto lokalny punkt +HISTORY_MSG_497;Wybrano lokalny punkt +HISTORY_MSG_498;--nieużywane-- +HISTORY_MSG_499;--nieużywane-- HISTORY_MSG_CLAMPOOG;Ucinaj kolory spoza zakresu HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Korekcja koloru HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Korekcja koloru @@ -1922,160 +2072,21 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! -!CURVEEDITOR_EDITPOINT_HINT;Enable edition of node in/out values.\n\nRight-click on a node to select it.\nRight-click on empty space to de-select the node. -!DYNPROFILEEDITOR_EDIT_RULE;Edit Dynamic Profile Rule -!DYNPROFILEEDITOR_ENTRY_TOOLTIP;The matching is case insensitive.\nUse the 're:' prefix to enter\na regular expression. -!DYNPROFILEEDITOR_IMGTYPE_PS;Pixel Shift -!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule -!EXPORT_BYPASS;Processing steps to bypass -!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels -!EXPORT_PIPELINE;Processing pipeline -!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image) -!EXPORT_USE_FAST_PIPELINE_TOOLTIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality. -!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end) -!FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply 'find' keywords. -!FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to permanently delete all %1 files in trash? -!FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to permanently delete the selected %1 files? -!FILEBROWSER_DELETEDIALOG_SELECTEDINCLPROC;Are you sure you want to permanently delete the selected %1 files, including a queue-processed version? -!FILEBROWSER_POPUPINSPECT;Inspect -!FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version -!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions. -!GENERAL_DELETE_ALL;Delete all -!GENERAL_EDIT;Edit -!GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. -!HISTOGRAM_TOOLTIP_CROSSHAIR;Show/Hide indicator crosshair. -!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. -!HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Toggle visibility of the scope option buttons. -!HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Adjust scope brightness. -!HISTOGRAM_TOOLTIP_TYPE_HISTOGRAM;Histogram -!HISTOGRAM_TOOLTIP_TYPE_HISTOGRAM_RAW;Raw Histogram -!HISTOGRAM_TOOLTIP_TYPE_PARADE;RGB Parade -!HISTOGRAM_TOOLTIP_TYPE_VECTORSCOPE_HC;Hue-Chroma Vectorscope -!HISTOGRAM_TOOLTIP_TYPE_VECTORSCOPE_HS;Hue-Saturation Vectorscope -!HISTOGRAM_TOOLTIP_TYPE_WAVEFORM;Waveform -!HISTORY_MSG_235;B&W - CM - Auto -!HISTORY_MSG_237;B&W - CM -!HISTORY_MSG_273;CT - Color Balance SMH -!HISTORY_MSG_305;Wavelet Levels -!HISTORY_MSG_310;W - Residual - Sky tar/prot -!HISTORY_MSG_311;W - Wavelet levels -!HISTORY_MSG_313;W - Chroma - Sat/past -!HISTORY_MSG_314;W - Gamut - Reduce artifacts -!HISTORY_MSG_316;W - Gamut - Skin tar/prot -!HISTORY_MSG_327;W - Contrast - Apply to -!HISTORY_MSG_328;W - Chroma - Link strength -!HISTORY_MSG_329;W - Toning - Opacity RG -!HISTORY_MSG_330;W - Toning - Opacity BY -!HISTORY_MSG_331;W - Contrast levels - Extra -!HISTORY_MSG_332;W - Tiling method -!HISTORY_MSG_341;W - Edge performance -!HISTORY_MSG_342;W - ES - First level -!HISTORY_MSG_344;W - Meth chroma sl/cur -!HISTORY_MSG_350;W - ES - Edge detection -!HISTORY_MSG_351;W - Residual - HH curve -!HISTORY_MSG_353;W - ES - Gradient sensitivity -!HISTORY_MSG_354;W - ES - Enhanced -!HISTORY_MSG_357;W - Denoise - Link with ES -!HISTORY_MSG_358;W - Gamut - CH -!HISTORY_MSG_360;TM - Gamma -!HISTORY_MSG_361;W - Final - Chroma balance -!HISTORY_MSG_365;W - Final - Delta balance -!HISTORY_MSG_366;W - Residual - Compression gamma -!HISTORY_MSG_367;W - Final - 'After' contrast curve -!HISTORY_MSG_371;Post-Resize Sharpening -!HISTORY_MSG_375;PRS USM - Sharpen only edges -!HISTORY_MSG_378;PRS USM - Halo control -!HISTORY_MSG_379;PRS USM - Halo control amount -!HISTORY_MSG_383;PRS RLD - Damping -!HISTORY_MSG_386;W - Residual - CB green high -!HISTORY_MSG_387;W - Residual - CB blue high -!HISTORY_MSG_388;W - Residual - CB green mid -!HISTORY_MSG_389;W - Residual - CB blue mid -!HISTORY_MSG_390;W - Residual - CB green low -!HISTORY_MSG_391;W - Residual - CB blue low -!HISTORY_MSG_393;DCP - Look table -!HISTORY_MSG_394;DCP - Baseline exposure -!HISTORY_MSG_395;DCP - Base table -!HISTORY_MSG_396;W - Contrast sub-tool -!HISTORY_MSG_397;W - Chroma sub-tool -!HISTORY_MSG_398;W - ES sub-tool -!HISTORY_MSG_399;W - Residual sub-tool -!HISTORY_MSG_400;W - Final sub-tool -!HISTORY_MSG_401;W - Toning sub-tool -!HISTORY_MSG_402;W - Denoise sub-tool -!HISTORY_MSG_403;W - ES - Edge sensitivity -!HISTORY_MSG_404;W - ES - Base amplification -!HISTORY_MSG_406;W - ES - Neighboring pixels -!HISTORY_MSG_412;Retinex - Gaussian gradient -!HISTORY_MSG_414;Retinex - Histogram - Lab -!HISTORY_MSG_415;Retinex - Transmission -!HISTORY_MSG_416;Retinex -!HISTORY_MSG_417;Retinex - Transmission median -!HISTORY_MSG_420;Retinex - Histogram - HSL -!HISTORY_MSG_423;Retinex - Gamma slope -!HISTORY_MSG_424;Retinex - HL threshold -!HISTORY_MSG_425;--unused-- -!HISTORY_MSG_427;Output rendering intent -!HISTORY_MSG_428;Monitor rendering intent -!HISTORY_MSG_430;Retinex - Transmission gradient -!HISTORY_MSG_431;Retinex - Strength gradient -!HISTORY_MSG_433;Retinex - M - Highlights TW -!HISTORY_MSG_435;Retinex - M - Shadows TW -!HISTORY_MSG_441;Retinex - Gain transmission -!HISTORY_MSG_443;Output black point compensation -!HISTORY_MSG_444;WB - Temp bias -!HISTORY_MSG_445;Raw Sub-Image -!HISTORY_MSG_446;--unused-- -!HISTORY_MSG_447;--unused-- -!HISTORY_MSG_448;--unused-- -!HISTORY_MSG_450;--unused-- -!HISTORY_MSG_451;--unused-- -!HISTORY_MSG_454;--unused-- -!HISTORY_MSG_455;--unused-- -!HISTORY_MSG_456;--unused-- -!HISTORY_MSG_457;PS Check red/blue -!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;--unused-- -!HISTORY_MSG_464;PS Blur motion mask -!HISTORY_MSG_466;--unused-- -!HISTORY_MSG_467;--unused-- -!HISTORY_MSG_469;PS Median -!HISTORY_MSG_470;--unused-- -!HISTORY_MSG_476;CAL - VC - Temperature -!HISTORY_MSG_477;CAL - VC - Tint -!HISTORY_MSG_478;CAL - VC - Mean luminance -!HISTORY_MSG_479;CAL - VC - Adaptation -!HISTORY_MSG_480;CAL - VC - Auto adaptation -!HISTORY_MSG_481;CAL - SC - Temperature -!HISTORY_MSG_482;CAL - SC - Tint -!HISTORY_MSG_483;CAL - SC - Mean luminance -!HISTORY_MSG_484;CAL - SC - Auto mean luminance -!HISTORY_MSG_488;Dynamic Range Compression -!HISTORY_MSG_493;L*a*b* Adjustments -!HISTORY_MSG_494;Capture Sharpening -!HISTORY_MSG_496;Local Spot deleted -!HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -2083,7 +2094,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -2142,16 +2153,16 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -2182,7 +2193,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -2205,7 +2216,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -2219,11 +2230,11 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -2236,7 +2247,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -2319,7 +2330,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -2338,19 +2349,19 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -2386,7 +2397,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -2419,7 +2430,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -2444,7 +2455,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -2458,7 +2469,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -2470,10 +2481,10 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -2587,7 +2598,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -2678,7 +2689,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -2721,18 +2732,22 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold !HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual demosaic - Contrast threshold !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input !HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HISTMATCHING;Auto-matched tone curve !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries @@ -2747,6 +2762,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_ICM_WORKING_SLOPE;TRC - Slope !HISTORY_MSG_ICM_WORKING_TRC_METHOD;TRC method !HISTORY_MSG_ILLUM;CAL - SC - Illuminant +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_PDSHARPEN_RADIUS_BOOST;CS - Corner radius boost !HISTORY_MSG_PERSP_CAM_ANGLE;Perspective - Camera @@ -2777,6 +2794,11 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance !HISTORY_MSG_WAVBL;Blur levels @@ -2815,6 +2837,23 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !ICCPROFCREATOR_DESCRIPTION_ADDPARAM;Append gamma and slope values to the description !ICCPROFCREATOR_DESCRIPTION_TOOLTIP;Leave empty to set the default description. !ICCPROFCREATOR_ILL;Illuminant: @@ -2845,6 +2884,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !OPTIONS_DEFRAW_MISSING;The default profile for raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\n'%1' will be used instead. !PARTIALPASTE_EQUALIZER;Wavelet levels !PARTIALPASTE_FILMNEGATIVE;Film negative +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_LOCALLAB;Local Adjustments !PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings !PARTIALPASTE_METADATA;Metadata mode @@ -2857,9 +2897,11 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PARTIALPASTE_RAW_IMAGENUM;Sub-image !PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift !PARTIALPASTE_SPOT;Spot removal +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer !PREFERENCES_AUTOSAVE_TP_OPEN;Save tool collapsed/expanded state on exit !PREFERENCES_CACHECLEAR_ALLBUTPROFILES;Clear all cached files except for cached processing profiles: !PREFERENCES_CACHECLEAR_SAFETY;Only files in the cache are cleared. Processing profiles stored alongside the source images are not touched. +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CIE;Ciecam !PREFERENCES_CIEARTIF;Avoid artifacts !PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs @@ -2873,10 +2915,24 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. !PREFERENCES_INSPECTORWINDOW;Open inspector in own window or fullscreen !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_PERFORMANCE_MEASURE_HINT;Logs processing times in console !PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) @@ -2891,14 +2947,44 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show Filmstrip toolbar !PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_FAVORITES;Favorites !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling !QUEUE_STARTSTOP_TOOLTIP;Start or stop processing the images in the queue.\n\nShortcut: Ctrl+s +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -2915,6 +3001,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_COLORAPP_CATMOD;Mode !TP_COLORAPP_CATSYMGEN;Automatic Symmetric !TP_COLORAPP_CATSYMSPE;Mixed +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). !TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). !TP_COLORAPP_FREE;Free temp + tint + CAT02/16 +[output] @@ -2939,6 +3026,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_COLORAPP_SURROUNDSRC;Surround !TP_COLORAPP_SURSOURCE_TOOLTIP;Changes tones and colors to take into account the surround conditions of the scene lighting. The darker the surround conditions, the brighter the image will become. Image brightness will not be changed when the surround is set to average. !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. !TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. @@ -2978,11 +3066,16 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_FILMNEGATIVE_GREENBALANCE;Magenta/Green !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_OUT_LEVEL;Output level +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. !TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_APPLYBASELINEEXPOSUREOFFSET;Baseline exposure !TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Employ the embedded DCP baseline exposure offset. The setting is only available if the selected DCP has one. !TP_ICM_APPLYHUESATMAP;Base table @@ -2990,6 +3083,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !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_FBW;Black-and-White +!TP_ICM_GAMUT;Gamut control !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_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 !TP_ICM_NEUTRAL;Reset @@ -3029,6 +3123,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -3049,7 +3144,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -3075,7 +3170,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -3108,6 +3203,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -3134,7 +3231,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -3169,8 +3266,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -3197,13 +3294,15 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -3239,7 +3338,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -3247,12 +3346,12 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -3279,6 +3378,11 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3367,6 +3471,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3427,11 +3533,13 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3463,7 +3571,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3488,7 +3596,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3538,7 +3646,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3631,7 +3739,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3643,7 +3751,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3732,6 +3840,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3926,6 +4035,16 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_SPOT_HINT;Click on this button to be able to operate on the preview area.\n\nTo edit a spot, hover the white mark locating an edited area, making the editing geometry appear.\n\nTo add a spot, press Ctrl and left mouse button, drag the circle (Ctrl key can be released) to a source location, then release the mouse button.\n\nTo move the source or destination spot, hover its center then drag it.\n\nThe inner circle (maximum effect area) and the 'feather' circle can be resized by hovering them (the circle becomes orange) and dragging it (the circle becomes red).\n\nWhen the changes are done, right click outside any spot to end the Spot editing mode, or click on this button again. !TP_SPOT_LABEL;Spot Removal !TP_TM_FATTAL_ANCHOR;Anchor +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_WAVELET_B2;Residual !TP_WAVELET_BALANCE;Contrast balance d/v-h !TP_WAVELET_BALANCE_TOOLTIP;Alters the balance between the wavelet directions: vertical-horizontal and diagonal.\nIf contrast, chroma or residual tone mapping are activated, the effect due to balance is amplified. @@ -4078,7 +4197,58 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_WAVOFFSET;Offset !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. -!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'. +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. +!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'.\n\nYou can use "Awb temperature bias" to adjust the "Temperature correlation" results. Each movement of this command brings a new calculation of temperature, tint and correlation. +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Portugues b/rtdata/languages/Portugues index 09d3aa790..b5b8a104d 100644 --- a/rtdata/languages/Portugues +++ b/rtdata/languages/Portugues @@ -1,5 +1,7 @@ -#01 2018-07-25 Digitalpix58 -#02 2019-03-11 Xendez +#001 2018-07-25 Digitalpix58 +#002 2019-03-11 Xendez +#100 +#101 @LANGUAGE_DISPLAY_NAME=Português ABOUT_TAB_BUILD;Versão ABOUT_TAB_CREDITS;Créditos @@ -162,11 +164,11 @@ FILEBROWSER_POPUPUNTRASH;Remover do caixote do lixo FILEBROWSER_QUERYBUTTONHINT;Limpar a consulta de localizar FILEBROWSER_QUERYHINT;Introduzir os nomes de ficheiros a procurar. Suporta nomes de ficheiros parciais. Separar os termos de pesquisa usando vírgulas, por exemplo\n1001,1004,1199\n\nPode-se excluir termos de pesquisa com o prefixo != como por exemplo:\n!=1001,1004,1199\n\nAtalhos:\nCtrl-f - selecionar o campo de localizar\nEnter - pesquisar\nEsc - limpar o campo de localizar\nShift-Esc - desselecionar o campo de localizar FILEBROWSER_QUERYLABEL; Localizar: -FILEBROWSER_RANK1_TOOLTIP;Classificação 1 estrela\nAtalho: Shift-1 -FILEBROWSER_RANK2_TOOLTIP;Classificação 2 estrelas\nAtalho: Shift-2 -FILEBROWSER_RANK3_TOOLTIP;Classificação 3 estrelas\nAtalho: Shift-3 -FILEBROWSER_RANK4_TOOLTIP;Classificação 4 estrelas\nAtalho: Shift-4 -FILEBROWSER_RANK5_TOOLTIP;Classificação 5 estrelas\nAtalho: Shift-5 +FILEBROWSER_RANK1_TOOLTIP;Classificação 1 estrela\nAtalho: 1 +FILEBROWSER_RANK2_TOOLTIP;Classificação 2 estrelas\nAtalho: 2 +FILEBROWSER_RANK3_TOOLTIP;Classificação 3 estrelas\nAtalho: 3 +FILEBROWSER_RANK4_TOOLTIP;Classificação 4 estrelas\nAtalho: 4 +FILEBROWSER_RANK5_TOOLTIP;Classificação 5 estrelas\nAtalho: 5 FILEBROWSER_RENAMEDLGLABEL;Renomear ficheiro FILEBROWSER_RESETDEFAULTPROFILE;Repor padrão FILEBROWSER_SELECTDARKFRAME;Selecionar fotograma escuro... @@ -177,22 +179,22 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Mostrar imagens marcadas com Verde.\nAtalho: FILEBROWSER_SHOWCOLORLABEL4HINT;Mostrar imagens marcadas com Azul.\nAtalho: Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;Mostrar imagens marcadas com Roxo.\nAtalho: Alt-5 FILEBROWSER_SHOWDIRHINT;Limpar todos os filtros.\nAtalho: d -FILEBROWSER_SHOWEDITEDHINT;Mostrar imagens editadas.\nAtalho: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Mostrar imagens não editadas.\nAtalho: 6 +FILEBROWSER_SHOWEDITEDHINT;Mostrar imagens editadas.\nAtalho: Shift-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Mostrar imagens não editadas.\nAtalho: Shift-6 FILEBROWSER_SHOWEXIFINFO;Mostrar informações Exif.\n\nAtalhos:\ni - Modo de editor em várias abas,\nAlt-i - Modo de editor numa só aba. FILEBROWSER_SHOWORIGINALHINT;Mostrar apenas imagens originais.\n\nQuando existem várias imagens com o mesmo nome de ficheiro mas com extensões diferentes, a única considerada original é aquela cuja extensão está mais próxima da parte superior da lista de extensões analisadas em Preferências > Navegador de ficheiros > Extensões analisadas. -FILEBROWSER_SHOWRANK1HINT;Mostrar imagens classificadas com 1 estrela.\nAtalho: 1 -FILEBROWSER_SHOWRANK2HINT;Mostrar imagens classificadas com 2 estrelas.\nAtalho: 2 -FILEBROWSER_SHOWRANK3HINT;Mostrar imagens classificadas com 3 estrelas.\nAtalho: 3 -FILEBROWSER_SHOWRANK4HINT;Mostrar imagens classificadas com 4 estrelas.\nAtalho: 4 -FILEBROWSER_SHOWRANK5HINT;Mostrar imagens classificadas com 5 estrelas.\nAtalho: 5 +FILEBROWSER_SHOWRANK1HINT;Mostrar imagens classificadas com 1 estrela.\nAtalho: Shift-1 +FILEBROWSER_SHOWRANK2HINT;Mostrar imagens classificadas com 2 estrelas.\nAtalho: Shift-2 +FILEBROWSER_SHOWRANK3HINT;Mostrar imagens classificadas com 3 estrelas.\nAtalho: Shift-3 +FILEBROWSER_SHOWRANK4HINT;Mostrar imagens classificadas com 4 estrelas.\nAtalho: Shift-4 +FILEBROWSER_SHOWRANK5HINT;Mostrar imagens classificadas com 5 estrelas.\nAtalho: Shift-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;Mostrar imagens guardadas.\nAtalho: Alt-7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Mostrar imagens não guardadas.\nAtalho: Alt-6 FILEBROWSER_SHOWTRASHHINT;Mostrar conteúdo do caixote do lixo.\nAtalho: Ctrl-t FILEBROWSER_SHOWUNCOLORHINT;Mostrar imagens sem etiqueta de cor.\nAtalho: Alt-0 -FILEBROWSER_SHOWUNRANKHINT;Mostrar imagens sem classificação.\nAtalho: 0 +FILEBROWSER_SHOWUNRANKHINT;Mostrar imagens sem classificação.\nAtalho: Shift-0 FILEBROWSER_THUMBSIZE;Tamanho das miniaturas -FILEBROWSER_UNRANK_TOOLTIP;Desclassificar.\nAtalho: Shift-0 +FILEBROWSER_UNRANK_TOOLTIP;Desclassificar.\nAtalho: 0 FILEBROWSER_ZOOMINHINT;Aumentar tamanho das miniaturas.\n\nAtalhos:\n+ - Modo de editor em várias abas,\nAlt-+ - Modo de editor numa só aba. FILEBROWSER_ZOOMOUTHINT;Diminuir o tamanho das miniaturas.\n\nAtalhos:\n- - Modo de editor em várias abas,\nAlt-- - Modo de editor numa só aba. FILECHOOSER_FILTER_ANY;Todos os ficheiros @@ -2229,6 +2231,12 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply 'find' keywords. !FILEBROWSER_DELETEDIALOG_ALL;Are you sure you want to permanently delete all %1 files in trash? !FILEBROWSER_DELETEDIALOG_SELECTED;Are you sure you want to permanently delete the selected %1 files? @@ -2237,10 +2245,13 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !FILEBROWSER_POPUPINSPECT;Inspect !FILEBROWSER_POPUPREMOVE;Delete permanently !FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version +!FILEBROWSER_POPUPSORTBY;Sort Files !FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash. +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !GENERAL_DELETE_ALL;Delete all !GENERAL_EDIT;Edit !GENERAL_HELP;Help +!GENERAL_OTHER;Other !HISTOGRAM_TOOLTIP_CROSSHAIR;Show/Hide indicator crosshair. !HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Toggle visibility of the scope option buttons. !HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Adjust scope brightness. @@ -2269,23 +2280,23 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_494;Capture Sharpening !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -2293,7 +2304,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -2352,16 +2363,16 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -2392,7 +2403,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -2415,7 +2426,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -2429,11 +2440,11 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -2446,7 +2457,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -2529,7 +2540,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -2548,19 +2559,19 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -2596,7 +2607,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -2629,7 +2640,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -2654,7 +2665,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -2668,7 +2679,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -2680,10 +2691,10 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -2797,7 +2808,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -2888,7 +2899,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -2919,17 +2930,21 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input !HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_PRESER;Preserve neutral @@ -2938,6 +2953,8 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_ICM_WORKING_ILLUM_METHOD;Illuminant method !HISTORY_MSG_ICM_WORKING_PRIM_METHOD;Primaries method !HISTORY_MSG_ILLUM;CAL - SC - Illuminant +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold !HISTORY_MSG_PDSHARPEN_AUTO_RADIUS;CS - Auto radius !HISTORY_MSG_PDSHARPEN_CHECKITER;CS - Auto limit iterations @@ -2967,6 +2984,11 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_SPOT_ENTRY;Spot removal - Point modif. !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -3006,6 +3028,23 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Theater !ICCPROFCREATOR_PRIM_DCIP3;DCI-P3 !INSPECTOR_WINDOW_TITLE;Inspector @@ -3013,11 +3052,14 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !MAIN_TAB_LOCALLAB;Local !MAIN_TAB_LOCALLAB_TOOLTIP;Shortcut: Alt-o !PARTIALPASTE_FILMNEGATIVE;Film negative +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_LOCALLAB;Local Adjustments !PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings !PARTIALPASTE_PREPROCWB;Preprocess White Balance !PARTIALPASTE_SPOT;Spot removal +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer !PREFERENCES_APPEARANCE_PSEUDOHIDPI;Pseudo-HiDPI mode +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CIE;Ciecam !PREFERENCES_CIEARTIF;Avoid artifacts !PREFERENCES_COMPLEXITYLOC;Default complexity for Local Adjustments @@ -3030,8 +3072,44 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_INSPECTORWINDOW;Open inspector in own window or fullscreen +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips +!PREFERENCES_TAB_FAVORITES;Favorites +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling !PROGRESSBAR_DECODING;Decoding... !PROGRESSBAR_GREENEQUIL;Green equilibration... @@ -3040,6 +3118,14 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !PROGRESSBAR_LINEDENOISE;Line noise filter... !PROGRESSBAR_RAWCACORR;Raw CA correction... !QUEUE_LOCATION_TITLE;Output Location +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -3053,6 +3139,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_COLORAPP_CATMOD;Mode !TP_COLORAPP_CATSYMGEN;Automatic Symmetric !TP_COLORAPP_CATSYMSPE;Mixed +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). !TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). !TP_COLORAPP_GEN;Settings @@ -3075,6 +3162,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_COLORAPP_SURROUNDSRC;Surround !TP_COLORAPP_SURSOURCE_TOOLTIP;Changes tones and colors to take into account the surround conditions of the scene lighting. The darker the surround conditions, the brighter the image will become. Image brightness will not be changed when the surround is set to average. !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. !TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. !TP_COLORAPP_YBSCEN_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. @@ -3093,12 +3181,18 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_FILMNEGATIVE_LABEL;Film Negative !TP_FILMNEGATIVE_OUT_LEVEL;Output level !TP_FILMNEGATIVE_PICK;Pick neutral spots +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_RED;Red ratio !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_FBW;Black-and-White +!TP_ICM_GAMUT;Gamut control !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_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 !TP_ICM_NEUTRAL;Reset @@ -3135,6 +3229,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -3161,7 +3256,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -3187,7 +3282,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -3220,6 +3315,8 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -3246,7 +3343,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -3281,8 +3378,8 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -3309,13 +3406,15 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -3351,7 +3450,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -3359,12 +3458,12 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -3391,6 +3490,11 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3479,6 +3583,8 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3539,11 +3645,13 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3575,7 +3683,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3600,7 +3708,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3650,7 +3758,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3743,7 +3851,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3755,7 +3863,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3844,6 +3952,7 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3978,6 +4087,16 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_SPOT_ENTRYCHANGED;Point changed !TP_SPOT_HINT;Click on this button to be able to operate on the preview area.\n\nTo edit a spot, hover the white mark locating an edited area, making the editing geometry appear.\n\nTo add a spot, press Ctrl and left mouse button, drag the circle (Ctrl key can be released) to a source location, then release the mouse button.\n\nTo move the source or destination spot, hover its center then drag it.\n\nThe inner circle (maximum effect area) and the 'feather' circle can be resized by hovering them (the circle becomes orange) and dragging it (the circle becomes red).\n\nWhen the changes are done, right click outside any spot to end the Spot editing mode, or click on this button again. !TP_SPOT_LABEL;Spot Removal +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_WAVELET_BALCHROM;Equalizer Color !TP_WAVELET_BALLUM;Denoise equalizer White-Black !TP_WAVELET_BL;Blur levels @@ -4067,6 +4186,57 @@ ZOOMPANEL_ZOOMOUT;Afastar\nAtalho: - !TP_WAVELET_WAVOFFSET;Offset !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil) index cf386f5ff..87863fe37 100644 --- a/rtdata/languages/Portugues (Brasil) +++ b/rtdata/languages/Portugues (Brasil) @@ -1,5 +1,7 @@ -#01 2018-07-25 Digitalpix58 -#02 2019-03-12 Xendez +#001 2018-07-25 Digitalpix58 +#002 2019-03-12 Xendez +#100 +#101 @LANGUAGE_DISPLAY_NAME=Português brasileiro ABOUT_TAB_BUILD;Versão ABOUT_TAB_CREDITS;Créditos @@ -168,11 +170,11 @@ FILEBROWSER_POPUPUNTRASH;Remover da lixeira FILEBROWSER_QUERYBUTTONHINT;Limpar a consulta Localizar FILEBROWSER_QUERYHINT;Digite nomes de arquivos para procurar. Suporta nomes de arquivos parciais. Separe os termos de pesquisa usando vírgulas, por exemplo\n1001,1004,1199\n\nExcluir termos de pesquisa prefixando-os com !=\npor ex.\n!=1001,1004,1199\n\nAtalhos:\nCtrl-f - foque a caixa Localizar,\nEnter - pesquisa,\nEsc - Limpe a caixa Localizar,\nShift-Esc - desfoque a caixa Localizar. FILEBROWSER_QUERYLABEL; Localizar: -FILEBROWSER_RANK1_TOOLTIP;Classificação 1 *\nAtalho: Shift-1 -FILEBROWSER_RANK2_TOOLTIP;Classificação 2 *\nAtalho: Shift-2 -FILEBROWSER_RANK3_TOOLTIP;Classificação 3 *\nAtalho: Shift-3 -FILEBROWSER_RANK4_TOOLTIP;Classificação 4 *\nAtalho: Shift-4 -FILEBROWSER_RANK5_TOOLTIP;Classificação 5 *\nAtalho: Shift-5 +FILEBROWSER_RANK1_TOOLTIP;Classificação 1 *\nAtalho: 1 +FILEBROWSER_RANK2_TOOLTIP;Classificação 2 *\nAtalho: 2 +FILEBROWSER_RANK3_TOOLTIP;Classificação 3 *\nAtalho: 3 +FILEBROWSER_RANK4_TOOLTIP;Classificação 4 *\nAtalho: 4 +FILEBROWSER_RANK5_TOOLTIP;Classificação 5 *\nAtalho: 5 FILEBROWSER_RENAMEDLGLABEL;Renomear arquivo FILEBROWSER_RESETDEFAULTPROFILE;Restaurar para o padrão FILEBROWSER_SELECTDARKFRAME;Selecionar quadro escuro... @@ -183,23 +185,23 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Mostrar imagens marcadas com Verde.\nAtalho: FILEBROWSER_SHOWCOLORLABEL4HINT;Mostrar imagens marcadas com Azul.\nAtalho: Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;Mostrar imagens marcadas com Roxo.\nAtalho: Alt-5 FILEBROWSER_SHOWDIRHINT;Limpar todos os filtros.\nAtalho: d -FILEBROWSER_SHOWEDITEDHINT;Mostrar imagens editadas.\nAtalho: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Mostrar imagens não editadas.\nAtalho: 6 +FILEBROWSER_SHOWEDITEDHINT;Mostrar imagens editadas.\nAtalho: Shift-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Mostrar imagens não editadas.\nAtalho: Shift-6 FILEBROWSER_SHOWEXIFINFO;Mostrar informações Exif.\n\nAtalhos:\ni - Modo de Guias de Editores Múltiplos,\nAlt-i - Modo de Guia de Editor Único. FILEBROWSER_SHOWNOTTRASHHINT;Mostrar apenas imagens que não estão no lixo. FILEBROWSER_SHOWORIGINALHINT;Mostre somente imagens originais.\n\nQuando existem várias imagens com o mesmo nome de arquivo, mas extensões diferentes, a única considerada original é aquela cuja extensão está mais próxima da parte superior da lista de extensões analisadas em Preferências > Navegador de Arquivos > Extensões Analisadas. -FILEBROWSER_SHOWRANK1HINT;Mostrar imagens classificadas com 1 estrela.\nAtalho: 1 -FILEBROWSER_SHOWRANK2HINT;Mostrar imagens classificadas com 2 estrelas.\nAtalho: 2 -FILEBROWSER_SHOWRANK3HINT;Mostrar imagens classificadas com 3 estrelas.\nAtalho: 3 -FILEBROWSER_SHOWRANK4HINT;Mostrar imagens classificadas com 4 estrelas.\nAtalho: 4 -FILEBROWSER_SHOWRANK5HINT;Mostrar imagens classificadas com 5 estrelas.\nAtalho: 5 +FILEBROWSER_SHOWRANK1HINT;Mostrar imagens classificadas com 1 estrela.\nAtalho: Shift-1 +FILEBROWSER_SHOWRANK2HINT;Mostrar imagens classificadas com 2 estrelas.\nAtalho: Shift-2 +FILEBROWSER_SHOWRANK3HINT;Mostrar imagens classificadas com 3 estrelas.\nAtalho: Shift-3 +FILEBROWSER_SHOWRANK4HINT;Mostrar imagens classificadas com 4 estrelas.\nAtalho: Shift-4 +FILEBROWSER_SHOWRANK5HINT;Mostrar imagens classificadas com 5 estrelas.\nAtalho: Shift-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;Mostrar imagens salvas.\nAtalho: Alt-7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Mostrar imagens não salvas.\nAtalho: Alt-6 FILEBROWSER_SHOWTRASHHINT;Mostrar conteúdo da lixeira.\nAtalho: Ctrl-t FILEBROWSER_SHOWUNCOLORHINT;Mostrar imagens sem etiqueta colorida.\nAtalho: Alt-0 -FILEBROWSER_SHOWUNRANKHINT;Mostrar imagens sem classificação.\nAtalho: 0 +FILEBROWSER_SHOWUNRANKHINT;Mostrar imagens sem classificação.\nAtalho: Shift-0 FILEBROWSER_THUMBSIZE;Tamanho da miniatura -FILEBROWSER_UNRANK_TOOLTIP;Sem classificação.\nAtalho: Shift-0 +FILEBROWSER_UNRANK_TOOLTIP;Sem classificação.\nAtalho: 0 FILEBROWSER_ZOOMINHINT;Aumentar tamanho da miniatura.\n\nAtalhos:\n+ - Modo de Guias de Editores Múltiplos,\nAlt-+ - Modo de Guia de Editor Único. FILEBROWSER_ZOOMOUTHINT;Diminuir o tamanho da miniatura.\n\nAtalhos:\n- - Modo de Guias de Editores Múltiplos,\nAlt-- - Modo de Guia de Editor Único. FILECHOOSER_FILTER_ANY;Todos os arquivos @@ -2241,11 +2243,20 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !FILEBROWSER_BROWSEPATHBUTTONHINT;Click to open specified path, reload folder and apply 'find' keywords. !FILEBROWSER_POPUPINSPECT;Inspect +!FILEBROWSER_POPUPSORTBY;Sort Files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !GENERAL_DELETE_ALL;Delete all !GENERAL_EDIT;Edit !GENERAL_HELP;Help +!GENERAL_OTHER;Other !HISTOGRAM_TOOLTIP_CROSSHAIR;Show/Hide indicator crosshair. !HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Toggle visibility of the scope option buttons. !HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Adjust scope brightness. @@ -2274,23 +2285,23 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_494;Capture Sharpening !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -2298,7 +2309,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -2357,16 +2368,16 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -2397,7 +2408,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -2420,7 +2431,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -2434,11 +2445,11 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -2451,7 +2462,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -2534,7 +2545,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -2553,19 +2564,19 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -2601,7 +2612,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -2634,7 +2645,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -2659,7 +2670,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -2673,7 +2684,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -2685,10 +2696,10 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -2802,7 +2813,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -2893,7 +2904,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -2926,17 +2937,21 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input !HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_PRESER;Preserve neutral @@ -2945,6 +2960,8 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_ICM_WORKING_ILLUM_METHOD;Illuminant method !HISTORY_MSG_ICM_WORKING_PRIM_METHOD;Primaries method !HISTORY_MSG_ILLUM;CAL - SC - Illuminant +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold !HISTORY_MSG_PDSHARPEN_AUTO_RADIUS;CS - Auto radius !HISTORY_MSG_PDSHARPEN_CHECKITER;CS - Auto limit iterations @@ -2974,6 +2991,11 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_SPOT_ENTRY;Spot removal - Point modif. !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -3013,17 +3035,37 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Theater !ICCPROFCREATOR_PRIM_DCIP3;DCI-P3 !INSPECTOR_WINDOW_TITLE;Inspector !MAIN_TAB_LOCALLAB;Local !MAIN_TAB_LOCALLAB_TOOLTIP;Shortcut: Alt-o !PARTIALPASTE_FILMNEGATIVE;Film negative +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_LOCALLAB;Local Adjustments !PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings !PARTIALPASTE_PREPROCWB;Preprocess White Balance !PARTIALPASTE_SPOT;Spot removal +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer !PREFERENCES_CACHECLEAR_SAFETY;Only files in the cache are cleared. Processing profiles stored alongside the source images are not touched. +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CIE;Ciecam !PREFERENCES_CIEARTIF;Avoid artifacts !PREFERENCES_COMPLEXITYLOC;Default complexity for Local Adjustments @@ -3036,12 +3078,56 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_INSPECTORWINDOW;Open inspector in own window or fullscreen +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips +!PREFERENCES_TAB_FAVORITES;Favorites +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling !PROGRESSBAR_DECODING;Decoding... !PROGRESSBAR_HOTDEADPIXELFILTER;Hot/dead pixel filter... !PROGRESSBAR_RAWCACORR;Raw CA correction... +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -3055,6 +3141,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_COLORAPP_CATMOD;Mode !TP_COLORAPP_CATSYMGEN;Automatic Symmetric !TP_COLORAPP_CATSYMSPE;Mixed +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). !TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). !TP_COLORAPP_GEN;Settings @@ -3077,6 +3164,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_COLORAPP_SURROUNDSRC;Surround !TP_COLORAPP_SURSOURCE_TOOLTIP;Changes tones and colors to take into account the surround conditions of the scene lighting. The darker the surround conditions, the brighter the image will become. Image brightness will not be changed when the surround is set to average. !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. !TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. !TP_COLORAPP_YBSCEN_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. @@ -3095,11 +3183,17 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !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 Negative !TP_FILMNEGATIVE_OUT_LEVEL;Output level +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_FBW;Black-and-White +!TP_ICM_GAMUT;Gamut control !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_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 !TP_ICM_NEUTRAL;Reset @@ -3136,6 +3230,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -3159,7 +3254,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -3185,7 +3280,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -3218,6 +3313,8 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -3244,7 +3341,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -3279,8 +3376,8 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -3307,13 +3404,15 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -3349,7 +3448,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -3357,12 +3456,12 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -3389,6 +3488,11 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3477,6 +3581,8 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3537,11 +3643,13 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3573,7 +3681,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3598,7 +3706,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3648,7 +3756,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3741,7 +3849,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3753,7 +3861,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3842,6 +3950,7 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3979,6 +4088,16 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_SPOT_ENTRYCHANGED;Point changed !TP_SPOT_HINT;Click on this button to be able to operate on the preview area.\n\nTo edit a spot, hover the white mark locating an edited area, making the editing geometry appear.\n\nTo add a spot, press Ctrl and left mouse button, drag the circle (Ctrl key can be released) to a source location, then release the mouse button.\n\nTo move the source or destination spot, hover its center then drag it.\n\nThe inner circle (maximum effect area) and the 'feather' circle can be resized by hovering them (the circle becomes orange) and dragging it (the circle becomes red).\n\nWhen the changes are done, right click outside any spot to end the Spot editing mode, or click on this button again. !TP_SPOT_LABEL;Spot Removal +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_WAVELET_BALCHROM;Equalizer Color !TP_WAVELET_BALLUM;Denoise equalizer White-Black !TP_WAVELET_BL;Blur levels @@ -4068,6 +4187,57 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_WAVELET_WAVOFFSET;Offset !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/README b/rtdata/languages/README index bffdb994b..68431b4ac 100644 --- a/rtdata/languages/README +++ b/rtdata/languages/README @@ -45,6 +45,13 @@ comments in the right order, e.g.: #01 Line 2... #02 3, etc. +Metadata for the language file appear in comments with the following syntax: + #10 @KEY=VALUE +The @ character must appear immediately after the whitespace following the +numeric prefix. KEY is the metadata name and VALUE is value for that metadata +name. The following key(s) are recognized: + a) LANGUAGE_DISPLAY_NAME: The language name as shown in preferences. + To create a file with only Latin characters from a non-Latin one, you can use sed with the "y" command. For example, to create a latin-only "Polish (Latin Characters)" file from the non-latin "Polish" one: diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian index 6b0aa6ca0..dd1b881ee 100644 --- a/rtdata/languages/Russian +++ b/rtdata/languages/Russian @@ -1,12 +1,14 @@ -#01 2007-12-23 ArtDen -#02 2008-07-20 Denis Artemov -#03 2009-02-16 Kvark -#04 2010-02-26 Sergey Smirnov AKA smiserg -#05 2010-11-01 Ilia Popov -#06 2012-07-17 Roman Milanskij -#07 2014-02-12 Kostia (Kildor) Romanov -#08 2018-02-10 Kostia (Kildor) Romanov -#09 2018-12-13 Kostia (Kildor) Romanov +#001 2007-12-23 ArtDen +#002 2008-07-20 Denis Artemov +#003 2009-02-16 Kvark +#004 2010-02-26 Sergey Smirnov AKA smiserg +#005 2010-11-01 Ilia Popov +#006 2012-07-17 Roman Milanskij +#007 2014-02-12 Kostia (Kildor) Romanov +#008 2018-02-10 Kostia (Kildor) Romanov +#009 2018-12-13 Kostia (Kildor) Romanov +#100 +#101 @LANGUAGE_DISPLAY_NAME=Русский ABOUT_TAB_BUILD;Версия ABOUT_TAB_CREDITS;Авторы @@ -1434,6 +1436,12 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !CURVEEDITOR_EDITPOINT_HINT;Enable edition of node in/out values.\n\nRight-click on a node to select it.\nRight-click on empty space to de-select the node. !EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool. !EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve. +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !EXPORT_BYPASS;Processing steps to bypass !EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels !EXPORT_PIPELINE;Processing pipeline @@ -1450,13 +1458,16 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !FILEBROWSER_POPUPINSPECT;Inspect !FILEBROWSER_POPUPREMOVE;Delete permanently !FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version +!FILEBROWSER_POPUPSORTBY;Sort Files !FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash. !FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions. +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !FILECHOOSER_FILTER_PP;Processing profiles !FILECHOOSER_FILTER_SAME;Same format as current photo !GENERAL_DELETE_ALL;Delete all !GENERAL_EDIT;Edit !GENERAL_HELP;Help +!GENERAL_OTHER;Other !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. !HISTOGRAM_TOOLTIP_CROSSHAIR;Show/Hide indicator crosshair. !HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. @@ -1696,23 +1707,23 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_494;Capture Sharpening !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -1720,7 +1731,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -1779,16 +1790,16 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -1819,7 +1830,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -1842,7 +1853,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -1856,11 +1867,11 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -1873,7 +1884,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -1956,7 +1967,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -1975,19 +1986,19 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -2023,7 +2034,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -2056,7 +2067,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -2081,7 +2092,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -2095,7 +2106,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -2107,10 +2118,10 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -2224,7 +2235,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -2315,7 +2326,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -2362,17 +2373,21 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold !HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual demosaic - Contrast threshold !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input !HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries @@ -2387,6 +2402,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_ICM_WORKING_SLOPE;TRC - Slope !HISTORY_MSG_ICM_WORKING_TRC_METHOD;TRC method !HISTORY_MSG_ILLUM;CAL - SC - Illuminant +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold !HISTORY_MSG_PDSHARPEN_AUTO_RADIUS;CS - Auto radius @@ -2428,6 +2445,11 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_SPOT_ENTRY;Spot removal - Point modif. !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -2467,6 +2489,23 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !ICCPROFCREATOR_COPYRIGHT;Copyright: !ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to 'RawTherapee, CC0'. !ICCPROFCREATOR_CUSTOM;Custom @@ -2526,6 +2565,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !PARTIALPASTE_FILMNEGATIVE;Film negative !PARTIALPASTE_FILMSIMULATION;Film simulation !PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_LOCALLAB;Local Adjustments !PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings !PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter @@ -2538,11 +2578,13 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift !PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_SPOT;Spot removal +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer !PREFERENCES_APPEARANCE_PSEUDOHIDPI;Pseudo-HiDPI mode !PREFERENCES_CACHECLEAR_ALL;Clear all cached files: !PREFERENCES_CACHECLEAR_ALLBUTPROFILES;Clear all cached files except for cached processing profiles: !PREFERENCES_CACHECLEAR_ONLYPROFILES;Clear only cached processing profiles: !PREFERENCES_CACHECLEAR_SAFETY;Only files in the cache are cleared. Processing profiles stored alongside the source images are not touched. +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CHUNKSIZES;Tiles per thread !PREFERENCES_CHUNKSIZE_RAW_AMAZE;AMaZE demosaic !PREFERENCES_CHUNKSIZE_RAW_CA;Raw CA correction @@ -2566,13 +2608,27 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Compact toolbars in File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. !PREFERENCES_HISTOGRAM_TOOLTIP;If enabled, the working profile is used for rendering the main histogram and the Navigator panel, otherwise the gamma-corrected output profile is used. !PREFERENCES_INSPECTORWINDOW;Open inspector in own window or fullscreen !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONPROFILE;Default color profile !PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. @@ -2592,6 +2648,28 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;Enabling this option when working with folders containing uncompressed TIFF files can increase performance of thumbnail generation. !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show Filmstrip toolbar !PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips +!PREFERENCES_TAB_FAVORITES;Favorites +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling !PROFILEPANEL_PDYNAMIC;Dynamic !PROGRESSBAR_DECODING;Decoding... @@ -2609,10 +2687,18 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) !SAVEDLG_FILEFORMAT_FLOAT; floating-point !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -2633,6 +2719,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_COLORAPP_CATMOD;Mode !TP_COLORAPP_CATSYMGEN;Automatic Symmetric !TP_COLORAPP_CATSYMSPE;Mixed +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_DATACIE_TOOLTIP;Affects histograms shown in Color Appearance & Lightning curves. Does not affect RawTherapee's main histogram.\n\nEnabled: show approximate values for J and C, S or M after the CIECAM adjustments.\nDisabled: show L*a*b* values before CIECAM adjustments. !TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). !TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). @@ -2684,6 +2771,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_COLORAPP_TCMODE_LIGHTNESS;Lightness !TP_COLORAPP_TCMODE_SATUR;Saturation !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_TONECIE;Use CIECAM for tone mapping !TP_COLORAPP_TONECIE_TOOLTIP;If this option is disabled, tone mapping is done in L*a*b* space.\nIf this option is enabled, tone mapping is done using CIECAM02.\nThe Tone Mapping tool must be enabled for this setting to take effect. @@ -2794,14 +2882,19 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_FILMNEGATIVE_LABEL;Film Negative !TP_FILMNEGATIVE_OUT_LEVEL;Output level !TP_FILMNEGATIVE_PICK;Pick neutral spots +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_RED;Red ratio !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. !TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? !TP_FLATFIELD_CLIPCONTROL;Clip control !TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Clip control avoids clipped highlights caused by applying the flat field. If there are already clipped highlights before applying the flat field, value 0 is used. +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_APPLYBASELINEEXPOSUREOFFSET;Baseline exposure !TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Employ the embedded DCP baseline exposure offset. The setting is only available if the selected DCP has one. !TP_ICM_APPLYHUESATMAP;Base table @@ -2810,6 +2903,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_ICM_APPLYLOOKTABLE_TOOLTIP;Employ the embedded DCP look table. The setting is only available if the selected DCP has one. !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_GAMUT;Gamut control !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_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 !TP_ICM_NEUTRAL;Reset @@ -2850,6 +2944,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -2882,7 +2977,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -2908,7 +3003,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -2941,6 +3036,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -2967,7 +3064,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -3002,8 +3099,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -3030,13 +3127,15 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -3072,7 +3171,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -3080,12 +3179,12 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -3112,6 +3211,11 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3200,6 +3304,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3260,11 +3366,13 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3296,7 +3404,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3321,7 +3429,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3371,7 +3479,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3464,7 +3572,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3476,7 +3584,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3565,6 +3673,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3824,6 +3933,16 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_SPOT_ENTRYCHANGED;Point changed !TP_SPOT_HINT;Click on this button to be able to operate on the preview area.\n\nTo edit a spot, hover the white mark locating an edited area, making the editing geometry appear.\n\nTo add a spot, press Ctrl and left mouse button, drag the circle (Ctrl key can be released) to a source location, then release the mouse button.\n\nTo move the source or destination spot, hover its center then drag it.\n\nThe inner circle (maximum effect area) and the 'feather' circle can be resized by hovering them (the circle becomes orange) and dragging it (the circle becomes red).\n\nWhen the changes are done, right click outside any spot to end the Spot editing mode, or click on this button again. !TP_SPOT_LABEL;Spot Removal +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_WAVELET_1;Level 1 !TP_WAVELET_2;Level 2 !TP_WAVELET_3;Level 3 @@ -4073,8 +4192,59 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_WAVELET_WAVOFFSET;Offset !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. !TP_WBALANCE_TEMPBIAS;AWB temperature bias -!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'. +!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'.\n\nYou can use "Awb temperature bias" to adjust the "Temperature correlation" results. Each movement of this command brings a new calculation of temperature, tint and correlation. +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters) index 2c48f771b..6f572051d 100644 --- a/rtdata/languages/Serbian (Cyrilic Characters) +++ b/rtdata/languages/Serbian (Cyrilic Characters) @@ -1,4 +1,6 @@ -#01 2010-11-16 gpopac +#001 2010-11-16 gpopac +#100 +#101 @LANGUAGE_DISPLAY_NAME=српски ABOUT_TAB_BUILD;Издање ABOUT_TAB_CREDITS;Заслуге @@ -1193,8 +1195,13 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !DYNPROFILEEDITOR_PROFILE;Processing Profile !EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool. !EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve. +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 !EXIFFILTER_IMAGETYPE;Image type -!EXIFPANEL_SHOWALL;Show all +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !EXPORT_BYPASS;Processing steps to bypass !EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels !EXPORT_PIPELINE;Processing pipeline @@ -1224,12 +1231,14 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !FILEBROWSER_POPUPRANK5;Rank 5 ***** !FILEBROWSER_POPUPREMOVE;Delete permanently !FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version +!FILEBROWSER_POPUPSORTBY;Sort Files !FILEBROWSER_RESETDEFAULTPROFILE;Reset to default !FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash. !FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions. !FILECHOOSER_FILTER_ANY;All files !FILECHOOSER_FILTER_COLPROF;Color profiles (*.icc) !FILECHOOSER_FILTER_CURVE;Curve files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !FILECHOOSER_FILTER_LCP;Lens correction profiles !FILECHOOSER_FILTER_PP;Processing profiles !FILECHOOSER_FILTER_SAME;Same format as current photo @@ -1241,6 +1250,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !GENERAL_EDIT;Edit !GENERAL_HELP;Help !GENERAL_OPEN;Open +!GENERAL_OTHER;Other !GENERAL_RESET;Reset !GENERAL_SAVE_AS;Save as... !GENERAL_SLIDER;Slider @@ -1499,23 +1509,23 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_494;Capture Sharpening !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -1523,7 +1533,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -1582,16 +1592,16 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -1622,7 +1632,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -1645,7 +1655,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -1659,11 +1669,11 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -1676,7 +1686,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -1759,7 +1769,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -1778,19 +1788,19 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -1826,7 +1836,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -1859,7 +1869,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -1884,7 +1894,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -1898,7 +1908,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -1910,10 +1920,10 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -2027,7 +2037,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -2118,7 +2128,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -2170,18 +2180,22 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold !HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual demosaic - Contrast threshold !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input !HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HISTMATCHING;Auto-matched tone curve !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries @@ -2201,6 +2215,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -2246,6 +2262,11 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -2285,6 +2306,23 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !ICCPROFCREATOR_COPYRIGHT;Copyright: !ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to 'RawTherapee, CC0'. !ICCPROFCREATOR_CUSTOM;Custom @@ -2387,6 +2425,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !PARTIALPASTE_FILMNEGATIVE;Film negative !PARTIALPASTE_FILMSIMULATION;Film simulation !PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_LOCALCONTRAST;Local contrast !PARTIALPASTE_LOCALLAB;Local Adjustments !PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings @@ -2406,6 +2445,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_SPOT;Spot removal !PARTIALPASTE_TM_FATTAL;Dynamic range compression +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer !PREFERENCES_APPEARANCE;Appearance !PREFERENCES_APPEARANCE_COLORPICKERFONT;Color picker font !PREFERENCES_APPEARANCE_CROPMASKCOLOR;Crop mask color @@ -2419,6 +2459,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !PREFERENCES_CACHECLEAR_ALLBUTPROFILES;Clear all cached files except for cached processing profiles: !PREFERENCES_CACHECLEAR_ONLYPROFILES;Clear only cached processing profiles: !PREFERENCES_CACHECLEAR_SAFETY;Only files in the cache are cleared. Processing profiles stored alongside the source images are not touched. +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CHUNKSIZES;Tiles per thread !PREFERENCES_CHUNKSIZE_RAW_AMAZE;AMaZE demosaic !PREFERENCES_CHUNKSIZE_RAW_CA;Raw CA correction @@ -2454,6 +2495,11 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Compact toolbars in File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser !PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. @@ -2463,7 +2509,16 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. !PREFERENCES_LANG;Language +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) !PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -2495,11 +2550,33 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show Filmstrip toolbar !PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_FAVORITES;Favorites !PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling !PROFILEPANEL_PDYNAMIC;Dynamic !PROGRESSBAR_DECODING;Decoding... @@ -2521,9 +2598,17 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) !SAVEDLG_FILEFORMAT_FLOAT; floating-point !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -2551,6 +2636,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_COLORAPP_CATMOD;Mode !TP_COLORAPP_CATSYMGEN;Automatic Symmetric !TP_COLORAPP_CATSYMSPE;Mixed +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). !TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). !TP_COLORAPP_FREE;Free temp + tint + CAT02/16 +[output] @@ -2577,6 +2663,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_COLORAPP_SURROUNDSRC;Surround !TP_COLORAPP_SURSOURCE_TOOLTIP;Changes tones and colors to take into account the surround conditions of the scene lighting. The darker the surround conditions, the brighter the image will become. Image brightness will not be changed when the surround is set to average. !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. !TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. @@ -2722,9 +2809,11 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_FILMNEGATIVE_LABEL;Film Negative !TP_FILMNEGATIVE_OUT_LEVEL;Output level !TP_FILMNEGATIVE_PICK;Pick neutral spots +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_RED;Red ratio !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. !TP_FILMSIMULATION_LABEL;Film Simulation !TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? @@ -2732,7 +2821,10 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_FILMSIMULATION_ZEROCLUTSFOUND;Set HaldCLUT directory in Preferences !TP_FLATFIELD_CLIPCONTROL;Clip control !TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Clip control avoids clipped highlights caused by applying the flat field. If there are already clipped highlights before applying the flat field, value 0 is used. +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_APPLYBASELINEEXPOSUREOFFSET;Baseline exposure !TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Employ the embedded DCP baseline exposure offset. The setting is only available if the selected DCP has one. !TP_ICM_APPLYHUESATMAP;Base table @@ -2742,6 +2834,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_ICM_BPC;Black Point Compensation !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_GAMUT;Gamut control !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_INPUTCAMERAICC_TOOLTIP;Use RawTherapee's camera-specific DCP or ICC input color profiles. These profiles are more precise than simpler matrix ones. They are not available for all cameras. These profiles are stored in the /iccprofiles/input and /dcpprofiles folders and are automatically retrieved based on a file name matching to the exact model name of the camera. !TP_ICM_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 @@ -2783,6 +2876,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -2824,7 +2918,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -2850,7 +2944,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -2883,6 +2977,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -2909,7 +3005,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -2944,8 +3040,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -2972,13 +3068,15 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -3014,7 +3112,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -3022,12 +3120,12 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -3054,6 +3152,11 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3142,6 +3245,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3202,11 +3307,13 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3238,7 +3345,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3263,7 +3370,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3313,7 +3420,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3406,7 +3513,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3418,7 +3525,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3507,6 +3614,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3815,6 +3923,16 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;Dynamic Range Compression !TP_TM_FATTAL_THRESHOLD;Detail +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_WAVELET_1;Level 1 !TP_WAVELET_2;Level 2 !TP_WAVELET_3;Level 3 @@ -4066,10 +4184,61 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_WAVELET_WAVOFFSET;Offset !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. !TP_WBALANCE_PICKER;Pick -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. !TP_WBALANCE_TEMPBIAS;AWB temperature bias -!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'. +!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'.\n\nYou can use "Awb temperature bias" to adjust the "Temperature correlation" results. Each movement of this command brings a new calculation of temperature, tint and correlation. !ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: f +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Slovenian b/rtdata/languages/Slovenian index f3d71c543..9625f1174 100644 --- a/rtdata/languages/Slovenian +++ b/rtdata/languages/Slovenian @@ -1,4 +1,6 @@ -#01 2019-10-05 Matjaž Jeran +#001 2019-10-05 Matjaž Jeran +#100 +#101 @LANGUAGE_DISPLAY_NAME=Slovenščina ABOUT_TAB_BUILD;Verzija ABOUT_TAB_CREDITS;Zasluge @@ -168,11 +170,11 @@ FILEBROWSER_POPUPUNTRASH;Odstrani iz smetnjaka FILEBROWSER_QUERYBUTTONHINT;Očisti poizvedbo iskanja FILEBROWSER_QUERYHINT;Vnesi imena iskanih datotek. Dovolj je že del imena. Loči iskalne termine z vejicami, npr.\n1001,1004,1199\n\nIzloči termine iskanje s predpono !=\nnpr.\n!=1001,1004,1199\n\nBližnjice:\nCtrl-f - fokusiraj rubriko iskanja,\nEnter - išči,\nEsc - očisti rubriko iskanja,\nShift-Esc - sprosti fokus na rubriki iskanja. FILEBROWSER_QUERYLABEL; Išči: -FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nBližnjica: Shift-1 -FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nBližnjica: Shift-2 -FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nBližnjica: Shift-3 -FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nBližnjica: Shift-4 -FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nBližnjica: Shift-5 +FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nBližnjica: 1 +FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nBližnjica: 2 +FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nBližnjica: 3 +FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nBližnjica: 4 +FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nBližnjica: 5 FILEBROWSER_RENAMEDLGLABEL;Preimenuj datoteko FILEBROWSER_RESETDEFAULTPROFILE;Nastavi na privzeto vrednost FILEBROWSER_SELECTDARKFRAME;Izberi dark-frame... @@ -183,23 +185,23 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Prikaži slike označene z zeleno.\nBližnjica: FILEBROWSER_SHOWCOLORLABEL4HINT;Prikaži slike označene z modro.\nBližnjica: Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;Prikaži slike označene s škrlatno.\nBližnjica: Alt-5 FILEBROWSER_SHOWDIRHINT;Odstrani vse filtre.\nBližnjica: d -FILEBROWSER_SHOWEDITEDHINT;Prikaži spremenjene slike.\nBližnjica: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Prikaži nespremenjene slike.\nBližnjica: 6 +FILEBROWSER_SHOWEDITEDHINT;Prikaži spremenjene slike.\nBližnjica: Shift-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Prikaži nespremenjene slike.\nBližnjica: Shift-6 FILEBROWSER_SHOWEXIFINFO;Prikaži Exif informacije.\n\nBližnjice:\ni - Način zavihkov več urejevalnikov,\nAlt-i - Način enega zavihka urejevalnika. FILEBROWSER_SHOWNOTTRASHHINT;Prikaži samo nezbrisane slike. FILEBROWSER_SHOWORIGINALHINT;Prikaži samo izvirne slike.\n\nKadar obstaja več slik z enakim imenom a različnimi podaljški imena, smatram za izvirnik tisto, katere podaljšek je najvišje v seznamu podaljškov v nastavitvah > File Browser > Parsed Extensions. -FILEBROWSER_SHOWRANK1HINT;Prikaži slike označene z 1 zvezdico.\nBližnjica: 1 -FILEBROWSER_SHOWRANK2HINT;Prikaži slike označene z 2 zvezdicama.\nBližnjica: 2 -FILEBROWSER_SHOWRANK3HINT;Prikaži slike označene z 3 zvezdicami.\nBližnjica: 3 -FILEBROWSER_SHOWRANK4HINT;Prikaži slike označene z 4 zvezdicami.\nBližnjica: 4 -FILEBROWSER_SHOWRANK5HINT;Prikaži slike označene z 5 zvezdicami.\nBližnjica: 5 +FILEBROWSER_SHOWRANK1HINT;Prikaži slike označene z 1 zvezdico.\nBližnjica: Shift-1 +FILEBROWSER_SHOWRANK2HINT;Prikaži slike označene z 2 zvezdicama.\nBližnjica: Shift-2 +FILEBROWSER_SHOWRANK3HINT;Prikaži slike označene z 3 zvezdicami.\nBližnjica: Shift-3 +FILEBROWSER_SHOWRANK4HINT;Prikaži slike označene z 4 zvezdicami.\nBližnjica: Shift-4 +FILEBROWSER_SHOWRANK5HINT;Prikaži slike označene z 5 zvezdicami.\nBližnjica: Shift-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;Pokaži shranjene slike.\nBližnjica: Alt-7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Pokaži neshranjene slike.\nBližnjica: Alt-6 FILEBROWSER_SHOWTRASHHINT;Pokaži vsebino smetnjaka.\nBližnjica: Ctrl-t FILEBROWSER_SHOWUNCOLORHINT;Pokaži slike brez barvne oznake.\nShortcut: Alt-0 -FILEBROWSER_SHOWUNRANKHINT;Prikaži nerangirane slike.\nShortcut: 0 +FILEBROWSER_SHOWUNRANKHINT;Prikaži nerangirane slike.\nShortcut: Shift-0 FILEBROWSER_THUMBSIZE;Velikost predogledne sličice -FILEBROWSER_UNRANK_TOOLTIP;Odstrani rang.\nShortcut: Shift-0 +FILEBROWSER_UNRANK_TOOLTIP;Odstrani rang.\nShortcut: 0 FILEBROWSER_ZOOMINHINT;Povečaj velikost predogledne sličice.\n\nBližnjice:\n+ - Način z več zavihki urejevalnika,\nAlt-+ - Način z enim zavihkom in urejevalnikom. FILEBROWSER_ZOOMOUTHINT;Pomanjšaj velikost predogledne sličice.\n\nBližnjice:\n- - Način z več zavihki urejevalnika,\nAlt-- - Način z enim zavihkom in urejevalnikom. FILECHOOSER_FILTER_ANY;Vse datoteke @@ -2271,10 +2273,19 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - ! Untranslated keys follow; remove the ! prefix after an entry is translated. !!!!!!!!!!!!!!!!!!!!!!!!! +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !FILEBROWSER_POPUPINSPECT;Inspect +!FILEBROWSER_POPUPSORTBY;Sort Files +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !GENERAL_DELETE_ALL;Delete all !GENERAL_EDIT;Edit !GENERAL_HELP;Help +!GENERAL_OTHER;Other !HISTOGRAM_TOOLTIP_CROSSHAIR;Show/Hide indicator crosshair. !HISTOGRAM_TOOLTIP_SHOW_OPTIONS;Toggle visibility of the scope option buttons. !HISTOGRAM_TOOLTIP_TRACE_BRIGHTNESS;Adjust scope brightness. @@ -2302,23 +2313,23 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_470;--unused-- !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -2326,7 +2337,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -2385,16 +2396,16 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -2425,7 +2436,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -2448,7 +2459,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -2462,11 +2473,11 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -2479,7 +2490,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -2562,7 +2573,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -2581,19 +2592,19 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -2629,7 +2640,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -2662,7 +2673,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -2687,7 +2698,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -2701,7 +2712,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -2713,10 +2724,10 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -2830,7 +2841,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -2921,7 +2932,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -2952,15 +2963,19 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_COMPLEXRETI;Retinex complexity !HISTORY_MSG_DEHAZE_SATURATION;Dehaze - Saturation !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_PRESER;Preserve neutral @@ -2969,6 +2984,8 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_ICM_WORKING_ILLUM_METHOD;Illuminant method !HISTORY_MSG_ICM_WORKING_PRIM_METHOD;Primaries method !HISTORY_MSG_ILLUM;CAL - SC - Illuminant +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_PDSHARPEN_CHECKITER;CS - Auto limit iterations !HISTORY_MSG_PERSP_CAM_ANGLE;Perspective - Camera !HISTORY_MSG_PERSP_CAM_FL;Perspective - Camera @@ -2992,6 +3009,11 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_SPOT_ENTRY;Spot removal - Point modif. !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -3031,15 +3053,35 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !ICCPROFCREATOR_ILL_63;D63 : DCI-P3 Theater !ICCPROFCREATOR_PRIM_DCIP3;DCI-P3 !INSPECTOR_WINDOW_TITLE;Inspector !MAIN_TAB_LOCALLAB;Local !MAIN_TAB_LOCALLAB_TOOLTIP;Shortcut: Alt-o +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_LOCALLAB;Local Adjustments !PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings !PARTIALPASTE_PREPROCWB;Preprocess White Balance !PARTIALPASTE_SPOT;Spot removal +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CIE;Ciecam !PREFERENCES_CIEARTIF;Avoid artifacts !PREFERENCES_COMPLEXITYLOC;Default complexity for Local Adjustments @@ -3052,9 +3094,53 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_INSPECTORWINDOW;Open inspector in own window or fullscreen +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips +!PREFERENCES_TAB_FAVORITES;Favorites +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -3068,6 +3154,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_COLORAPP_CATMOD;Mode !TP_COLORAPP_CATSYMGEN;Automatic Symmetric !TP_COLORAPP_CATSYMSPE;Mixed +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). !TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). !TP_COLORAPP_GEN;Settings @@ -3090,6 +3177,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_COLORAPP_SURROUNDSRC;Surround !TP_COLORAPP_SURSOURCE_TOOLTIP;Changes tones and colors to take into account the surround conditions of the scene lighting. The darker the surround conditions, the brighter the image will become. Image brightness will not be changed when the surround is set to average. !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. !TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. !TP_COLORAPP_YBSCEN_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. @@ -3102,11 +3190,17 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_FILMNEGATIVE_COLORSPACE_WORKING;Working color space !TP_FILMNEGATIVE_GREENBALANCE;Magenta/Green !TP_FILMNEGATIVE_OUT_LEVEL;Output level +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_FBW;Black-and-White +!TP_ICM_GAMUT;Gamut control !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_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 !TP_ICM_NEUTRAL;Reset @@ -3143,6 +3237,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -3164,7 +3259,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -3190,7 +3285,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -3223,6 +3318,8 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -3249,7 +3346,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -3284,8 +3381,8 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -3312,13 +3409,15 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -3354,7 +3453,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -3362,12 +3461,12 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -3394,6 +3493,11 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3482,6 +3586,8 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3542,11 +3648,13 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3578,7 +3686,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3603,7 +3711,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3653,7 +3761,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3746,7 +3854,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3758,7 +3866,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3847,6 +3955,7 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3977,6 +4086,16 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_SPOT_ENTRYCHANGED;Point changed !TP_SPOT_HINT;Click on this button to be able to operate on the preview area.\n\nTo edit a spot, hover the white mark locating an edited area, making the editing geometry appear.\n\nTo add a spot, press Ctrl and left mouse button, drag the circle (Ctrl key can be released) to a source location, then release the mouse button.\n\nTo move the source or destination spot, hover its center then drag it.\n\nThe inner circle (maximum effect area) and the 'feather' circle can be resized by hovering them (the circle becomes orange) and dragging it (the circle becomes red).\n\nWhen the changes are done, right click outside any spot to end the Spot editing mode, or click on this button again. !TP_SPOT_LABEL;Spot Removal +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_WAVELET_BALCHROM;Equalizer Color !TP_WAVELET_BALLUM;Denoise equalizer White-Black !TP_WAVELET_BL;Blur levels @@ -4066,6 +4185,57 @@ ZOOMPANEL_ZOOMOUT;Zoom Out\nBližnjica: - !TP_WAVELET_WAVOFFSET;Offset !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish index de612ad73..debabc501 100644 --- a/rtdata/languages/Swedish +++ b/rtdata/languages/Swedish @@ -1,7 +1,9 @@ -#01 2008-01-22 Emil Ericsson -#02 2010-2013 Updated by Johan Thor -#03 2015-08-09 Johan Thor -#04 2016-12-30 Johan Thor +#001 2008-01-22 Emil Ericsson +#002 2010-2013 Updated by Johan Thor +#003 2015-08-09 Johan Thor +#004 2016-12-30 Johan Thor +#100 +#101 @LANGUAGE_DISPLAY_NAME=Svenska ABOUT_TAB_BUILD;Version ABOUT_TAB_CREDITS;Erkännande @@ -136,11 +138,11 @@ FILEBROWSER_POPUPUNTRASH;Ta bort från papperskorgen FILEBROWSER_QUERYBUTTONHINT;Rensa sökfältet FILEBROWSER_QUERYHINT;Skriv en del av ett filnamn för att söka efter en kommaseparerad lista.\nT. ex. 1001,1004,1199\n\nCtrl-F för att komma till sökfältet.\nEnter för att starta sökningen.\nEsc för att rensa.\nShift-Esc för att ta bort fokus från sökfältet. FILEBROWSER_QUERYLABEL; Hitta: -FILEBROWSER_RANK1_TOOLTIP;Betyg 1 *\nKortkommando: Shift-1 -FILEBROWSER_RANK2_TOOLTIP;Betyg 2 *\nKortkommando: Shift-2 -FILEBROWSER_RANK3_TOOLTIP;Betyg 3 *\nKortkommando: Shift-3 -FILEBROWSER_RANK4_TOOLTIP;Betyg 4 *\nKortkommando: Shift-4 -FILEBROWSER_RANK5_TOOLTIP;Betyg 5 *\nKortkommando: Shift-5 +FILEBROWSER_RANK1_TOOLTIP;Betyg 1 *\nKortkommando: 1 +FILEBROWSER_RANK2_TOOLTIP;Betyg 2 *\nKortkommando: 2 +FILEBROWSER_RANK3_TOOLTIP;Betyg 3 *\nKortkommando: 3 +FILEBROWSER_RANK4_TOOLTIP;Betyg 4 *\nKortkommando: 4 +FILEBROWSER_RANK5_TOOLTIP;Betyg 5 *\nKortkommando: 5 FILEBROWSER_RENAMEDLGLABEL;Byt namn FILEBROWSER_SELECTDARKFRAME;Välj svartbild... FILEBROWSER_SELECTFLATFIELD;Välj plattfält... @@ -150,22 +152,22 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Visa bilder märkta som gröna.\nKortkommando:Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;Visa bilder märkta som lila.\nKortkommando: Alt-5 FILEBROWSER_SHOWDIRHINT;Återställ alla sökfilter.\nKortkommando: d -FILEBROWSER_SHOWEDITEDHINT;Visa redigerade bilder.\nKortkommando: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Visa ickeredigerade bilder.\nKortkommando: 6 +FILEBROWSER_SHOWEDITEDHINT;Visa redigerade bilder.\nKortkommando: Shift-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Visa ickeredigerade bilder.\nKortkommando: Shift-6 FILEBROWSER_SHOWEXIFINFO;Visa EXIF-information.\nKortkommando: i\n\nKortkommando i enkelbildsläget: Alt-i FILEBROWSER_SHOWORIGINALHINT;Visa endast ursprungliga bilder.\n\nNär flera bilder finns med samma filnamn men med olika filändelser så anses den bild vara urpsrungsbilden som har sin ändelse närmst toppen i listan över filändelser i Inställningar > Filbläddrare > Hanterade filändelser -FILEBROWSER_SHOWRANK1HINT;Visa bilder med betyg 1.\nKortkommando: 1 -FILEBROWSER_SHOWRANK2HINT;Visa bilder med betyg 2.\nKortkommando: 2 -FILEBROWSER_SHOWRANK3HINT;Visa bilder med betyg 3.\nKortkommando: 3 -FILEBROWSER_SHOWRANK4HINT;Visa bilder med betyg 4.\nKortkommando: 4 -FILEBROWSER_SHOWRANK5HINT;Visa bilder med betyg 5.\nKortkommando: 5 +FILEBROWSER_SHOWRANK1HINT;Visa bilder med betyg 1.\nKortkommando: Shift-1 +FILEBROWSER_SHOWRANK2HINT;Visa bilder med betyg 2.\nKortkommando: Shift-2 +FILEBROWSER_SHOWRANK3HINT;Visa bilder med betyg 3.\nKortkommando: Shift-3 +FILEBROWSER_SHOWRANK4HINT;Visa bilder med betyg 4.\nKortkommando: Shift-4 +FILEBROWSER_SHOWRANK5HINT;Visa bilder med betyg 5.\nKortkommando: Shift-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;Visa bilder som nyligen sparats\nKortkommando: Alt-7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Visa bilder som inte nyligen sparats\nKortkommando: Alt-6 FILEBROWSER_SHOWTRASHHINT;Visa innehållet i papperskorgen FILEBROWSER_SHOWUNCOLORHINT;Visa bilder utan färgetikett\nKortkommando: Alt-0 FILEBROWSER_SHOWUNRANKHINT;Visa icke-betygsatta bilder FILEBROWSER_THUMBSIZE;Miniatyrbildens storlek -FILEBROWSER_UNRANK_TOOLTIP;Ta bort betyg\nKortkommando: Shift-0 +FILEBROWSER_UNRANK_TOOLTIP;Ta bort betyg\nKortkommando: 0 FILEBROWSER_ZOOMINHINT;Förstora miniatyrbilderna.\nKortkommando: +\nKortkommado i enkelbildsläget: Alt-+ FILEBROWSER_ZOOMOUTHINT;Förminska miniatyrbilderna.\nKortkommando: -\nKortkommado i enkelbildsläget: Alt-- FILECHOOSER_FILTER_ANY;Alla filer @@ -1727,8 +1729,13 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !DYNPROFILEEDITOR_NEW;New !DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule !DYNPROFILEEDITOR_PROFILE;Processing Profile +!ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 !EXIFFILTER_IMAGETYPE;Image type -!EXIFPANEL_SHOWALL;Show all +!EXIFFILTER_PATH;File path +!EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +!EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags +!EXIFPANEL_BASIC_GROUP;Basic +!EXIFPANEL_VALUE_NOT_SHOWN;Not shown !EXPORT_BYPASS;Processing steps to bypass !EXPORT_PIPELINE;Processing pipeline !EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image) @@ -1744,12 +1751,15 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !FILEBROWSER_POPUPINSPECT;Inspect !FILEBROWSER_POPUPREMOVE;Delete permanently !FILEBROWSER_POPUPREMOVEINCLPROC;Delete permanently, including queue-processed version +!FILEBROWSER_POPUPSORTBY;Sort Files !FILEBROWSER_RESETDEFAULTPROFILE;Reset to default !FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash. +!FILECHOOSER_FILTER_EXECUTABLE;Executable files !GENERAL_CURRENT;Current !GENERAL_DELETE_ALL;Delete all !GENERAL_EDIT;Edit !GENERAL_HELP;Help +!GENERAL_OTHER;Other !GENERAL_RESET;Reset !GENERAL_SAVE_AS;Save as... !GENERAL_SLIDER;Slider @@ -1847,23 +1857,23 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_494;Capture Sharpening !HISTORY_MSG_496;Local Spot deleted !HISTORY_MSG_497;Local Spot selected -!HISTORY_MSG_498;Local Spot name -!HISTORY_MSG_499;Local Spot visibility -!HISTORY_MSG_500;Local Spot shape -!HISTORY_MSG_501;Local Spot method -!HISTORY_MSG_502;Local Spot shape method -!HISTORY_MSG_503;Local Spot locX -!HISTORY_MSG_504;Local Spot locXL -!HISTORY_MSG_505;Local Spot locY -!HISTORY_MSG_506;Local Spot locYT -!HISTORY_MSG_507;Local Spot center -!HISTORY_MSG_508;Local Spot circrad -!HISTORY_MSG_509;Local Spot quality method -!HISTORY_MSG_510;Local Spot transition -!HISTORY_MSG_511;Local Spot thresh -!HISTORY_MSG_512;Local Spot ΔE decay -!HISTORY_MSG_513;Local Spot scope -!HISTORY_MSG_514;Local Spot structure +!HISTORY_MSG_498;--unused-- +!HISTORY_MSG_499;--unused-- +!HISTORY_MSG_500;Local - Spot shape +!HISTORY_MSG_501;Local - Spot method +!HISTORY_MSG_502;Local - SC - Shape method +!HISTORY_MSG_503;Local - Spot - Right +!HISTORY_MSG_504;Local - Spot - Left +!HISTORY_MSG_505;Local - Spot - Bottom +!HISTORY_MSG_506;Local - Spot - Top +!HISTORY_MSG_507;Local - Spot - Center +!HISTORY_MSG_508;Local - Spot - Size +!HISTORY_MSG_509;Local - Spot quality method +!HISTORY_MSG_510;Local - TG - Transition value +!HISTORY_MSG_511;Local - SD - ΔE scope threshold +!HISTORY_MSG_512;Local - SD - ΔE decay +!HISTORY_MSG_513;Local - Spot - Excluding - Scope +!HISTORY_MSG_514;Local - Spot structure !HISTORY_MSG_515;Local Adjustments !HISTORY_MSG_516;Local - Color and light !HISTORY_MSG_517;Local - Enable super @@ -1871,7 +1881,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_519;Local - Contrast !HISTORY_MSG_520;Local - Chrominance !HISTORY_MSG_521;Local - Scope -!HISTORY_MSG_522;Local - curve method +!HISTORY_MSG_522;Local - Curve method !HISTORY_MSG_523;Local - LL Curve !HISTORY_MSG_524;Local - CC curve !HISTORY_MSG_525;Local - LH Curve @@ -1930,16 +1940,16 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_578;Local - cbdl threshold !HISTORY_MSG_579;Local - cbdl scope !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 -!HISTORY_MSG_584;Local - deNoise equalizer White-Black -!HISTORY_MSG_585;Local - deNoise chro f -!HISTORY_MSG_586;Local - deNoise chro c -!HISTORY_MSG_587;Local - deNoise chro detail -!HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -!HISTORY_MSG_589;Local - deNoise bilateral -!HISTORY_MSG_590;Local - deNoise Scope +!HISTORY_MSG_581;Local - Denoise lum f 1 +!HISTORY_MSG_582;Local - Denoise lum c +!HISTORY_MSG_583;Local - Denoise lum detail +!HISTORY_MSG_584;Local - Denoise equalizer White-Black +!HISTORY_MSG_585;Local - Denoise chro f +!HISTORY_MSG_586;Local - Denoise chro c +!HISTORY_MSG_587;Local - Denoise chro detail +!HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +!HISTORY_MSG_589;Local - Denoise bilateral +!HISTORY_MSG_590;Local - Denoise Scope !HISTORY_MSG_591;Local - Avoid color shift !HISTORY_MSG_592;Local - Sh Contrast !HISTORY_MSG_593;Local - Local contrast @@ -1970,7 +1980,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_619;Local - Use Exp Mask !HISTORY_MSG_620;Local - Blur col !HISTORY_MSG_621;Local - Exp inverse -!HISTORY_MSG_622;Local - Exclude structure +!HISTORY_MSG_622;Local - Spot - Excluding - Spot structure !HISTORY_MSG_623;Local - Exp Chroma compensation !HISTORY_MSG_624;Local - Color correction grid !HISTORY_MSG_625;Local - Color correction strength @@ -1993,7 +2003,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_642;Local - radius SH !HISTORY_MSG_643;Local - Blur SH !HISTORY_MSG_644;Local - inverse SH -!HISTORY_MSG_645;Local - balance ΔE ab-L +!HISTORY_MSG_645;Local - SD - ab-L balance !HISTORY_MSG_646;Local - Exp mask chroma !HISTORY_MSG_647;Local - Exp mask gamma !HISTORY_MSG_648;Local - Exp mask slope @@ -2007,11 +2017,11 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_656;Local - Color soft radius !HISTORY_MSG_657;Local - Retinex Reduce artifacts !HISTORY_MSG_658;Local - CBDL soft radius -!HISTORY_MSG_659;Local Spot transition-decay +!HISTORY_MSG_659;Local - TG - Transition decay !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_662;Local - Denoise lum f 0 +!HISTORY_MSG_663;Local - Denoise lum f 2 !HISTORY_MSG_664;--unused-- !HISTORY_MSG_665;Local - cbdl mask Blend !HISTORY_MSG_666;Local - cbdl mask radius @@ -2024,7 +2034,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_673;Local - Use cbdl mask !HISTORY_MSG_674;Local - Tool removed !HISTORY_MSG_675;Local - TM soft radius -!HISTORY_MSG_676;Local Spot transition-differentiation +!HISTORY_MSG_676;Local - TG - Transition differentiation !HISTORY_MSG_677;Local - TM amount !HISTORY_MSG_678;Local - TM saturation !HISTORY_MSG_679;Local - Retinex mask C @@ -2107,7 +2117,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_762;Local - cbdl Laplacian mask !HISTORY_MSG_763;Local - Blur Laplacian mask !HISTORY_MSG_764;Local - Solve PDE Laplacian mask -!HISTORY_MSG_765;Local - deNoise Detail threshold +!HISTORY_MSG_765;Local - Denoise Detail threshold !HISTORY_MSG_766;Local - Blur Fast Fourier !HISTORY_MSG_767;Local - Grain Iso !HISTORY_MSG_768;Local - Grain Strength @@ -2126,19 +2136,19 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_781;Local - Contrast Mask Wavelet level !HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels !HISTORY_MSG_783;Local - Color Wavelet levels -!HISTORY_MSG_784;Local - Mask ΔE -!HISTORY_MSG_785;Local - Mask Scope ΔE +!HISTORY_MSG_784;Local - Mask - ΔE Image Mask +!HISTORY_MSG_785;Local - Mask - Scope !HISTORY_MSG_786;Local - SH method !HISTORY_MSG_787;Local - Equalizer multiplier !HISTORY_MSG_788;Local - Equalizer detail !HISTORY_MSG_789;Local - SH mask amount !HISTORY_MSG_790;Local - SH mask anchor !HISTORY_MSG_791;Local - Mask Short L curves -!HISTORY_MSG_792;Local - Mask Luminance Background +!HISTORY_MSG_792;Local - Mask - Background !HISTORY_MSG_793;Local - SH TRC gamma !HISTORY_MSG_794;Local - SH TRC slope !HISTORY_MSG_795;Local - Mask save restore image -!HISTORY_MSG_796;Local - Recursive references +!HISTORY_MSG_796;Local - SC - Recursive references !HISTORY_MSG_797;Local - Merge Original method !HISTORY_MSG_798;Local - Opacity !HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -2174,7 +2184,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_830;Local - Color gradient strength L !HISTORY_MSG_831;Local - Color gradient angle !HISTORY_MSG_832;Local - Color gradient strength C -!HISTORY_MSG_833;Local - Gradient feather +!HISTORY_MSG_833;Local - TG - Feather gradient !HISTORY_MSG_834;Local - Color gradient strength H !HISTORY_MSG_835;Local - Vib gradient strength L !HISTORY_MSG_836;Local - Vib gradient angle @@ -2207,7 +2217,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_864;Local - Wavelet dir contrast attenuation !HISTORY_MSG_865;Local - Wavelet dir contrast delta !HISTORY_MSG_866;Local - Wavelet dir compression -!HISTORY_MSG_868;Local - Balance ΔE C-H +!HISTORY_MSG_868;Local - SD - C-H balance !HISTORY_MSG_869;Local - Denoise by level !HISTORY_MSG_870;Local - Wavelet mask curve H !HISTORY_MSG_871;Local - Wavelet mask curve C @@ -2232,7 +2242,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_891;Local - Contrast Wavelet Graduated !HISTORY_MSG_892;Local - Log Encoding Graduated Strength !HISTORY_MSG_893;Local - Log Encoding Graduated angle -!HISTORY_MSG_894;Local - Color Preview dE +!HISTORY_MSG_894;Local - SD - ΔE preview color intensity !HISTORY_MSG_897;Local - Contrast Wavelet ES strength !HISTORY_MSG_898;Local - Contrast Wavelet ES radius !HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -2246,7 +2256,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_907;Local - Contrast Wavelet ES amplification !HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring !HISTORY_MSG_909;Local - Contrast Wavelet ES show -!HISTORY_MSG_910;Local - Wavelet Edge performance +!HISTORY_MSG_910;Local - SC - Wavelet Edge performance !HISTORY_MSG_911;Local - Blur Chroma Luma !HISTORY_MSG_912;Local - Blur Guide filter strength !HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -2258,10 +2268,10 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_919;Local - Residual wavelet highlights threshold !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_922;Local - SC - Changes in B/W !HISTORY_MSG_923;Local - Tool complexity mode !HISTORY_MSG_924;--unused-- -!HISTORY_MSG_925;Local - Scope color tools +!HISTORY_MSG_925;Local - Scope (color tools) !HISTORY_MSG_926;Local - Show mask type !HISTORY_MSG_927;Local - Shadow !HISTORY_MSG_928;Local - Common color mask @@ -2375,7 +2385,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_1037;Local - Nlmeans - radius !HISTORY_MSG_1038;Local - Nlmeans - gamma !HISTORY_MSG_1039;Local - Grain - gamma -!HISTORY_MSG_1040;Local - Spot - soft radius +!HISTORY_MSG_1040;Local - SC - Soft radius !HISTORY_MSG_1041;Local - Spot - Munsell !HISTORY_MSG_1042;Local - Log encoding - threshold !HISTORY_MSG_1043;Local - Exp - normalize @@ -2466,7 +2476,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_1128;Local - Cie mask slope !HISTORY_MSG_1129;Local - Cie Relative luminance !HISTORY_MSG_1130;Local - Cie Saturation Jz -!HISTORY_MSG_1131;Local - Mask denoise chroma +!HISTORY_MSG_1131;Local - Mask - Denoise !HISTORY_MSG_1132;Local - Cie Wav sigma Jz !HISTORY_MSG_1133;Local - Cie Wav level Jz !HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -2518,18 +2528,22 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold !HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual demosaic - Contrast threshold !HISTORY_MSG_EDGEFFECT;Edge Attenuation response +!HISTORY_MSG_FF_FROMMETADATA;Flat-Field - From Metadata !HISTORY_MSG_FILMNEGATIVE_BALANCE;FN - Reference output !HISTORY_MSG_FILMNEGATIVE_COLORSPACE;Film negative color space !HISTORY_MSG_FILMNEGATIVE_ENABLED;Film Negative !HISTORY_MSG_FILMNEGATIVE_REF_SPOT;FN - Reference input !HISTORY_MSG_FILMNEGATIVE_VALUES;Film negative values +!HISTORY_MSG_GAMUTMUNSEL;Gamut-Munsell !HISTORY_MSG_HISTMATCHING;Auto-matched tone curve !HISTORY_MSG_HLBL;Color propagation - blur +!HISTORY_MSG_HLTH;Inpaint opposed - gain threshold !HISTORY_MSG_ICL_LABGRIDCIEXY;Cie xy !HISTORY_MSG_ICM_AINTENT;Abstract profile intent !HISTORY_MSG_ICM_BLUX;Primaries Blue X !HISTORY_MSG_ICM_BLUY;Primaries Blue Y !HISTORY_MSG_ICM_FBW;Black and White +!HISTORY_MSG_ICM_GAMUT;Gamut control !HISTORY_MSG_ICM_GREX;Primaries Green X !HISTORY_MSG_ICM_GREY;Primaries Green Y !HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries @@ -2549,6 +2563,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast !HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness !HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius +!HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +!HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift !HISTORY_MSG_METADATA_MODE;Metadata copy mode !HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold !HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -2594,6 +2610,11 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_TEMPOUT;CAM02 automatic temperature !HISTORY_MSG_THRESWAV;Balance threshold !HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor +!HISTORY_MSG_TONE_EQUALIZER_BANDS;Tone equalizer - Bands +!HISTORY_MSG_TONE_EQUALIZER_ENABLED;Tone equalizer +!HISTORY_MSG_TONE_EQUALIZER_PIVOT;Tone equalizer - Pivot +!HISTORY_MSG_TONE_EQUALIZER_REGULARIZATION;Tone equalizer - Regularization +!HISTORY_MSG_TONE_EQUALIZER_SHOW_COLOR_MAP;Tone equalizer - Tonal map !HISTORY_MSG_TRANS_METHOD;Geometry - Method !HISTORY_MSG_WAVBALCHROM;Equalizer chrominance !HISTORY_MSG_WAVBALLUM;Equalizer luminance @@ -2633,6 +2654,23 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_WAVTHRDEN;Threshold local contrast !HISTORY_MSG_WAVTHREND;Threshold local contrast !HISTORY_MSG_WAVUSHAMET;Clarity method +!HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +!HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +!HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +!HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +!HISTORY_MSG_WBITC_FORCE;Itcwb Force +!HISTORY_MSG_WBITC_GREEN;Grren refinement +!HISTORY_MSG_WBITC_MINSIZE;Patch min size +!HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +!HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +!HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +!HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +!HISTORY_MSG_WBITC_PRIM;Primaries +!HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +!HISTORY_MSG_WBITC_SAMPLING;Low sampling +!HISTORY_MSG_WBITC_SIZE;Itcwb Size +!HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +!HISTORY_MSG_WBITC_THRES;Itcwb Theshold !ICCPROFCREATOR_COPYRIGHT;Copyright: !ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to 'RawTherapee, CC0'. !ICCPROFCREATOR_CUSTOM;Custom @@ -2721,6 +2759,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !PARTIALPASTE_DEHAZE;Haze removal !PARTIALPASTE_FILMNEGATIVE;Film negative !PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control +!PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata !PARTIALPASTE_LOCALCONTRAST;Local contrast !PARTIALPASTE_LOCALLAB;Local Adjustments !PARTIALPASTE_LOCALLABGROUP;Local Adjustments Settings @@ -2735,6 +2774,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_SPOT;Spot removal !PARTIALPASTE_TM_FATTAL;Dynamic range compression +!PARTIALPASTE_TONE_EQUALIZER;Tone equalizer !PREFERENCES_APPEARANCE;Appearance !PREFERENCES_APPEARANCE_COLORPICKERFONT;Color picker font !PREFERENCES_APPEARANCE_CROPMASKCOLOR;Crop mask color @@ -2747,6 +2787,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !PREFERENCES_CACHECLEAR_ALLBUTPROFILES;Clear all cached files except for cached processing profiles: !PREFERENCES_CACHECLEAR_ONLYPROFILES;Clear only cached processing profiles: !PREFERENCES_CACHECLEAR_SAFETY;Only files in the cache are cleared. Processing profiles stored alongside the source images are not touched. +!PREFERENCES_CAMERAPROFILESDIR;Camera profiles directory !PREFERENCES_CHUNKSIZES;Tiles per thread !PREFERENCES_CHUNKSIZE_RAW_AMAZE;AMaZE demosaic !PREFERENCES_CHUNKSIZE_RAW_CA;Raw CA correction @@ -2774,10 +2815,24 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !PREFERENCES_EXTEDITOR_DIR_CUSTOM;Custom !PREFERENCES_EXTEDITOR_DIR_TEMP;OS temp dir !PREFERENCES_EXTEDITOR_FLOAT32;32-bit float TIFF output +!PREFERENCES_EXTERNALEDITOR_CHANGE;Change Application +!PREFERENCES_EXTERNALEDITOR_CHANGE_FILE;Change Executable +!PREFERENCES_EXTERNALEDITOR_COLUMN_COMMAND;Command +!PREFERENCES_EXTERNALEDITOR_COLUMN_NAME;Name +!PREFERENCES_EXTERNALEDITOR_COLUMN_NATIVE_COMMAND;Native command !PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Compact toolbars in File Browser !PREFERENCES_INSPECTORWINDOW;Open inspector in own window or fullscreen !PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. !PREFERENCES_LANG;Language +!PREFERENCES_LENSFUNDBDIR;Lensfun database directory +!PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. +!PREFERENCES_LENSPROFILESDIR;Lens profiles directory +!PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) +!PREFERENCES_METADATA;Metadata +!PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +!PREFERENCES_METADATA_SYNC_NONE;Off +!PREFERENCES_METADATA_SYNC_READ;Read only +!PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional !PREFERENCES_MONINTENT;Default rendering intent !PREFERENCES_MONITOR;Monitor !PREFERENCES_MONPROFILE;Default color profile @@ -2795,11 +2850,33 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !PREFERENCES_SERIALIZE_TIFF_READ;TIFF Read Settings !PREFERENCES_SHOWTOOLTIP;Show Local Adjustments advice tooltips !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_FAVORITES;Favorites !PREFERENCES_TAB_PERFORMANCE;Performance !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering !PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise +!PREFERENCES_TOOLPANEL_AVAILABLETOOLS;Available Tools +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES;Keep favorite tools in original locations +!PREFERENCES_TOOLPANEL_CLONE_FAVORITES_TOOLTIP;If set, favorite tools will appear in both the favorites tab and their original tabs.\n\nNote: Enabling this option may result in a slight delay when switching tabs. +!PREFERENCES_TOOLPANEL_FAVORITE;Favorite +!PREFERENCES_TOOLPANEL_FAVORITESPANEL;Favorites Panel +!PREFERENCES_TOOLPANEL_TOOL;Tool +!PREFERENCES_WBA;White Balance +!PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +!PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +!PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +!PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +!PREFERENCES_WBAFORC;Forces Extra algoritm +!PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +!PREFERENCES_WBANOPURP;No purple color used +!PREFERENCES_WBAPATCH;Number maximum of colors used in picture +!PREFERENCES_WBAPRECIS;Precision algorithm - scale used +!PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +!PREFERENCES_WBASORT;Sort in chroma order instead of histogram +!PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +!PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +!PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) !PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling !PROFILEPANEL_PDYNAMIC;Dynamic !PROGRESSBAR_DECODING;Decoding... @@ -2821,9 +2898,17 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !SAMPLEFORMAT_16;16-bit floating-point !SAMPLEFORMAT_32;24-bit floating-point !SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_BIGTIFF;BigTIFF (no metadata support) !SAVEDLG_FILEFORMAT_FLOAT; floating-point !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. +!SORT_ASCENDING;Ascending +!SORT_BY_DATE;By Date +!SORT_BY_EXIF;By EXIF +!SORT_BY_LABEL;By Color Label +!SORT_BY_NAME;By Name +!SORT_BY_RANK;By Rank +!SORT_DESCENDING;Descending !TC_PRIM_BLUX;Bx !TC_PRIM_BLUY;By !TC_PRIM_GREX;Gx @@ -2842,6 +2927,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_COLORAPP_CATMOD;Mode !TP_COLORAPP_CATSYMGEN;Automatic Symmetric !TP_COLORAPP_CATSYMSPE;Mixed +!TP_COLORAPP_CIECAT_DEGREEOUT;Chromatic Adaptation Viewing !TP_COLORAPP_DEGREE_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D65) into new values whose white point is that of the new illuminant - see WP model (for example D50 or D55). !TP_COLORAPP_DEGREOUT_TOOLTIP;CAT02/16 is a chromatic adaptation. It converts the values of an image whose white point is that of a given illuminant (for example D50) into new values whose white point is that of the new illuminant - see WP model (for example D75). !TP_COLORAPP_FREE;Free temp + tint + CAT02/16 +[output] @@ -2868,6 +2954,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_COLORAPP_SURROUNDSRC;Surround !TP_COLORAPP_SURSOURCE_TOOLTIP;Changes tones and colors to take into account the surround conditions of the scene lighting. The darker the surround conditions, the brighter the image will become. Image brightness will not be changed when the surround is set to average. !TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 !TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. !TP_COLORAPP_YBOUT_TOOLTIP;Yb is the relative luminance of the background, expressed in % of gray. 18% gray corresponds to a background luminance of 50% expressed in CIE L.\nThe data is based on the mean luminance of the image. @@ -2936,17 +3023,23 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_FILMNEGATIVE_LABEL;Film Negative !TP_FILMNEGATIVE_OUT_LEVEL;Output level !TP_FILMNEGATIVE_PICK;Pick neutral spots +!TP_FILMNEGATIVE_PICK_SIZE;Size: !TP_FILMNEGATIVE_RED;Red ratio !TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 !TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +!TP_FILMNEGATIVE_REF_SIZE;Size: !TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. !TP_FLATFIELD_CLIPCONTROL;Clip control !TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Clip control avoids clipped highlights caused by applying the flat field. If there are already clipped highlights before applying the flat field, value 0 is used. +!TP_FLATFIELD_FROMMETADATA;From Metadata +!TP_HLREC_COLOROPP;Inpaint Opposed !TP_HLREC_HLBLUR;Blur +!TP_HLREC_HLTH;Gain threshold !TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Employ the embedded DCP baseline exposure offset. The setting is only available if the selected DCP has one. !TP_ICM_APPLYHUESATMAP_TOOLTIP;Employ the embedded DCP base table (HueSatMap). The setting is only available if the selected DCP has one. !TP_ICM_APPLYLOOKTABLE;Look table !TP_ICM_FBW;Black-and-White +!TP_ICM_GAMUT;Gamut control !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_LABGRID_CIEXY;R(x)=%1 R(y)=%2\nG(x)=%3 G(y)=%4\nB(x)=%5 B(y)=%6 !TP_ICM_NEUTRAL;Reset @@ -2985,6 +3078,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_ICM_WORKING_PRIM_BST;BestRGB !TP_ICM_WORKING_PRIM_CUS;Custom (sliders) !TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +!TP_ICM_WORKING_PRIM_JDCMAX;JDC Max !TP_ICM_WORKING_PRIM_NONE;Default !TP_ICM_WORKING_PRIM_PROP;ProPhoto !TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -3026,7 +3120,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_AUTOGRAY;Auto mean luminance (Yb%) !TP_LOCALLAB_AUTOGRAYCIE;Auto !TP_LOCALLAB_AVOID;Avoid color shift -!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 is used. +!TP_LOCALLAB_AVOIDCOLORSHIFT_TOOLTIP;Fit colors into gamut of the working color space and apply Munsell correction (Uniform Perceptual Lab).\nMunsell correction always disabled when Jz or CAM16 or Color Appearance and Lighting is used.\n\nDefault: Munsell.\nMunsell correction: fixes Lab mode hue drifts due to non-linearity, when chromaticity is changed (Uniform Perceptual Lab).\nLab: applies a gamut control, in relative colorimetric, Munsell is then applied.\nXYZ Absolute, applies gamut control, in absolute colorimetric, Munsell is then applied.\nXYZ Relative, applies gamut control, in relative colorimetric, Munsell is then applied. !TP_LOCALLAB_AVOIDMUN;Munsell correction only !TP_LOCALLAB_AVOIDMUN_TOOLTIP;Munsell correction always disabled when Jz or CAM16 is used. !TP_LOCALLAB_AVOIDRAD;Soft radius @@ -3052,7 +3146,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_BLNOI_EXP;Blur & Noise !TP_LOCALLAB_BLNORM;Normal !TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +!TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius !TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -3085,6 +3179,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_CENTER_X;Center X !TP_LOCALLAB_CENTER_Y;Center Y !TP_LOCALLAB_CH;CL - LC +!TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +!TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_CHROMA;Chrominance !TP_LOCALLAB_CHROMABLU;Chroma levels !TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -3111,7 +3207,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_CIETOOLEXP;Curves !TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) !TP_LOCALLAB_CIRCRADIUS;Spot size -!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +!TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. !TP_LOCALLAB_CLARICRES;Merge chroma !TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images !TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -3146,8 +3242,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection !TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' !TP_LOCALLAB_CURVCURR;Normal -!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +!TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +!TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. !TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. !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. @@ -3174,13 +3270,15 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !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_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in uniform, low-contrast areas. +!TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance +!TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance !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 (ΔE).\nMinimum RT-spot size: 128x128. +!TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. !TP_LOCALLAB_DEPTH;Depth !TP_LOCALLAB_DETAIL;Local contrast !TP_LOCALLAB_DETAILFRA;Edge detection - DCT !TP_LOCALLAB_DETAILSH;Details -!TP_LOCALLAB_DETAILTHR;Luma-chro detail threshold +!TP_LOCALLAB_DETAILTHR;Lum/chrom detail threshold !TP_LOCALLAB_DIVGR;Gamma !TP_LOCALLAB_DUPLSPOTNAME;Copy !TP_LOCALLAB_EDGFRA;Edge sharpness @@ -3216,7 +3314,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_EXPCOMPINV;Exposure compensation !TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' !TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +!TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. !TP_LOCALLAB_EXPCURV;Curves !TP_LOCALLAB_EXPGRAD;Graduated Filter !TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -3224,12 +3322,12 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. !TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. !TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +!TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). !TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. !TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure !TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. !TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -!TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +!TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. !TP_LOCALLAB_EXPTOOL;Exposure Tools !TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure !TP_LOCALLAB_FATAMOUNT;Amount @@ -3256,6 +3354,11 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_GAMMASKCOL;Gamma !TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma +!TP_LOCALLAB_GAMUTLABRELA;Lab +!TP_LOCALLAB_GAMUTMUNSELL;Munsell only +!TP_LOCALLAB_GAMUTNON;None +!TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute +!TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative !TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) !TP_LOCALLAB_GRADANG;Gradient angle !TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3344,6 +3447,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. !TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +!TP_LOCALLAB_LCLABELS;Residual noise levels +!TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. !TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. !TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets !TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3404,11 +3509,13 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !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 +!TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 !TP_LOCALLAB_LUMADARKEST;Darkest !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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 !TP_LOCALLAB_MASFRAME;Mask and Merge !TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3440,7 +3547,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_MASKLCTHRLOW2;Dark area luma threshold !TP_LOCALLAB_MASKLCTHRMID;Gray area luma denoise !TP_LOCALLAB_MASKLCTHRMIDCH;Gray area chroma denoise -!TP_LOCALLAB_MASKLC_TOOLTIP;This allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. +!TP_LOCALLAB_MASKLC_TOOLTIP;Used by wavelet luminance.\nThis allows you to target the denoise based on the image luminance information contained in the L(L) or LC(H) mask (Mask and Modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n 'Dark area luminance threshold'. If 'Reinforce denoise in dark and light areas' > 1 the denoise is progressively increased from 0% at the threshold setting to 100% at the maximum black value (determined by mask).\n 'Light area luminance threshold'. The denoise is progressively decreased from 100% at the threshold setting to 0% at the maximum white value (determined by mask).\n In the area between the two thresholds, the denoise settings are not affected by the mask. !TP_LOCALLAB_MASKLNOISELOW;Reinforce dark/light areas !TP_LOCALLAB_MASKLOWTHRESCB_TOOLTIP;Dark-tone limit below which the CBDL parameters (Luminance only) will be restored progressively to their original values prior to being modified by the CBDL settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Smooth radius', Gamma and Slope, 'Contrast curve'.\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. !TP_LOCALLAB_MASKLOWTHRESC_TOOLTIP;Dark-tone limit below which the parameters will be restored progressively to their original values prior to being modified by the Color and Light settings.\n You can use certain tools in 'Mask and modifications' to change the gray levels: 'Structure mask', 'blur mask', 'Smooth radius', Gamma and Slope, 'Contrast curve', 'Local contrast' (wavelets).\n Use a 'lockable color picker' on the mask to see which areas will be affected. Make sure you set 'Background color mask' = 0 in Settings. @@ -3465,7 +3572,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. !TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) !TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +!TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. !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. @@ -3515,7 +3622,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_NLDENOISENLRAD_TOOLTIP;Higher values increase denoise at the expense of processing time. !TP_LOCALLAB_NLDENOISE_TOOLTIP;'Detail recovery' acts on a Laplacian transform to target uniform areas rather than areas with detail. !TP_LOCALLAB_NLDET;Detail recovery -!TP_LOCALLAB_NLFRA;Non-local Means - Luminance +!TP_LOCALLAB_NLFRA;Non-local Means: Luminance !TP_LOCALLAB_NLFRAME_TOOLTIP;Non-local means denoising takes a mean of all pixels in the image, weighted by how similar they are to the target pixel.\nReduces loss of detail compared with local mean algorithms.\nOnly luminance noise is taken into account. Chrominance noise is best processed using wavelets and Fourier transforms (DCT).\nCan be used in conjunction with 'Luminance denoise by level' or on its own. !TP_LOCALLAB_NLGAM;Gamma !TP_LOCALLAB_NLLUM;Strength @@ -3608,7 +3715,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_SENSI;Scope !TP_LOCALLAB_SENSIEXCLU;Scope !TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +!TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. !TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. !TP_LOCALLAB_SETTINGS;Settings !TP_LOCALLAB_SH1;Shadows Highlights @@ -3620,7 +3727,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. !TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. !TP_LOCALLAB_SHAMASKCOL;Shadows -!TP_LOCALLAB_SHAPETYPE;RT-spot shape +!TP_LOCALLAB_SHAPETYPE;Spot shape !TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. !TP_LOCALLAB_SHARAMOUNT;Amount !TP_LOCALLAB_SHARBLUR;Blur radius @@ -3709,6 +3816,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_LOCALLAB_SYM;Symmetrical (mouse) !TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) !TP_LOCALLAB_TARGET_GRAY;Mean luminance (Yb%) +!TP_LOCALLAB_TE_PIVOT;Pivot (Ev) !TP_LOCALLAB_THRES;Threshold structure !TP_LOCALLAB_THRESDELTAE;ΔE scope threshold !TP_LOCALLAB_THRESRETI;Threshold @@ -3941,6 +4049,16 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;Dynamic Range Compression !TP_TM_FATTAL_THRESHOLD;Detail +!TP_TONE_EQUALIZER_BANDS;Bands +!TP_TONE_EQUALIZER_BAND_0;Blacks +!TP_TONE_EQUALIZER_BAND_1;Shadows +!TP_TONE_EQUALIZER_BAND_2;Midtones +!TP_TONE_EQUALIZER_BAND_3;Highlights +!TP_TONE_EQUALIZER_BAND_4;Whites +!TP_TONE_EQUALIZER_DETAIL;Regularization +!TP_TONE_EQUALIZER_LABEL;Tone Equalizer +!TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) +!TP_TONE_EQUALIZER_SHOW_COLOR_MAP;Show tonal map !TP_WAVELET_BALCHROM;Equalizer Color !TP_WAVELET_BALLUM;Denoise equalizer White-Black !TP_WAVELET_BL;Blur levels @@ -4068,9 +4186,60 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_WAVELET_WAVOFFSET;Offset !TP_WBALANCE_AUTOITCGREEN;Temperature correlation !TP_WBALANCE_AUTOOLD;RGB grey -!TP_WBALANCE_AUTO_HEADER;Automatic +!TP_WBALANCE_AUTO_HEADER;Automatic & Refinement +!TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +!TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +!TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +!TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +!TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +!TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +!TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +!TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +!TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +!TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +!TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +!TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +!TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +!TP_WBALANCE_ITCWB_FGREEN;Find green student +!TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +!TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +!TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +!TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +!TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +!TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +!TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +!TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +!TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +!TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +!TP_WBALANCE_ITCWB_PRIM_REC;High sampling +!TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & No use Camera settings +!TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +!TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +!TP_WBALANCE_ITCWB_RGREEN;Green range +!TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +!TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +!TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +!TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +!TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +!TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +!TP_WBALANCE_ITCWGREEN;Green refinement +!TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +!TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and No use camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) not to use camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +!TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). +!TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 +!TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. +!TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° +!TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +!TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +!TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +!TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +!TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. !TP_WBALANCE_PICKER;Pick -!TP_WBALANCE_STUDLABEL;Correlation factor: %1 -!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +!TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +!TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +!TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +!TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. !TP_WBALANCE_TEMPBIAS;AWB temperature bias -!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'. +!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'.\n\nYou can use "Awb temperature bias" to adjust the "Temperature correlation" results. Each movement of this command brings a new calculation of temperature, tint and correlation. +!//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +!//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/languages/default b/rtdata/languages/default index 376d65e68..f918e3c63 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -52,6 +52,7 @@ DYNPROFILEEDITOR_PROFILE;Processing Profile EDITWINDOW_TITLE;Image Edit EDIT_OBJECT_TOOLTIP;Displays a widget on the preview window which lets you adjust this tool. EDIT_PIPETTE_TOOLTIP;To add an adjustment point to the curve, hold the Ctrl key while left-clicking the desired spot in the image preview.\nTo adjust the point, hold the Ctrl key while left-clicking the corresponding area in the preview, then let go of Ctrl (unless you desire fine control) and while still holding the left mouse button move the mouse up or down to move that point up or down in the curve. +ERROR_MSG_METADATA_VALUE;Metadata: error setting %1 to %2 EXIFFILTER_APERTURE;Aperture EXIFFILTER_CAMERA;Camera EXIFFILTER_EXPOSURECOMPENSATION;Exposure compensation (EV) @@ -63,11 +64,14 @@ EXIFFILTER_LENS;Lens EXIFFILTER_METADATAFILTER;Enable metadata filters EXIFFILTER_PATH;File path EXIFFILTER_SHUTTER;Shutter +EXIFPANEL_ACTIVATE_ALL_HINT;Select all tags +EXIFPANEL_ACTIVATE_NONE_HINT;Unselect all tags EXIFPANEL_ADDEDIT;Add/Edit EXIFPANEL_ADDEDITHINT;Add new tag or edit tag. EXIFPANEL_ADDTAGDLG_ENTERVALUE;Enter value EXIFPANEL_ADDTAGDLG_SELECTTAG;Select tag EXIFPANEL_ADDTAGDLG_TITLE;Add/Edit Tag +EXIFPANEL_BASIC_GROUP;Basic EXIFPANEL_KEEP;Keep EXIFPANEL_KEEPHINT;Keep the selected tags when writing output file. EXIFPANEL_REMOVE;Remove @@ -76,8 +80,7 @@ EXIFPANEL_RESET;Reset EXIFPANEL_RESETALL;Reset All EXIFPANEL_RESETALLHINT;Reset all tags to their original values. EXIFPANEL_RESETHINT;Reset the selected tags to their original values. -EXIFPANEL_SHOWALL;Show all -EXIFPANEL_SUBDIRECTORY;Subdirectory +EXIFPANEL_VALUE_NOT_SHOWN;Not shown EXPORT_BYPASS;Processing steps to bypass EXPORT_BYPASS_ALL;Select / Unselect All EXPORT_BYPASS_DEFRINGE;Bypass Defringe @@ -173,11 +176,11 @@ FILEBROWSER_POPUPUNTRASH;Remove from trash FILEBROWSER_QUERYBUTTONHINT;Clear the Find query FILEBROWSER_QUERYHINT;Type filenames to search for. Supports partial filenames. Separate the search terms using commas, e.g.\n1001,1004,1199\n\nExclude search terms by prefixing them with !=\ne.g.\n!=1001,1004,1199\n\nShortcuts:\nCtrl-f - focus the Find box,\nEnter - search,\nEsc - clear the Find box,\nShift-Esc - defocus the Find box. FILEBROWSER_QUERYLABEL; Find: -FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: Shift-1 -FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: Shift-2 -FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: Shift-3 -FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: Shift-4 -FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: Shift-5 +FILEBROWSER_RANK1_TOOLTIP;Rank 1 *\nShortcut: 1 +FILEBROWSER_RANK2_TOOLTIP;Rank 2 *\nShortcut: 2 +FILEBROWSER_RANK3_TOOLTIP;Rank 3 *\nShortcut: 3 +FILEBROWSER_RANK4_TOOLTIP;Rank 4 *\nShortcut: 4 +FILEBROWSER_RANK5_TOOLTIP;Rank 5 *\nShortcut: 5 FILEBROWSER_RENAMEDLGLABEL;Rename file FILEBROWSER_RESETDEFAULTPROFILE;Reset to default FILEBROWSER_SELECTDARKFRAME;Select dark-frame... @@ -188,23 +191,23 @@ FILEBROWSER_SHOWCOLORLABEL3HINT;Show images labeled Green.\nShortcut: Alt-3Alt-4 FILEBROWSER_SHOWCOLORLABEL5HINT;Show images labeled Purple.\nShortcut: Alt-5 FILEBROWSER_SHOWDIRHINT;Clear all filters.\nShortcut: d -FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: 6 +FILEBROWSER_SHOWEDITEDHINT;Show edited images.\nShortcut: Shift-7 +FILEBROWSER_SHOWEDITEDNOTHINT;Show not edited images.\nShortcut: Shift-6 FILEBROWSER_SHOWEXIFINFO;Show Exif info.\n\nShortcuts:\ni - Multiple Editor Tabs Mode,\nAlt-i - Single Editor Tab Mode. FILEBROWSER_SHOWNOTTRASHHINT;Show only images not in trash. FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions. -FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1-star.\nShortcut: 1 -FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2-star.\nShortcut: 2 -FILEBROWSER_SHOWRANK3HINT;Show images ranked as 3-star.\nShortcut: 3 -FILEBROWSER_SHOWRANK4HINT;Show images ranked as 4-star.\nShortcut: 4 -FILEBROWSER_SHOWRANK5HINT;Show images ranked as 5-star.\nShortcut: 5 +FILEBROWSER_SHOWRANK1HINT;Show images ranked as 1-star.\nShortcut: Shift-1 +FILEBROWSER_SHOWRANK2HINT;Show images ranked as 2-star.\nShortcut: Shift-2 +FILEBROWSER_SHOWRANK3HINT;Show images ranked as 3-star.\nShortcut: Shift-3 +FILEBROWSER_SHOWRANK4HINT;Show images ranked as 4-star.\nShortcut: Shift-4 +FILEBROWSER_SHOWRANK5HINT;Show images ranked as 5-star.\nShortcut: Shift-5 FILEBROWSER_SHOWRECENTLYSAVEDHINT;Show saved images.\nShortcut: Alt-7 FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Show unsaved images.\nShortcut: Alt-6 FILEBROWSER_SHOWTRASHHINT;Show contents of trash.\nShortcut: Ctrl-t FILEBROWSER_SHOWUNCOLORHINT;Show images without a color label.\nShortcut: Alt-0 -FILEBROWSER_SHOWUNRANKHINT;Show unranked images.\nShortcut: 0 +FILEBROWSER_SHOWUNRANKHINT;Show unranked images.\nShortcut: Shift-0 FILEBROWSER_THUMBSIZE;Thumbnail size -FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: Shift-0 +FILEBROWSER_UNRANK_TOOLTIP;Unrank.\nShortcut: 0 FILEBROWSER_ZOOMINHINT;Increase thumbnail size.\n\nShortcuts:\n+ - Multiple Editor Tabs Mode,\nAlt-+ - Single Editor Tab Mode. FILEBROWSER_ZOOMOUTHINT;Decrease thumbnail size.\n\nShortcuts:\n- - Multiple Editor Tabs Mode,\nAlt-- - Single Editor Tab Mode. FILECHOOSER_FILTER_ANY;All files @@ -737,23 +740,23 @@ HISTORY_MSG_493;L*a*b* Adjustments HISTORY_MSG_494;Capture Sharpening HISTORY_MSG_496;Local Spot deleted HISTORY_MSG_497;Local Spot selected -HISTORY_MSG_498;Local Spot name -HISTORY_MSG_499;Local Spot visibility -HISTORY_MSG_500;Local Spot shape -HISTORY_MSG_501;Local Spot method -HISTORY_MSG_502;Local Spot shape method -HISTORY_MSG_503;Local Spot locX -HISTORY_MSG_504;Local Spot locXL -HISTORY_MSG_505;Local Spot locY -HISTORY_MSG_506;Local Spot locYT -HISTORY_MSG_507;Local Spot center -HISTORY_MSG_508;Local Spot circrad -HISTORY_MSG_509;Local Spot quality method -HISTORY_MSG_510;Local Spot transition -HISTORY_MSG_511;Local Spot thresh -HISTORY_MSG_512;Local Spot ΔE decay -HISTORY_MSG_513;Local Spot scope -HISTORY_MSG_514;Local Spot structure +HISTORY_MSG_498;--unused-- +HISTORY_MSG_499;--unused-- +HISTORY_MSG_500;Local - Spot shape +HISTORY_MSG_501;Local - Spot method +HISTORY_MSG_502;Local - SC - Shape method +HISTORY_MSG_503;Local - Spot - Right +HISTORY_MSG_504;Local - Spot - Left +HISTORY_MSG_505;Local - Spot - Bottom +HISTORY_MSG_506;Local - Spot - Top +HISTORY_MSG_507;Local - Spot - Center +HISTORY_MSG_508;Local - Spot - Size +HISTORY_MSG_509;Local - Spot quality method +HISTORY_MSG_510;Local - TG - Transition value +HISTORY_MSG_511;Local - SD - ΔE scope threshold +HISTORY_MSG_512;Local - SD - ΔE decay +HISTORY_MSG_513;Local - Spot - Excluding - Scope +HISTORY_MSG_514;Local - Spot structure HISTORY_MSG_515;Local Adjustments HISTORY_MSG_516;Local - Color and light HISTORY_MSG_517;Local - Enable super @@ -761,7 +764,7 @@ HISTORY_MSG_518;Local - Lightness HISTORY_MSG_519;Local - Contrast HISTORY_MSG_520;Local - Chrominance HISTORY_MSG_521;Local - Scope -HISTORY_MSG_522;Local - curve method +HISTORY_MSG_522;Local - Curve method HISTORY_MSG_523;Local - LL Curve HISTORY_MSG_524;Local - CC curve HISTORY_MSG_525;Local - LH Curve @@ -820,16 +823,16 @@ HISTORY_MSG_577;Local - cbdl chroma HISTORY_MSG_578;Local - cbdl threshold HISTORY_MSG_579;Local - cbdl scope 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 -HISTORY_MSG_584;Local - deNoise equalizer White-Black -HISTORY_MSG_585;Local - deNoise chro f -HISTORY_MSG_586;Local - deNoise chro c -HISTORY_MSG_587;Local - deNoise chro detail -HISTORY_MSG_588;Local - deNoise equalizer Blue-Red -HISTORY_MSG_589;Local - deNoise bilateral -HISTORY_MSG_590;Local - deNoise Scope +HISTORY_MSG_581;Local - Denoise lum f 1 +HISTORY_MSG_582;Local - Denoise lum c +HISTORY_MSG_583;Local - Denoise lum detail +HISTORY_MSG_584;Local - Denoise equalizer White-Black +HISTORY_MSG_585;Local - Denoise chro f +HISTORY_MSG_586;Local - Denoise chro c +HISTORY_MSG_587;Local - Denoise chro detail +HISTORY_MSG_588;Local - Denoise equalizer Blue-Red +HISTORY_MSG_589;Local - Denoise bilateral +HISTORY_MSG_590;Local - Denoise Scope HISTORY_MSG_591;Local - Avoid color shift HISTORY_MSG_592;Local - Sh Contrast HISTORY_MSG_593;Local - Local contrast @@ -860,7 +863,7 @@ HISTORY_MSG_618;Local - Use Color Mask HISTORY_MSG_619;Local - Use Exp Mask HISTORY_MSG_620;Local - Blur col HISTORY_MSG_621;Local - Exp inverse -HISTORY_MSG_622;Local - Exclude structure +HISTORY_MSG_622;Local - Spot - Excluding - Spot structure HISTORY_MSG_623;Local - Exp Chroma compensation HISTORY_MSG_624;Local - Color correction grid HISTORY_MSG_625;Local - Color correction strength @@ -883,7 +886,7 @@ HISTORY_MSG_641;Local - Use SH mask HISTORY_MSG_642;Local - radius SH HISTORY_MSG_643;Local - Blur SH HISTORY_MSG_644;Local - inverse SH -HISTORY_MSG_645;Local - balance ΔE ab-L +HISTORY_MSG_645;Local - SD - ab-L balance HISTORY_MSG_646;Local - Exp mask chroma HISTORY_MSG_647;Local - Exp mask gamma HISTORY_MSG_648;Local - Exp mask slope @@ -897,11 +900,11 @@ HISTORY_MSG_655;Local - SH mask slope HISTORY_MSG_656;Local - Color soft radius HISTORY_MSG_657;Local - Retinex Reduce artifacts HISTORY_MSG_658;Local - CBDL soft radius -HISTORY_MSG_659;Local Spot transition-decay +HISTORY_MSG_659;Local - TG - Transition decay 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_662;Local - Denoise lum f 0 +HISTORY_MSG_663;Local - Denoise lum f 2 HISTORY_MSG_664;--unused-- HISTORY_MSG_665;Local - cbdl mask Blend HISTORY_MSG_666;Local - cbdl mask radius @@ -914,7 +917,7 @@ HISTORY_MSG_672;Local - cbdl mask CL HISTORY_MSG_673;Local - Use cbdl mask HISTORY_MSG_674;Local - Tool removed HISTORY_MSG_675;Local - TM soft radius -HISTORY_MSG_676;Local Spot transition-differentiation +HISTORY_MSG_676;Local - TG - Transition differentiation HISTORY_MSG_677;Local - TM amount HISTORY_MSG_678;Local - TM saturation HISTORY_MSG_679;Local - Retinex mask C @@ -997,7 +1000,7 @@ HISTORY_MSG_761;Local - SH Laplacian mask HISTORY_MSG_762;Local - cbdl Laplacian mask HISTORY_MSG_763;Local - Blur Laplacian mask HISTORY_MSG_764;Local - Solve PDE Laplacian mask -HISTORY_MSG_765;Local - deNoise Detail threshold +HISTORY_MSG_765;Local - Denoise Detail threshold HISTORY_MSG_766;Local - Blur Fast Fourier HISTORY_MSG_767;Local - Grain Iso HISTORY_MSG_768;Local - Grain Strength @@ -1016,19 +1019,19 @@ HISTORY_MSG_780;Local - Color Mask shadows HISTORY_MSG_781;Local - Contrast Mask Wavelet level HISTORY_MSG_782;Local - Blur Denoise Mask Wavelet levels HISTORY_MSG_783;Local - Color Wavelet levels -HISTORY_MSG_784;Local - Mask ΔE -HISTORY_MSG_785;Local - Mask Scope ΔE +HISTORY_MSG_784;Local - Mask - ΔE Image Mask +HISTORY_MSG_785;Local - Mask - Scope HISTORY_MSG_786;Local - SH method HISTORY_MSG_787;Local - Equalizer multiplier HISTORY_MSG_788;Local - Equalizer detail HISTORY_MSG_789;Local - SH mask amount HISTORY_MSG_790;Local - SH mask anchor HISTORY_MSG_791;Local - Mask Short L curves -HISTORY_MSG_792;Local - Mask Luminance Background +HISTORY_MSG_792;Local - Mask - Background HISTORY_MSG_793;Local - SH TRC gamma HISTORY_MSG_794;Local - SH TRC slope HISTORY_MSG_795;Local - Mask save restore image -HISTORY_MSG_796;Local - Recursive references +HISTORY_MSG_796;Local - SC - Recursive references HISTORY_MSG_797;Local - Merge Original method HISTORY_MSG_798;Local - Opacity HISTORY_MSG_799;Local - Color RGB ToneCurve @@ -1064,7 +1067,7 @@ HISTORY_MSG_829;Local - SH gradient angle HISTORY_MSG_830;Local - Color gradient strength L HISTORY_MSG_831;Local - Color gradient angle HISTORY_MSG_832;Local - Color gradient strength C -HISTORY_MSG_833;Local - Gradient feather +HISTORY_MSG_833;Local - TG - Feather gradient HISTORY_MSG_834;Local - Color gradient strength H HISTORY_MSG_835;Local - Vib gradient strength L HISTORY_MSG_836;Local - Vib gradient angle @@ -1097,7 +1100,7 @@ HISTORY_MSG_863;Local - Wavelet merge original image HISTORY_MSG_864;Local - Wavelet dir contrast attenuation HISTORY_MSG_865;Local - Wavelet dir contrast delta HISTORY_MSG_866;Local - Wavelet dir compression -HISTORY_MSG_868;Local - Balance ΔE C-H +HISTORY_MSG_868;Local - SD - C-H balance HISTORY_MSG_869;Local - Denoise by level HISTORY_MSG_870;Local - Wavelet mask curve H HISTORY_MSG_871;Local - Wavelet mask curve C @@ -1122,7 +1125,7 @@ HISTORY_MSG_890;Local - Contrast Wavelet Graduated angle HISTORY_MSG_891;Local - Contrast Wavelet Graduated HISTORY_MSG_892;Local - Log Encoding Graduated Strength HISTORY_MSG_893;Local - Log Encoding Graduated angle -HISTORY_MSG_894;Local - Color Preview dE +HISTORY_MSG_894;Local - SD - ΔE preview color intensity HISTORY_MSG_897;Local - Contrast Wavelet ES strength HISTORY_MSG_898;Local - Contrast Wavelet ES radius HISTORY_MSG_899;Local - Contrast Wavelet ES detail @@ -1136,7 +1139,7 @@ HISTORY_MSG_906;Local - Contrast Wavelet ES sensitivity HISTORY_MSG_907;Local - Contrast Wavelet ES amplification HISTORY_MSG_908;Local - Contrast Wavelet ES neighboring HISTORY_MSG_909;Local - Contrast Wavelet ES show -HISTORY_MSG_910;Local - Wavelet Edge performance +HISTORY_MSG_910;Local - SC - Wavelet Edge performance HISTORY_MSG_911;Local - Blur Chroma Luma HISTORY_MSG_912;Local - Blur Guide filter strength HISTORY_MSG_913;Local - Contrast Wavelet Sigma DR @@ -1148,10 +1151,10 @@ HISTORY_MSG_918;Local - Residual wavelet highlights HISTORY_MSG_919;Local - Residual wavelet highlights threshold 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_922;Local - SC - Changes in B/W HISTORY_MSG_923;Local - Tool complexity mode HISTORY_MSG_924;--unused-- -HISTORY_MSG_925;Local - Scope color tools +HISTORY_MSG_925;Local - Scope (color tools) HISTORY_MSG_926;Local - Show mask type HISTORY_MSG_927;Local - Shadow HISTORY_MSG_928;Local - Common color mask @@ -1265,7 +1268,7 @@ HISTORY_MSG_1036;Local - Nlmeans - patch HISTORY_MSG_1037;Local - Nlmeans - radius HISTORY_MSG_1038;Local - Nlmeans - gamma HISTORY_MSG_1039;Local - Grain - gamma -HISTORY_MSG_1040;Local - Spot - soft radius +HISTORY_MSG_1040;Local - SC - Soft radius HISTORY_MSG_1041;Local - Spot - Munsell HISTORY_MSG_1042;Local - Log encoding - threshold HISTORY_MSG_1043;Local - Exp - normalize @@ -1356,7 +1359,7 @@ HISTORY_MSG_1127;Local - Cie mask gamma HISTORY_MSG_1128;Local - Cie mask slope HISTORY_MSG_1129;Local - Cie Relative luminance HISTORY_MSG_1130;Local - Cie Saturation Jz -HISTORY_MSG_1131;Local - Mask denoise chroma +HISTORY_MSG_1131;Local - Mask - Denoise HISTORY_MSG_1132;Local - Cie Wav sigma Jz HISTORY_MSG_1133;Local - Cie Wav level Jz HISTORY_MSG_1134;Local - Cie Wav local contrast Jz @@ -1444,8 +1447,8 @@ HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius -HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - Gamut-Munsell HISTORY_MSG_LOCALLAB_TE_PIVOT;Local - Equalizer pivot +HISTORY_MSG_LOCAL_GAMUTMUNSEL;Local - SC - Avoid Color Shift HISTORY_MSG_METADATA_MODE;Metadata copy mode HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold HISTORY_MSG_PDSHARPEN_AUTO_CONTRAST;CS - Auto threshold @@ -1536,6 +1539,22 @@ HISTORY_MSG_WAVTHRDEN;Threshold local contrast HISTORY_MSG_WAVTHREND;Threshold local contrast HISTORY_MSG_WAVUSHAMET;Clarity method HISTORY_MSG_WBALANCE_OBSERVER10;Observer 10° +HISTORY_MSG_WBITC_CUSTOM;Itcwb Custom +HISTORY_MSG_WBITC_DELTA;Itcwb Delta green +HISTORY_MSG_WBITC_FGREEN;Itcwb Green - student +HISTORY_MSG_WBITC_FORCE;Itcwb Force +HISTORY_MSG_WBITC_GREEN;Grren refinement +HISTORY_MSG_WBITC_MINSIZE;Patch min size +HISTORY_MSG_WBITC_NOPURPLE;Itcwb Nopurple +HISTORY_MSG_WBITC_OBS;Remove algo 2 passes +HISTORY_MSG_WBITC_PONDER;Itcwb ponderated +HISTORY_MSG_WBITC_PRECIS;Itcwb Precision +HISTORY_MSG_WBITC_PRIM;Primaries +HISTORY_MSG_WBITC_RGREEN;Itcwb Green range +HISTORY_MSG_WBITC_SAMPLING;Low sampling +HISTORY_MSG_WBITC_SIZE;Itcwb Size +HISTORY_MSG_WBITC_SORTED;Itcwb ponderated +HISTORY_MSG_WBITC_THRES;Itcwb Theshold HISTORY_NEWSNAPSHOT;Add HISTORY_NEWSNAPSHOT_TOOLTIP;Shortcut: Alt-s HISTORY_SNAPSHOT;Snapshot @@ -1668,7 +1687,7 @@ MAIN_TAB_COLOR;Color MAIN_TAB_COLOR_TOOLTIP;Shortcut: Alt-c MAIN_TAB_DETAIL;Detail MAIN_TAB_DETAIL_TOOLTIP;Shortcut: Alt-d -MAIN_TAB_DEVELOP; Batch Edit +MAIN_TAB_DEVELOP; Batch Edit MAIN_TAB_EXIF;Exif MAIN_TAB_EXPORT; Fast Export MAIN_TAB_EXPOSURE;Exposure @@ -1676,7 +1695,7 @@ MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e MAIN_TAB_FAVORITES;Favorites MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u MAIN_TAB_FILTER; Filter -MAIN_TAB_INSPECT; Inspect +MAIN_TAB_INSPECT; Inspect MAIN_TAB_IPTC;IPTC MAIN_TAB_LOCALLAB;Local MAIN_TAB_LOCALLAB_TOOLTIP;Shortcut: Alt-o @@ -1751,11 +1770,11 @@ PARTIALPASTE_EXPOSURE;Exposure PARTIALPASTE_FILMNEGATIVE;Film negative PARTIALPASTE_FILMSIMULATION;Film simulation PARTIALPASTE_FLATFIELDAUTOSELECT;Flat-field auto-selection -PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata PARTIALPASTE_FLATFIELDBLURRADIUS;Flat-field blur radius PARTIALPASTE_FLATFIELDBLURTYPE;Flat-field blur type PARTIALPASTE_FLATFIELDCLIPCONTROL;Flat-field clip control PARTIALPASTE_FLATFIELDFILE;Flat-field file +PARTIALPASTE_FLATFIELDFROMMETADATA;Flat-field from Metadata PARTIALPASTE_GRADIENT;Graduated filter PARTIALPASTE_HSVEQUALIZER;HSV equalizer PARTIALPASTE_ICMSETTINGS;Color management settings @@ -1841,7 +1860,6 @@ PREFERENCES_CHUNKSIZE_RAW_XT;Xtrans demosaic PREFERENCES_CHUNKSIZE_RGB;RGB processing PREFERENCES_CIE;Ciecam PREFERENCES_CIEARTIF;Avoid artifacts -PREFERENCES_WBA;White Balance PREFERENCES_CLIPPINGIND;Clipping Indication PREFERENCES_CLUTSCACHE;HaldCLUT Cache PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs @@ -1921,7 +1939,10 @@ PREFERENCES_INTENT_SATURATION;Saturation PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Show embedded JPEG thumbnail if raw is unedited PREFERENCES_LANG;Language PREFERENCES_LANGAUTODETECT;Use system language +PREFERENCES_LENSFUNDBDIR;Lensfun database directory +PREFERENCES_LENSFUNDBDIR_TOOLTIP;Directory containing the Lensfun database. Leave empty to use the default directories. PREFERENCES_LENSPROFILESDIR;Lens profiles directory +PREFERENCES_LENSPROFILESDIR_TOOLTIP;Directory containing Adobe Lens Correction Profiles (LCPs) PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders PREFERENCES_MENUGROUPEXTPROGS;Group 'Open with' PREFERENCES_MENUGROUPFILEOPERATIONS;Group 'File operations' @@ -1929,6 +1950,11 @@ PREFERENCES_MENUGROUPLABEL;Group 'Color label' PREFERENCES_MENUGROUPPROFILEOPERATIONS;Group 'Processing profile operations' PREFERENCES_MENUGROUPRANK;Group 'Rank' PREFERENCES_MENUOPTIONS;Context Menu Options +PREFERENCES_METADATA;Metadata +PREFERENCES_METADATA_SYNC;Metadata synchronization with XMP sidecars +PREFERENCES_METADATA_SYNC_NONE;Off +PREFERENCES_METADATA_SYNC_READ;Read only +PREFERENCES_METADATA_SYNC_READWRITE;Bidirectional PREFERENCES_MONINTENT;Default rendering intent PREFERENCES_MONITOR;Monitor PREFERENCES_MONPROFILE;Default color profile @@ -2010,7 +2036,22 @@ PREFERENCES_TOOLPANEL_TOOL;Tool PREFERENCES_TP_LABEL;Tool panel: PREFERENCES_TP_VSCROLLBAR;Hide vertical scrollbar PREFERENCES_USEBUNDLEDPROFILES;Use bundled profiles +PREFERENCES_WBA;White Balance +PREFERENCES_WBACORR;White Balance - Automatic temperature correlation +PREFERENCES_WBACORR_TOOLTIP;These settings allow, depending on the images (type of raw file, colorimetry, etc.), an adaptation of the " Temperature correlation " algorithm in order to obtain the best overall results. There is no absolute rule, linking these parameters to the results obtained.\n\nThe settings are of 3 types: \n* those accessible to the user from the GUI.\n* those accessible only in reading from each pp3 file : Itcwb_minsize=20, Itcwb_delta=4 Itcwb_rgreen=1 Itcwb_nopurple=false (See Rawpedia)\n* those accessible to the user in 'options' (see Rawpedia)\n You can use "Awb temperature bias" and "Green refinement" to adjust the results. Each movement of these commands brings a new calculation of temperature, tint and correlation.\n\nPlease note that the 3 indicators 'Correlation factor', 'Patch chroma' and ΔE are given for information only. It is not because one of these indicators is better that the result will necessarily be better. +PREFERENCES_WBAENA;Show White Balance auto Temperature correlation Settings +PREFERENCES_WBAENACUSTOM;Use Custom temperature & tint +PREFERENCES_WBAFORC;Forces Extra algoritm +PREFERENCES_WBAGREENDELTA;Delta temperature in green iterate loop (if Force Extra enabled) +PREFERENCES_WBANOPURP;No purple color used +PREFERENCES_WBAPATCH;Number maximum of colors used in picture +PREFERENCES_WBAPRECIS;Precision algorithm - scale used +PREFERENCES_WBASIZEREF;Size of reference color compare to size of histogram color +PREFERENCES_WBASORT;Sort in chroma order instead of histogram PREFERENCES_WORKFLOW;Layout +PREFERENCES_XMP_SIDECAR_MODE;XMP sidecar style +PREFERENCES_XMP_SIDECAR_MODE_EXT;darktable-like (FILENAME.ext.xmp for FILENAME.ext) +PREFERENCES_XMP_SIDECAR_MODE_STD;Standard (FILENAME.xmp for FILENAME.ext) PREFERENCES_ZOOMONSCROLL;Zoom images by scrolling PROFILEPANEL_COPYPPASTE;Parameters to copy PROFILEPANEL_GLOBALPROFILES;Bundled profiles @@ -2095,11 +2136,11 @@ SHCSELECTOR_TOOLTIP;Click right mouse button to reset the position of those 3 sl SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. SORT_ASCENDING;Ascending -SORT_BY_NAME;By Name SORT_BY_DATE;By Date SORT_BY_EXIF;By EXIF -SORT_BY_RANK;By Rank SORT_BY_LABEL;By Color Label +SORT_BY_NAME;By Name +SORT_BY_RANK;By Rank SORT_DESCENDING;Descending TC_PRIM_BLUX;Bx TC_PRIM_BLUY;By @@ -2284,8 +2325,8 @@ TP_COLORAPP_TCMODE_LABEL3;Curve chroma mode TP_COLORAPP_TCMODE_LIGHTNESS;Lightness TP_COLORAPP_TCMODE_SATUR;Saturation TP_COLORAPP_TEMP2_TOOLTIP;Either symmetrical mode temp = White balance.\nEither select illuminant always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 -TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 TP_COLORAPP_TEMPOUT_TOOLTIP;Temperature and Tint.\nDepending on the choices made previously, the selected temperature is:\nWhite balance\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504\nFree. +TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD41 temp=4100\nD50 temp=5003\nD55 temp=5503\nD60 temp=6000\nD65 temp=6504\nD75 temp=7504 TP_COLORAPP_TONECIE;Use CIECAM for tone mapping TP_COLORAPP_TONECIE_TOOLTIP;If this option is disabled, tone mapping is done in L*a*b* space.\nIf this option is enabled, tone mapping is done using CIECAM02.\nThe Tone Mapping tool must be enabled for this setting to take effect. TP_COLORAPP_VIEWINGF_TOOLTIP;Takes into account the support on which the final image will be viewed (monitor, TV, projector, printer, etc.), as well as its environment. This process will take the data coming from process 'Image Adjustments' and 'bring' it to the support in such a way that the viewing conditions and its environment are taken into account. @@ -2501,9 +2542,11 @@ TP_FILMNEGATIVE_GUESS_TOOLTIP;Automatically set the red and blue ratios by picki TP_FILMNEGATIVE_LABEL;Film Negative TP_FILMNEGATIVE_OUT_LEVEL;Output level TP_FILMNEGATIVE_PICK;Pick neutral spots +TP_FILMNEGATIVE_PICK_SIZE;Size: TP_FILMNEGATIVE_RED;Red ratio TP_FILMNEGATIVE_REF_LABEL;Input RGB: %1 TP_FILMNEGATIVE_REF_PICK;Pick white balance spot +TP_FILMNEGATIVE_REF_SIZE;Size: TP_FILMNEGATIVE_REF_TOOLTIP;Pick a gray patch for white-balancing the output, positive image. TP_FILMSIMULATION_LABEL;Film Simulation TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? @@ -2619,6 +2662,7 @@ TP_ICM_WORKING_PRIM_BRU;BruceRGB TP_ICM_WORKING_PRIM_BST;BestRGB TP_ICM_WORKING_PRIM_CUS;Custom (sliders) TP_ICM_WORKING_PRIM_CUSGR;Custom (CIE xy Diagram) +TP_ICM_WORKING_PRIM_JDCMAX;JDC Max TP_ICM_WORKING_PRIM_NONE;Default TP_ICM_WORKING_PRIM_PROP;ProPhoto TP_ICM_WORKING_PRIM_REC;Rec2020 @@ -2727,7 +2771,7 @@ TP_LOCALLAB_BLMETHOD_TOOLTIP;Normal: direct blur and noise with all settings.\nI TP_LOCALLAB_BLNOI_EXP;Blur & Noise TP_LOCALLAB_BLNORM;Normal TP_LOCALLAB_BLUFR;Blur/Grain & Denoise -TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with an an RT-spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' RT-spot(s) and increase the scope.\n\nThis module (including the 'median' and 'Guided filter') can be used in addition to the main-menu noise reduction. +TP_LOCALLAB_BLUMETHOD_TOOLTIP;To blur the background and isolate the foreground:\n-blur the background by completely covering the image with a spot (high values for scope and transition and 'Normal' or 'Inverse' in checkbox).\n-Isolate the foreground by using one or more 'Excluding' spots 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_BLURCOL;Radius TP_LOCALLAB_BLURCOLDE_TOOLTIP;The image used to calculate dE is blurred slightly to avoid taking isolated pixels into account. @@ -2760,6 +2804,8 @@ TP_LOCALLAB_CBDL_TOOLNAME;Contrast by Detail Levels TP_LOCALLAB_CENTER_X;Center X TP_LOCALLAB_CENTER_Y;Center Y TP_LOCALLAB_CH;CL - LC +TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 +TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 TP_LOCALLAB_CHROMA;Chrominance TP_LOCALLAB_CHROMABLU;Chroma levels TP_LOCALLAB_CHROMABLU_TOOLTIP;Increases or reduces the effect depending on the luma settings.\nValues under 1 reduce the effect. Values greater than 1 increase the effect. @@ -2786,7 +2832,7 @@ TP_LOCALLAB_CIEMODE_WAV;Wavelet TP_LOCALLAB_CIETOOLEXP;Curves TP_LOCALLAB_CIE_TOOLNAME;Color appearance (Cam16 & JzCzHz) TP_LOCALLAB_CIRCRADIUS;Spot size -TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the RT-spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. +TP_LOCALLAB_CIRCRAD_TOOLTIP;Contains the references of the spot, useful for shape detection (hue, luma, chroma, Sobel).\nLow values may be useful for processing foliage.\nHigh values may be useful for processing skin. TP_LOCALLAB_CLARICRES;Merge chroma TP_LOCALLAB_CLARIFRA;Clarity & Sharp mask/Blend & Soften Images TP_LOCALLAB_CLARIJZ_TOOLTIP;Levels 0 to 4 (included): 'Sharp mask' is enabled\nLevels 5 and above: 'Clarity' is enabled. @@ -2821,8 +2867,8 @@ TP_LOCALLAB_CSTHRESHOLD;Wavelet levels TP_LOCALLAB_CSTHRESHOLDBLUR;Wavelet level selection TP_LOCALLAB_CURV;Lightness - Contrast - Chrominance 'Super' TP_LOCALLAB_CURVCURR;Normal -TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. -TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the RT-spot. +TP_LOCALLAB_CURVEEDITORM_CC_TOOLTIP;If the curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. +TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP;If curves are at the top, the mask is completely black and no changes are made to the image.\nAs you lower the curve, the mask gradually becomes more colorful and bright, progressively changing the image.\n\nIt is recommended (but not mandatory) to position the top of the curves on the gray boundary line which represents the reference values of chroma, luma, hue for the spot. TP_LOCALLAB_CURVEEDITOR_LL_TOOLTIP;To activate the curves, set the 'Curve type' combobox to 'Normal'. 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. @@ -2852,7 +2898,7 @@ TP_LOCALLAB_DENOITHR_TOOLTIP;Adjusts edge detection to help reduce noise in unif TP_LOCALLAB_DENOIWAVCH;Wavelets: Chrominance TP_LOCALLAB_DENOIWAVLUM;Wavelets: Luminance 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 (ΔE).\nMinimum RT-spot size: 128x128. +TP_LOCALLAB_DENOI_TOOLTIP;This module can be used for noise reduction either on its own (at the end of the processing pipeline) or in addition to the Noise Reduction module in the Detail tab (which works at the beginning of the pipeline).\n Scope allows you to differentiate the action based on color (ΔE).\nMinimum spot size: 128x128. TP_LOCALLAB_DEPTH;Depth TP_LOCALLAB_DETAIL;Local contrast TP_LOCALLAB_DETAILFRA;Edge detection - DCT @@ -2893,7 +2939,7 @@ TP_LOCALLAB_EXPCOMP;Exposure compensation ƒ TP_LOCALLAB_EXPCOMPINV;Exposure compensation TP_LOCALLAB_EXPCOMP_TOOLTIP;For portraits or images with a low color gradient. You can change 'Shape detection' in 'Settings':\n\nIncrease 'ΔE scope threshold'\nReduce 'ΔE decay'\nIncrease 'ab-L balance (ΔE)' TP_LOCALLAB_EXPCONTRASTPYR_TOOLTIP;See the documentation for Wavelet Levels.\nThere are some differences in the Local Adjustments version, which has more tools and more possibilities for working on individual detail levels.\nE.g. wavelet-level tone mapping. -TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small RT-spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. +TP_LOCALLAB_EXPCONTRAST_TOOLTIP;Avoid spots that are too small ( < 32x32 pixels).\nUse low 'Transition value' and high 'Transition decay' and 'Scope' to simulate small spots and deal with defects.\nUse 'Clarity and Sharp mask and Blend and Soften Images' if necessary by adjusting 'Soft radius' to reduce artifacts. TP_LOCALLAB_EXPCURV;Curves TP_LOCALLAB_EXPGRAD;Graduated Filter TP_LOCALLAB_EXPGRADCOL_TOOLTIP;A graduated filter is available in Color and Light (luminance, chrominance & hue gradients, and 'Merge file'), Exposure (luminance grad.), Exposure Mask (luminance grad.), Shadows/Highlights (luminance grad.), Vibrance (luminance, chrominance & hue gradients), Local contrast & wavelet pyramid (local contrast grad.).\nFeather is located in Settings. @@ -2901,12 +2947,12 @@ TP_LOCALLAB_EXPLAPBAL_TOOLTIP;Changes the transformed/original image blend. TP_LOCALLAB_EXPLAPGAMM_TOOLTIP;Changes the behaviour for images with too much or too little contrast by adding a gamma curve before and after the Laplace transform. TP_LOCALLAB_EXPLAPLIN_TOOLTIP;Changes the behaviour for underexposed images by adding a linear component prior to applying the Laplace transform. TP_LOCALLAB_EXPLAP_TOOLTIP;Moving the slider to the right progressively reduces the contrast. -TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop (c) layer blend modes i.e. Difference, Multiply, Soft Light, Overlay etc., with opacity control.\nOriginal Image : merge current RT-Spot with Original.\nPrevious spot : merge current Rt-Spot with previous - if there is only one spot, previous = original.\nBackground : merge current RT-Spot with a color and luminance background (fewer possibilties). +TP_LOCALLAB_EXPMERGEFILE_TOOLTIP;Allows you to use GIMP or Photoshop layer blend modes (difference, multiply, soft light, overlay, etc.) with opacity control.\nOriginal image: merge current spot with original.\nPrevious spot: merge current spot with previous (if there is only one spot, previous = original).\nBackground: merge current spot with a color and luminance background (fewer possibilties). TP_LOCALLAB_EXPNOISEMETHOD_TOOLTIP;Applies a median filter before the Laplace transform to prevent artifacts (noise).\nYou can also use the 'Denoise' tool. TP_LOCALLAB_EXPOSE;Dynamic Range & Exposure TP_LOCALLAB_EXPOSURE_TOOLTIP;Modify exposure in L*a*b space using Laplacian PDE algorithms to take into account dE and minimize artifacts. TP_LOCALLAB_EXPRETITOOLS;Advanced Retinex Tools -TP_LOCALLAB_EXPSHARP_TOOLTIP;RT-Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller RT-Spots. +TP_LOCALLAB_EXPSHARP_TOOLTIP;Spot minimum 39*39.\nUse low transition values and high 'Transition decay' and 'Scope' values to simulate smaller spots. TP_LOCALLAB_EXPTOOL;Exposure Tools TP_LOCALLAB_EXP_TOOLNAME;Dynamic Range & Exposure TP_LOCALLAB_FATAMOUNT;Amount @@ -2933,11 +2979,11 @@ TP_LOCALLAB_GAMM;Gamma TP_LOCALLAB_GAMMASKCOL;Gamma TP_LOCALLAB_GAMMASK_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_GAMSH;Gamma -TP_LOCALLAB_GAMUTNON;None TP_LOCALLAB_GAMUTLABRELA;Lab +TP_LOCALLAB_GAMUTMUNSELL;Munsell only +TP_LOCALLAB_GAMUTNON;None TP_LOCALLAB_GAMUTXYZABSO;XYZ Absolute TP_LOCALLAB_GAMUTXYZRELA;XYZ Relative -TP_LOCALLAB_GAMUTMUNSELL;Munsell only TP_LOCALLAB_GAMW;Gamma (wavelet pyramids) TP_LOCALLAB_GRADANG;Gradient angle TP_LOCALLAB_GRADANG_TOOLTIP;Rotation angle in degrees: -180 0 +180. @@ -3026,6 +3072,8 @@ TP_LOCALLAB_LAPRAD1_TOOLTIP;Increases the contrast of the mask by increasing the TP_LOCALLAB_LAPRAD2_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. TP_LOCALLAB_LAPRAD_TOOLTIP;Smooth radius uses a guided filter to decrease artifacts and smooth out the transition. TP_LOCALLAB_LAP_MASK_TOOLTIP;Solves PDEs for all Laplacian masks.\nIf enabled the Laplacian threshold mask reduces artifacts and smooths the result.\nIf disabled the response is linear. +TP_LOCALLAB_LCLABELS;Residual noise levels +TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. TP_LOCALLAB_LC_FFTW_TOOLTIP;FFT improves quality and allows the use of large radii, but increases processing time (depends on the area to be processed). Preferable to use only for large radii. The size of the area can be reduced by a few pixels to optimize the FFTW. This can reduce the processing time by a factor of 1.5 to 10. TP_LOCALLAB_LC_TOOLNAME;Local Contrast & Wavelets TP_LOCALLAB_LEVELBLUR;Maximum blur levels @@ -3086,11 +3134,13 @@ TP_LOCALLAB_LOGSURSOUR_TOOLTIP;Changes tones and colors to take into account the 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 +TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 TP_LOCALLAB_LUMADARKEST;Darkest 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_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 TP_LOCALLAB_MASFRAME;Mask and Merge TP_LOCALLAB_MASFRAME_TOOLTIP;For all masks.\nTakes into account the ΔE 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 @@ -3147,7 +3197,7 @@ TP_LOCALLAB_MASKRESVIB_TOOLTIP;Used to modulate the effect of the Vibrance and W TP_LOCALLAB_MASKRESWAV_TOOLTIP;Used to modulate the effect of the Local contrast and Wavelet settings based on the image luminance information contained in the L(L) or LC(H) masks (Mask and modifications).\n The L(L) mask or the LC(H) mask must be enabled to use this function.\n The 'dark' and 'light' areas below the dark threshold and above the light threshold will be restored progressively to their original values prior to being modified by the Local contrast and Wavelet settings \n In between these two areas, the full value of the Local contrast and Wavelet settings will be applied. TP_LOCALLAB_MASKUNUSABLE;Mask disabled (Mask & modifications) TP_LOCALLAB_MASKUSABLE;Mask enabled (Mask & modifications) -TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the RT-spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. +TP_LOCALLAB_MASK_TOOLTIP;You can enable multiple masks for a tool by activating another tool and using only the mask (set the tool sliders to 0 ).\n\nYou can also duplicate the spot and place it close to the first spot. The small variations in the spot references allow you to make fine adjustments. 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. @@ -3181,12 +3231,6 @@ TP_LOCALLAB_MERTHR;Difference TP_LOCALLAB_MERTWE;Exclusion TP_LOCALLAB_MERTWO;Subtract TP_LOCALLAB_METHOD_TOOLTIP;'Enhanced + chroma denoise' significantly increases processing times.\nBut reduce artifacts. -TP_LOCALLAB_LCLABELS;Residual noise levels -TP_LOCALLAB_LCLABELS_TOOLTIP;Displays the mean and high-end noise values for the area shown in the Preview Panel (at 100% zoom). The noise values are grouped by wavelet levels 0,1,2,3 and 4,5,6.\nThe displayed values are indicative only and are designed to assist with denoise adjustments. They should not be interpreted as absolute noise levels.\n\n 300: Very noisy\n 100-300: Noisy\n 50-100: Moderatly noisy\n < 50: Low noise\n\nThey allow you to see:\n*The impact of Noise Reduction in the main-menu Detail tab.\n*The influence of Non-local Means, Wavelets and DCT on the luminance noise.\n*The influence of Wavelets and DCT on the chroma noise.\n*The influence of Capture Sharpening and Demosaicing. -TP_LOCALLAB_LUMLABEL;Luma levels 0123: Mean=%1 High=%2 -TP_LOCALLAB_LUM46LABEL;Luma levels 456: Mean=%1 High=%2 -TP_LOCALLAB_CHROLABEL;Chroma levels 0123: Mean=%1 High=%2 -TP_LOCALLAB_CHRO46LABEL;Chroma levels 456: Mean=%1 High=%2 TP_LOCALLAB_MLABEL;Restored data Min=%1 Max=%2 TP_LOCALLAB_MLABEL_TOOLTIP;The values should be close to Min=0 Max=32768 (log mode) but other values are possible.You can adjust 'Clip restored data (gain)' and 'Offset' to normalize.\nRecovers image data without blending. TP_LOCALLAB_MODE_EXPERT;Advanced @@ -3296,7 +3340,7 @@ TP_LOCALLAB_SCOPEMASK_TOOLTIP;Enabled if ΔE Image Mask is enabled.\nLow values TP_LOCALLAB_SENSI;Scope TP_LOCALLAB_SENSIEXCLU;Scope TP_LOCALLAB_SENSIEXCLU_TOOLTIP;Adjust the colors to be excluded. -TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the RT-spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. +TP_LOCALLAB_SENSIMASK_TOOLTIP;Scope adjustment specific to common mask tool.\nActs on the difference between the original image and the mask.\nUses the luma, chroma and hue references from the center of the spot\n\nYou can also adjust the ΔE of the mask itself by using 'Scope (ΔE image mask)' in 'Settings' > 'Mask and Merge'. TP_LOCALLAB_SENSI_TOOLTIP;Adjusts the scope of the action:\nSmall values limit the action to colors similar to those in the center of the spot.\nHigh values let the tool act on a wider range of colors. TP_LOCALLAB_SETTINGS;Settings TP_LOCALLAB_SH1;Shadows Highlights @@ -3308,7 +3352,7 @@ TP_LOCALLAB_SHADHMASK_TOOLTIP;Lowers the highlights of the mask in the same way TP_LOCALLAB_SHADMASK_TOOLTIP;Lifts the shadows of the mask in the same way as the shadows/highlights algorithm. TP_LOCALLAB_SHADOWHIGHLIGHT_TOOLTIP;Adjust shadows and highlights either with shadows & highlights sliders or with a tone equalizer.\nCan be used instead of, or in conjunction with the Exposure module.\nCan also be used as a graduated filter. TP_LOCALLAB_SHAMASKCOL;Shadows -TP_LOCALLAB_SHAPETYPE;RT-spot shape +TP_LOCALLAB_SHAPETYPE;Spot shape TP_LOCALLAB_SHAPE_TOOLTIP;'Ellipse' is the normal mode.\n 'Rectangle' can be used in certain cases, for example to work in full-image mode by placing the delimiters outside the preview area. In this case, set transition = 100.\n\nFuture developments will include polygon shapes and Bezier curves. TP_LOCALLAB_SHARAMOUNT;Amount TP_LOCALLAB_SHARBLUR;Blur radius @@ -3794,12 +3838,12 @@ TP_TM_FATTAL_AMOUNT;Amount TP_TM_FATTAL_ANCHOR;Anchor TP_TM_FATTAL_LABEL;Dynamic Range Compression TP_TM_FATTAL_THRESHOLD;Detail +TP_TONE_EQUALIZER_BANDS;Bands TP_TONE_EQUALIZER_BAND_0;Blacks TP_TONE_EQUALIZER_BAND_1;Shadows TP_TONE_EQUALIZER_BAND_2;Midtones TP_TONE_EQUALIZER_BAND_3;Highlights TP_TONE_EQUALIZER_BAND_4;Whites -TP_TONE_EQUALIZER_BANDS;Bands TP_TONE_EQUALIZER_DETAIL;Regularization TP_TONE_EQUALIZER_LABEL;Tone Equalizer TP_TONE_EQUALIZER_PIVOT;Pivot (Ev) @@ -4080,7 +4124,7 @@ TP_WAVELET_WAVOFFSET;Offset TP_WBALANCE_AUTO;Auto TP_WBALANCE_AUTOITCGREEN;Temperature correlation TP_WBALANCE_AUTOOLD;RGB grey -TP_WBALANCE_AUTO_HEADER;Automatic +TP_WBALANCE_AUTO_HEADER;Automatic & Refinement TP_WBALANCE_CAMERA;Camera TP_WBALANCE_CLOUDY;Cloudy TP_WBALANCE_CUSTOM;Custom @@ -4107,6 +4151,45 @@ TP_WBALANCE_FLUO_HEADER;Fluorescent TP_WBALANCE_GREEN;Tint TP_WBALANCE_GTI;GTI TP_WBALANCE_HMI;HMI +TP_WBALANCE_ITCWALG_TOOLTIP;Allows you to switch to the other Alternative temperature (Alt_temp), when possible.\nInactive in the "single choice" case. +TP_WBALANCE_ITCWBDELTA_TOOLTIP;Fixed for each "green" iteration tried, the temperature difference to be taken into account. +TP_WBALANCE_ITCWBFGREEN_TOOLTIP;Find the best compromise between Student and green. +TP_WBALANCE_ITCWBMINSIZEPATCH_TOOLTIP;Allows you to set the minimum patch value. values that are too low can lead to a lack of correlation. +TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;Allows you to filter magenta/purple data from the image. If the box is checked a filter limiting the value of Y is applied. By default this value is 0.4. You can change it in 'options' Itcwb_Ypurple (Maximum 1) +TP_WBALANCE_ITCWBPRECIS_TOOLTIP;The lower the value, the more relevant the data, but increases the processing time. Since the processing time is low, this parameter should generally be able to remain at the default value +TP_WBALANCE_ITCWBRGREEN_TOOLTIP;Sets the green value review amplitude in iterations, from low amplitude 0.82 to 1.25 to maximum amplitude 0.4 to 4. +TP_WBALANCE_ITCWBSIZEPATCH_TOOLTIP;This setting sets the size of color datas used by algorithm. +TP_WBALANCE_ITCWBSIZE_TOOLTIP;This setting sets the number of iterations to find the best correspondence between the reference spectral colors and those in xyY value of the image. A value of 3 seams a good compromise. +TP_WBALANCE_ITCWBTHRES_TOOLTIP;Limits comparison sampling between spectral data and image data. +TP_WBALANCE_ITCWB_ALG;Remove 2 pass algorithm +TP_WBALANCE_ITCWB_CUSTOM;Use Custom temperature & tint +TP_WBALANCE_ITCWB_DELTA;Delta temperature in green loop +TP_WBALANCE_ITCWB_FGREEN;Find green student +TP_WBALANCE_ITCWB_FORCED;Close to full CIE diagram +TP_WBALANCE_ITCWB_FRA;Auto Temperature correlation Settings +TP_WBALANCE_ITCWB_FRA_TOOLTIP;These settings allow, depending on the images (type of raw, colorimetry, etc.), an adaptation of the 'Temperature correlation' algorithm. There is no absolute rule linking these parameters to the results obtained. +TP_WBALANCE_ITCWB_MINSIZEPATCH;Patch minimum size +TP_WBALANCE_ITCWB_NOPURPLE;Filter on purple color +TP_WBALANCE_ITCWB_PRECIS;Precision algorithm - scale used +TP_WBALANCE_ITCWB_PRIM_ACE;Forces use of the entire CIE diagram +TP_WBALANCE_ITCWB_PRIM_ADOB;Medium sampling +TP_WBALANCE_ITCWB_PRIM_BETA;Medium sampling - near Pointer's gamut +TP_WBALANCE_ITCWB_PRIM_JDCMAX;Close to full CIE diagram +TP_WBALANCE_ITCWB_PRIM_REC;High sampling +TP_WBALANCE_ITCWB_PRIM_SRGB;Low sampling & Ignore Camera settings +TP_WBALANCE_ITCWB_PRIM_XYZCAM;Camera XYZ matrix +TP_WBALANCE_ITCWB_PRIM_XYZCAM2;JDCmax after Camera XYZ matrix +TP_WBALANCE_ITCWB_RGREEN;Green range +TP_WBALANCE_ITCWB_SAMPLING;Low sampling 5.9 +TP_WBALANCE_ITCWB_SIZE;Size of ref. color compare to histogram +TP_WBALANCE_ITCWB_SIZEPATCH;Size of color patch +TP_WBALANCE_ITCWB_THRES;Colors used in picture (preset) +TP_WBALANCE_ITCWCUSTOM_TOOLTIP;Allows you to use Custom settings Temperature and Green (tint).\n\nUsage tips:\n1) start Itcwb , enable 'Use Custom temperature and tint'.\n2) Set 'Temperature and tint' to your liking :free, Pick,...(Custom)\n3) go back to 'Temperature correlation'.\n\nYou cannot use : 2 passes, AWB temperature bias, Green refinement. +TP_WBALANCE_ITCWFORCED_TOOLTIP;By default (box not checked) the data scanned during sampling is brought back to the sRGB profile, which is the most widespread, both for calibrating DCP or ICC profiles with the Colorchecker24, or used on the web.\n If you have very high gamut images (some flowers, artificial colors), then it may be necessary to use the entire CIExy diagram, the profile used will be ACESP0. In this second case, the number of colors that can be used in internal to the algorithm will be more important. +TP_WBALANCE_ITCWGREEN;Green refinement +TP_WBALANCE_ITCWGREEN_TOOLTIP;Allows you to change the "tint" (green) which will serve as a reference when starting the algorithm. It has substantially the same role for greens as "AWB temperature bias" for temperature.\nThe whole algorithm is recalculated. +TP_WBALANCE_ITCWPRIM_TOOLTIP;Allows you to select the image sampling.\n'Close to full CIE diagram' almost uses the data present on the sensor, possibly including the imaginary colors.\n'Camera XYZ matrix' - uses the matrix directly derived from Color Matrix.\n'Medium sampling' (default) - near Pointer's gamut: corresponds substantially to the most common cases of human vision.\nThe other choice 'Low sampling and Ignore camera settings' allow you to isolate high gamut parts of the image and forces the algorithm in some cases (tint > 0.8,...) to ignore camera settings. This will obviously have an impact on the result.\n\nThis sampling only has an influence on the channel multipliers, it has nothing to do with the "working profile" and does not modify the gamut of the image. +TP_WBALANCE_ITCWSAMPLING_TOOLTIP;Allows you to use the old sampling algorithm to ensure better compatibility with 5.9. You must enable Observer 10° (default). TP_WBALANCE_JUDGEIII;JudgeIII TP_WBALANCE_LABEL;White Balance TP_WBALANCE_LAMP_HEADER;Lamp @@ -4118,6 +4201,10 @@ TP_WBALANCE_MULLABEL;Multipliers: r=%1 g=%2 b=%3 TP_WBALANCE_MULLABEL_TOOLTIP;Values given for information purposes. You cannot change them. TP_WBALANCE_OBSERVER10;Observer 10° instead of Observer 2° TP_WBALANCE_OBSERVER10_TOOLTIP;The color management in Rawtherapee (White balance, channel multipliers, highlight recovery,...) uses the spectral data of the illuminants and colors. Observer is an important parameter of this management which takes into account the angle of perception of the eye. In 1931 it was fixed at 2° (privileges the use of the cones). In 1964 it was fixed at 10° (privileges the use of the cones, but partially takes into account the rods).\nTo avoid a (rare) drift of the colors due to the choice Observer 10° - probably due to the conversion matrix - Observer 2° must be selected.\nIn a majority of cases Observer 10° (default) will be a more relevant choice. +TP_WBALANCE_PATCHLABEL;Read colors:%1 Patch: Chroma:%2 Size=%3 +TP_WBALANCE_PATCHLABEL_TOOLTIP;Display number of read colors (max=237).\nDisplay calculated Patch Chroma.\nAWB temperature bias, lets try to reduce this value, a minimum may seem to optimize the algorithm.\n\nPatch size matching chroma optimization. +TP_WBALANCE_PATCHLEVELLABEL;Patch: ΔE=%1 - datas x 9 Min:%2 Max=%3 +TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP;Display ΔE patch (this assumes there is enough spectral data), between image and spectral datas.\n Display read datas found. The 2 values correspond to the minimum and maximum data values taken into account. The coefficient x9 must be taken into account to obtain the number of pixels concerned in the image. TP_WBALANCE_PICKER;Pick TP_WBALANCE_SHADE;Shade TP_WBALANCE_SIZE;Size: @@ -4126,10 +4213,12 @@ TP_WBALANCE_SOLUX41;Solux 4100K TP_WBALANCE_SOLUX47;Solux 4700K (vendor) TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery) TP_WBALANCE_SPOTWB;Use the pipette to pick the white balance from a neutral patch in the preview. -TP_WBALANCE_STUDLABEL;Correlation factor: %1 -TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good. +TP_WBALANCE_STUDLABEL;Correlation factor: %1 Passes:%2 Worst_alt=%3 +TP_WBALANCE_STUDLABEL0;Correlation factor: %1 Passes:%2 Alt=%3 +TP_WBALANCE_STUDLABEL1;Correlation factor: %1 Passes:%2 Best_alt=%3 +TP_WBALANCE_STUDLABEL_TOOLTIP;Display calculated Student correlation.\nLower values are better, where <0.005 is excellent,\n<0.01 is good, and >0.5 is poor.\nLow values do not mean that the white balance is good:\nif the illuminant is non-standard the results can be erratic.\nA value of 1000 means previous calculations are used and\nthe resultsare probably good.\n\nPasses : number of passes made.\nAlt_temp : Alternative temperature. TP_WBALANCE_TEMPBIAS;AWB temperature bias -TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'. +TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the 'auto white balance'\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by 'computedTemp + computedTemp * bias'.\n\nYou can use "Awb temperature bias" to adjust the "Temperature correlation" results. Each movement of this command brings a new calculation of temperature, tint and correlation. TP_WBALANCE_TEMPERATURE;Temperature TP_WBALANCE_TUNGSTEN;Tungsten TP_WBALANCE_WATER1;UnderWater 1 @@ -4142,3 +4231,5 @@ ZOOMPANEL_ZOOMFITCROPSCREEN;Fit crop to screen\nShortcut: f ZOOMPANEL_ZOOMFITSCREEN;Fit whole image to screen\nShortcut: Alt-f ZOOMPANEL_ZOOMIN;Zoom In\nShortcut: + ZOOMPANEL_ZOOMOUT;Zoom Out\nShortcut: - +//TP_WBALANCE_ITCWBNOPURPLE_TOOLTIP;By default when "Inpaint opposed" is activated, purple colors are not taken into account. However, if the image does not need highlight reconstruction, or if this image naturally contains purple tints (flowers, etc.), it may be necessary to deactivate, to take into account all the colors. +//TP_WBALANCE_ITCWB_FORCED;Forces use of the entire CIE diagram diff --git a/rtdata/themes/RawTherapee - Legacy-GTK3-20_.css b/rtdata/themes/RawTherapee - Legacy-GTK3-20_.css index 07a0bd65d..ba62fd366 100644 --- a/rtdata/themes/RawTherapee - Legacy-GTK3-20_.css +++ b/rtdata/themes/RawTherapee - Legacy-GTK3-20_.css @@ -227,6 +227,8 @@ menu separator { } #PlacesPaned .view.separator { + min-height: 0.16666666666666666em; + color: #363636; } #MetaPanelNotebook separator { diff --git a/rtdata/themes/RawTherapee-GTK3-20_.css b/rtdata/themes/RawTherapee-GTK3-20_.css index 2e314510a..b69e543d1 100644 --- a/rtdata/themes/RawTherapee-GTK3-20_.css +++ b/rtdata/themes/RawTherapee-GTK3-20_.css @@ -44,7 +44,7 @@ textview.view, treeview.view { padding: 0; margin: 0; } -.view, .textview, textview, textview.view { +.view, .textview, textview, textview.view, treeview > entry { background-color: #262626; } /* The headers of these panels */ @@ -207,6 +207,8 @@ menu separator { } #PlacesPaned .view.separator { + min-height: 0.16666666666666666em; + color: #363636; } #MetaPanelNotebook separator { diff --git a/rtdata/themes/TooWaBlue-GTK3-20_.css b/rtdata/themes/TooWaBlue-GTK3-20_.css index ba25e70b7..4d7504dc5 100644 --- a/rtdata/themes/TooWaBlue-GTK3-20_.css +++ b/rtdata/themes/TooWaBlue-GTK3-20_.css @@ -946,7 +946,7 @@ dialog notebook stack { } -/* Adds a line on top of the notebook as a separtor for the titlebar (only on CSD) */ +/* Adds a line on top of the notebook as a separator for the titlebar (only on CSD) */ dialog.csd #PrefNotebook > header, dialog.csd #AboutNotebook > header, window.csd:not(.fullscreen) #MainNotebook > header.top { diff --git a/rtdata/themes/size - Legacy.css b/rtdata/themes/size - Legacy.css index 089a909ee..290b95d8c 100644 --- a/rtdata/themes/size - Legacy.css +++ b/rtdata/themes/size - Legacy.css @@ -102,7 +102,7 @@ notebook > header.left > tabs > arrow { } -/* Adds a line on top of the notebook as a separtor for the titlebar (only on CSD) */ +/* Adds a line on top of the notebook as a separator for the titlebar (only on CSD) */ dialog.csd #PrefNotebook > header, dialog.csd #AboutNotebook > header, window.csd:not(.fullscreen) #MainNotebook > header.top { diff --git a/rtdata/themes/size.css b/rtdata/themes/size.css index 675ed51c2..5f5e64120 100644 --- a/rtdata/themes/size.css +++ b/rtdata/themes/size.css @@ -102,7 +102,7 @@ notebook > header.left > tabs > arrow { } -/* Adds a line on top of the notebook as a separtor for the titlebar (only on CSD) */ +/* Adds a line on top of the notebook as a separator for the titlebar (only on CSD) */ dialog.csd #PrefNotebook > header, dialog.csd #AboutNotebook > header, window.csd:not(.fullscreen) #MainNotebook > header.top { diff --git a/rtengine/CA_correct_RT.cc b/rtengine/CA_correct_RT.cc index c17826623..5352f19c5 100644 --- a/rtengine/CA_correct_RT.cc +++ b/rtengine/CA_correct_RT.cc @@ -123,6 +123,7 @@ float* RawImageSource::CA_correct_RT( double cared, double cablue, bool avoidColourshift, + int border_crop, array2D &rawData, double* fitParamsTransfer, bool fitParamsIn, @@ -145,7 +146,7 @@ float* RawImageSource::CA_correct_RT( const unsigned int cfa[2][2] = {{FC(0,0), FC(0,1)}, {FC(1,0), FC(1,1)}}; constexpr int ts = 128; constexpr int tsh = ts / 2; - constexpr int cb = 2; // 2 pixels border will be excluded from correction + const int cb = border_crop; //shifts to location of vertical and diagonal neighbours constexpr int v1 = ts, v2 = 2 * ts, v3 = 3 * ts, v4 = 4 * ts; //, p1=-ts+1, p2=-2*ts+2, p3=-3*ts+3, m1=ts+1, m2=2*ts+2, m3=3*ts+3; diff --git a/rtengine/CMakeLists.txt b/rtengine/CMakeLists.txt index 58c45f39b..5a9b2d953 100644 --- a/rtengine/CMakeLists.txt +++ b/rtengine/CMakeLists.txt @@ -42,8 +42,11 @@ if(NOT WITH_SYSTEM_KLT) else() include_directories("${KLT_INCLUDE_DIRS}") endif() +if(EXIV2_INCLUDE_DIRS) + include_directories("${EXIV2_INCLUDE_DIRS}") +endif() -link_directories("${PROJECT_SOURCE_DIR}/rtexif" +link_directories( "${EXPAT_LIBRARY_DIRS}" "${EXTRA_LIBDIR}" "${FFTW3F_LIBRARY_DIRS}" @@ -143,6 +146,7 @@ set(RTENGINESOURCEFILES lcp.cc lmmse_demosaic.cc loadinitial.cc + metadata.cc munselllch.cc myfile.cc panasonic_decoders.cc @@ -223,7 +227,7 @@ endif() set_target_properties(rtengine PROPERTIES COMPILE_FLAGS "${RTENGINE_CXX_FLAGS}") -target_link_libraries(rtengine rtexif +target_link_libraries(rtengine ${EXPAT_LIBRARIES} ${EXTRA_LIB} ${FFTW3F_LIBRARIES} @@ -240,7 +244,8 @@ target_link_libraries(rtengine rtexif ${LENSFUN_LIBRARIES} ${RSVG_LIBRARIES} ${KLT_LIBRARIES} -) + ${EXIV2_LIBRARIES} + ) if(OpenMP_FOUND) target_link_libraries(rtengine ${OpenMP_CXX_LIBRARIES}) diff --git a/rtengine/ashift_dt.c b/rtengine/ashift_dt.c index 6ea96a752..4aa7d815c 100644 --- a/rtengine/ashift_dt.c +++ b/rtengine/ashift_dt.c @@ -103,6 +103,9 @@ using namespace std; //----------------------------------------------------------------------------- // RT: BEGIN COMMENT +#ifdef near +# undef near +#endif #if 0 DT_MODULE_INTROSPECTION(4, dt_iop_ashift_params_t) diff --git a/rtengine/cJSON.c b/rtengine/cJSON.c index 130c8e2a5..5af587eeb 100644 --- a/rtengine/cJSON.c +++ b/rtengine/cJSON.c @@ -126,7 +126,7 @@ typedef struct internal_hooks } internal_hooks; #if defined(_MSC_VER) -/* work around MSVC error C2322: '...' address of dillimport '...' is not static */ +/* work around MSVC error C2322: '...' address of dllimport '...' is not static */ static void *internal_malloc(size_t size) { return malloc(size); diff --git a/rtengine/calc_distort.cc b/rtengine/calc_distort.cc index 3a7a4a1c4..8f241d0c5 100644 --- a/rtengine/calc_distort.cc +++ b/rtengine/calc_distort.cc @@ -84,7 +84,7 @@ int calcDistortion(unsigned char* img1, unsigned char* img2, int ncols, int nrow r0[n] = sqrt((x0 - wc) * (x0 - wc) + (y0 - hc) * (y0 - hc)) / radius; - // dots too close to the center tends to have big diviation and create noise, extract them + // dots too close to the center tends to have big deviation and create noise, extract them if (r0[n] < CENTER_R) { continue; } diff --git a/rtengine/camconst.json b/rtengine/camconst.json index c4bf9b14a..998ddff19 100644 --- a/rtengine/camconst.json +++ b/rtengine/camconst.json @@ -586,7 +586,10 @@ Camera constants: "make_model": "Canon EOS RP", "dcraw_matrix": [ 8608,-2097,-1178,-5425,13265,2383,-1149,2238,5680 ], // DNG v13.2 // Let dcraw handle crop, because camconst shouldn't override for different crop factors. See #6255 - "masked_areas": [ 44, 4, 4220, 116 ], // Potential problem for different crop factor as well + "masked_areas": [ + {"frame": [0, 0], "areas": [ 44, 4, 4220, 116 ]}, + {"frame": [4032, 2656], "areas": [ 44, 4, 2652, 108 ]} + ], "ranges": { "white": [ { "iso": [ 50, 100, 125, 200, 250, 400, 500, 800, 1000, 1600, 2000, 3200 ], "levels": 16300 }, // typical 16383 @@ -647,6 +650,7 @@ Camera constants: "make_model": "Canon EOS 7D Mark II", "dcraw_matrix": [ 7268,-1082,-969,-4186,11839,2663,-825,2029,5839 ], // dng_v8.7 d65 //"dcraw_matrix": [ 6285,-147,-821,-4080,11695,2714,-1045,2459,5497 ], // DXO D50 + "raw_crop": [ 72, 38, 5496, 3669 ], "ranges": { "white": [ { "iso": [ 100, 125 ], "levels": 13500 }, // typical 13583 - LENR 13550 @@ -1216,11 +1220,22 @@ Camera constants: "raw_crop": [ 144, 72, 6984, 4660 ] }, - { // Quality B, samples by jonathanBieler (#5922). No dual-pixel information. + { // Quality C, only masked area. Raw crop from metadata ok. + "make_model": ["Canon EOS M50", "Canon EOS M50m2", "Canon EOS M100"], + "masked_areas": [36, 4, 4052, 260] + }, + + { // Quality B, samples by jonathanBieler (#5922). No dual-pixel information for full frame. "make_model": [ "Canon EOS R" ], "dcraw_matrix" : [ 8293, -1789, -1094, -5025, 12925, 2327, -1199, 2769, 6108 ], // DNG v2 style - "raw_crop": [ 144, 46, 6744, 4500 ], - "masked_areas": [ 50, 40, 4540, 140 ], // Taken from ART + "raw_crop": [ + {"frame": [0, 0], "crop": [ 144, 46, 6744, 4500 ]}, + {"frame": [4352, 2850], "crop": [ 144, 46, 4208, 2804 ]} + ], + "masked_areas": [ + {"frame": [0, 0], "areas": [ 50, 40, 4540, 140 ]}, // Taken from ART + {"frame": [4352, 2850], "areas": [ 50, 40, 2846, 140 ]} + ], "ranges" : { "white" : 16367 } // Typically 16383 without LENR, with LENR safest value is 15800 for ISO 25600 }, @@ -1230,7 +1245,7 @@ Camera constants: "raw_crop": [ 160, 120, 6024, 4024 ] }, - { // Quality C + { // Quality A "make_model": "Canon EOS R5", "dcraw_matrix" : [9766, -2953, -1254, -4276, 12116, 2433, -437, 1336, 5131], "raw_crop" : [ @@ -1241,7 +1256,7 @@ Camera constants: { "frame" : [ 8352, 5586 ], "areas": [ 94, 20, 5578, 122 ] }, { "frame" : [ 5248, 3510 ], "areas": [ 94, 20, 3510, 122 ] } ], - "ranges" : { "white" : 16382 } + "ranges" : { "white" : 16300 } // 16382 without LENR, add margin for LENR. Dual-pixel frame 2 is lower for low ISOs. }, { // Quality C @@ -1755,7 +1770,7 @@ Camera constants: { // Quality B, lacks aperture and ISO scaling, known to exist, but little to gain as the levels are so close to white_max "make_model": "Nikon D7000", "dcraw_matrix": [ 7530,-1942,-255,-4318,11390,3362,-926,1694,7649 ], // matrix provided by Tanveer(tsk1979) - //"dcraw_matrix": [ 8198, -2239, -725, -4871, 12388, 2798, -1043, 2050, 7181 ], // DNG v13.2 + // "dcraw_matrix": [ 8198, -2239, -725, -4871, 12388, 2798, -1043, 2050, 7181 ], // DNG v13.2 "ranges": { // measured at ISO 100. ISO differences not measured, but known to exist "white": [ 16300, 15700, 16300 ], // typical R 16383, G 15778, B 16383 @@ -2134,7 +2149,7 @@ Camera constants: { // Quality C "make_model": "OLYMPUS E-M10MarkIV", "dcraw_matrix": [ 9476, -3182, -765, -2613, 10958, 1893, -449, 1315, 5268 ], - "range": { "white": 4000, "black": 254 } + "ranges": { "white": 4000 } }, { // Quality A, white level correction @@ -2201,10 +2216,21 @@ Camera constants: ] }, + { // Quality X + "make_model": ["OM Digital Solutions OM-5"], + "dcraw_matrix": [ 11896, -5110, -1076, -3181, 11378, 2048, -519, 1224, 5166 ], // ColorMatrix2 using illuminant D65 from Adobe DNG Converter 15.0 + "ranges": { "white": 3825 }, + "raw_crop" : [ + { "frame" : [8200, 6132], "crop": [0, 0, 8172, 6132] }, + { "frame" : [5240, 3912], "crop": [0, 0, 5240, 3912] }, + { "frame" : [10400, 7792], "crop": [0, 0, 10390, 7792] } + ] + }, + { // Quality B "make_model": [ "Panasonic DC-LX100M2" ], - "dcraw_matrix": [ 11577, -4230, -1106, -3967, 12211, 1957, -759, 1762, 5610 ], // DNG v13.2 - //"dcraw_matrix": [ 8585, -3127, -833, -4005, 12250, 1953, -650, 1494, 4862 ], // DNG v13.2 alternate + //"dcraw_matrix": [ 11577, -4230, -1106, -3967, 12211, 1957, -759, 1762, 5610 ], // DNG v13.2 + "dcraw_matrix": [ 8585, -3127, -833, -4005, 12250, 1953, -650, 1494, 4862 ], // DNG v13.2 alternate "raw_crop": [ 0, 0, 0, 0 ], "ranges": { "black": 15 } }, @@ -2993,8 +3019,8 @@ Camera constants: "dcraw_matrix": [ 6629,-1900,-483,-4618,12349,2550,-622,1381,6514 ], // DNG_v9.1.1 D65 "raw_crop": [ 0, 0, -36, 0 ], // full raw frame 8000x5320 - 36 rightmost columns are garbage "ranges": { "black": 512, "white": 16300 }, - // PDAF info provided by Horshack with the rawshack tool (http://testcams.com/rawshack/) - "pdaf_pattern" : [ 0,24,36,60,84,120,132,156,192,204,240,252,276,300,324,360,372,396,420 ], + // PDAF lines pattern detected from image provided by elite4jonny at https://github.com/Beep6581/RawTherapee/issues/6801. + "pdaf_pattern" : [ 0,24,36,60,84,120,132,156,192,204,240,252,276,300,324,360,372,396,420,444,480,492,504,540,564,576,612,636,660,696,720,732,756,780,804,840 ], "pdaf_offset" : 31 }, @@ -3029,7 +3055,8 @@ Camera constants: { // Quality C "make_model": "Sony ILCE-7M4", - "dcraw_matrix": [ 7460, -2365, -588, -5687, 13442, 2474, -624, 1156, 6584 ] // ColorMatrix2 using illuminant D65 from Adobe DNG Converter 14.2 + "dcraw_matrix": [ 7460, -2365, -588, -5687, 13442, 2474, -624, 1156, 6584 ], // ColorMatrix2 using illuminant D65 from Adobe DNG Converter 14.2 + "raw_crop": [ 0, 0, -10, 0 ] }, { // Quality C, diff --git a/rtengine/clutstore.cc b/rtengine/clutstore.cc index 4c70ad951..e3bd9c988 100644 --- a/rtengine/clutstore.cc +++ b/rtengine/clutstore.cc @@ -57,7 +57,7 @@ bool loadFile( rtengine::procparams::ColorManagementParams icm; icm.workingProfile = working_color_space; - img_src.getImage(curr_wb, TR_NONE, img_float.get(), pp, rtengine::procparams::ToneCurveParams(), rtengine::procparams::RAWParams(), 0); + img_src.getImage(curr_wb, TR_NONE, img_float.get(), pp, rtengine::procparams::ToneCurveParams(), rtengine::procparams::RAWParams()); if (!working_color_space.empty()) { img_src.convertColorSpace(img_float.get(), icm, curr_wb); diff --git a/rtengine/color.cc b/rtengine/color.cc index 085fd41ce..4e139a868 100644 --- a/rtengine/color.cc +++ b/rtengine/color.cc @@ -2895,7 +2895,7 @@ void Color::SkinSat (float lum, float hue, float chrom, float &satreduc) * * data (Munsell ==> Lab) obtained with WallKillcolor and http://www.cis.rit.edu/research/mcsl2/online/munsell.php * each LUT give Hue in function of C, for each color Munsell and Luminance - * eg: _6PB20 : color Munsell 6PB for L=20 c=5 c=45 c=85 c=125..139 when possible: interpolation betwwen values + * eg: _6PB20 : color Munsell 6PB for L=20 c=5 c=45 c=85 c=125..139 when possible: interpolation between values * no value for C<5 (gray) * low memory footprint -- maximum: 195 LUTf * 140 values * errors due to small number of samples in LUT and linearization are very low (1 to 2%) diff --git a/rtengine/colortemp.cc b/rtengine/colortemp.cc index 756fdf906..1c98b3e8b 100644 --- a/rtengine/colortemp.cc +++ b/rtengine/colortemp.cc @@ -71,127 +71,127 @@ static const color_match_type cie_colour_match_jd2 = {//350nm to 830nm 5 nm J. static const color_match_type cie_colour_match_jd = {//350nm to 830nm 5 nm J.Desmis 10° Standard Observer. -{0.000000000000, 0.000000000000, 0.000000000000}, -{0.000000000000, 0.000000000000, 0.000000000000}, -{0.000000122200, 0.000000013398, 0.000000535027}, -{0.000000919270, 0.000000100650, 0.000004028300}, -{0.000005958600, 0.000000651100, 0.000026143700}, -{0.000033266000, 0.000003625000, 0.000146220000}, -{0.000159952000, 0.000017364000, 0.000704776000}, -{0.000662440000, 0.000071560000, 0.002927800000}, -{0.002361600000, 0.000253400000, 0.010482200000}, -{0.007242300000, 0.000768500000, 0.032344000000}, -{0.019109700000, 0.002004400000, 0.086010900000}, -{0.043400000000, 0.004509000000, 0.197120000000}, -{0.084736000000, 0.008756000000, 0.389366000000}, -{0.140638000000, 0.014456000000, 0.656760000000}, -{0.204492000000, 0.021391000000, 0.972542000000}, -{0.264737000000, 0.029497000000, 1.282500000000}, -{0.314679000000, 0.038676000000, 1.553480000000}, -{0.357719000000, 0.049602000000, 1.798500000000}, -{0.383734000000, 0.062077000000, 1.967280000000}, -{0.386726000000, 0.074704000000, 2.027300000000}, -{0.370702000000, 0.089456000000, 1.994800000000}, -{0.342957000000, 0.106256000000, 1.900700000000}, -{0.302273000000, 0.128201000000, 1.745370000000}, -{0.254085000000, 0.152761000000, 1.554900000000}, -{0.195618000000, 0.185190000000, 1.317560000000}, -{0.132349000000, 0.219940000000, 1.030200000000}, -{0.080507000000, 0.253589000000, 0.772125000000}, -{0.041072000000, 0.297665000000, 0.570060000000}, -{0.016172000000, 0.339133000000, 0.415254000000}, -{0.005132000000, 0.395379000000, 0.302356000000}, -{0.003816000000, 0.460777000000, 0.218502000000}, -{0.015444000000, 0.531360000000, 0.159249000000}, -{0.037465000000, 0.606741000000, 0.112044000000}, -{0.071358000000, 0.685660000000, 0.082248000000}, -{0.117749000000, 0.761757000000, 0.060709000000}, -{0.172953000000, 0.823330000000, 0.043050000000}, -{0.236491000000, 0.875211000000, 0.030451000000}, -{0.304213000000, 0.923810000000, 0.020584000000}, -{0.376772000000, 0.961988000000, 0.013676000000}, -{0.451584000000, 0.982200000000, 0.007918000000}, -{0.529826000000, 0.991761000000, 0.003988000000}, -{0.616053000000, 0.999110000000, 0.001091000000}, -{0.793832000000, 0.982380000000, 0.000000000000}, -{0.878655000000, 0.955552000000, 0.000000000000}, -{0.951162000000, 0.915175000000, 0.000000000000}, -{1.014160000000, 0.868934000000, 0.000000000000}, -{1.074300000000, 0.825623000000, 0.000000000000}, -{1.118520000000, 0.777405000000, 0.000000000000}, -{1.134300000000, 0.720353000000, 0.000000000000}, -{1.123990000000, 0.658341000000, 0.000000000000}, -{1.089100000000, 0.593878000000, 0.000000000000}, -{1.030480000000, 0.527963000000, 0.000000000000}, -{0.950740000000, 0.461834000000, 0.000000000000}, -{0.856297000000, 0.398057000000, 0.000000000000}, -{0.754930000000, 0.339554000000, 0.000000000000}, -{0.647467000000, 0.283493000000, 0.000000000000}, -{0.535110000000, 0.228254000000, 0.000000000000}, -{0.431567000000, 0.179828000000, 0.000000000000}, -{0.343690000000, 0.140211000000, 0.000000000000}, -{0.268329000000, 0.107633000000, 0.000000000000}, -{0.204300000000, 0.081187000000, 0.000000000000}, -{0.152568000000, 0.060281000000, 0.000000000000}, -{0.112210000000, 0.044096000000, 0.000000000000}, -{0.081260600000, 0.031800400000, 0.000000000000}, -{0.057930000000, 0.022601700000, 0.000000000000}, -{0.040850800000, 0.015905100000, 0.000000000000}, -{0.028623000000, 0.011130300000, 0.000000000000}, -{0.019941300000, 0.007748800000, 0.000000000000}, -{0.013842000000, 0.005375100000, 0.000000000000}, -{0.009576880000, 0.003717740000, 0.000000000000}, -{0.006605200000, 0.002564560000, 0.000000000000}, -{0.004552630000, 0.001768470000, 0.000000000000}, -{0.003144700000, 0.001222390000, 0.000000000000}, -{0.002174960000, 0.000846190000, 0.000000000000}, -{0.001505700000, 0.000586440000, 0.000000000000}, -{0.001044760000, 0.000407410000, 0.000000000000}, -{0.000727450000, 0.000284041000, 0.000000000000}, -{0.000508258000, 0.000198730000, 0.000000000000}, -{0.000356380000, 0.000139550000, 0.000000000000}, -{0.000250969000, 0.000098428000, 0.000000000000}, -{0.000177730000, 0.000069819000, 0.000000000000}, -{0.000126390000, 0.000049737000, 0.000000000000}, -{0.000090151000, 0.000035540500, 0.000000000000}, -{0.000064525800, 0.000025486000, 0.000000000000}, -{0.000046339000, 0.000018338400, 0.000000000000}, -{0.000033411700, 0.000013249000, 0.000000000000}, -{0.000024209000, 0.000009619600, 0.000000000000}, -{0.000017611500, 0.000007012800, 0.000000000000}, -{0.000012855000, 0.000005129800, 0.000000000000}, -{0.000009413630, 0.000003764730, 0.000000000000}, -{0.000006913000, 0.000002770810, 0.000000000000}, -{0.000005093470, 0.000002046130, 0.000000000000}, -{0.000003767100, 0.000001516770, 0.000000000000}, -{0.000002795310, 0.000001128090, 0.000000000000}, -{0.000002082000, 0.000000842160, 0.000000000000}, -{0.000001553140, 0.000000629700, 0.000000000000} + {0.000000000000, 0.000000000000, 0.000000000000}, + {0.000000000000, 0.000000000000, 0.000000000000}, + {0.000000122200, 0.000000013398, 0.000000535027}, + {0.000000919270, 0.000000100650, 0.000004028300}, + {0.000005958600, 0.000000651100, 0.000026143700}, + {0.000033266000, 0.000003625000, 0.000146220000}, + {0.000159952000, 0.000017364000, 0.000704776000}, + {0.000662440000, 0.000071560000, 0.002927800000}, + {0.002361600000, 0.000253400000, 0.010482200000}, + {0.007242300000, 0.000768500000, 0.032344000000}, + {0.019109700000, 0.002004400000, 0.086010900000}, + {0.043400000000, 0.004509000000, 0.197120000000}, + {0.084736000000, 0.008756000000, 0.389366000000}, + {0.140638000000, 0.014456000000, 0.656760000000}, + {0.204492000000, 0.021391000000, 0.972542000000}, + {0.264737000000, 0.029497000000, 1.282500000000}, + {0.314679000000, 0.038676000000, 1.553480000000}, + {0.357719000000, 0.049602000000, 1.798500000000}, + {0.383734000000, 0.062077000000, 1.967280000000}, + {0.386726000000, 0.074704000000, 2.027300000000}, + {0.370702000000, 0.089456000000, 1.994800000000}, + {0.342957000000, 0.106256000000, 1.900700000000}, + {0.302273000000, 0.128201000000, 1.745370000000}, + {0.254085000000, 0.152761000000, 1.554900000000}, + {0.195618000000, 0.185190000000, 1.317560000000}, + {0.132349000000, 0.219940000000, 1.030200000000}, + {0.080507000000, 0.253589000000, 0.772125000000}, + {0.041072000000, 0.297665000000, 0.570060000000}, + {0.016172000000, 0.339133000000, 0.415254000000}, + {0.005132000000, 0.395379000000, 0.302356000000}, + {0.003816000000, 0.460777000000, 0.218502000000}, + {0.015444000000, 0.531360000000, 0.159249000000}, + {0.037465000000, 0.606741000000, 0.112044000000}, + {0.071358000000, 0.685660000000, 0.082248000000}, + {0.117749000000, 0.761757000000, 0.060709000000}, + {0.172953000000, 0.823330000000, 0.043050000000}, + {0.236491000000, 0.875211000000, 0.030451000000}, + {0.304213000000, 0.923810000000, 0.020584000000}, + {0.376772000000, 0.961988000000, 0.013676000000}, + {0.451584000000, 0.982200000000, 0.007918000000}, + {0.529826000000, 0.991761000000, 0.003988000000}, + {0.616053000000, 0.999110000000, 0.001091000000}, + {0.793832000000, 0.982380000000, 0.000000000000}, + {0.878655000000, 0.955552000000, 0.000000000000}, + {0.951162000000, 0.915175000000, 0.000000000000}, + {1.014160000000, 0.868934000000, 0.000000000000}, + {1.074300000000, 0.825623000000, 0.000000000000}, + {1.118520000000, 0.777405000000, 0.000000000000}, + {1.134300000000, 0.720353000000, 0.000000000000}, + {1.123990000000, 0.658341000000, 0.000000000000}, + {1.089100000000, 0.593878000000, 0.000000000000}, + {1.030480000000, 0.527963000000, 0.000000000000}, + {0.950740000000, 0.461834000000, 0.000000000000}, + {0.856297000000, 0.398057000000, 0.000000000000}, + {0.754930000000, 0.339554000000, 0.000000000000}, + {0.647467000000, 0.283493000000, 0.000000000000}, + {0.535110000000, 0.228254000000, 0.000000000000}, + {0.431567000000, 0.179828000000, 0.000000000000}, + {0.343690000000, 0.140211000000, 0.000000000000}, + {0.268329000000, 0.107633000000, 0.000000000000}, + {0.204300000000, 0.081187000000, 0.000000000000}, + {0.152568000000, 0.060281000000, 0.000000000000}, + {0.112210000000, 0.044096000000, 0.000000000000}, + {0.081260600000, 0.031800400000, 0.000000000000}, + {0.057930000000, 0.022601700000, 0.000000000000}, + {0.040850800000, 0.015905100000, 0.000000000000}, + {0.028623000000, 0.011130300000, 0.000000000000}, + {0.019941300000, 0.007748800000, 0.000000000000}, + {0.013842000000, 0.005375100000, 0.000000000000}, + {0.009576880000, 0.003717740000, 0.000000000000}, + {0.006605200000, 0.002564560000, 0.000000000000}, + {0.004552630000, 0.001768470000, 0.000000000000}, + {0.003144700000, 0.001222390000, 0.000000000000}, + {0.002174960000, 0.000846190000, 0.000000000000}, + {0.001505700000, 0.000586440000, 0.000000000000}, + {0.001044760000, 0.000407410000, 0.000000000000}, + {0.000727450000, 0.000284041000, 0.000000000000}, + {0.000508258000, 0.000198730000, 0.000000000000}, + {0.000356380000, 0.000139550000, 0.000000000000}, + {0.000250969000, 0.000098428000, 0.000000000000}, + {0.000177730000, 0.000069819000, 0.000000000000}, + {0.000126390000, 0.000049737000, 0.000000000000}, + {0.000090151000, 0.000035540500, 0.000000000000}, + {0.000064525800, 0.000025486000, 0.000000000000}, + {0.000046339000, 0.000018338400, 0.000000000000}, + {0.000033411700, 0.000013249000, 0.000000000000}, + {0.000024209000, 0.000009619600, 0.000000000000}, + {0.000017611500, 0.000007012800, 0.000000000000}, + {0.000012855000, 0.000005129800, 0.000000000000}, + {0.000009413630, 0.000003764730, 0.000000000000}, + {0.000006913000, 0.000002770810, 0.000000000000}, + {0.000005093470, 0.000002046130, 0.000000000000}, + {0.000003767100, 0.000001516770, 0.000000000000}, + {0.000002795310, 0.000001128090, 0.000000000000}, + {0.000002082000, 0.000000842160, 0.000000000000}, + {0.000001553140, 0.000000629700, 0.000000000000} }; -ColorTemp::ColorTemp (double t, double g, double e, const std::string &m, StandardObserver o) : temp(t), green(g), equal(e), method(m), observer(o) +ColorTemp::ColorTemp(double t, double g, double e, const std::string &m, StandardObserver o) : temp(t), green(g), equal(e), method(m), observer(o) { - clip (temp, green, equal); + clip(temp, green, equal); } -void ColorTemp::clip (double &temp, double &green) +void ColorTemp::clip(double &temp, double &green) { temp = rtengine::LIM(temp, MINTEMP, MAXTEMP); green = rtengine::LIM(green, MINGREEN, MAXGREEN); } -void ColorTemp::clip (double &temp, double &green, double &equal) +void ColorTemp::clip(double &temp, double &green, double &equal) { temp = rtengine::LIM(temp, MINTEMP, MAXTEMP); green = rtengine::LIM(green, MINGREEN, MAXGREEN); equal = rtengine::LIM(equal, MINEQUAL, MAXEQUAL); } -ColorTemp::ColorTemp (double mulr, double mulg, double mulb, double e, StandardObserver observer) : equal(e), method("Custom"), observer(observer) +ColorTemp::ColorTemp(double mulr, double mulg, double mulb, double e, StandardObserver observer) : equal(e), method("Custom"), observer(observer) { - mul2temp (mulr, mulg, mulb, equal, observer, temp, green); + mul2temp(mulr, mulg, mulb, equal, observer, temp, green); } ColorTemp ColorTemp::convertObserver(StandardObserver observer) const @@ -199,6 +199,7 @@ ColorTemp ColorTemp::convertObserver(StandardObserver observer) const if (observer == this->observer) { return *this; } + double r; double g; double b; @@ -206,7 +207,7 @@ ColorTemp ColorTemp::convertObserver(StandardObserver observer) const return ColorTemp(r, g, b, equal, observer); } -void ColorTemp::mul2temp (const double rmul, const double gmul, const double bmul, const double equal, StandardObserver observer, double& temp, double& green) const +void ColorTemp::mul2temp(const double rmul, const double gmul, const double bmul, const double equal, StandardObserver observer, double& temp, double& green) const { double maxtemp = MAXTEMP, mintemp = MINTEMP; @@ -214,7 +215,7 @@ void ColorTemp::mul2temp (const double rmul, const double gmul, const double bmu temp = (maxtemp + mintemp) / 2; while (maxtemp - mintemp > 1) { - temp2mul (temp, 1.0, equal, observer, tmpr, tmpg, tmpb); + temp2mul(temp, 1.0, equal, observer, tmpr, tmpg, tmpb); if (tmpb / tmpr > bmul / rmul) { maxtemp = temp; @@ -226,7 +227,7 @@ void ColorTemp::mul2temp (const double rmul, const double gmul, const double bmu } green = (tmpg / tmpr) / (gmul / rmul); - clip (temp, green); + clip(temp, green); } @@ -441,41 +442,40 @@ const double ColorTemp::Flash6500_spect[97] = { 55.72, 51.97, 54.72, 57.46, 58.89, 60.33 }; -const std::map ColorTemp::spectMap = { - {"Daylight", Daylight5300_spect}, - {"Cloudy", Cloudy6200_spect}, - {"Shade", Shade7600_spect}, - {"Tungsten", A2856_spect}, - {"Fluo F1", FluoF1_spect}, - {"Fluo F2", FluoF2_spect}, - {"Fluo F3", FluoF3_spect}, - {"Fluo F4", FluoF4_spect}, - {"Fluo F5", FluoF5_spect}, - {"Fluo F6", FluoF6_spect}, - {"Fluo F7", FluoF7_spect}, - {"Fluo F8", FluoF8_spect}, - {"Fluo F9", FluoF9_spect}, - {"Fluo F10", FluoF10_spect}, - {"Fluo F11", FluoF11_spect}, - {"Fluo F12", FluoF12_spect}, - {"HMI Lamp", HMI_spect}, - {"GTI Lamp", GTI_spect}, - {"JudgeIII Lamp", JudgeIII_spect}, - {"Solux Lamp 3500K", Solux3500_spect}, - {"Solux Lamp 4100K", Solux4100_spect}, - {"Solux Lamp 4700K", Solux4700_spect}, - {"NG Solux Lamp 4700K", NG_Solux4700_spect}, - {"LED LSI Lumelex 2040", NG_LEDLSI2040_spect}, - {"LED CRS SP12 WWMR16", NG_CRSSP12WWMR16_spect}, - {"Flash 5500K", Flash5500_spect}, - {"Flash 6000K", Flash6000_spect}, - {"Flash 6500K", Flash6500_spect} - }; +const std::map ColorTemp::spectMap = { + {"Daylight", Daylight5300_spect}, + {"Cloudy", Cloudy6200_spect}, + {"Shade", Shade7600_spect}, + {"Tungsten", A2856_spect}, + {"Fluo F1", FluoF1_spect}, + {"Fluo F2", FluoF2_spect}, + {"Fluo F3", FluoF3_spect}, + {"Fluo F4", FluoF4_spect}, + {"Fluo F5", FluoF5_spect}, + {"Fluo F6", FluoF6_spect}, + {"Fluo F7", FluoF7_spect}, + {"Fluo F8", FluoF8_spect}, + {"Fluo F9", FluoF9_spect}, + {"Fluo F10", FluoF10_spect}, + {"Fluo F11", FluoF11_spect}, + {"Fluo F12", FluoF12_spect}, + {"HMI Lamp", HMI_spect}, + {"GTI Lamp", GTI_spect}, + {"JudgeIII Lamp", JudgeIII_spect}, + {"Solux Lamp 3500K", Solux3500_spect}, + {"Solux Lamp 4100K", Solux4100_spect}, + {"Solux Lamp 4700K", Solux4700_spect}, + {"NG Solux Lamp 4700K", NG_Solux4700_spect}, + {"LED LSI Lumelex 2040", NG_LEDLSI2040_spect}, + {"LED CRS SP12 WWMR16", NG_CRSSP12WWMR16_spect}, + {"Flash 5500K", Flash5500_spect}, + {"Flash 6000K", Flash6000_spect}, + {"Flash 6500K", Flash6500_spect} +}; // Data for Color ==> CRI (Color Rendering Index and Palette // actually 20 color that must be good enough for CRI -// I think 40 color for palette (Skin, Sky, gray) //spectral data Colorchecker24 : Red C3 const double ColorTemp::ColorchechredC3_spect[97] = { @@ -517,7 +517,7 @@ const double ColorTemp::ColorGreenM25_spect[97] = { 0.1758, 0.1673, 0.1606, 0.1505, 0.1384, 0.1317, 0.1230, 0.1149, 0.1081, 0.0992, 0.0882, 0.0785, 0.0709, 0.0629, 0.0550, 0.0502, 0.0486, 0.0474, 0.0445, 0.0434, 0.0429, 0.0423, 0.0411, 0.0405, 0.0397, 0.0387, 0.0399, 0.0398, 0.0398, 0.0407, 0.0408, 0.0426, 0.0445, 0.0443, 0.0468, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//0 658 45 0 0 131 98 84 123 104 131 112 121 121 139 128 148 199 296 389 476 689 945 1132 1326 1490 1674 1741 1775 1868 1914 1928 1961 1972 1992 2045 2064 2053 2048 2072 2086 2081 2069 2056 2073 2096 2114 2067 2089 2100 2061 2019 1983 1971 1961 2016 1956 1946 1922 1983 1991 + const double ColorTemp::ColorYellowkeltano_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0658, 0.0045, 0.0, 0.0, 0.0131, 0.0098, 0.0084, 0.0123, 0.0104, 0.0131, 0.0112, 0.0121, 0.0121, 0.0139, @@ -535,8 +535,7 @@ const double ColorTemp::ColorGreenalsi_spect[97] = { 0.0424, 0.0417, 0.0389, 0.0380, 0.0378, 0.0371, 0.0350, 0.0333, 0.0350, 0.0394, 0.0379, 0.0446, 0.0491, 0.0575, 0.0734, 0.0953, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//1890 1097 855 899 987 881 807 804 787 691 643 549 465 404 385 302 244 195 165 159 123 129 108 111 114 126 126 134 162 170 213 248 279 351 412 566 752 909 1069 1270 1526 -//1707 1858 1999 2112 2293 2422 2471 2611 2718 2710 2778 2807 2825 2856 2909 2901 2974 3042 3044 3075 + const double ColorTemp::ColorRedpetunia_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1890, 0.1097, 0.0855, 0.0899, 0.0987, 0.0881, 0.0807, 0.0804, 0.0787, 0.0691, 0.0643, 0.0549, 0.0465, 0.0404, 0.0385, @@ -546,7 +545,6 @@ const double ColorTemp::ColorRedpetunia_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//0.1588 0.1980 0.2789 0.4585 0.6059 0.6609 0.6674 0.6599 0.6551 0.6472 0.6423 0.6485 0.6515 0.6379 0.6193 0.6121 0.6026 0.5678 0.5310 0.5245 0.5305 0.5324 0.5262 0.5219 0.5247 0.5312 0.5436 0.5634 0.5832 0.5943 0.5953 0.5902 0.5805 0.5754 0.5901 0.6262 const double ColorTemp::JDC468_B14_75Redspect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, @@ -567,8 +565,6 @@ const double ColorTemp::ColorRedkurttu_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#light red flower (lupiini) -//1792 1553 1684 1882 1909 1847 2053 2084 2045 2052 2039 2084 2041 2044 2007 1984 1906 1876 1886 1855 1859 1875 1816 1800 1811 1780 1802 1816 1838 1915 1973 2018 2083 2114 2133 2226 2304 2385 2458 2494 2571 2689 2738 2774 2734 2759 2781 2831 2844 2857 2878 2876 2884 2920 2932 2860 2894 2934 2925 2928 2921 const double ColorTemp::ColorRedlupiini_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1792, 0.1553, 0.1684, 0.1882, 0.1909, 0.1847, 0.2053, 0.2084, 0.2045, 0.2052, 0.2039, 0.2084, 0.2041, 0.2044, 0.2007, 0.1984, 0.1906, 0.1876, @@ -577,8 +573,6 @@ const double ColorTemp::ColorRedlupiini_spect[97] = { 0.2932, 0.2860, 0.2894, 0.2934, 0.2925, 0.2928, 0.2921, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#red flower (hevosminttu) -//1280 706 612 462 391 339 253 285 261 264 239 208 201 186 185 161 156 149 146 148 161 144 143 151 147 146 139 148 173 185 185 197 222 238 283 322 384 439 519 633 792 922 1061 1186 1235 1342 1538 1691 1839 1974 2024 2098 2128 2187 2204 2217 2267 2299 2339 2331 2322 const double ColorTemp::ColorRedhevosminttu_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1280, 0.0706, 0.0612, 0.0462, 0.0391, 0.0339, 0.0253, 0.0285, 0.0261, 0.0264, 0.0239, 0.0208, 0.0201, 0.0186, 0.0185, 0.0161, 0.0156, 0.0149, @@ -587,8 +581,6 @@ const double ColorTemp::ColorRedhevosminttu_spect[97] = { 0.2217, 0.2267, 0.2299, 0.2339, 0.2331, 0.2322, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#red flower (neilikka) -//0 0 394 0 245 95 174 149 194 171 181 175 172 167 147 137 107 108 100 87 93 87 83 77 80 67 72 64 83 84 88 90 91 94 114 133 178 241 309 419 612 823 992 1153 1222 1366 1503 1658 1767 1841 1884 1992 2035 2007 2009 2045 2065 2229 2290 2395 2449 const double ColorTemp::ColorRedneilikka_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0394, 0.0, 0.0245, 0.0095, 0.0174, 0.0149, 0.0194, 0.0171, 0.0181, 0.0175, 0.0172, 0.0167, 0.0147, 0.0137, 0.0107, 0.0108, 0.0100, @@ -598,8 +590,6 @@ const double ColorTemp::ColorRedneilikka_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#red petal (pelargonia) -//2529 2048 2087 2698 2452 2372 2531 2475 2296 2294 2159 2111 1986 1898 1854 1729 1586 1501 1392 1332 1343 1255 1217 1182 1183 1203 1230 1277 1381 1474 1615 1762 1876 2028 2214 2464 2657 2919 3051 3172 3293 3421 3395 3494 3438 3495 3506 3490 3454 3487 3431 3452 3484 3438 3422 3368 3325 3441 3356 3432 3320 const double ColorTemp::ColorRedpelagornia_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2529, 0.2048, 0.2087, 0.2698, 0.2452, 0.2372, 0.2531, 0.2475, 0.2296, 0.2294, 0.2159, 0.2111, 0.1986, 0.1898, 0.1854, 0.1729, 0.1586, 0.1501, 0.1392, 0.1332, 0.1343, @@ -608,8 +598,6 @@ const double ColorTemp::ColorRedpelagornia_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#red flower (talvio) -//3131 2199 2559 2540 2844 2530 2694 2765 2594 2673 2617 2629 2491 2384 2308 2256 2081 1973 1857 1752 1719 1652 1527 1477 1459 1386 1341 1283 1318 1334 1354 1424 1495 1543 1634 1773 1950 2129 2272 2431 2642 2827 2941 3045 3082 3158 3216 3307 3364 3388 3387 3517 3573 3501 3499 3523 3495 3606 3493 3518 3522 const double ColorTemp::ColorRedtalvio_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3131, 0.2199, 0.2559, 0.2540, 0.2844, 0.2530, 0.2694, 0.2765, 0.2594, 0.2673, 0.2617, 0.2629, 0.2491, 0.2384, 0.2308, 0.2256, 0.2081, 0.1973, 0.1857, 0.1752, 0.1719, @@ -619,9 +607,6 @@ const double ColorTemp::ColorRedtalvio_spect[97] = { }; -//#brown dry leaf (poimulehti) -//964 520 223 244 261 247 196 199 200 207 202 198 209 204 207 222 205 218 213 212 224 218 230 235 251 250 245 250 263 273 271 275 281 264 274 288 287 307 303 307 323 304 335 335 346 345 347 348 370 364 380 393 384 407 419 421 419 433 431 461 465 -//RIs 67 const double ColorTemp::ColorBrownpoimulehti_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0964, 0.0520, 0.0223, 0.0244, 0.0261, 0.0247, 0.0196, 0.0199, 0.0200, 0.0207, 0.0202, 0.0198, 0.0209, 0.0204, 0.0207, 0.0222, 0.0205, 0.0218, 0.0213, @@ -631,8 +616,6 @@ const double ColorTemp::ColorBrownpoimulehti_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#orange leaf (koristepensas, tuntematon) -//241 195 223 489 574 565 634 605 574 613 645 636 644 628 621 603 614 654 676 719 776 795 862 879 918 918 955 980 1013 1055 1132 1225 1258 1362 1427 1579 1796 1936 2079 2258 2440 2597 2728 2790 2777 2857 2923 2991 3031 3040 3037 3094 3066 3023 3093 3044 3082 3085 3147 3226 3192 const double ColorTemp::ColorOrangetuntematon_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0241, 0.0195, 0.0223, 0.0489, 0.0574, 0.0565, 0.0634, 0.0605, 0.0574, 0.0613, 0.0645, 0.0636, 0.0644, 0.0628, 0.0621, 0.0603, 0.0614, 0.0654, 0.0676, @@ -640,8 +623,7 @@ const double ColorTemp::ColorOrangetuntematon_spect[97] = { 0.2258, 0.2440, 0.2597, 0.2728, 0.2790, 0.2777, 0.2857, 0.2923, 0.2991, 0.3031, 0.3040, 0.3037, 0.3094, 0.3066, 0.3023, 0.3093, 0.3044, 0.3082, 0.3085, 0.3147, 0.3226, 0.3192, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//,#orange leaf (lehmus) -//1062 866 443 544 496 485 492 458 450 425 458 477 497 461 451 481 454 500 515 538 529 593 638 670 686 711 718 729 741 760 796 833 895 958 1016 1128 1246 1344 1450 1505 1596 1636 1621 1631 1627 1628 1658 1583 1486 1415 1322 1265 1159 1062 975 974 1063 1326 1736 2141 2568 + const double ColorTemp::ColorOrangetlehmus_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1062, 0.0866, 0.0443, 0.0544, 0.0496, 0.0485, 0.0492, 0.0458, 0.0450, 0.0425, 0.0458, 0.0477, 0.0497, 0.0461, 0.0451, 0.0481, 0.0454, 0.0500, 0.0515, @@ -650,8 +632,6 @@ const double ColorTemp::ColorOrangetlehmus_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#orange leaf (vaahtera) -//1517 551 664 659 521 585 460 385 424 389 375 374 359 380 371 373 379 387 378 394 405 416 463 496 536 542 577 579 619 642 678 710 777 829 894 1035 1174 1334 1484 1611 1798 1941 2012 2065 2135 2229 2286 2317 2332 2357 2323 2330 2292 2236 2137 2093 2180 2240 2368 2487 2528 const double ColorTemp::ColorOrangvaahtera_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1517, 0.0551, 0.0664, 0.0659, 0.0521, 0.0585, 0.0460, 0.0385, 0.0424, 0.0389, 0.0375, 0.0374, 0.0359, 0.0380, 0.0371, 0.0373, 0.0379, 0.0387, 0.0378, @@ -660,8 +640,6 @@ const double ColorTemp::ColorOrangvaahtera_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#brown dry leaf (lehmus) -//758 236 148 430 347 435 438 495 439 454 472 471 461 459 458 479 492 482 499 513 520 545 567 594 623 647 698 717 744 792 803 834 864 876 916 932 963 1013 1025 1060 1099 1118 1153 1175 1207 1242 1268 1266 1284 1305 1305 1304 1353 1360 1330 1332 1413 1502 1610 1682 1737 const double ColorTemp::ColorBrownlehmus_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0758, 0.0236, 0.0148, 0.0430, 0.0347, 0.0435, 0.0438, 0.0495, 0.0439, 0.0454, 0.0472, 0.0471, 0.0461, 0.0459, 0.0458, 0.0479, 0.0492, 0.0482, 0.0499, 0.0513, @@ -670,9 +648,6 @@ const double ColorTemp::ColorBrownlehmus_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//#brown moss (nuotiosammal) -//482 260 178 92 104 88 92 40 43 52 58 64 70 63 67 67 62 76 82 82 91 96 104 116 135 141 142 155 168 179 198 199 193 201 212 218 226 240 242 238 255 265 277 266 265 283 289 275 289 277 291 288 277 252 262 260 264 299 375 411 446 const double ColorTemp::ColorBrownuotiosammal_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0482, 0.0260, 0.0178, 0.0092, 0.0104, 0.0088, 0.0092, 0.0040, 0.0043, 0.0052, 0.0058, 0.0064, 0.0070, 0.0063, 0.0067, 0.0067, 0.0062, 0.0076, 0.0082, 0.0082, 0.0091, 0.0096, @@ -681,8 +656,6 @@ const double ColorTemp::ColorBrownuotiosammal_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#black soil -//0 0 89 122 52 53 104 127 130 134 137 137 134 136 138 139 134 140 142 148 154 153 152 150 151 156 153 166 154 171 163 163 166 166 169 169 166 174 174 170 170 168 176 177 176 174 179 180 180 183 177 193 178 187 194 193 182 196 184 195 195 const double ColorTemp::ColorBlacksoil_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0089, 0.0122, 0.0052, 0.0053, 0.0104, 0.0127, 0.0130, 0.0134, 0.0137, 0.0137, 0.0134, 0.0136, 0.0138, 0.0139, 0.0134, 0.0140, 0.0142, 0.0148, 0.0154, 0.0153, @@ -691,8 +664,6 @@ const double ColorTemp::ColorBlacksoil_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#black, dry leaf (pihlaja) -//0 79 111 172 174 201 214 211 207 207 191 200 196 206 196 194 203 207 204 208 210 212 211 208 209 219 222 224 231 241 232 244 249 250 267 264 262 269 282 277 289 284 279 302 289 308 313 315 310 325 313 319 356 340 331 347 356 352 364 373 352 const double ColorTemp::ColorBlackpihlaja[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0079, 0.0111, 0.0172, 0.0174, 0.0201, 0.0214, 0.0211, 0.0207, 0.0207, 0.0191, 0.0200, 0.0196, 0.0206, 0.0196, 0.0194, 0.0203, 0.0207, 0.0204, 0.0208, 0.0210, 0.0212, @@ -701,11 +672,6 @@ const double ColorTemp::ColorBlackpihlaja[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - - -//#gray lichen (nahkajaekaelae) -//1204 585 1113 733 600 653 715 685 726 682 713 691 719 691 683 693 711 715 701 700 720 697 706 696 723 714 726 738 729 735 737 739 742 746 746 761 743 735 722 717 728 749 721 712 705 737 733 758 780 785 775 771 755 744 743 742 755 779 849 940 1042 -//RIS 74 const double ColorTemp::ColorGraynahjajaekaelae_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1204, 0.0585, 0.1113, 0.0733, 0.0600, 0.0653, 0.0715, 0.0685, 0.0726, 0.0682, 0.0713, 0.0691, 0.0719, 0.0691, 0.0683, 0.0693, 0.0711, 0.0715, 0.0701, 0.0700, @@ -714,8 +680,6 @@ const double ColorTemp::ColorGraynahjajaekaelae_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#green moss (nuotiosammal) -//120 65 134 31 209 124 104 96 97 95 76 79 83 93 83 95 95 104 117 127 140 161 214 252 290 310 328 343 347 373 365 351 347 343 311 301 285 283 263 256 255 251 257 235 227 224 233 208 194 186 165 160 151 149 157 161 185 243 309 425 543 const double ColorTemp::ColorGreennuotisammal_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0120, 0.0065, 0.0134, 0.0031, 0.0209, 0.0124, 0.0104, 0.0096, 0.0097, 0.0095, 0.0076, 0.0079, 0.0083, 0.0093, 0.0083, 0.0095, 0.0095, 0.0104, 0.0117, 0.0127, 0.0140, 0.0161, @@ -724,9 +688,6 @@ const double ColorTemp::ColorGreennuotisammal_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//#green leaf (leskenlehti) -//525 273 0 378 318 164 224 276 316 266 303 290 305 286 290 303 323 323 352 383 405 482 614 743 920 1015 1139 1192 1175 1216 1195 1145 1116 1009 947 867 802 754 741 709 675 625 574 579 561 565 557 511 471 419 399 372 365 395 375 382 458 555 716 1002 1407 const double ColorTemp::ColorGreenleskenlehti_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0525, 0.0273, 0.0, 0.0378, 0.0318, 0.0164, 0.0224, 0.0276, 0.0316, 0.0266, 0.0303, 0.0290, 0.0305, 0.0286, 0.0290, 0.0303, 0.0323, 0.0323, 0.0352, 0.0383, 0.0405, 0.0482, @@ -735,9 +696,6 @@ const double ColorTemp::ColorGreenleskenlehti_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#green leaf (linnunkaali) -//602 0 267 306 339 335 300 247 292 289 295 298 292 318 312 289 299 307 310 320 350 375 446 499 574 634 698 725 736 754 736 702 668 633 590 551 514 499 467 460 445 424 415 409 399 412 393 380 370 362 366 343 342 350 333 350 364 418 494 670 914 -//RIS 77 const double ColorTemp::ColorGreenlinnunkaali_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0602, 0.0, 0.0267, 0.0306, 0.0339, 0.0335, 0.0300, 0.0247, 0.0292, 0.0289, 0.0295, 0.0298, 0.0292, 0.0318, 0.0312, 0.0289, 0.0299, 0.0307, 0.0310, 0.0320, @@ -745,8 +703,7 @@ const double ColorTemp::ColorGreenlinnunkaali_spect[97] = { 0.0445, 0.0424, 0.0415, 0.0409, 0.0399, 0.0412, 0.0393, 0.0380, 0.0370, 0.0362, 0.0366, 0.0343, 0.0342, 0.0350, 0.0333, 0.0350, 0.0364, 0.0418, 0.0494, 0.0670, 0.0914, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#green leaf (pelto-ohake) -//0 366 360 233 173 179 157 175 206 205 180 179 173 178 187 189 184 171 195 204 193 219 253 297 365 431 467 489 493 516 500 466 426 406 380 343 316 295 276 282 265 253 239 228 226 229 238 237 216 221 219 217 212 219 229 258 284 309 375 487 732 + const double ColorTemp::ColorGreenpelto_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0366, 0.0360, 0.0233, 0.0173, 0.0179, 0.0157, 0.0175, 0.0206, 0.0205, 0.0180, 0.0179, 0.0173, 0.0178, 0.0187, 0.0189, 0.0184, 0.0171, 0.0195, 0.0204, 0.0193, 0.0219, @@ -755,8 +712,6 @@ const double ColorTemp::ColorGreenpelto_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#green rod (voikukka), -//2205 1755 1710 1365 1159 1207 1024 1118 1127 1141 1134 1125 1149 1140 1120 1128 1139 1156 1212 1273 1262 1359 1461 1519 1568 1599 1660 1668 1680 1718 1697 1690 1672 1675 1663 1644 1642 1652 1626 1623 1653 1621 1614 1590 1625 1609 1615 1576 1509 1483 1418 1391 1324 1294 1267 1220 1315 1417 1650 1861 2006 const double ColorTemp::ColorGreenrodvoikukka[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2205, 0.1755, 0.1710, 0.1365, 0.1159, 0.1207, 0.1024, 0.1118, 0.1127, 0.1141, 0.1134, 0.1125, 0.1149, 0.1140, 0.1120, 0.1128, 0.1139, 0.1156, 0.1212, 0.1273, 0.1262, 0.1359, @@ -765,8 +720,6 @@ const double ColorTemp::ColorGreenrodvoikukka[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#green leaf (lehmus) -//2362 1024 945 666 617 604 591 580 648 631 656 607 616 653 643 626 643 656 710 753 801 929 1105 1277 1437 1601 1742 1774 1798 1848 1832 1820 1787 1730 1663 1593 1541 1461 1446 1419 1335 1298 1247 1192 1197 1199 1156 1072 1007 942 899 832 824 793 755 801 860 1031 1305 1809 2260 const double ColorTemp::ColorGreenlehmus[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2362, 0.1024, 0.0945, 0.0666, 0.0617, 0.0604, 0.0591, 0.0580, 0.0648, 0.0631, 0.0656, 0.0607, 0.0616, 0.0653, 0.0643, 0.0626, 0.0643, 0.0656, 0.0710, 0.0753, @@ -775,8 +728,6 @@ const double ColorTemp::ColorGreenlehmus[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#green leaf (koristeherukka) -//945 292 315 433 321 294 295 321 278 261 282 272 270 278 285 274 277 268 269 283 275 309 325 389 450 493 551 557 587 585 567 554 515 487 460 424 409 387 353 349 353 333 309 309 312 315 321 298 304 304 281 273 293 311 314 333 355 392 439 595 811 const double ColorTemp::ColorGreenkoriste[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0945, 0.0292, 0.0315, 0.0433, 0.0321, 0.0294, 0.0295, 0.0321, 0.0278, 0.0261, 0.0282, 0.0272, 0.0270, 0.0278, 0.0285, 0.0274, 0.0277, 0.0268, 0.0269, 0.0283, @@ -785,9 +736,6 @@ const double ColorTemp::ColorGreenkoriste[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//#green leaf (poimulehti) -//1102 146 630 266 247 261 285 238 273 281 272 260 262 254 274 263 273 278 296 309 322 388 493 607 712 840 953 986 1006 1034 999 981 918 855 794 711 649 627 604 563 531 515 467 450 448 466 445 421 402 385 369 345 346 319 330 359 378 439 578 835 1177 const double ColorTemp::ColorGreenpoimulehti[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1102, 0.0146, 0.0630, 0.0266, 0.0247, 0.0261, 0.0285, 0.0238, 0.0273, 0.0281, 0.0272, 0.0260, 0.0262, 0.0254, 0.0274, 0.0263, 0.0273, 0.0278, 0.0296, 0.0309, 0.0322, @@ -796,9 +744,6 @@ const double ColorTemp::ColorGreenpoimulehti[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//#green leaf (hopeapaju) -//787 512 1260 1032 765 881 994 908 983 985 941 985 971 967 964 937 928 959 973 992 1004 1017 1053 1102 1180 1227 1281 1309 1317 1328 1318 1271 1238 1222 1179 1152 1131 1092 1086 1078 1083 1020 1015 1000 1027 1037 1028 970 962 977 952 963 955 935 980 979 963 1028 1059 1228 1401 const double ColorTemp::ColorGreenhopeapaju[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0787, 0.0512, 0.1260, 0.1032, 0.0765, 0.0881, 0.0994, 0.0908, 0.0983, 0.0985, 0.0941, 0.0985, 0.0971, 0.0967, 0.0964, 0.0937, 0.0928, 0.0959, 0.0973, 0.0992, 0.1004, @@ -807,8 +752,6 @@ const double ColorTemp::ColorGreenhopeapaju[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#red flower (uuden guinean liisa) -//2288 1861 2364 2229 2783 2842 2842 2923 2902 2990 2828 2871 2772 2723 2639 2558 2424 2315 2169 2094 2064 1964 1865 1739 1680 1624 1548 1457 1424 1408 1434 1451 1492 1528 1597 1755 1951 2147 2367 2648 2986 3236 3393 3596 3665 3786 3879 3915 3926 3994 3987 4017 4026 4112 4067 4125 4139 4121 4050 4040 4095 const double ColorTemp::ColorReduuden[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2288, 0.1861, 0.2364, 0.2229, 0.2783, 0.2842, 0.2842, 0.2923, 0.2902, 0.2990, 0.2828, 0.2871, 0.2772, 0.2723, 0.2639, 0.2558, 0.2424, 0.2315, 0.2169, 0.2094, 0.2064, @@ -817,9 +760,6 @@ const double ColorTemp::ColorReduuden[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//#red flower (pajuangervo) -//445 1024 605 833 937 959 1052 1028 1049 1029 1017 975 948 882 865 812 757 718 658 638 628 597 554 523 509 509 485 475 469 492 479 477 490 525 555 597 641 704 756 846 948 1055 1164 1221 1266 1339 1393 1491 1553 1604 1608 1650 1643 1652 1655 1658 1651 1739 1813 1818 1938 const double ColorTemp::ColorRedpajuan[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0445, 0.1024, 0.0605, 0.0833, 0.0937, 0.0959, 0.1052, 0.1028, 0.1049, 0.1029, 0.1017, 0.0975, 0.0948, 0.0882, 0.0865, 0.0812, 0.0757, 0.0718, 0.0658, 0.0638, 0.0628, 0.0597, @@ -828,9 +768,6 @@ const double ColorTemp::ColorRedpajuan[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//#red flower (jaloangervo) -//120 152 512 635 662 538 749 713 743 792 777 785 733 726 728 749 709 674 661 657 645 635 598 570 553 544 545 538 546 514 540 567 585 577 602 651 690 765 836 907 980 1089 1147 1188 1212 1253 1318 1371 1412 1473 1459 1478 1548 1582 1564 1590 1595 1714 1728 1814 1837 const double ColorTemp::ColorRedjaloan[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0120, 0.0152, 0.0512, 0.0635, 0.0662, 0.0538, 0.0749, 0.0713, 0.0743, 0.0792, 0.0777, 0.0785, 0.0733, 0.0726, 0.0728, 0.0749, 0.0709, 0.0674, 0.0661, 0.0657, 0.0645, 0.0635, @@ -839,9 +776,6 @@ const double ColorTemp::ColorRedjaloan[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//#blue flower (ukonhattu) -//801 682 1070 1319 1311 1420 1453 1394 1318 1292 1268 1179 1132 1054 1015 948 846 780 731 709 705 667 621 598 555 522 505 493 498 500 494 471 479 463 450 461 487 515 546 574 555 562 539 558 546 552 567 626 715 807 862 978 1086 1199 1313 1323 1350 1366 1358 1320 1365 const double ColorTemp::ColorBlueukon[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0801, 0.0682, 0.1070, 0.1319, 0.1311, 0.1420, 0.1453, 0.1394, 0.1318, 0.1292, 0.1268, 0.1179, 0.1132, 0.1054, 0.1015, 0.0948, 0.0846, 0.0780, 0.0731, 0.0709, 0.0705, 0.0667, @@ -850,9 +784,6 @@ const double ColorTemp::ColorBlueukon[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//#blue flower (orvokki) -//292 528 645 1000 932 1439 1752 1947 2077 2158 2169 2153 2164 2132 2091 1993 1916 1876 1803 1702 1659 1554 1503 1425 1330 1229 1186 1134 1065 1031 1014 993 989 980 939 936 945 995 1055 1104 1180 1247 1284 1343 1349 1403 1458 1538 1634 1790 1880 2006 2218 2396 2556 2612 2735 2811 2765 2840 2877 const double ColorTemp::ColorBlueorvokki[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0292, 0.0528, 0.0645, 0.1000, 0.0932, 0.1439, 0.1752, 0.1947, 0.2077, 0.2158, 0.2169, 0.2153, 0.2164, 0.2132, 0.2091, 0.1993, 0.1916, 0.1876, 0.1803, 0.1702, 0.1659, 0.1554, @@ -861,9 +792,6 @@ const double ColorTemp::ColorBlueorvokki[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//#blue flower (malvikki) -//1062 528 749 571 512 538 455 445 431 384 353 299 249 212 190 162 123 105 90 81 83 75 78 72 59 56 61 54 71 69 70 62 63 65 70 74 78 73 76 87 90 104 119 119 131 145 156 184 225 255 314 414 538 669 849 1068 1247 1467 1701 1885 2032 const double ColorTemp::ColorBluemalvikki[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1062, 0.0528, 0.0749, 0.0571, 0.0512, 0.0538, 0.0455, 0.0445, 0.0431, 0.0384, 0.0353, 0.0299, 0.0249, 0.0212, 0.0190, 0.0162, 0.0123, 0.0105, 0.0090, 0.0081, 0.0083, 0.0075, @@ -872,8 +800,6 @@ const double ColorTemp::ColorBluemalvikki[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#black dry leaf (maitohorsma) -//256 0 172 356 213 270 203 203 195 208 202 201 210 210 203 204 209 203 209 201 205 201 194 210 206 197 203 198 207 201 204 202 198 200 198 197 186 203 202 198 200 208 206 231 235 223 244 254 278 289 297 309 338 335 338 368 412 524 686 926 1185 const double ColorTemp::ColorBlackmaito[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0256, 0.0, 0.0172, 0.0356, 0.0213, 0.0270, 0.0203, 0.0203, 0.0195, 0.0208, 0.0202, 0.0201, 0.0210, 0.0210, 0.0203, 0.0204, 0.0209, 0.0203, 0.0209, 0.0201, 0.0205, 0.0201, @@ -882,9 +808,6 @@ const double ColorTemp::ColorBlackmaito[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//#orange berry (pihlaja) -//945 731 585 433 247 408 266 314 293 305 289 288 280 297 262 298 277 274 291 293 285 303 300 310 324 336 364 377 426 465 499 561 602 667 741 890 1028 1164 1275 1465 1602 1640 1695 1744 1812 1837 1859 1805 1791 1822 1796 1751 1715 1655 1575 1600 1560 1618 1666 1740 1838 const double ColorTemp::ColorOrangpihlaja[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0945, 0.0731, 0.0585, 0.0433, 0.0247, 0.0408, 0.0266, 0.0314, 0.0293, 0.0305, 0.0289, 0.0288, 0.0280, 0.0297, 0.0262, 0.0298, 0.0277, 0.0274, 0.0291, 0.0293, 0.0285, 0.0303, @@ -893,9 +816,6 @@ const double ColorTemp::ColorOrangpihlaja[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#green flower (lehmus=linden) -//2677 1682 1170 1032 1085 816 728 755 833 832 813 845 857 884 855 882 914 997 1084 1179 1231 1437 1661 1873 2048 2209 2378 2408 2442 2509 2503 2452 2457 2418 2383 2348 2277 2213 2221 2169 2146 2048 1977 1960 2000 1993 1961 1899 1784 1748 1625 1517 1389 1260 1165 1143 1244 1522 1870 2324 2586 -//RIS 81 const double ColorTemp::ColorGreenlinden[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2677, 0.1682, 0.1170, 0.1032, 0.1085, 0.0816, 0.0728, 0.0755, 0.0833, 0.0832, 0.0813, 0.0845, 0.0857, 0.0884, 0.0855, 0.0882, 0.0914, 0.0997, 0.1084, 0.1179, 0.1231, 0.1437, @@ -904,8 +824,6 @@ const double ColorTemp::ColorGreenlinden[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#yellow petal (lehmus) -//1890 1097 900 832 814 799 758 853 803 808 833 862 916 943 960 969 1039 1162 1283 1370 1427 1529 1689 1781 1894 1950 2105 2118 2140 2185 2191 2199 2234 2266 2263 2297 2328 2312 2298 2332 2344 2312 2288 2347 2384 2390 2358 2280 2306 2315 2310 2253 2274 2271 2242 2292 2254 2208 2319 2314 2264 const double ColorTemp::ColorYellowlehmus[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1890, 0.1097, 0.0900, 0.0832, 0.0814, 0.0799, 0.0758, 0.0853, 0.0803, 0.0808, 0.0833, 0.0862, 0.0916, 0.0943, 0.0960, 0.0969, 0.1039, 0.1162, 0.1283, 0.1370, 0.1427, @@ -914,8 +832,6 @@ const double ColorTemp::ColorYellowlehmus[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#yellow flower (suikeroalpi) -//2048 1666 1140 1210 699 680 615 566 567 561 609 585 614 572 599 575 636 730 982 1194 1360 1766 2222 2558 2849 3048 3201 3395 3395 3484 3576 3623 3606 3672 3651 3634 3647 3669 3715 3660 3720 3692 3704 3784 3683 3731 3681 3697 3635 3694 3617 3610 3632 3663 3616 3595 3599 3584 3588 3613 3527 const double ColorTemp::ColorYellowsuikeroalpi[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2048, 0.1666, 0.1140, 0.1210, 0.0699, 0.0680, 0.0615, 0.0566, 0.0567, 0.0561, 0.0609, 0.0585, 0.0614, 0.0572, 0.0599, 0.0575, 0.0636, 0.0730, 0.0982, 0.1194, 0.1360, 0.1766, @@ -924,8 +840,6 @@ const double ColorTemp::ColorYellowsuikeroalpi[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#yellow flower (pensashanhikki) -//356 1365 1024 902 535 387 355 247 365 307 321 330 319 332 317 336 408 487 709 963 1235 1631 2111 2436 2718 2950 3151 3262 3313 3420 3448 3475 3491 3534 3520 3565 3622 3631 3626 3657 3640 3607 3641 3627 3601 3591 3588 3667 3618 3601 3630 3613 3592 3609 3569 3590 3568 3563 3588 3480 3471 const double ColorTemp::ColorYellowpensashanhikki1[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0356, 0.1365, 0.1024, 0.0902, 0.0535, 0.0387, 0.0355, 0.0247, 0.0365, 0.0307, 0.0321, 0.0330, 0.0319, 0.0332, 0.0317, 0.0336, 0.0408, 0.0487, 0.0709, 0.0963, 0.1235, @@ -934,8 +848,6 @@ const double ColorTemp::ColorYellowpensashanhikki1[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#yellow sepal (pensashanhikki) -//1068 427 326 416 428 590 503 470 539 526 546 540 539 526 497 546 555 603 753 903 1010 1268 1563 1868 2068 2226 2429 2495 2560 2625 2636 2610 2655 2667 2635 2630 2612 2560 2597 2588 2543 2478 2499 2472 2438 2431 2379 2406 2361 2319 2264 2174 2128 2010 1942 1912 1930 2148 2334 2585 2764 const double ColorTemp::ColorYellowpensashanhikki2[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1068, 0.0427, 0.0326, 0.0416, 0.0428, 0.0590, 0.0503, 0.0470, 0.0539, 0.0526, 0.0546, 0.0540, 0.0539, 0.0526, 0.0497, 0.0546, 0.0555, 0.0603, 0.0753, 0.0903, 0.1010, 0.1268, @@ -944,8 +856,6 @@ const double ColorTemp::ColorYellowpensashanhikki2[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#blue flower (hiidenvirna) -//315 512 675 832 765 865 807 867 911 904 852 826 780 753 711 661 595 528 513 476 431 391 361 331 305 276 240 229 237 223 212 208 215 205 203 195 209 212 222 266 296 322 356 352 388 391 411 425 473 532 550 630 669 748 823 879 904 917 930 950 942 const double ColorTemp::ColorBluehiidenvirna[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0315, 0.0512, 0.0675, 0.0832, 0.0765, 0.0865, 0.0807, 0.0867, 0.0911, 0.0904, 0.0852, 0.0826, 0.0780, 0.0753, 0.0711, 0.0661, 0.0595, 0.0528, 0.0513, 0.0476, 0.0431, 0.0391, @@ -954,9 +864,6 @@ const double ColorTemp::ColorBluehiidenvirna[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#blue flower (kurkkuyrtti) -//2687 1553 2181 2246 2209 2263 2442 2347 2261 2353 2292 2230 2095 2008 1896 1782 1569 1443 1333 1223 1177 1074 992 902 813 755 701 626 577 548 525 498 469 445 456 448 428 441 448 447 455 467 496 534 527 586 668 798 966 1126 1289 1469 1679 1870 2013 2040 2060 2077 2104 2155 2119 -//RIS 87 const double ColorTemp::ColorBluekurkkuyrtti[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2687, 0.1553, 0.2181, 0.2246, 0.2209, 0.2263, 0.2442, 0.2347, 0.2261, 0.2353, 0.2292, 0.2230, 0.2095, 0.2008, 0.1896, 0.1782, 0.1569, 0.1443, 0.1333, 0.1223, 0.1177, 0.1074, @@ -965,8 +872,6 @@ const double ColorTemp::ColorBluekurkkuyrtti[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#pink (siankaersaemoe) -//585 859 758 1094 780 1012 987 1067 1059 1034 1098 1110 1097 1040 1058 1048 1028 1014 1068 1024 1023 1025 1032 1029 1011 1007 986 973 946 906 949 923 943 949 956 998 1051 1107 1166 1242 1284 1355 1394 1438 1451 1543 1589 1588 1612 1616 1562 1534 1562 1541 1494 1492 1518 1650 1749 1907 1991 const double ColorTemp::ColorPinksiankaersaemoe[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0585, 0.0859, 0.0758, 0.1094, 0.0780, 0.1012, 0.0987, 0.1067, 0.1059, 0.1034, 0.1098, 0.1110, 0.1097, 0.1040, 0.1058, 0.1048, 0.1028, 0.1014, 0.1068, 0.1024, 0.1023, 0.1025, @@ -975,10 +880,6 @@ const double ColorTemp::ColorPinksiankaersaemoe[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//#violet flower (harakankello) -//2520 1462 1890 1898 1751 1713 1555 1516 1471 1403 1282 1209 1144 1135 1069 976 895 823 782 762 713 685 661 635 603 559 551 550 541 567 562 574 580 589 586 620 670 690 718 801 786 769 773 739 800 806 837 845 971 1043 1102 1241 1359 1502 1611 1726 1793 1859 1909 1969 2014 -//RIS 89 const double ColorTemp::ColorVioletharakankello[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2520, 0.1462, 0.1890, 0.1898, 0.1751, 0.1713, 0.1555, 0.1516, 0.1471, 0.1403, 0.1282, 0.1209, 0.1144, 0.1135, 0.1069, 0.0976, 0.0895, 0.0823, 0.0782, 0.0762, 0.0713, @@ -987,8 +888,6 @@ const double ColorTemp::ColorVioletharakankello[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#violet flower (alsikeapila) -//1260 585 765 1065 937 881 847 943 1075 1053 1020 994 1008 1026 1015 980 962 949 925 908 880 864 843 814 802 749 698 691 677 660 653 660 631 633 644 692 743 809 889 1005 1160 1325 1396 1450 1526 1583 1655 1674 1689 1707 1675 1674 1624 1576 1564 1591 1613 1717 1851 1962 2033 const double ColorTemp::ColorVioletalsikeapila[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1260, 0.0585, 0.0765, 0.1065, 0.0937, 0.0881, 0.0847, 0.0943, 0.1075, 0.1053, 0.1020, 0.0994, 0.1008, 0.1026, 0.1015, 0.0980, 0.0962, 0.0949, 0.0925, 0.0908, 0.0880, 0.0864, @@ -997,8 +896,6 @@ const double ColorTemp::ColorVioletalsikeapila[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#violet flower (akilleija) -//843 1340 1393 1254 1290 1452 1508 1519 1454 1384 1301 1256 1178 1113 1056 985 884 827 743 720 691 664 605 578 540 507 499 475 485 494 492 479 487 493 471 495 559 595 645 689 720 732 716 723 734 750 804 849 948 1041 1169 1362 1525 1693 1761 1935 2071 2235 2376 2493 2604 const double ColorTemp::ColorVioletakilleija[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0843, 0.1340, 0.1393, 0.1254, 0.1290, 0.1452, 0.1508, 0.1519, 0.1454, 0.1384, 0.1301, 0.1256, 0.1178, 0.1113, 0.1056, 0.0985, 0.0884, 0.0827, 0.0743, 0.0720, 0.0691, 0.0664, @@ -1007,8 +904,6 @@ const double ColorTemp::ColorVioletakilleija[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#orange flower (kehaekukka) -//0 0 0 0 0 0 102 58 128 125 137 122 122 134 123 136 159 138 163 151 167 178 192 177 206 226 315 451 707 1045 1446 1707 1944 2131 2276 2524 2719 2841 2968 3052 3199 3264 3282 3429 3451 3454 3477 3556 3478 3565 3595 3569 3582 3582 3559 3610 3626 3668 3733 3692 3722 const double ColorTemp::ColorOrangekehaekukka[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0102, 0.0058, 0.0128, 0.0125, 0.0137, 0.0122, 0.0122, 0.0134, 0.0123, 0.0136, 0.0159, 0.0138, 0.0163, 0.0151, 0.0167, 0.0178, 0.0192, @@ -1017,8 +912,6 @@ const double ColorTemp::ColorOrangekehaekukka[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#red berry (pihlaja) -//0 0 0 0 25 84 128 87 165 130 167 147 155 146 148 165 158 159 164 160 158 158 157 157 173 173 179 195 210 234 264 302 349 386 461 572 735 886 1038 1216 1376 1521 1607 1691 1728 1769 1842 1843 1865 1910 1881 1920 1909 1909 1891 1879 1915 1879 1878 1843 1832 const double ColorTemp::ColorRedpihlaja[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0025, 0.0084, 0.0128, 0.0087, 0.0165, 0.0130, 0.0167, 0.0147, 0.0155, 0.0146, 0.0148, 0.0165, 0.0158, 0.0159, 0.0164, 0.0160, 0.0158, 0.0158, @@ -1026,9 +919,7 @@ const double ColorTemp::ColorRedpihlaja[97] = { 0.1728, 0.1769, 0.1842, 0.1843, 0.1865, 0.1910, 0.1881, 0.1920, 0.1909, 0.1909, 0.1891, 0.1879, 0.1915, 0.1879, 0.1878, 0.1843, 0.1832, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#violet flower (petunia) -//292 66 227 313 325 332 310 319 300 268 229 193 164 137 127 104 67 50 49 37 34 34 44 32 33 31 38 41 33 34 45 44 37 42 44 49 49 67 80 89 110 130 137 145 153 171 194 223 275 321 391 464 580 720 907 1055 1230 1436 1548 1777 1933 -//RIS 94 + const double ColorTemp::ColorVioletpetunia[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0292, 0.0066, 0.0227, 0.0313, 0.0325, 0.0332, 0.0310, 0.0319, 0.0300, 0.0268, 0.0229, 0.0193, 0.0164, 0.0137, 0.0127, 0.0104, 0.0067, 0.0050, 0.0049, 0.0037, 0.0034, 0.0034, @@ -1037,8 +928,6 @@ const double ColorTemp::ColorVioletpetunia[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#violet flower (orvokki) -//195 0 152 31 22 32 77 69 45 20 27 26 13 12 14 11 15 23 16 18 16 12 16 10 16 15 13 15 15 16 14 20 14 17 15 17 15 17 17 17 23 24 29 38 36 38 37 43 58 65 70 86 113 155 222 285 405 506 645 817 1035 const double ColorTemp::ColorVioletorvokki[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0195, 0.0, 0.0152, 0.0031, 0.0022, 0.0032, 0.0077, 0.0069, 0.0045, 0.0020, 0.0027, 0.0026, 0.0013, 0.0012, 0.0014, 0.0011, 0.0015, 0.0023, 0.0016, 0.0018, 0.0016, 0.0012, 0.0016, @@ -1047,9 +936,6 @@ const double ColorTemp::ColorVioletorvokki[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//#blue flower (sinisievikki) -//801 1109 1861 2325 2329 2380 2562 2565 2558 2611 2517 2567 2475 2397 2337 2294 2195 2001 1881 1892 1854 1746 1668 1580 1491 1362 1229 1178 1110 1094 1072 1019 994 960 928 879 836 859 863 951 1046 1102 1154 1193 1174 1166 1153 1199 1275 1316 1376 1550 1739 1918 2104 2228 2364 2377 2423 2394 2334 const double ColorTemp::ColorBluesinisievikki[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0801, 0.1109, 0.1861, 0.2325, 0.2329, 0.2380, 0.2562, 0.2565, 0.2558, 0.2611, 0.2517, 0.2567, 0.2475, 0.2397, 0.2337, 0.2294, 0.2195, 0.2001, 0.1881, 0.1892, 0.1854, 0.1746, @@ -1058,8 +944,6 @@ const double ColorTemp::ColorBluesinisievikki[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#blue flower (iisoppi) -//623 85 605 833 776 756 755 781 774 775 697 724 697 654 617 575 536 494 460 469 442 436 400 393 380 358 369 352 342 368 357 360 342 342 341 335 355 353 365 376 382 392 412 412 407 414 420 449 487 504 517 571 651 734 806 885 968 1088 1210 1296 1411 const double ColorTemp::ColorBlueiisoppi[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0623, 0.0085, 0.0605, 0.0833, 0.0776, 0.0756, 0.0755, 0.0781, 0.0774, 0.0775, 0.0697, 0.0724, 0.0697, 0.0654, 0.0617, 0.0575, 0.0536, 0.0494, 0.0460, 0.0469, 0.0442, 0.0436, @@ -1067,8 +951,7 @@ const double ColorTemp::ColorBlueiisoppi[97] = { 0.0407, 0.0414, 0.0420, 0.0449, 0.0487, 0.0504, 0.0517, 0.0571, 0.0651, 0.0734, 0.0806, 0.0885, 0.0968, 0.1088, 0.1210, 0.1296, 0.1411, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#white petal (ojakaersaemoe) -//1732 951 1800 1365 1801 1697 1762 2103 2243 2218 2200 2206 2255 2254 2269 2261 2272 2251 2254 2260 2256 2266 2247 2269 2310 2273 2345 2312 2301 2323 2302 2314 2362 2355 2348 2362 2396 2374 2362 2381 2396 2440 2383 2347 2422 2419 2472 2423 2406 2425 2377 2381 2380 2398 2390 2404 2370 2375 2364 2411 2417 + const double ColorTemp::ColorWhiteojaka[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1732, 0.0951, 0.1800, 0.1365, 0.1801, 0.1697, 0.1762, 0.2103, 0.2243, 0.2218, 0.2200, 0.2206, 0.2255, 0.2254, 0.2269, 0.2261, 0.2272, 0.2251, 0.2254, 0.2260, 0.2256, 0.2266, @@ -1077,9 +960,6 @@ const double ColorTemp::ColorWhiteojaka[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//#white flower (petunia) -//4095 4022 4410 4095 4095 4095 4193 4207 4388 4328 4223 4168 4221 4304 4245 4210 4212 4192 4181 4233 4207 4224 4197 4262 4243 4241 4274 4257 4204 4285 4265 4241 4267 4275 4245 4276 4260 4217 4217 4244 4240 4186 4160 4156 4227 4286 4237 4137 4202 4187 4100 4112 4103 4090 4125 4115 4098 4036 4047 4105 4050 const double ColorTemp::ColorWhitepetunia[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4095, 0.4022, 0.4410, 0.4095, 0.4095, 0.4095, 0.4193, 0.4207, 0.4388, 0.4328, 0.4223, 0.4168, 0.4221, 0.4304, 0.4245, 0.4210, 0.4212, 0.4192, 0.4181, 0.4233, 0.4207, 0.4224, @@ -1089,10 +969,6 @@ const double ColorTemp::ColorWhitepetunia[97] = { }; - -//#blue flower (lobelia dortmanna) -//0 660 1277 1544 1612 1961 1909 1950 1901 1907 1809 1785 1685 1622 1522 1377 1178 1054 931 898 850 732 610 508 434 370 343 329 303 265 232 199 183 169 172 177 200 233 214 214 199 186 199 228 249 321 435 684 1006 1345 1703 2082 2432 2661 2843 2936 3079 3015 3003 3045 3038 -//RIS 98 const double ColorTemp::ColorBluelobelia[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0660, 0.1277, 0.1544, 0.1612, 0.1961, 0.1909, 0.1950, 0.1901, 0.1907, 0.1809, 0.1785, 0.1685, 0.1622, 0.1522, 0.1377, 0.1178, 0.1054, 0.0931, 0.0898, 0.0850, 0.0732, @@ -1101,8 +977,6 @@ const double ColorTemp::ColorBluelobelia[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//#white petal (pelargonia) -//3493 2882 2284 2730 2869 2609 2781 2869 2861 2869 2795 2810 2740 2716 2650 2631 2539 2554 2450 2453 2447 2451 2343 2408 2404 2367 2343 2401 2474 2549 2668 2759 2843 2883 2989 3106 3209 3344 3383 3404 3453 3521 3495 3571 3521 3548 3582 3557 3581 3539 3563 3589 3597 3579 3502 3546 3507 3554 3490 3561 3518 const double ColorTemp::ColorWhitepelargonia[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3493, 0.2882, 0.2284, 0.2730, 0.2869, 0.2609, 0.2781, 0.2869, 0.2861, 0.2869, 0.2795, 0.2810, 0.2740, 0.2716, 0.2650, 0.2631, 0.2539, 0.2554, 0.2450, 0.2453, 0.2447, @@ -1111,10 +985,6 @@ const double ColorTemp::ColorWhitepelargonia[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -/* -#white petal (paeivaenkakkara) -2168 1365 1969 2095 2231 2530 2944 3092 3107 3148 3188 3207 3195 3216 3225 3261 3211 3228 3260 3237 3258 3276 3265 3316 3327 3291 3315 3324 3355 3255 3264 3308 3324 3328 3282 3253 3220 3257 3289 3265 3245 3297 3284 3292 3228 3312 3290 3277 3278 3284 3182 3244 3273 3291 3212 3256 3154 3243 3306 3234 3155 -*/ const double ColorTemp::ColorWhitepaeivaen[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2168, 0.1365, 0.1969, 0.2095, 0.2231, 0.2530, 0.2944, 0.3092, 0.3107, 0.3148, 0.3188, 0.3207, 0.3195, 0.3216, 0.3225, 0.3261, 0.3211, 0.3228, 0.3260, 0.3237, 0.3258, @@ -1123,8 +993,6 @@ const double ColorTemp::ColorWhitepaeivaen[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//spectral data Colorchecker24 : Green B3 const double ColorTemp::ColorchechGreB3_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0531, 0.0545, 0.0559, 0.0563, 0.0566, 0.0571, 0.0576, 0.0576, 0.0575, 0.0581, 0.0586, 0.0596, 0.0606, 0.0629, 0.0652, 0.0699, 0.0745, 0.0839, 0.0932, 0.1101, 0.1270, 0.1521, 0.1771, 0.2098, 0.2424, @@ -1133,7 +1001,6 @@ const double ColorTemp::ColorchechGreB3_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data Colorchecker24 : Cyan F3 const double ColorTemp::ColorchechCyaF3_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0813, 0.1048, 0.1282, 0.1611, 0.1940, 0.2198, 0.2456, 0.2575, 0.2693, 0.2807, 0.2921, 0.3079, 0.3237, 0.3424, 0.3611, 0.3820, 0.4029, 0.4234, 0.4439, 0.4547, 0.4654, 0.4638, 0.4621, 0.4482, 0.4342, 0.4119, 0.3895, @@ -1141,7 +1008,20 @@ const double ColorTemp::ColorchechCyaF3_spect[97] = { 0.0732, 0.0745, 0.0757, 0.0763, 0.0768, 0.0764, 0.0759, 0.0748, 0.0736, 0.0723, 0.0710, 0.0703, 0.0696, 0.0707, 0.0718, 0.0756, 0.0793, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data Colorchecker24 : Purple D2 +const double ColorTemp::ColorchechCyaF3_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0813, 0.1048, 0.1382, 0.1711, 0.1940, 0.2298, 0.2456, 0.2575, 0.2693, 0.2907, 0.3021, 0.3079, 0.3237, 0.3624, 0.3611, 0.3820, 0.4029, 0.4234, 0.4439, 0.4547, 0.4654, 0.4638, 0.4621, 0.4482, 0.4342, 0.4119, 0.3895, + 0.3656, 0.3417, 0.3160, 0.2903, 0.2654, 0.2404, 0.2167, 0.1929, 0.1720, 0.1510, 0.1368, 0.1226, 0.1138, 0.1049, 0.0993, 0.0936, 0.0890, 0.0844, 0.0810, 0.0776, 0.0759, 0.0742, 0.0733, 0.0724, 0.0723, 0.0722, 0.0727, + 0.0732, 0.0745, 0.0757, 0.0763, 0.0768, 0.0764, 0.0759, 0.0748, 0.0736, 0.0723, 0.0710, 0.0703, 0.0696, 0.0707, 0.0718, 0.0756, 0.0793, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::ColorchechCyaF3_spect3[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0813, 0.1048, 0.1282, 0.1411, 0.1840, 0.2098, 0.2356, 0.2575, 0.2593, 0.2807, 0.2821, 0.3079, 0.3137, 0.3424, 0.3611, 0.3820, 0.4029, 0.4234, 0.4439, 0.4547, 0.4654, 0.4638, 0.4621, 0.4482, 0.4342, 0.4119, 0.3895, + 0.3656, 0.3417, 0.3160, 0.2903, 0.2654, 0.2404, 0.2167, 0.1929, 0.1720, 0.1510, 0.1368, 0.1226, 0.1138, 0.1049, 0.0993, 0.0936, 0.0890, 0.0844, 0.0810, 0.0776, 0.0759, 0.0742, 0.0733, 0.0724, 0.0723, 0.0722, 0.0727, + 0.0732, 0.0745, 0.0757, 0.0763, 0.0768, 0.0764, 0.0759, 0.0748, 0.0736, 0.0723, 0.0710, 0.0703, 0.0696, 0.0707, 0.0718, 0.0756, 0.0793, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::ColorchechPurD2_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0854, 0.1047, 0.1240, 0.1468, 0.1696, 0.1826, 0.1955, 0.1963, 0.1970, 0.1910, 0.1849, 0.1750, 0.1651, 0.1541, 0.1430, 0.1322, 0.1213, 0.1117, 0.1020, 0.0944, 0.0868, 0.0809, 0.0750, 0.0703, 0.0655, @@ -1149,7 +1029,6 @@ const double ColorTemp::ColorchechPurD2_spect[97] = { 0.1117, 0.1222, 0.1327, 0.1469, 0.1610, 0.1796, 0.1981, 0.2173, 0.2365, 0.2532, 0.2698, 0.2826, 0.2953, 0.3022, 0.3090, 0.3126, 0.3161, 0.3238, 0.3314, 0.3504, 0.3694, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data Colorchecker24 : Magenta E3 const double ColorTemp::ColorchechMagE3_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1112, 0.1438, 0.1763, 0.2294, 0.2824, 0.3188, 0.3552, 0.3623, 0.3693, 0.3653, 0.3612, 0.3510, 0.3407, 0.3269, 0.3130, 0.2981, 0.2832, 0.2686, 0.2539, 0.2385, 0.2230, 0.2083, 0.1935, 0.1818, 0.1700, 0.1600, 0.1499, @@ -1157,8 +1036,6 @@ const double ColorTemp::ColorchechMagE3_spect[97] = { 0.7232, 0.7391, 0.7550, 0.7629, 0.7707, 0.7737, 0.7766, 0.7778, 0.7790, 0.7803, 0.7815, 0.7835, 0.7854, 0.7896, 0.7937, 0.8026, 0.8114, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data Colorchecker24 : Skin A1 -//use also for palette WB const double ColorTemp::ColorchechSkiA138_13_14_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0479, 0.051, 0.0553, 0.058, 0.0610, 0.062, 0.0626, 0.0622, 0.0619, 0.0617, 0.0616, 0.0615, 0.0614, 0.0614, 0.0615, 0.0617, 0.0618, 0.0618, 0.0619, 0.0618, 0.0618, 0.062, 0.0622, 0.063, 0.0638, 0.066, 0.0696, @@ -1166,14 +1043,13 @@ const double ColorTemp::ColorchechSkiA138_13_14_spect[97] = { 0.173, 0.1772, 0.181, 0.1842, 0.1846, 0.1853, 0.1831, 0.1811, 0.1788, 0.1765, 0.1769, 0.1773, 0.181, 0.1834, 0.1874, 0.1914, 0.1965, 0.2018, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data Colorchecker24 : Gray C4 L=67 -//use also for palette WB const double ColorTemp::ColorchechGraC4_67_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1074, 0.1380, 0.1704, 0.22, 0.2705, 0.305, 0.3409, 0.35, 0.3601, 0.3628, 0.3655, 0.3675, 0.3698, 0.371, 0.3724, 0.373, 0.3733, 0.3725, 0.3715, 0.3705, 0.3692, 0.369, 0.3689, 0.368, 0.3673, 0.3678, 0.3684, 0.37, 0.3711, 0.3712, 0.3714, 0.3714, 0.3714, 0.371, 0.3707, 0.37, 0.3694, 0.3697, 0.3703, 0.3697, 0.3692, 0.3688, 0.3685, 0.3675, 0.3669, 0.3657, 0.3647, 0.3635, 0.3625, 0.361, 0.3596, 0.3585, 0.3579, 0.357, 0.3560, 0.3555, 0.3548, 0.3535, 0.3526, 0.3513, 0.3500, 0.349, 0.3475, 0.3467, 0.3460, 0.3452, 0.3444, 0.3431, 0.3421, 0.3411, 0.3403, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + const double ColorTemp::Fictif_61greyspect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, @@ -1188,10 +1064,7 @@ const double ColorTemp::JDC468_K15_87greyspect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//K15 275 275 0.1984 0.2448 0.3415 0.5707 0.7619 0.8275 0.8292 0.8156 0.8076 0.7982 0.7954 0.8083 0.8184 0.8137 0.8026 0.7988 0.7942 0.7765 0.7603 0.7681 0.7827 0.7923 0.7945 0.7964 0.7982 0.8017 0.8090 0.8191 0.8269 0.8327 0.8359 0.8390 0.8421 0.8452 0.8504 0.8611 -//spectral data Colorchecker24 : Skin B1 -//use also for palette WB const double ColorTemp::ColorchechSkiB166_18_18_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0962, 0.114, 0.1328, 0.152, 0.1706, 0.1755, 0.1877, 0.189, 0.1903, 0.1913, 0.1923, 0.1946, 0.1971, 0.2015, 0.2064, 0.215, 0.2245, 0.239, 0.2535, 0.273, 0.2922, 0.31, 0.3274, 0.337, 0.3473, @@ -1200,8 +1073,6 @@ const double ColorTemp::ColorchechSkiB166_18_18_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data Colorchecker24 : blue sky C1 -//use also for palette WB const double ColorTemp::ColorchechBluC150_m5_m22_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1053, 0.134, 0.1633, 0.2075, 0.2518, 0.283, 0.3163, 0.324, 0.3325, 0.334, 0.3355, 0.3352, 0.3349, 0.332, 0.3294, 0.325, 0.3199, 0.3127, 0.3055, 0.2955, 0.2863, 0.28, 0.2737, 0.267, 0.2612, 0.249, 0.2378, 0.228, 0.2199, @@ -1209,8 +1080,6 @@ const double ColorTemp::ColorchechBluC150_m5_m22_spect[97] = { 0.1367, 0.1372, 0.1356, 0.1340, 0.1311, 0.1288, 0.1253, 0.1227, 0.1205, 0.1187, 0.1195, 0.1205, 0.1255, 0.1303, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorcheckerDC : blue sky N8 -//use also for palette WB const double ColorTemp::ColorchechDCBluN881_m7_m14_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1371, 0.17, 0.2029, 0.291, 0.3790, 0.495, 0.6100, 0.67, 0.7249, 0.737, 0.7501, 0.7545, 0.7597, 0.764, 0.7677, 0.7685, 0.7693, 0.7677, 0.7662, 0.763, 0.7593, 0.753, 0.7471, 0.737, 0.7289, 0.718, 0.7077, 0.705, 0.6819, 0.666, 0.6515, 0.636, 0.6244, @@ -1218,16 +1087,12 @@ const double ColorTemp::ColorchechDCBluN881_m7_m14_spect[97] = { 0.5375, 0.531, 0.5244, 0.522, 0.5207, 0.524, 0.5264, 0.532, 0.5369, 0.542, 0.5505, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorcheckerSG : Skin F7 -//use also for palette WB const double ColorTemp::ColorchechSGSkiF763_14_26_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0508, 0.064, 0.0776, 0.903, 0.1099, 0.1128, 0.1256, 0.128, 0.1307, 0.133, 0.1357, 0.139, 0.1425, 0.148, 0.1523, 0.159, 0.1669, 0.177, 0.1871, 0.20, 0.2118, 0.2235, 0.2355, 0.2445, 0.2537, 0.259, 0.2655, 0.268, 0.2700, 0.2708, 0.2716, 0.2743, 0.2770, 0.2803, 0.2827, 0.283, 0.2832, 0.283, 0.2828, 0.295, 0.3079, 0.344, 0.3803, 0.4105, 0.4409, 0.455, 0.4694, 0.477, 0.4851, 0.4896, 0.4962, 0.501, 0.5066, 0.511, 0.5160, 0.521, 0.5256, 0.529, 0.5318, 0.535, 0.5383, 0.541, 0.5451, 0.549, 0.5524, 0.556, 0.5597, 0.562, 0.5650, 0.568, 0.5709, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorcheckerSG : Skin K2 85 11 17 -//use also for palette WB const double ColorTemp::ColorchechSGSkiK285_11_17_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1122, 0.149, 0.1866, 0.259, 0.3318, 0.393, 0.4547, 0.469, 0.4846, 0.4845, 0.4844, 0.4838, 0.4834, 0.4837, 0.4840, 0.4847, 0.4854, 0.4852, 0.4849, 0.4842, 0.4835, 0.4832, 0.4828, 0.485, @@ -1236,8 +1101,6 @@ const double ColorTemp::ColorchechSGSkiK285_11_17_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data Colorcheck24 : White A4 L=96 -//use also for palette WB const double ColorTemp::ColorchechWhiA496_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1267, 0.172, 0.2179, 0.317, 0.4164, 0.505, 0.6780, 0.758, 0.8397, 0.865, 0.8911, 0.897, 0.9035, 0.9062, 0.9092, 0.9124, 0.9154, 0.9167, 0.9180, 0.9187, 0.9194, 0.92, 0.9225, 0.9217, 0.9209, 0.921, @@ -1246,7 +1109,6 @@ const double ColorTemp::ColorchechWhiA496_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data Colorcheck24 : foliage Green D1 const double ColorTemp::ColorchechGreD1_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0477, 0.0492, 0.0507, 0.0517, 0.0527, 0.0532, 0.0537, 0.054, 0.0544, 0.0554, 0.0563, 0.0573, 0.0584, 0.0592, 0.0601, 0.0607, 0.0611, 0.0613, 0.0619, 0.626, 0.0634, 0.0646, 0.0659, 0.069, @@ -1255,8 +1117,6 @@ const double ColorTemp::ColorchechGreD1_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorchecSG : black N3 L=6 -//use also for palette WB const double ColorTemp::ColorchechSGBlaN3_6_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0066, 0.0069, 0.0071, 0.0072, 0.0074, 0.0073, 0.0072, 0.0073, 0.0074, 0.0074, 0.0074, 0.0074, 0.0074, 0.0073, 0.0073, 0.0073, 0.0073, 0.0072, 0.0072, 0.0072, 0.0072, 0.0071, 0.0071, 0.0071, @@ -1265,8 +1125,6 @@ const double ColorTemp::ColorchechSGBlaN3_6_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data 468 color : gray K14 L=44 -//use also for palette WB const double ColorTemp::JDC468_GraK14_44_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.04240, 0.0485, 0.05500, 0.0624, 0.06930, 0.084, 0.09820, 0.109, 0.12160, 0.127, 0.13300, 0.13490, 0.13690, 0.1379, 0.13890, 0.1396, 0.14060, 0.1407, 0.14080, 0.1423, 0.14380, 0.1488, 0.15370, 0.157, 0.16040, @@ -1282,10 +1140,6 @@ const double ColorTemp::JDC468_BluM5_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//m5 317 //0.1510 0.2069 0.3047 0.5069 0.6747 0.7351 0.7338 0.7063 0.6732 0.6261 0.5723 0.5401 -// 0.5106 0.4504 0.3907 0.3799 0.3695 0.3005 0.2382 0.2389 0.2610 0.2662 0.2541 -// 0.2426 0.2434 0.2523 0.2692 0.2996 0.3329 0.3498 0.3442 0.3266 0.2996 0.2831 0.3070 0.3799 - const double ColorTemp::JDC468_RedG21va_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1207, 0.141, 0.1585, 0.1810, 0.2073, 0.2529, 0.2959, 0.3210, 0.3476, 0.3350, 0.3232, 0.2845, 0.2564, 0.2140, 0.1823, 0.1523, 0.1266, 0.1001, 0.0792, 0.061, 0.0439, 0.0349, 0.0295, 0.0260, 0.0222, @@ -1293,8 +1147,7 @@ const double ColorTemp::JDC468_RedG21va_spect[97] = { 0.6546, 0.6659, 0.6775, 0.6881, 0.6982, 0.7081, 0.7150, 0.7201, 0.7217, 0.7232, 0.7222, 0.7215, 0.7187, 0.7157, 0.7144, 0.7131, 0.7196, 0.7269, 0.7303, 0.7599, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//g21 177 0.1207 0.1585 0.2073 0.2959 0.3476 0.3232 0.2564 0.1823 0.1266 0.0792 0.0439 0.0295 0.0222 0.0135 0.0087 0.0094 0.0109 0.0086 0.0091 0.0321 -// 0.1368 0.3256 0.4958 0.5884 0.6264 0.6473 0.6659 0.6881 0.7081 0.7201 0.7232 0.7215 0.7157 0.7131 0.7269 0.7599 + const double ColorTemp::JDC468_RedI9_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0258, 0.023, 0.0220, 0.0205, 0.0189, 0.0183, 0.0174, 0.0168, 0.0162, 0.0152, 0.0148, 0.0145, 0.0139, 0.0136, 0.0133, 0.0130, 0.0127, 0.0130, 0.0133, 0.0151, 0.0168, 0.0218, 0.0268, 0.0317, 0.0367, 0.0330, @@ -1303,8 +1156,6 @@ const double ColorTemp::JDC468_RedI9_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//I9 RED 217 0.0258 0.0220 0.0189 0.0174 0.0162 0.0148 0.0139 0.0133 0.0127 0.0133 0.0168 0.0268 0.0367 0.0313 0.0227 0.0255 0.0302 0.0225 0.0209 0.0639 0.2131 0.4369 0.6265 0.7336 0.7784 0.7994 0.8146 0.8277 0.8362 0.8439 0.8504 0.8572 0.8653 0.8715 0.8747 0.8788 - const double ColorTemp::JDC468_YelN10_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0531, 0.0520, 0.0504, 0.0510, 0.0518, 0.0608, 0.0628, 0.0669, 0.0699, 0.0705, 0.0716, 0.0720, 0.0735, 0.0755, 0.0775, 0.0800, 0.0825, 0.0896, 0.0969, 0.1260, 0.1563, 0.2312, 0.3096, 0.4132, 0.5177, 0.5905, 0.6637, @@ -1313,8 +1164,6 @@ const double ColorTemp::JDC468_YelN10_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//n10 348 0.0531 0.0504 0.0518 0.0628 0.0699 0.0716 0.0735 0.0775 0.0825 0.0969 0.1563 0.3096 0.5177 0.6637 0.7251 0.7458 0.7507 0.7414 0.7301 0.7347 0.7438 0.7500 0.7515 0.7538 0.7563 0.7607 0.7686 0.7791 0.7872 0.7935 0.7979 0.8021 0.8058 0.8090 0.8143 0.8259 const double ColorTemp::JDC468_GreN7_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0112, 0.0102, 0.0094, 0.0096, 0.0099, 0.0100, 0.0100, 0.0100, 0.0100, 0.0099, 0.0099, 0.0099, 0.0099, 0.0099, 0.0099, 0.0100, 0.0100, 0.0103, 0.0107, 0.0129, 0.0151, 0.0312, 0.0462, 0.1015, 0.1571, 0.2270, 0.2977, @@ -1323,8 +1172,6 @@ const double ColorTemp::JDC468_GreN7_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//n7 345 0.0112 0.0094 0.0099 0.0100 0.0100 0.0099 0.0099 0.0099 0.0100 0.0107 0.0151 0.0462 0.1571 0.2977 0.3558 0.3321 0.2710 0.1954 0.1251 0.0794 0.0563 0.0452 0.0378 0.0337 0.0335 0.0358 0.0405 0.0497 0.0612 0.0670 0.0644 0.0574 0.0483 0.0436 0.0532 0.0870 - const double ColorTemp::JDC468_GreA10_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0958, 0.1010, 0.1090, 0.1172, 0.1352, 0.1954, 0.1957, 0.2178, 0.2402, 0.2477, 0.2553, 0.2594, 0.2622, 0.2667, 0.2707, 0.2760, 0.2805, 0.2913, 0.3023, 0.3376, 0.3715, 0.4345, 0.5030, 0.5702, 0.6376, 0.6724, 0.7072, @@ -1341,7 +1188,6 @@ const double ColorTemp::JDC468_GreQ7_spect[97] = { //468 Q7 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//a10 Green 10 0.0958 0.1090 0.1352 0.1957 0.2402 0.2553 0.2622 0.2707 0.2805 0.3023 0.3715 0.5030 0.6376 0.7072 0.7216 0.7110 0.6865 0.6446 0.5921 0.5511 0.5238 0.5070 0.4918 0.4830 0.4838 0.4906 0.5046 0.5279 0.5519 0.5649 0.5639 0.5552 0.5407 0.5326 0.5498 0.5966 const double ColorTemp::JDC468_GreK7_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0114, 0.0111, 0.0109, 0.0107, 0.0105, 0.0106, 0.0108, 0.0107, 0.0106, 0.0105, 0.0104, 0.0103, 0.0103, 0.0106, 0.0109, 0.0112, 0.0118, 0.0135, 0.0153, 0.0244, 0.0334, 0.0666, 0.0984, 0.1534, 0.2082, 0.2412, 0.2835, @@ -1350,8 +1196,6 @@ const double ColorTemp::JDC468_GreK7_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//k7 Green 267 0.0114 0.0109 0.0105 0.0108 0.0106 0.0104 0.0103 0.0109 0.0118 0.0153 0.0334 0.0984 0.2082 0.2835 0.2959 0.2735 0.2305 0.1728 0.1156 0.0772 0.0570 0.0468 0.0397 0.0354 0.0355 0.0380 0.0426 0.0523 0.0643 0.0704 0.0676 0.0609 0.0514 0.0468 0.0567 0.0902 - const double ColorTemp::JDC468_PurE24_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0677, 0.901, 0.1043, 0.1298, 0.1534, 0.1913, 0.2297, 0.2553, 0.2756, 0.2789, 0.2620, 0.2380, 0.2135, 0.1837, 0.1536, 0.1312, 0.1068, 0.0867, 0.0663, 0.0517, 0.0368, 0.0309, 0.0247, 0.0214, 0.0186, 0.0151, 0.0116, @@ -1359,10 +1203,7 @@ const double ColorTemp::JDC468_PurE24_spect[97] = { 0.1936, 0.1996, 0.2057, 0.2036, 0.2015, 0.1954, 0.1890, 0.1798, 0.1706, 0.1651, 0.1603, 0.1692, 0.1788, 0.2075, 0.2363, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//E24 Pur 128 0.0677 0.1043 0.1534 0.2297 0.2756 0.2620 0.2135 0.1536 0.1068 0.0663 0.0368 0.0247 0.0186 0.0116 0.0077 0.0079 0.0086 0.0071 0.0072 0.0147 0.0440 0.0880 0.1152 0.1236 0.1287 0.1366 0.1489 0.1697 0.1936 0.2057 0.2015 0.1890 0.1706 0.1603 0.1788 0.2363 - -//spectral data 468 color : Blue H10 - Gamut > WidegamutRGB const double ColorTemp::JDC468_BluH10_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01590, 0.028, 0.03970, 0.0697, 0.09970, 0.1526, 0.20550, 0.253, 0.30110, 0.3412, 0.38180, 0.423, 0.46610, 0.4683, 0.51030, 0.5005, 0.49950, 0.4785, 0.45810, 0.429, 0.39950, 0.374, 0.35010, 0.3135, 0.29630, @@ -1370,9 +1211,6 @@ const double ColorTemp::JDC468_BluH10_spect[97] = { 0.0029, 0.00300, 0.0029, 0.00290, 0.0029, 0.0029, 0.00290, 0.0029, 0.00290, 0.0029, 0.00290, 0.0029, 0.00290, 0.0029, 0.00290, 0.0029, 0.0031, 0.00320, 0.0035, 0.00380, 0.0047, 0.00560, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//0.0159, 0.028, 0.0397, 0.0697, 0.0997, 0.1526, 0.2055, 0.253, 0.3011, 0.3412, 0.3818, 0.423, 0.4661, 0.5103 0.4995 0.4581 0.3995 0.3501 0.2963 -//0.2207 0.1445 0.0906 0.0481 0.0174 0.0052 0.0029 0.0027 0.0027 0.0028 0.0027 0.0028 0.0030 0.0029 0.0029 0.0029 0.0029 0.0029 0.0029 -//0.0029 0.0032 0.0038 0.0056 const double ColorTemp::JDC468_BluD6_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, @@ -1380,52 +1218,39 @@ const double ColorTemp::JDC468_BluD6_spect[97] = { 0.5352, 0.5009, 0.4655, 0.4356, 0.4191, 0.3923, 0.3619, 0.3145, 0.2653, 0.2245, 0.1744, 0.1499, 0.1255, 0.1124, 0.1014, 0.0972, 0.0855, 0.0786, 0.0715, 0.0659, 0.0626, 0.0625, 0.0624, 0.0645, 0.0670, 0.0714, 0.0769, 0.0865, 0.0964, 0.1086, 0.1200, 0.123, 0.1327, 0.1309, 0.1281, 0.1214, 0.1146, 0.1023, 0.0950, 0.0901, 0.0839, 0.0918, 0.1009, 0.1260, 0.1597, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 - - }; -//d6 blue 84 0.1127 0.1773 0.2813 0.4782 0.6470 0.7270 0.7593 0.7591 0.7402 0.7054 0.6617 0.6302 0.5962 0.5352 0.4655 0.4191 0.3619 0.2653 0.1744 0.1255 0.1014 0.0855 0.0715 0.0626 0.0624 0.0670 0.0769 0.0964 0.1200 0.1327 0.1281 0.1146 0.0950 0.0839 0.1009 0.1597 + const double ColorTemp::JDC468_BluF4_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0180, 0.0270, 0.0324, 0.0453, 0.0611, 0.0845, 0.1066, 0.1234, 0.1446, 0.1567, 0.1718, 0.1867, 0.1954, 0.2024, 0.2083, 0.2090, 0.2096, 0.2060, 0.2036, 0.1990, 0.1947, 0.1920, 0.1901, 0.1856, 0.1794, 0.1667, 0.1516, 0.1321, 0.1167, 0.1032, 0.0876, 0.0730, 0.0584, 0.0445, 0.0296, 0.0212, 0.0125, 0.0099, 0.0069, 0.0060, 0.0053, 0.0050, 0.0049, 0.0047, 0.0046, 0.0045, 0.0044, 0.0043, 0.0043, 0.0043, 0.0043, 0.0046, 0.0049, 0.0050, 0.0052, 0.0057, 0.0063, 0.0066, 0.0069, 0.0067, 0.0066, 0.0063, 0.0059, 0.0056, 0.0053, 0.0054, 0.0055, 0.0062, 0.0069, 0.0099, 0.0122, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 - }; - -// f4 blue 134 0.0180 0.0324 0.0611 0.1066 0.1446 0.1718 0.1954 0.2083 0.2096 0.2036 0.1947 0.1901 0.1794 0.1516 0.1167 0.0876 0.0584 0.0296 0.0125 0.0069 0.0053 0.0049 0.0046 0.0044 0.0043 0.0043 0.0049 0.0052 0.0063 0.0069 0.0066 0.0059 0.0053 0.0055 0.0069 0.0122 const double ColorTemp::JDC468_GreI8_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0230, 0.0232, 0.0234, 0.0254, 0.0263, 0.0298, 0.0329, 0.0367, 0.0377, 0.0388, 0.0399, 0.0410, 0.0421, 0.0440, 0.0460, 0.0481, 0.0496, 0.0523, 0.0559, 0.0645, 0.0727, 0.0878, 0.1020, 0.1156, 0.1288, 0.1334, 0.1394, 0.1398, 0.1402, 0.1407, 0.1413, 0.1409, 0.1396, 0.1334, 0.1276, 0.1200, 0.1129, 0.1095, 0.1064, 0.1053, 0.1043, 0.1031, 0.1021, 0.1001, 0.0980, 0.0970, 0.0952, 0.0963, 0.0967, 0.0990, 0.1009, 0.1042, 0.1078, 0.1130, 0.1188, 0.1251, 0.1307, 0.1335, 0.1374, 0.1376, 0.1378, 0.1362, 0.1345, 0.1312, 0.1278, 0.1257, 0.1240, 0.1290, 0.1345, 0.1476, 0.1615, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 - }; -// i8 green215 215 0.0230 0.0234 0.0263 0.0329 0.0377 0.0399 0.0421 0.0460 0.0496 0.0559 0.0727 0.1020 0.1288 0.1394 0.1402 0.1413 0.1396 0.1276 0.1129 0.1064 0.1043 0.1021 0.0980 0.0952 0.0967 0.1009 0.1078 0.1188 0.1307 0.1374 0.1378 0.1345 0.1278 0.1240 0.1345 0.1615 - const double ColorTemp::JDC468_OraO18_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0826, 0.0830, 0.0832, 0.0861, 0.0892, 0.0993, 0.1108, 0.1180, 0.1248, 0.1253, 0.1263, 0.1261, 0.1259, 0.1267, 0.1289, 0.1304, 0.1319, 0.1370, 0.1419, 0.1631, 0.1851, 0.2311, 0.2743, 0.3131, 0.3536, 0.3551, 0.3585, 0.3488, 0.3322, 0.3470, 0.3575, 0.3680, 0.3498, 0.3316, 0.3224, 0.3129, 0.3578, 0.4013, 0.4734, 0.5454, 0.5978, 0.6502, 0.6745, 0.6982, 0.7080, 0.7182, 0.7273, 0.7269, 0.7308, 0.7342, 0.7393, 0.7436, 0.7498, 0.7550, 0.7597, 0.7640, 0.7680, 0.7713, 0.7766, 0.7786, 0.7816, 0.7841, 0.7863, 0.7889, 0.7902, 0.7931, 0.7957, 0.7997, 0.8068, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 - }; -// o18 ora 382 382 0.0826 0.0832 0.0892 0.1108 0.1248 0.1263 0.1259 0.1289 0.1319 0.1419 0.1851 0.2743 0.3536 0.3585 0.3322 0.3470 0.3680 0.3316 0.3129 0.4013 0.5454 0.6502 0.6982 0.7182 0.7269 0.7342 0.7436 0.7550 0.7640 0.7713 0.7766 0.7816 0.7863 0.7902 0.7957 0.8068 + const double ColorTemp::JDC468_OraD17_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0462, 0.0442, 0.0422, 0.0401, 0.0383, 0.0390, 0.0396, 0.0396, 0.0395, 0.0388, 0.0380, 0.0378, 0.0376, 0.0381, 0.0384, 0.0391, 0.0399, 0.0421, 0.0451, 0.0561, 0.0676, 0.0934, 0.1189, 0.1432, 0.1671, 0.1650, 0.1632, 0.1512, 0.1402, 0.1456, 0.1521, 0.1613, 0.1696, 0.1552, 0.1409, 0.1342, 0.1283, 0.1689, 0.2084, 0.2845, 0.3575, 0.4183, 0.4797, 0.5090, 0.5389, 0.5498, 0.5617, 0.5667, 0.5728, 0.5788, 0.5822, 0.5889, 0.5938, 0.6011, 0.6081, 0.6145, 0.6212, 0.6267, 0.6304, 0.6331, 0.6352, 0.6361, 0.6373, 0.6372, 0.6370, 0.6376, 0.6384, 0.6413, 0.6483, 0.6523, 0.6668, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 - }; -// d17 ora 95 95 0.0462 0.0422 0.0383 0.0396 0.0395 0.0380 0.0376 0.0384 0.0399 0.0451 0.0676 0.1189 0.1671 0.1632 0.1402 0.1521 0.1696 0.1409 0.1283 0.2084 0.3575 0.4797 0.5389 0.5617 0.5728 0.5822 0.5938 0.6081 0.6212 0.6304 0.6352 0.6373 0.6370 0.6384 0.6483 0.6668 - -//spectral data ColorLab : Skin 35 15 17 const double ColorTemp::ColabSkin35_15_17_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0211, 0.022, 0.0225, 0.0234, 0.0244, 0.0294, 0.0349, 0.038, 0.0411, 0.0425, 0.0441, 0.0455, 0.0472, 0.0473, 0.0475, 0.0463, 0.0452, 0.0435, 0.0417, 0.0397, 0.0377, @@ -1434,7 +1259,6 @@ const double ColorTemp::ColabSkin35_15_17_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 57 22 18 const double ColorTemp::ColabSkin57_22_18_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0647, 0.0677, 0.0709, 0.0754, 0.0797, 0.099, 0.1181, 0.1296, 0.1409, 0.1469, 0.1529, 0.1594, 0.1657, 0.1672, 0.1683, 0.1648, 0.1615, 0.1561, 0.1506, 0.144, 0.1375, 0.136, 0.1339, @@ -1443,7 +1267,6 @@ const double ColorTemp::ColabSkin57_22_18_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 40 17 17 const double ColorTemp::ColabSkin40_17_17_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0296, 0.0306, 0.0317, 0.0332, 0.0346, 0.042, 0.0498, 0.0543, 0.0588, 0.061, 0.0632, 0.0624, 0.0678, 0.068, 0.0682, 0.0663, 0.0649, 0.0625, 0.0598, 0.057, 0.0540, 0.0535, 0.0529, 0.057, @@ -1452,7 +1275,6 @@ const double ColorTemp::ColabSkin40_17_17_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 91 4 14 const double ColorTemp::ColabSkin91_4_14_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1430, 0.16, 0.1778, 0.202, 0.2303, 0.301, 0.3813, 0.4245, 0.4692, 0.499, 0.5287, 0.5635, 0.5977, 0.6175, 0.6372, 0.6394, 0.6418, 0.638, 0.6341, 0.6228, 0.6117, 0.6121, 0.6125, @@ -1461,7 +1283,6 @@ const double ColorTemp::ColabSkin91_4_14_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 87 8 8 const double ColorTemp::ColabSkin87_8_8_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1433, 0.161, 0.1780, 0.204, 0.2305, 0.306, 0.3828, 0.428, 0.4722, 0.502, 0.5317, 0.5645, 0.5997, 0.618, 0.6366, 0.6368, 0.6370, 0.631, 0.6251, 0.6120, 0.5994, 0.596, @@ -1470,7 +1291,6 @@ const double ColorTemp::ColabSkin87_8_8_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 89 8 21 const double ColorTemp::ColabSkin89_8_21_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1394, 0.152, 0.1659, 0.1855, 0.2052, 0.266, 0.3277, 0.363, 0.3988, 0.422, 0.4450, 0.472, 0.4984, 0.512, 0.5270, 0.5274, 0.5278, 0.522, 0.5177, 0.5065, 0.4960, 0.4975, @@ -1479,7 +1299,6 @@ const double ColorTemp::ColabSkin89_8_21_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 75 8 4 const double ColorTemp::ColabSkin75_8_4_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1030, 0.116, 0.1294, 0.1495, 0.1696, 0.227, 0.2847, 0.319, 0.3524, 0.375, 0.3977, 0.423, 0.4492, 0.462, 0.4770, 0.4768, 0.4767, 0.471, 0.4675, 0.458, 0.4480, 0.444, 0.4408, @@ -1488,7 +1307,6 @@ const double ColorTemp::ColabSkin75_8_4_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 75 10 33 const double ColorTemp::ColabSkin75_10_33_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0873, 0.091, 0.0967, 0.103, 0.1097, 0.135, 0.1617, 0.177, 0.1913, 0.198, 0.2086, 0.218, 0.2289, 0.234, 0.2383, 0.2375, 0.2370, 0.2335, 0.2299, 0.223, 0.2180, 0.222, @@ -1497,7 +1315,6 @@ const double ColorTemp::ColabSkin75_10_33_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 65 33 11 const double ColorTemp::ColabSkin65_33_11_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1067, 0.113, 0.1182, 0.126, 0.1346, 0.165, 0.2033, 0.224, 0.2448, 0.259, 0.2666, 0.277, 0.2891, 0.291, 0.2927, 0.285, 0.2783, 0.268, 0.2569, 0.244, 0.2323, 0.225, 0.2195, @@ -1506,7 +1323,6 @@ const double ColorTemp::ColabSkin65_33_11_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 65 7 24 const double ColorTemp::ColabSkin65_7_24_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0619, 0.066, 0.0710, 0.077, 0.0840, 0.106, 0.1288, 0.142, 0.1546, 0.163, 0.1706, 0.179, 0.1893, 0.194, 0.1989, 0.1988, 0.1987, 0.196, 0.1941, 0.189, 0.1853, 0.188, 0.1894, @@ -1515,7 +1331,6 @@ const double ColorTemp::ColabSkin65_7_24_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 57 19 6 const double ColorTemp::ColabSkin57_19_6_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0662, 0.071, 0.0773, 0.085, 0.0939, 0.115, 0.1491, 0.165, 0.1821, 0.192, 0.2019, 0.214, 0.2236, 0.228, 0.2321, 0.2298, 0.2266, 0.221, 0.2161, 0.208, 0.2019, 0.199, @@ -1524,7 +1339,6 @@ const double ColorTemp::ColabSkin57_19_6_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 57 4 19 const double ColorTemp::ColabSkin57_4_19_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0430, 0.047, 0.0505, 0.056, 0.0614, 0.077, 0.0963, 0.1063, 0.1164, 0.123, 0.1294, 0.137, 0.1448, 0.149, 0.1533, 0.154, 0.1544, 0.153, 0.1521, 0.149, 0.1463, 0.148, @@ -1533,7 +1347,6 @@ const double ColorTemp::ColabSkin57_4_19_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 57 10 28 const double ColorTemp::ColabSkin57_10_28_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0463, 0.048, 0.0505, 0.053, 0.0563, 0.069, 0.0816, 0.088, 0.0961, 0.102, 0.1041, 0.1085, 0.1135, 0.1155, 0.1174, 0.1168, 0.1161, 0.114, 0.1118, 0.1085, 0.1054, 0.1074, 0.1094, 0.124, @@ -1542,7 +1355,6 @@ const double ColorTemp::ColabSkin57_10_28_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 40 7 19 const double ColorTemp::ColabSkin40_7_19_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0215, 0.023, 0.0240, 0.026, 0.0275, 0.033, 0.0409, 0.044, 0.0487, 0.051, 0.0532, 0.056, 0.0585, 0.0595, 0.0608, 0.0605, 0.0602, 0.059, 0.0581, 0.057, 0.0549, 0.0555, 0.0562, @@ -1551,7 +1363,6 @@ const double ColorTemp::ColabSkin40_7_19_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 40 17 6 const double ColorTemp::ColabSkin40_17_6_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0314, 0.033, 0.0359, 0.039, 0.0427, 0.054, 0.0668, 0.074, 0.0812, 0.085, 0.0895, 0.094, 0.0985, 0.10, 0.1015, 0.0991, 0.0984, 0.096, 0.0930, 0.089, 0.0861, 0.085, 0.0828, @@ -1560,7 +1371,6 @@ const double ColorTemp::ColabSkin40_17_6_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 40 4 11 const double ColorTemp::ColabSkin40_4_11_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0209, 0.023, 0.0250, 0.028, 0.0310, 0.039, 0.0497, 0.056, 0.0605, 0.064, 0.0675, 0.072, 0.0758, 0.078, 0.0802, 0.0803, 0.0804, 0.0797, 0.0790, 0.078, 0.0758, 0.076, 0.0764, 0.082, @@ -1569,7 +1379,6 @@ const double ColorTemp::ColabSkin40_4_11_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 33 6 15 const double ColorTemp::ColabSkin33_6_15_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0143, 0.015, 0.0162, 0.0175, 0.0189, 0.023, 0.0286, 0.031, 0.0342, 0.036, 0.0376, 0.039, 0.0415, 0.0425, 0.0434, 0.0432, 0.0431, 0.0425, 0.0418, 0.041, 0.0396, 0.04, @@ -1578,7 +1387,6 @@ const double ColorTemp::ColabSkin33_6_15_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 33 15 5 const double ColorTemp::ColabSkin33_15_5_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0212, 0.023, 0.0243, 0.0265, 0.0289, 0.037, 0.0451, 0.051, 0.0549, 0.058, 0.0605, 0.063, 0.0666, 0.0675, 0.0686, 0.0672, 0.0664, 0.065, 0.0627, 0.0061, 0.0580, 0.0565, 0.0557, @@ -1586,7 +1394,7 @@ const double ColorTemp::ColabSkin33_15_5_spect[97] = { 0.0992, 0.1132, 0.1272, 0.1345, 0.1425, 0.1455, 0.1489, 0.1505, 0.1518, 0.1527, 0.1536, 0.1545, 0.1552, 0.1555, 0.1557, 0.1558, 0.1559, 0.1558, 0.1557, 0.1155, 0.1552, 0.1551, 0.1550, 0.1551, 0.1552, 0.1560, 0.1569, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 33 10 15 + const double ColorTemp::ColabSkin33_10_15_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0166, 0.0175, 0.0183, 0.0194, 0.0207, 0.0260, 0.0306, 0.033, 0.0364, 0.0380, 0.0396, 0.0415, 0.0431, 0.0437, 0.0443, 0.0438, 0.0432, 0.0420, 0.0409, 0.0395, 0.0380, 0.0380, @@ -1595,7 +1403,6 @@ const double ColorTemp::ColabSkin33_10_15_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 24 5 6 const double ColorTemp::ColabSkin24_5_6_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0086, 0.0095, 0.0102, 0.0112, 0.0127, 0.0167, 0.0203, 0.0225, 0.0248, 0.0265, 0.0277, 0.0295, 0.0309, 0.0315, 0.0325, 0.0324, 0.0323, 0.0319, 0.0315, 0.0307, 0.0299, 0.0298, @@ -1604,7 +1411,6 @@ const double ColorTemp::ColabSkin24_5_6_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 26 18 18 const double ColorTemp::ColabSkin26_18_18_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0135, 0.0137, 0.0138, 0.0139, 0.0140, 0.0163, 0.0187, 0.0202, 0.0215, 0.0220, 0.0224, 0.0228, 0.0231, 0.0227, 0.0222, 0.0212, 0.0202, 0.0189, 0.0174, 0.0161, 0.0146, 0.0143, @@ -1613,7 +1419,6 @@ const double ColorTemp::ColabSkin26_18_18_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 24 7 5 const double ColorTemp::ColabSkin24_7_5_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0093, 0.0105, 0.0111, 0.0125, 0.0137, 0.0180, 0.0221, 0.0245, 0.0270, 0.0285, 0.0301, 0.0316, 0.0336, 0.0345, 0.0353, 0.0350, 0.0349, 0.0343, 0.0338, 0.0329, 0.0320, 0.0317, 0.0315, @@ -1622,7 +1427,6 @@ const double ColorTemp::ColabSkin24_7_5_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 24 4 2 const double ColorTemp::ColabSkin20_4_2_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0064, 0.0074, 0.0080, 0.00903, 0.0104, 0.0139, 0.0174, 0.0189, 0.0216, 0.0222, 0.0243, 0.0258, 0.0274, 0.0282, 0.0291, 0.0290, 0.0290, 0.0288, 0.0284, 0.0278, 0.0272, 0.0270, 0.0267, 0.0276, @@ -1631,7 +1435,6 @@ const double ColorTemp::ColabSkin20_4_2_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 98 -2 10 const double ColorTemp::ColabSkin98_m2_10_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1627, 0.1870, 0.2115, 0.2480, 0.2860, 0.3870, 0.4878, 0.5460, 0.6050, 0.6460, 0.6874, 0.7355, 0.7836, 0.8130, 0.8424, 0.8494, 0.8543, 0.8520, 0.8508, 0.8390, 0.8267, 0.8274, 0.8280, @@ -1640,7 +1443,6 @@ const double ColorTemp::ColabSkin98_m2_10_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 90 -1 20 const double ColorTemp::ColabSkin90_m1_20_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1228, 0.138, 0.1532, 0.175, 0.1987, 0.261, 0.3279, 0.365, 0.4022, 0.428, 0.4537, 0.4842, 0.5147, 0.5337, 0.5521, 0.557, 0.5611, 0.5602, 0.5593, 0.551, 0.5438, 0.548, @@ -1649,7 +1451,6 @@ const double ColorTemp::ColabSkin90_m1_20_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 95 0 4 const double ColorTemp::ColabSkin95_0_4_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1614, 0.1865, 0.2118, 0.2495, 0.2889, 0.392, 0.4969, 0.557, 0.6185, 0.6605, 0.7035, 0.749, 0.8018, 0.832, 0.8605, 0.865, 0.8696, 0.866, 0.8633, 0.849, 0.8365, 0.834, @@ -1658,7 +1459,6 @@ const double ColorTemp::ColabSkin95_0_4_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 81 2 14 const double ColorTemp::ColabSkin81_2_14_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1029, 0.116, 0.1285, 0.148, 0.1672, 0.222, 0.2774, 0.311, 0.3412, 0.362, 0.3849, 0.410, 0.4359, 0.451, 0.4659, 0.468, 0.4706, 0.4685, 0.4664, 0.4685, 0.4512, 0.4525, 0.4536, @@ -1667,7 +1467,6 @@ const double ColorTemp::ColabSkin81_2_14_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 87 3 10 const double ColorTemp::ColabSkin87_3_10_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1295, 0.146, 0.1639, 0.190, 0.2160, 0.291, 0.3626, 0.405, 0.4480, 0.476, 0.5066, 0.541, 0.5743, 0.593, 0.6136, 0.616, 0.6186, 0.614, 0.6119, 0.601, 0.5911, 0.5905, @@ -1676,7 +1475,6 @@ const double ColorTemp::ColabSkin87_3_10_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 77 12 21 const double ColorTemp::ColabSkin77_12_21_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1039, 0.111, 0.1205, 0.132, 0.1448, 0.185, 0.2261, 0.249, 0.2734, 0.287, 0.3028, 0.318, 0.3364, 0.345, 0.3525, 0.351, 0.3499, 0.345, 0.3397, 0.3295, 0.3224, 0.329, 0.3234, @@ -1685,7 +1483,6 @@ const double ColorTemp::ColabSkin77_12_21_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Skin 70 7 32 const double ColorTemp::ColabSkin70_7_32_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0695, 0.074, 0.0777, 0.084, 0.0890, 0.104, 0.1321, 0.144, 0.1565, 0.164, 0.1713, 0.1795, 0.1889, 0.194, 0.1978, 0.198, 0.1983, 0.196, 0.1939, 0.189, 0.1853, 0.189, @@ -1694,7 +1491,6 @@ const double ColorTemp::ColabSkin70_7_32_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Sky 60 0 -31 const double ColorTemp::ColabSky60_0_m31_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0752, 0.094, 0.1121, 0.141, 0.1699, 0.243, 0.3150, 0.357, 0.4015, 0.432, 0.4631, 0.497, 0.5325, 0.553, 0.5730, 0.574, 0.5758, 0.572, 0.5695, 0.559, 0.5503, 0.539, @@ -1703,7 +1499,6 @@ const double ColorTemp::ColabSky60_0_m31_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : Sky 42 0 -24 const double ColorTemp::ColabSky42_0_m24_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0336, 0.041, 0.0501, 0.063, 0.0761, 0.103, 0.1412, 0.151, 0.1799, 0.193, 0.2076, 0.223, 0.2387, 0.248, 0.2569, 0.2575, 0.2581, 0.256, 0.2553, 0.250, 0.2466, 0.2411, @@ -1711,7 +1506,6 @@ const double ColorTemp::ColabSky42_0_m24_spect[97] = { 0.0979, 0.112, 0.1269, 0.134, 0.1430, 0.147, 0.1497, 0.151, 0.1529, 0.1545, 0.1561, 0.158, 0.1603, 0.1616, 0.1627, 0.1625, 0.1623, 0.1614, 0.1605, 0.159, 0.1575, 0.1567, 0.1557, 0.1563, 0.1569, 0.159, 0.1627, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//spectral data ColorLab : blue 77 -44 -50 const double ColorTemp::Colorblue_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, @@ -1720,9 +1514,7 @@ const double ColorTemp::Colorblue_spect[97] = { 0.0601, 0.0525, 0.0455, 0.0423, 0.0386, 0.0370, 0.0358, 0.0354, 0.0351, 0.0368, 0.0382, 0.0413, 0.0449, 0.0474, 0.0492, 0.0484, 0.0477, 0.0460, 0.0437, 0.0402, 0.0371, 0.0349, 0.0329, 0.0341, 0.0356, 0.0410, 0.0462, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 - }; -//0.1571 0.2150 0.3040 0.3684 0.3952 0.3965 0.3782 0.3418 0.2995 0.2543 0.2043 0.1686 0.1420 0.1070 0.0785 0.0725 0.0755 0.0695 0.0680 0.0914 0.1379 0.1833 0.2038 0.2065 0.2079 0.2110 0.2176 0.2319 0.2518 0.2632 0.2616 0.2522 0.2380 0.2290 0.2432 0.2901 const double ColorTemp::ColorViolA1_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, @@ -1731,7 +1523,6 @@ const double ColorTemp::ColorViolA1_spect[97] = { 0.2065, 0.207, 0.2079, 0.209, 0.2110, 0.214, 0.2176, 0.226, 0.2319, 0.242, 0.2518, 0.258, 0.2632, 0.263, 0.2616, 0.256, 0.2522, 0.246, 0.2380, 0.233, 0.2290, 0.235, 0.2432, 0.265, 0.2901, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//0.2270 0.2413 0.3287 0.4079 0.4469 0.4594 0.4535 0.4268 0.3886 0.3427 0.2866 0.2433 0.2087 0.1604 0.1181 0.1069 0.1098 0.0985 0.0916 0.1130 0.1496 0.1746 0.1783 0.1742 0.1738 0.1763 0.1831 0.1975 0.2169 0.2274 0.2247 0.2140 0.1990 0.1897 0.2039 0.2508 const double ColorTemp::ColorViolA4_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, @@ -1741,7 +1532,6 @@ const double ColorTemp::ColorViolA4_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//0.1426 0.2660 0.3556 0.4259 0.4459 0.4317 0.3942 0.3425 0.2917 0.2413 0.1885 0.1524 0.1267 0.0948 0.0700 0.0661 0.0708 0.0671 0.0699 0.1092 0.2099 0.3582 0.4857 0.5583 0.5950 0.6146 0.6307 0.6495 0.6720 0.6825 0.6809 0.6718 0.6593 0.6517 0.6649 0.7066 const double ColorTemp::ColorViolA6_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1426, 0.203, 0.2660, 0.315, 0.3556, 0.392, 0.4259, 0.435, 0.4459, 0.437, 0.4317, 0.417, 0.3942, 0.365, 0.3425, 0.317, 0.2917, 0.266, 0.2413, 0.218, 0.1885, 0.172, 0.1524, 0.141, @@ -1750,7 +1540,6 @@ const double ColorTemp::ColorViolA6_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//0.4939 0.3859 0.4198 0.4780 0.5328 0.5672 0.5880 0.5994 0.6029 0.5981 0.5808 0.5618 0.5369 0.4819 0.4190 0.3921 0.3815 0.3400 0.2991 0.2977 0.3090 0.3088 0.2930 0.2753 0.2660 0.2636 0.2678 0.2811 0.2995 0.3125 0.3153 0.3111 0.3006 0.2952 0.3116 0.3584 const double ColorTemp::ColorBlueSkyK3_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4939, 0.435, 0.3859, 0.403, 0.4198, 0.446, 0.4780, 0.505, 0.5328, 0.552, 0.5672, 0.578, 0.5880, 0.595, 0.5994, 0.602, 0.6029, 0.600, 0.5981, 0.588, 0.5808, 0.571, 0.5618, 0.551, @@ -1759,8 +1548,6 @@ const double ColorTemp::ColorBlueSkyK3_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//0.4058 0.4734 0.5372 0.6051 0.6698 0.6992 0.7118 0.7135 0.7071 0.6938 0.6702 0.6511 0.6282 0.5732 0.5103 0.4913 0.4926 0.4604 0.4341 0.4648 0.5111 0.5335 0.5283 0.5154 0.5098 0.5093 0.5151 0.5309 0.5520 0.5642 0.5657 0.5598 0.5489 0.5430 0.5601 0.6067 - const double ColorTemp::ColorBlueSkyK9_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4058, 0.441, 0.4734, 0.502, 0.5372, 0.585, 0.6051, 0.643, 0.6698, 0.685, 0.6992, 0.705, 0.7118, 0.712, 0.7135, 0.711, 0.7071, 0.702, 0.6938, 0.681, 0.6702, 0.663, 0.6511, 0.642, @@ -1769,7 +1556,6 @@ const double ColorTemp::ColorBlueSkyK9_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//42 C4 0.3280 0.2611 0.3781 0.4646 0.5292 0.5732 0.6112 0.6307 0.6310 0.6181 0.5847 0.5488 0.5066 0.4358 0.3585 0.3151 0.2855 0.2309 0.1786 0.1546 0.1443 0.1359 0.1245 0.1151 0.1120 0.1127 0.1169 0.1275 0.1421 0.1504 0.1488 0.1416 0.1303 0.1241 0.1355 0.1739 const double ColorTemp::ColorBlueSkyC4_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3280, 0.2950, 0.2611, 0.304, 0.3781, 0.423, 0.4646, 0.498, 0.5292, 0.555, 0.5732, 0.591, 0.6112, 0.6221, 0.6307, 0.631, 0.6310, 0.625, 0.6181, 0.607, 0.5847, 0.563, 0.5488, 0.524, @@ -1778,8 +1564,6 @@ const double ColorTemp::ColorBlueSkyC4_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//52 C14 0.5697 0.4660 0.5000 0.5560 0.6072 0.6402 0.6632 0.6850 0.7069 0.7292 0.7488 0.7678 0.7786 0.7721 0.7544 0.7394 0.7232 0.6889 0.6446 0.6171 0.5966 0.5743 0.5425 0.5093 0.4884 0.4784 0.4774 0.4822 0.4944 0.5076 0.5186 0.5268 0.5303 0.5332 0.5454 0.5760 const double ColorTemp::ColorBlueSkyC14_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5697, 0.511, 0.4660, 0.481, 0.5000, 0.528, 0.5560, 0.583, 0.6072, 0.622, 0.6402, 0.653, 0.6632, 0.674, 0.6850, 0.699, 0.7069, 0.717, 0.7292, 0.735, 0.7488, 0.757, 0.7678, 0.773, @@ -1788,8 +1572,6 @@ const double ColorTemp::ColorBlueSkyC14_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//80 E4 0.1483 0.1756 0.2536 0.3084 0.3665 0.4189 0.4746 0.5127 0.5239 0.5193 0.4917 0.4569 0.4123 0.3422 0.2672 0.2179 0.1820 0.1356 0.0972 0.0784 0.0698 0.0646 0.0592 0.0556 0.0546 0.0551 0.0571 0.0611 0.0670 0.0701 0.0692 0.0661 0.0620 0.0606 0.0663 0.0834 const double ColorTemp::ColorBlueSkyE4_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1483, 0.161, 0.1756, 0.213, 0.2536, 0.283, 0.3084, 0.331, 0.3665, 0.387, 0.4189, 0.445, 0.4746, 0.496, 0.5127, 0.519, 0.5239, 0.522, 0.5193, 0.508, 0.4917, 0.476, 0.4569, 0.431, @@ -1798,8 +1580,6 @@ const double ColorTemp::ColorBlueSkyE4_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//229 M1 0.3100 0.2922 0.3514 0.4042 0.4443 0.4769 0.5002 0.5133 0.5187 0.5179 0.5057 0.4928 0.4729 0.4235 0.3643 0.3371 0.3234 0.2827 0.2418 0.2338 0.2370 0.2329 0.2184 0.2028 0.1958 0.1937 0.1973 0.2084 0.2244 0.2351 0.2372 0.2331 0.2239 0.2178 0.2319 0.2731 const double ColorTemp::ColorBlueSkyM1_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3100, 0.303, 0.2922, 0.322, 0.3514, 0.376, 0.4042, 0.424, 0.4443, 0.457, 0.4769, 0.497, 0.5002, 0.507, 0.5133, 0.516, 0.5187, 0.518, 0.5179, 0.511, 0.5057, 0.497, 0.4928, 0.483, @@ -1808,8 +1588,6 @@ const double ColorTemp::ColorBlueSkyM1_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//514 2B1 0.5277 0.4431 0.4972 0.5820 0.6387 0.6750 0.7001 0.7140 0.7202 0.7193 0.7053 0.6891 0.6657 0.6181 0.5614 0.5312 0.5101 0.4589 0.4045 0.3857 0.3826 0.3751 0.3574 0.3393 0.3314 0.3304 0.3368 0.3523 0.3742 0.3874 0.3883 0.3818 0.3693 0.3616 0.3800 0.4324 const double ColorTemp::ColorBlueSky2B1_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5277, 0.485, 0.4431, 0.476, 0.4972, 0.539, 0.5820, 0.607, 0.6387, 0.653, 0.6750, 0.691, 0.7001, 0.707, 0.7140, 0.718, 0.7202, 0.720, 0.7193, 0.713, 0.7053, 0.695, 0.6891, 0.674, @@ -1818,8 +1596,6 @@ const double ColorTemp::ColorBlueSky2B1_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//368 T7 0.1943 0.3199 0.4536 0.5443 0.6043 0.6499 0.6839 0.7125 0.7329 0.7482 0.7527 0.7514 0.7383 0.7028 0.6526 0.6034 0.5500 0.4708 0.3848 0.3268 0.2929 0.2712 0.2493 0.2316 0.2243 0.2234 0.2288 0.2436 0.2640 0.2762 0.2767 0.2693 0.2566 0.2489 0.2665 0.3165 const double ColorTemp::ColorBlueSkyT7_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1943, 0.256, 0.3199, 0.376, 0.4536, 0.494, 0.5443, 0.572, 0.6043, 0.631, 0.6499, 0.664, 0.6839, 0.698, 0.7125, 0.726, 0.7329, 0.741, 0.7482, 0.751, 0.7527, 0.752, 0.7514, 0.745, @@ -1828,9 +1604,6 @@ const double ColorTemp::ColorBlueSkyT7_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - - -//399 U19 0.5829 0.4865 0.4927 0.5690 0.6221 0.6532 0.6728 0.6832 0.6889 0.6884 0.6771 0.6648 0.6465 0.6038 0.5524 0.5297 0.5194 0.4797 0.4387 0.4356 0.4455 0.4444 0.4282 0.4094 0.4009 0.3992 0.4046 0.4185 0.4385 0.4515 0.4545 0.4505 0.4411 0.4368 0.4539 0.5013 const double ColorTemp::ColorBlueSkyU19_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5829, 0.534, 0.4865, 0.489, 0.4927, 0.532, 0.5690, 0.593, 0.6221, 0.641, 0.6532, 0.662, 0.6728, 0.674, 0.6832, 0.687, 0.6889, 0.688, 0.6884, 0.683, 0.6771, 0.671, 0.6648, 0.665, @@ -1839,8 +1612,6 @@ const double ColorTemp::ColorBlueSkyU19_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//382 U2 0.3594 0.3425 0.3214 0.3654 0.4097 0.4360 0.4590 0.4793 0.5002 0.5234 0.5476 0.5745 0.5940 0.5901 0.5703 0.5545 0.5384 0.5029 0.4592 0.4334 0.4149 0.3947 0.3657 0.3363 0.3177 0.3087 0.3077 0.3123 0.3231 0.3351 0.3454 0.3520 0.3545 0.3562 0.3674 0.3976 const double ColorTemp::ColorBlueSkyU2_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3594, 0.345, 0.3425, 0.333, 0.3214, 0.346, 0.3654, 0.387, 0.4097, 0.424, 0.4360, 0.446, 0.4590, 0.467, 0.4793, 0.494, 0.5002, 0.517, 0.5234, 0.538, 0.5476, 0.564, 0.5745, 0.583, @@ -1849,9 +1620,6 @@ const double ColorTemp::ColorBlueSkyU2_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - - -//378 T17 0.4213 0.3332 0.4205 0.5078 0.5650 0.6025 0.6223 0.6279 0.6195 0.5981 0.5578 0.5197 0.4785 0.4074 0.3325 0.3030 0.2918 0.2511 0.2125 0.2105 0.2198 0.2199 0.2083 0.1945 0.1895 0.1898 0.1954 0.2094 0.2288 0.2406 0.2399 0.2317 0.2189 0.2108 0.2261 0.2755 const double ColorTemp::ColorBlueSkyT17_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4213, 0.376, 0.3332, 0.387, 0.4205, 0.467, 0.5078, 0.532, 0.5650, 0.587, 0.6025, 0.611, 0.6223, 0.624, 0.6279, 0.623, 0.6195, 0.607, 0.5981, 0.576, 0.5578, 0.534, 0.5197, 0.499, @@ -1860,8 +1628,6 @@ const double ColorTemp::ColorBlueSkyT17_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//236 M8 -0.0593 0.0128 0.0031 0.0149 0.0197 0.0221 0.0223 0.0230 0.0232 0.0237 0.0243 0.0247 0.0249 0.0249 0.0248 0.0247 0.0244 0.0240 0.0240 0.0242 0.0244 0.0247 0.0252 0.0254 0.0262 0.0269 0.0271 0.0273 0.0278 0.0280 0.0276 0.0275 0.0282 0.0288 0.0295 0.0303 const double ColorTemp::ColorBlackM8_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0593, 0.040, 0.0128, 0.023, 0.0031, 0.024, 0.0149, 0.017, 0.0197, 0.021, 0.0221, 0.022, 0.0223, 0.023, 0.0230, 0.023, 0.0232, 0.023, 0.0237, 0.024, 0.0243, 0.024, 0.0247, 0.024, @@ -1870,8 +1636,6 @@ const double ColorTemp::ColorBlackM8_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//240 M12 -0.0377 0.0146 0.0167 0.0222 0.0257 0.0261 0.0270 0.0271 0.0274 0.0281 0.0287 0.0299 0.0306 0.0304 0.0297 0.0285 0.0277 0.0267 0.0257 0.0257 0.0258 0.0259 0.0263 0.0276 0.0279 0.0288 0.0297 0.0302 0.0304 0.0303 0.0302 0.0303 0.0310 0.0321 0.0337 0.0356 const double ColorTemp::ColorBlackM12_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0377, 0.022, 0.0146, 0.015, 0.0167, 0.020, 0.0222, 0.023, 0.0257, 0.026, 0.0261, 0.027, 0.0270, 0.027, 0.0271, 0.027, 0.0274, 0.028, 0.0281, 0.028, 0.0287, 0.029, 0.0299, 0.030, @@ -1880,8 +1644,6 @@ const double ColorTemp::ColorBlackM12_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//241 M13 0.2961 0.0487 0.0261 0.0330 0.0296 0.0305 0.0305 0.0314 0.0320 0.0322 0.0335 0.0348 0.0352 0.0347 0.0336 0.0325 0.0314 0.0299 0.0284 0.0284 0.0286 0.0288 0.0290 0.0299 0.0306 0.0314 0.0320 0.0328 0.0332 0.0331 0.0330 0.0328 0.0337 0.0350 0.0366 0.0385 const double ColorTemp::ColorBlackM13_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2961, 0.100, 0.0487, 0.035, 0.0261, 0.030, 0.0330, 0.031, 0.0296, 0.030, 0.0305, 0.030, 0.0305, 0.031, 0.0314, 0.032, 0.0320, 0.032, 0.0322, 0.033, 0.0335, 0.034, 0.0348, 0.035, @@ -1890,7 +1652,6 @@ const double ColorTemp::ColorBlackM13_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//525 2B12 0.3848 0.4127 0.4780 0.5375 0.5917 0.6194 0.6353 0.6485 0.6625 0.6784 0.7010 0.7367 0.7706 0.7847 0.7843 0.7826 0.7799 0.7689 0.7521 0.7463 0.7401 0.7314 0.7168 0.7008 0.6904 0.6860 0.6861 0.6896 0.6986 0.7064 0.7138 0.7185 0.7233 0.7281 0.7338 0.7498 const double ColorTemp::ColorWhite2B12_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.3848, 0.405, 0.4127, 0.435, 0.4780, 0.501, 0.5375, 0.572, 0.5917, 0.606, 0.6194, 0.627, 0.6353, 0.642, 0.6485, 0.653, 0.6625, 0.669, 0.6784, 0.692, 0.7010, 0.072, 0.7367, 0.0760, @@ -1899,8 +1660,6 @@ const double ColorTemp::ColorWhite2B12_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//527 2B14 0.6608 0.5900 0.6114 0.6747 0.7329 0.7599 0.7706 0.7776 0.7831 0.7890 0.7952 0.8074 0.8185 0.8214 0.8201 0.8218 0.8244 0.8229 0.8192 0.8281 0.8344 0.8388 0.8415 0.8445 0.8495 0.8521 0.8556 0.8604 0.8666 0.8687 0.8687 0.8672 0.8682 0.8703 0.8720 0.8803 const double ColorTemp::ColorWhite2B14_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6608, 0.631, 0.5900, 0.605, 0.6114, 0.634, 0.6747, 0.698, 0.7329, 0.745, 0.7599, 0.765, 0.7706, 0.775, 0.7776, 0.781, 0.7831, 0.786, 0.7890, 0.792, 0.7952, 0.797, 0.8074, 0.810, @@ -1909,7 +1668,6 @@ const double ColorTemp::ColorWhite2B14_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//97 97 0.0031 0.0047 0.0056 0.0064 0.0070 0.0070 0.0071 0.0066 0.0065 0.0065 0.0064 0.0063 0.0063 0.0058 0.0052 0.0052 0.0053 0.0047 0.0044 0.0052 0.0066 0.0077 0.0081 0.0082 0.0084 0.0089 0.0096 0.0106 0.0121 0.0127 0.0128 0.0124 0.0115 0.0117 0.0133 0.0169 const double ColorTemp::JDC468_Blackred97_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0031, 0.0035, 0.0047, 0.0050, 0.0056, 0.0060, 0.0064, 0.0065, 0.0070, 0.007, 0.0070, 0.007, 0.0071, 0.007, 0.0066, 0.007, 0.0065, 0.006, 0.0065, 0.006, 0.0064, 0.006, 0.0063, @@ -1918,7 +1676,6 @@ const double ColorTemp::JDC468_Blackred97_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//443 443 0.0067 0.0068 0.0067 0.0074 0.0083 0.0088 0.0092 0.0093 0.0098 0.0099 0.0101 0.0106 0.0109 0.0104 0.0094 0.0086 0.0075 0.0058 0.0044 0.0039 0.0037 0.0038 0.0036 0.0035 0.0036 0.0033 0.0033 0.0036 0.0038 0.0042 0.0041 0.0036 0.0033 0.0035 0.0042 0.0062 const double ColorTemp::JDC468_Blackredbl443_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0067, 0.0067, 0.0068, 0.0068, 0.0067, 0.0070, 0.0074, 0.008, 0.0083, 0.0085, 0.0088, 0.009, 0.0092, 0.0092, 0.0093, 0.0096, 0.0098, 0.0098, 0.0099, 0.01, 0.0101, 0.0104, 0.0106, @@ -1927,8 +1684,6 @@ const double ColorTemp::JDC468_Blackredbl443_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//27 27 0.0060 0.0064 0.0070 0.0076 0.0086 0.0086 0.0088 0.0089 0.0089 0.0083 0.0079 0.0078 0.0077 0.0067 0.0059 0.0057 0.0056 0.0046 0.0041 0.0045 0.0050 0.0056 0.0054 0.0053 0.0054 0.0055 0.0057 0.0065 0.0073 0.0079 0.0080 0.0075 0.0067 0.0068 0.0081 0.0114 const double ColorTemp::JDC468_Blackbl27_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0060, 0.0062, 0.0064, 0.0066, 0.0070, 0.0073, 0.0076, 0.008, 0.0086, 0.0086, 0.0086, 0.0087, 0.0088, 0.0088, 0.0089, 0.0089, 0.0089, 0.0085, 0.0083, 0.008, 0.0079, 0.0078, 0.0078, @@ -1937,7 +1692,6 @@ const double ColorTemp::JDC468_Blackbl27_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//28 28 0.0092 0.0118 0.0155 0.0218 0.0267 0.0296 0.0312 0.0306 0.0282 0.0244 0.0205 0.0186 0.0167 0.0126 0.0091 0.0080 0.0071 0.0050 0.0042 0.0042 0.0044 0.0045 0.0045 0.0042 0.0041 0.0039 0.0040 0.0043 0.0048 0.0050 0.0047 0.0042 0.0041 0.0042 0.0049 0.0074 const double ColorTemp::JDC468_Blackbl28_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0092, 0.01, 0.0118, 0.012, 0.0155, 0.016, 0.0218, 0.025, 0.0267, 0.028, 0.0296, 0.03, 0.0312, 0.031, 0.0306, 0.03, 0.0282, 0.026, 0.0244, 0.022, 0.0205, 0.02, 0.0186, 0.017, 0.0167, @@ -1946,7 +1700,6 @@ const double ColorTemp::JDC468_Blackbl28_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//214 214 0.0072 0.0062 0.0061 0.0064 0.0069 0.0071 0.0075 0.0081 0.0082 0.0088 0.0103 0.0126 0.0145 0.0146 0.0140 0.0133 0.0118 0.0094 0.0070 0.0059 0.0051 0.0046 0.0045 0.0043 0.0045 0.0045 0.0048 0.0056 0.0065 0.0072 0.0067 0.0065 0.0057 0.0058 0.0068 0.0103 const double ColorTemp::JDC468_Blackgr214_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0072, 0.007, 0.0062, 0.0062, 0.0061, 0.0063, 0.0064, 0.0067, 0.0069, 0.007, 0.0071, 0.0072, 0.0075, 0.008, 0.0081, 0.008, 0.0082, 0.0085, 0.0088, 0.009, 0.0103, 0.011, 0.0126, @@ -1955,9 +1708,6 @@ const double ColorTemp::JDC468_Blackgr214_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - - -//436 436 0.0095 0.0123 0.0173 0.0242 0.0293 0.0317 0.0310 0.0283 0.0246 0.0197 0.0152 0.0129 0.0112 0.0083 0.0063 0.0059 0.0056 0.0045 0.0043 0.0050 0.0059 0.0064 0.0062 0.0060 0.0060 0.0062 0.0066 0.0075 0.0086 0.0093 0.0089 0.0082 0.0073 0.0072 0.0088 0.0139 const double ColorTemp::JDC468_Blackbl436_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0095, 0.01, 0.0123, 0.013, 0.0173, 0.02, 0.0242, 0.026, 0.0293, 0.03, 0.0317, 0.031, 0.0310, 0.03, 0.0283, 0.025, 0.0246, 0.02, 0.0197, 0.018, 0.0152, 0.014, 0.0129, 0.012, @@ -1966,9 +1716,6 @@ const double ColorTemp::JDC468_Blackbl436_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - - -//455 455 0.1560 0.1943 0.2724 0.4469 0.5896 0.6393 0.6390 0.6239 0.6096 0.5895 0.5698 0.5662 0.5603 0.5304 0.4977 0.4975 0.4998 0.4601 0.4261 0.4520 0.4986 0.5237 0.5270 0.5260 0.5297 0.5375 0.5504 0.5711 0.5910 0.6023 0.6029 0.5977 0.5880 0.5830 0.5978 0.6345 const double ColorTemp::JDC468_Whitebl455_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1560, 0.18, 0.1943, 0.25, 0.2724, 0.40, 0.4469, 0.50, 0.5896, 0.60, 0.6393, 0.639, 0.6390, 0.625, 0.6239, 0.61, 0.6096, 0.60, 0.5895, 0.57, 0.5698, 0.567, 0.5662, 0.56, @@ -1977,8 +1724,6 @@ const double ColorTemp::JDC468_Whitebl455_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//101 101 0.0076 0.0094 0.0116 0.0139 0.0158 0.0158 0.0152 0.0142 0.0130 0.0111 0.0094 0.0090 0.0085 0.0069 0.0058 0.0057 0.0058 0.0048 0.0044 0.0060 0.0094 0.0126 0.0141 0.0141 0.0148 0.0157 0.0172 0.0197 0.0227 0.0245 0.0242 0.0233 0.0215 0.0205 0.0240 0.0321 const double ColorTemp::JDC468_Blackvio101_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0076, 0.008, 0.0094, 0.01, 0.0116, 0.012, 0.0139, 0.015, 0.0158, 0.0158, 0.0158, 0.0156, 0.0152, 0.015, 0.0142, 0.014, 0.0130, 0.012, 0.0111, 0.01, 0.0094, 0.009, 0.0090, 0.009, @@ -1987,7 +1732,6 @@ const double ColorTemp::JDC468_Blackvio101_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//92 92 0.1652 0.2036 0.2848 0.4708 0.6230 0.6758 0.6761 0.6619 0.6502 0.6343 0.6195 0.6194 0.6169 0.5939 0.5677 0.5678 0.5695 0.5373 0.5105 0.5356 0.5778 0.6020 0.6073 0.6090 0.6124 0.6187 0.6295 0.6456 0.6603 0.6693 0.6716 0.6704 0.6660 0.6640 0.6749 0.7003 const double ColorTemp::JDC468_Whitebl92_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1652, 0.19, 0.2036, 0.24, 0.2848, 0.35, 0.4708, 0.55, 0.6230, 0.65, 0.6758, 0.6759, 0.6761, 0.665, 0.6619, 0.655, 0.6502, 0.64, 0.6343, 0.62, 0.6195, 0.6194, 0.6194, 0.618, @@ -1996,7 +1740,6 @@ const double ColorTemp::JDC468_Whitebl92_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//94 94 0.0506 0.0569 0.0678 0.0906 0.1088 0.1160 0.1184 0.1195 0.1203 0.1215 0.1293 0.1474 0.1609 0.1538 0.1415 0.1466 0.1535 0.1364 0.1248 0.1494 0.1871 0.2098 0.2163 0.2179 0.2217 0.2282 0.2372 0.2500 0.2631 0.2713 0.2739 0.2725 0.2678 0.2660 0.2770 0.3025 const double ColorTemp::JDC468_Greyredbl94_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0506, 0.053, 0.0569, 0.06, 0.0678, 0.08, 0.0906, 0.1, 0.1088, 0.11, 0.1160, 0.117, 0.1184, 0.119, 0.1195, 0.12, 0.1203, 0.1205, 0.1215, 0.125, 0.1293, 0.133, 0.1474, 0.15, @@ -2005,10 +1748,6 @@ const double ColorTemp::JDC468_Greyredbl94_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - - - -//32 32 0.0933 0.1333 0.1967 0.3132 0.4096 0.4556 0.4763 0.4845 0.4870 0.4852 0.4868 0.4959 0.4971 0.4755 0.4407 0.4085 0.3643 0.2922 0.2161 0.1658 0.1370 0.1190 0.1040 0.0947 0.0949 0.1001 0.1106 0.1306 0.1536 0.1652 0.1609 0.1480 0.1291 0.1188 0.1370 0.1933 const double ColorTemp::JDC468_Blue32_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0933, 0.11, 0.1333, 0.17, 0.1967, 0.265, 0.3132, 0.35, 0.4096, 0.43, 0.4556, 0.465, 0.4763, 0.48, 0.4845, 0.486, .4870, 0.486, 0.4852, 0.486, 0.4868, 0.49, 0.4959, 0.496, @@ -2017,9 +1756,6 @@ const double ColorTemp::JDC468_Blue32_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - - -//236 236 0.0165 0.0259 0.0432 0.0684 0.0858 0.0895 0.0828 0.0683 0.0527 0.0365 0.0235 0.0177 0.0143 0.0096 0.0067 0.0063 0.0060 0.0052 0.0053 0.0061 0.0074 0.0083 0.0085 0.0080 0.0078 0.0076 0.0081 0.0095 0.0112 0.0121 0.0114 0.0100 0.0086 0.0083 0.0102 0.0180 const double ColorTemp::JDC468_Blue236_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0165, 0.021, 0.0259, 0.035, 0.0432, 0.05, 0.0684, 0.075, 0.0858, 0.087, 0.0895, 0.085, 0.0828, 0.075, 0.0683, 0.058, 0.0527, 0.045, 0.0365, 0.031, 0.0235, 0.021, 0.0177, 0.016, @@ -2028,8 +1764,6 @@ const double ColorTemp::JDC468_Blue236_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//300 300 0.0079 0.0085 0.0087 0.0092 0.0094 0.0093 0.0093 0.0095 0.0097 0.0110 0.0158 0.0544 0.1907 0.3753 0.4883 0.5181 0.5044 0.4631 0.4070 0.3594 0.3262 0.3054 0.2873 0.2772 0.2790 0.2875 0.3029 0.3292 0.3571 0.3719 0.3693 0.3573 0.3371 0.3253 0.3471 0.4087 const double ColorTemp::JDC468_Gre300_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0079, 0.008, 0.0085, 0.0086, 0.0087, 0.009, 0.0092, 0.0093, 0.0094, 0.0094, 0.0093, 0.0093, 0.0093, 0.0094, 0.0095, 0.0096, 0.0097, 0.01, 0.0110, 0.012, 0.0158, 0.045, @@ -2038,7 +1772,6 @@ const double ColorTemp::JDC468_Gre300_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//340 340 0.0175 0.0320 0.0587 0.0989 0.1267 0.1322 0.1210 0.0978 0.0732 0.0487 0.0297 0.0212 0.0167 0.0106 0.0069 0.0064 0.0062 0.0051 0.0052 0.0061 0.0073 0.0081 0.0080 0.0076 0.0075 0.0072 0.0077 0.0088 0.0105 0.0112 0.0104 0.0092 0.0079 0.0075 0.0092 0.0167 const double ColorTemp::JDC468_Blue340_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0175, 0.02, 0.0320, 0.04, 0.0587, 0.08, 0.0989, 0.11, 0.1267, 0.13, 0.1322, 0.125, 0.1210, 0.111, 0.0978, 0.08, 0.0732, 0.06, 0.0487, 0.04, 0.0297, 0.025, 0.0212, 0.02, @@ -2048,8 +1781,6 @@ const double ColorTemp::JDC468_Blue340_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//110 110 0.0954 0.1234 0.1702 0.2631 0.3363 0.3664 0.3799 0.3905 0.4002 0.4160 0.4582 0.5262 0.5798 0.5915 0.5742 0.5465 0.5035 0.4364 0.3581 0.2977 0.2589 0.2349 0.2152 0.2030 0.2032 0.2106 0.2249 0.2511 0.2799 0.2951 0.2915 0.2776 0.2552 0.2419 0.2638 0.3287 const double ColorTemp::JDC468_Gree110_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0954, 0.11, 0.1234, 0.15, 0.1702, 0.22, 0.2631, 0.312, 0.3363, 0.352, 0.3664, 0.372, 0.3799, 0.385, 0.3905, 0.395, 0.4002, 0.41, 0.4160, 0.43, 0.4582, 0.511, 0.5262, 0.544, @@ -2058,7 +1789,6 @@ const double ColorTemp::JDC468_Gree110_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//457 457 0.0127 0.0126 0.0112 0.0110 0.0109 0.0106 0.0105 0.0104 0.0110 0.0136 0.0318 0.1246 0.3262 0.5051 0.5566 0.5181 0.4406 0.3429 0.2411 0.1647 0.1202 0.0968 0.0804 0.0709 0.0703 0.0747 0.0840 0.1023 0.1243 0.1355 0.1311 0.1179 0.0993 0.0884 0.1043 0.1590 const double ColorTemp::JDC468_Gree457_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0127, 0.0126, 0.0126, 0.012, 0.0112, 0.011, 0.0110, 0.011, 0.0109, 0.0107, 0.0106, 0.0105, 0.0105, 0.0105, 0.0104, 0.0107, 0.0110, 0.0124, 0.0136, 0.0234, 0.0318, 0.09, @@ -2067,7 +1797,6 @@ const double ColorTemp::JDC468_Gree457_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//241 241 0.0134 0.0106 0.0110 0.0108 0.0111 0.0114 0.0114 0.0115 0.0114 0.0122 0.0192 0.0731 0.2455 0.4689 0.6183 0.6852 0.7107 0.7112 0.7059 0.7177 0.7335 0.7445 0.7487 0.7523 0.7555 0.7606 0.7683 0.7779 0.7855 0.7915 0.7964 0.8011 0.8056 0.8097 0.8144 0.8239 const double ColorTemp::JDC468_Yel241_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0134, 0.012, 0.0106, 0.011, 0.0110, 0.011, 0.0108, 0.011, 0.0111, 0.0112, 0.0114, 0.0114, 0.0114, 0.0114, 0.0115, 0.0114, 0.0114, 0.012, 0.0122, 0.017, 0.0192, 0.05, 0.0731, 0.12, @@ -2076,8 +1805,6 @@ const double ColorTemp::JDC468_Yel241_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//321 321 0.0247 0.0203 0.0182 0.0183 0.0182 0.0179 0.0182 0.0188 0.0199 0.0249 0.0529 0.1519 0.3116 0.4138 0.4410 0.4679 0.4906 0.4655 0.4517 0.5203 0.6238 0.6952 0.7270 0.7406 0.7469 0.7527 0.7607 0.7708 0.7786 0.7849 0.7897 0.7940 0.7984 0.8025 0.8069 0.8160 const double ColorTemp::JDC468_Ora321_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0247, 0.022, 0.0203, 0.019, 0.0182, 0.0182, 0.0183, 0.0182, 0.0182, 0.018, 0.0179, 0.018, 0.0182, 0.0185, 0.0188, 0.019, 0.0199, 0.022, 0.0249, 0.035, 0.0529, 0.112, @@ -2085,7 +1812,7 @@ const double ColorTemp::JDC468_Ora321_spect[97] = { 0.7406, 0.743, 0.7469, .751, 0.7527, 0.756, 0.7607, 0.765, 0.7708, 0.774, 0.7786, 0.782, 0.7849, 0.786, 0.7897, 0.79, 0.7940, 0.794, 0.7984, 0.799, 0.8025, 0.805, 0.8069, 0.811, 0.8160, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//353 353 0.0260 0.0294 0.0331 0.0420 0.0490 0.0517 0.0541 0.0572 0.0608 0.0664 0.0813 0.1070 0.1291 0.1344 0.1317 0.1356 0.1390 0.1289 0.1195 0.1278 0.1420 0.1493 0.1500 0.1500 0.1527 0.1576 0.1651 0.1759 0.1870 0.1942 0.1963 0.1952 0.1910 0.1898 0.1995 0.2209 + const double ColorTemp::JDC468_Yellow353_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0260, 0.027, 0.0294, 0.031, 0.0331, 0.037, 0.0420, 0.045, 0.0490, 0.051, 0.0517, 0.053, 0.0541, 0.056, 0.0572, 0.059, 0.0608, 0.063, 0.0664, 0.072, 0.0813, 0.096, 0.1070, 0.112, @@ -2094,8 +1821,6 @@ const double ColorTemp::JDC468_Yellow353_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//465 465 0.0388 0.0654 0.1020 0.1557 0.1880 0.1783 0.1434 0.1013 0.0684 0.0410 0.0219 0.0149 0.0117 0.0080 0.0062 0.0062 0.0062 0.0056 0.0063 0.0098 0.0230 0.0440 0.0577 0.0617 0.0645 0.0690 0.0766 0.0903 0.1064 0.1144 0.1113 0.1022 0.0898 0.0833 0.0962 0.1377 const double ColorTemp::JDC468_Mag465_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0388, 0.05, 0.0654, 0.09, 0.1020, 0.12, 0.1557, 0.17, 0.1880, 0.182, 0.1783, 0.162, 0.1434, 0.12, 0.1013, 0.09, 0.0684, 0.05, 0.0410, 0.03, 0.0219, 0.02, 0.0149, 0.012, @@ -2104,8 +1829,6 @@ const double ColorTemp::JDC468_Mag465_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//333 333 0.1030 0.1508 0.2133 0.3191 0.3910 0.3895 0.3424 0.2770 0.2184 0.1593 0.1074 0.0825 0.0669 0.0430 0.0265 0.0278 0.0315 0.0212 0.0163 0.0355 0.0861 0.1365 0.1565 0.1589 0.1629 0.1713 0.1852 0.2099 0.2378 0.2517 0.2469 0.2322 0.2102 0.1973 0.2191 0.2855 const double ColorTemp::JDC468_Mag333_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1030, 0.12, 0.1508, 0.18, 0.2133, 0.26, 0.3191, 0.364, 0.3910, 0.39, 0.3895, 0.375, 0.3424, 0.312, 0.2770, 0.251, 0.2184, 0.183, 0.1593, 0.122, 0.1074, 0.1, 0.0825, 0.07, @@ -2114,8 +1837,6 @@ const double ColorTemp::JDC468_Mag333_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; - -//203 203 0.0833 0.1329 0.2005 0.3099 0.3855 0.3916 0.3530 0.2926 0.2346 0.1741 0.1201 0.0934 0.0759 0.0495 0.0306 0.0308 0.0330 0.0214 0.0150 0.0256 0.0510 0.0723 0.0769 0.0748 0.0761 0.0813 0.0911 0.1087 0.1295 0.1399 0.1353 0.1232 0.1064 0.0971 0.1137 0.1677 const double ColorTemp::JDC468_Mag203_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0833, 0.11, 0.1329, 0.16, 0.2005, 0.25, 0.3099, 0.342, 0.3855, 0.39, 0.3916, 0.374, 0.3530, 0.321, 0.2926, 0.267, 0.2346, 0.21, 0.1741, 0.153, 0.1201, 0.1, 0.0934, 0.08, @@ -2123,7 +1844,7 @@ const double ColorTemp::JDC468_Mag203_spect[97] = { 0.0761, 0.08, 0.0813, 0.09, 0.0911, 0.1, 0.1087, 0.115, 0.1295, 0.134, 0.1399, 0.136, 0.1353, 0.131, 0.1232, 0.114, 0.1064, 0.1, 0.0971, 0.105, 0.1137, 0.123, 0.1677, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//blue cyan + const double ColorTemp::J570_BlueB6_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1611, 0.18, 0.1947, 0.23, 0.2639, 0.31, 0.3488, 0.37, 0.4022, 0.43, 0.4517, 0.49, 0.501, 0.52, 0.5317, 0.534, 0.5367, 0.53, 0.5246, 0.51, 0.4905, 0.47, 0.4510, 0.43, 0.4059, @@ -2322,7 +2043,6 @@ const double ColorTemp::J570_BlueU8_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//N8 const double ColorTemp::J570_NeuN8_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0632, -0.04, -0.0244, 0.01, 0.0125, 0.02, 0.0294, 0.03, 0.0326, 0.033, 0.0352, 0.036, 0.0361, 0.037, 0.0374, 0.0374, 0.0373, 0.038, 0.0378, 0.039, 0.0397, 0.04, @@ -2331,6 +2051,16 @@ const double ColorTemp::J570_NeuN8_spect[97] = { 0.0395, 0.04, 0.0415, 0.043, 0.0448, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + +const double ColorTemp::J570_NeuN8_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0632, -0.04, -0.0244, 0.01, 0.0135, 0.02, 0.0294, 0.03, 0.0326, 0.033, 0.0352, 0.036, 0.0361, 0.037, 0.0374, 0.0374, 0.0373, 0.038, 0.0378, 0.039, 0.0397, 0.04, + 0.0421, 0.043, 0.0431, 0.042, 0.0417, 0.04, 0.0391, 0.038, 0.0378, 0.037, 0.0368, 0.035, 0.0347, 0.034, 0.0335, 0.034, 0.0341, 0.035, 0.0350, 0.035, 0.0355, 0.036, + 0.0357, 0.0357, 0.0358, 0.036, 0.0369, 0.037, 0.0372, 0.0376, 0.0378, 0.038, 0.0388, 0.039, 0.0397, 0.04, 0.0400, 0.0395, 0.0394, 0.039, 0.0386, 0.0385, 0.0384, 0.039, + 0.0395, 0.04, 0.0415, 0.043, 0.0448, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::J570_NeuN9_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0573, 0.054, 0.0516, 0.053, 0.0548, 0.05, 0.0401, 0.041, 0.0424, 0.043, 0.0449, 0.046, 0.0467, 0.047, 0.0473, 0.0473, 0.0474, 0.048, 0.0483, 0.05, 0.0508, 0.053, @@ -2339,6 +2069,16 @@ const double ColorTemp::J570_NeuN9_spect[97] = { 0.0515, 0.053, 0.0538, 0.056, 0.0597, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + +const double ColorTemp::J570_NeuN9_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0573, 0.054, 0.0516, 0.053, 0.0548, 0.05, 0.0401, 0.041, 0.0424, 0.043, 0.0459, 0.046, 0.0467, 0.047, 0.0473, 0.0473, 0.0474, 0.048, 0.0483, 0.05, 0.0508, 0.053, + 0.0558, 0.057, 0.0584, 0.058, 0.0550, 0.05, 0.0495, 0.048, 0.0468, 0.0465, 0.0460, 0.044, 0.0430, 0.042, 0.0411, 0.042, 0.0425, 0.044, 0.0457, 0.046, 0.0473, 0.0474, + 0.0475, 0.0475, 0.0474, 0.0475, 0.0476, 0.048, 0.0487, 0.049, 0.0499, 0.05, 0.0515, 0.052, 0.0533, 0.054, 0.0544, 0.054, 0.0539, 0.053, 0.0526, 0.052, 0.0512, 0.0515, + 0.0515, 0.053, 0.0538, 0.056, 0.0597, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::J570_NeuO8_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0014, 0.02, 0.0806, 0.07, 0.0673, 0.07, 0.0854, 0.09, 0.0901, 0.095, 0.0960, 0.098, 0.0992, 0.1, 0.1017, 0.102, 0.1030, 0.104, 0.1052, 0.107, 0.1098, 0.11, @@ -2347,6 +2087,16 @@ const double ColorTemp::J570_NeuO8_spect[97] = { 0.1132, 0.115, 0.1185, 0.12, 0.1345, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + +const double ColorTemp::J570_NeuO8_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0014, 0.02, 0.0806, 0.07, 0.0673, 0.07, 0.0854, 0.09, 0.0901, 0.095, 0.0960, 0.098, 0.0992, 0.1, 0.1017, 0.102, 0.1030, 0.104, 0.1052, 0.107, 0.1098, 0.11, + 0.1176, 0.12, 0.1230, 0.12, 0.1276, 0.11, 0.1071, 0.105, 0.1032, 0.103, 0.1032, 0.1, 0.0963, 0.09, 0.0899, 0.09, 0.0939, 0.095, 0.1007, 0.102, 0.1037, 0.104, + 0.1029, 0.102, 0.1014, 0.102, 0.1220, 0.103, 0.1039, 0.105, 0.1072, 0.11, 0.1134, 0.12, 0.1207, 0.122, 0.1245, 0.123, 0.1236, 0.121, 0.1205, 0.12, 0.1158, 0.115, + 0.1132, 0.115, 0.1185, 0.12, 0.1345, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::J570_NeuO11_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2926, 0.2, 0.1863, 0.16, 0.1428, 0.14, 0.1322, 0.134, 0.1396, 0.14, 0.1450, 0.146, 0.1498, 0.15, 0.1527, 0.155, 0.1554, 0.157, 0.1583, 0.16, 0.1631, 0.17, @@ -2355,6 +2105,16 @@ const double ColorTemp::J570_NeuO11_spect[97] = { 0.1716, 0.175, 0.1800, 0.2, 0.2039, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + +const double ColorTemp::J570_NeuO11_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2926, 0.2, 0.1863, 0.16, 0.1428, 0.14, 0.1322, 0.134, 0.1396, 0.14, 0.1450, 0.146, 0.1498, 0.15, 0.1527, 0.155, 0.1554, 0.157, 0.1583, 0.16, 0.1631, 0.17, + 0.1754, 0.18, 0.1841, 0.18, 0.1861, 0.17, 0.1600, 0.155, 0.1549, 0.155, 0.1555, 0.15, 0.1449, 0.14, 0.1352, 0.14, 0.1414, 0.15, 0.1519, 0.153, 0.1568, 0.156, + 0.1556, 0.154, 0.1534, 0.154, 0.1647, 0.156, 0.1573, 0.16, 0.1622, 0.17, 0.1713, 0.18, 0.1823, 0.185, 0.1886, 0.188, 0.1873, 0.183, 0.1829, 0.18, 0.1753, 0.174, + 0.1716, 0.175, 0.1800, 0.2, 0.2039, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::J570_NeuD5_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0840, 0.1, 0.1627, 0.18, 0.1934, 0.2, 0.2234, 0.23, 0.2430, 0.25, 0.2547, 0.26, 0.2618, 0.264, 0.2651, 0.265, 0.2655, 0.2655, 0.2659, 0.266, 0.2674, 0.27, @@ -2364,6 +2124,15 @@ const double ColorTemp::J570_NeuD5_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +const double ColorTemp::J570_NeuD5_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0840, 0.1, 0.1627, 0.18, 0.1934, 0.2, 0.2234, 0.23, 0.2430, 0.25, 0.2547, 0.26, 0.2618, 0.264, 0.2651, 0.265, 0.2655, 0.2655, 0.2659, 0.266, 0.2674, 0.27, + 0.2776, 0.28, 0.2841, 0.27, 0.2854, 0.25, 0.2351, 0.23, 0.2246, 0.225, 0.2247, 0.22, 0.2074, 0.20, 0.1913, 0.20, 0.2029, 0.21, 0.2231, 0.23, 0.2337, 0.233, + 0.2327, 0.23, 0.2291, 0.23, 0.2405, 0.232, 0.2344, 0.24, 0.2417, 0.25, 0.2553, 0.26, 0.2724, 0.28, 0.2816, 0.28, 0.2797, 0.276, 0.2720, 0.27, + 0.2603, 0.26, 0.2536, 0.26, 0.2660, 0.28, 0.3027, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::J570_NeuE11_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1699, 0.18, 0.1971, 0.21, 0.2276, 0.23, 0.2483, 0.25, 0.2690, 0.28, 0.2820, 0.29, 0.2916, 0.295, 0.2992, 0.3, 0.3064, 0.31, 0.3151, 0.32, 0.3301, 0.34, 0.3593, 0.37, @@ -2371,6 +2140,13 @@ const double ColorTemp::J570_NeuE11_spect[97] = { 0.3086, 0.31, 0.3105, 0.312, 0.3148, 0.313, 0.3222, 0.33, 0.3364, 0.34, 0.3535, 0.36, 0.3629, 0.362, 0.3621, 0.36, 0.3549, 0.35, 0.3444, 0.34, 0.3394, 0.35, 0.3511, 0.36, 0.3862, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +const double ColorTemp::J570_NeuE11_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1699, 0.18, 0.1971, 0.21, 0.2276, 0.23, 0.2483, 0.25, 0.2690, 0.28, 0.2820, 0.29, 0.2916, 0.295, 0.2992, 0.3, 0.3064, 0.31, 0.3151, 0.32, 0.3301, 0.34, 0.3593, 0.37, + 0.3873, 0.39, 0.3913, 0.38, 0.3993, 0.375, 0.3723, 0.37, 0.3678, 0.35, 0.3482, 0.33, 0.3249, 0.32, 0.3188, 0.319, 0.3188, 0.318, 0.3179, 0.315, 0.3128, 0.31, + 0.3086, 0.31, 0.3105, 0.312, 0.3248, 0.313, 0.3222, 0.33, 0.3364, 0.34, 0.3535, 0.36, 0.3629, 0.362, 0.3621, 0.36, 0.3549, 0.35, 0.3444, 0.34, 0.3394, 0.35, 0.3511, 0.36, 0.3862, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; const double ColorTemp::J570_NeuK16_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, @@ -2379,6 +2155,15 @@ const double ColorTemp::J570_NeuK16_spect[97] = { 0.5406, 0.542, 0.5418, 0.543, 0.5452, 0.55, 0.5529, 0.56, 0.5654, 0.57, 0.5806, 0.584, 0.5888, 0.589, 0.5898, 0.586, 0.5858, 0.58, 0.5796, 0.577, 0.5770, 0.58, 0.5883, 0.59, 0.6190, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + +const double ColorTemp::J570_NeuK16_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.5837, 0.45, 0.4117, 0.43, 0.4427, 0.47, 0.5098, 0.52, 0.5451, 0.55, 0.5698, 0.57, 0.5828, 0.59, 0.5939, 0.6, 0.6045, 0.607, 0.6140, 0.62, 0.6219, 0.63, 0.6330, 0.64, + 0.6419, 0.643, 0.6440, 0.642, 0.6617, 0.64, 0.6379, 0.631, 0.6309, 0.62, 0.6154, 0.6, 0.5911, 0.58, 0.5736, 0.57, 0.5612, 0.56, 0.5539, 0.55, 0.5462, 0.543, + 0.5406, 0.542, 0.5418, 0.543, 0.5652, 0.55, 0.5529, 0.56, 0.5654, 0.57, 0.5806, 0.584, 0.5888, 0.589, 0.5898, 0.586, 0.5858, 0.58, 0.5796, 0.577, 0.5770, 0.58, 0.5883, 0.59, 0.6190, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::J570_NeuM3_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2659, 0.255, 0.2526, 0.26, 0.2616, 0.27, 0.2854, 0.29, 0.3088, 0.31, 0.3231, 0.33, 0.3336, 0.34, 0.3421, 0.345, 0.347, 0.35, 0.3542, 0.36, 0.3647, 0.37, @@ -2386,6 +2171,15 @@ const double ColorTemp::J570_NeuM3_spect[97] = { 0.3240, 0.322, 0.3202, 0.321, 0.3220, 0.323, 0.3267, 0.33, 0.3342, 0.34, 0.3487, 0.35, 0.3667, 0.37, 0.3761, 0.375, 0.3746, 0.37, 0.3670, 0.36, 0.3559, 0.35, 0.3498, 0.35, 0.3630, 0.37, 0.3998, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + +const double ColorTemp::J570_NeuM3_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2659, 0.255, 0.2526, 0.26, 0.2616, 0.27, 0.2854, 0.29, 0.3088, 0.31, 0.3231, 0.33, 0.3336, 0.34, 0.3421, 0.345, 0.347, 0.35, 0.3542, 0.36, 0.3647, 0.37, + 0.3854, 0.4, 0.4041, 0.452, 0.4012, 0.39, 0.3856, 0.38, 0.3769, 0.375, 0.3725, 0.36, 0.3525, 0.34, 0.3286, 0.325, 0.3247, 0.326, 0.3279, 0.328, 0.3285, 0.325, + 0.3240, 0.322, 0.3202, 0.341, 0.3220, 0.323, 0.3267, 0.33, 0.3342, 0.34, 0.3487, 0.35, 0.3667, 0.37, 0.3761, 0.375, 0.3746, 0.37, 0.3670, 0.36, 0.3559, 0.35, 0.3498, 0.35, 0.3630, 0.37, 0.3998, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::J570_NeuN18_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1284, 0.11, 0.1090, 0.13, 0.1573, 0.17, 0.1837, 0.19, 0.1971, 0.2, 0.2059, 0.21, 0.2143, 0.22, 0.2213, 0.225, 0.2271, 0.23, 0.2341, 0.24, 0.2487, 0.26, 0.2764, 0.29, @@ -2393,6 +2187,15 @@ const double ColorTemp::J570_NeuN18_spect[97] = { 0.2235, 0.224, 0.2246, 0.226, 0.2282, 0.23, 0.2349, 0.24, 0.2477, 0.25, 0.2632, 0.27, 0.2714, 0.271, 0.2702, 0.27, 0.2637, 0.26, 0.2538, 0.25, 0.2479, 0.25, 0.2589, 0.26, 0.2918, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + +const double ColorTemp::J570_NeuN18_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1284, 0.11, 0.1090, 0.13, 0.1573, 0.17, 0.1837, 0.19, 0.1971, 0.2, 0.2059, 0.21, 0.2143, 0.22, 0.2213, 0.225, 0.2271, 0.23, 0.2341, 0.24, 0.2487, 0.26, 0.2764, 0.29, + 0.3025, 0.303, 0.3052, 0.3, 0.2819, 0.29, 0.2843, 0.283, 0.2800, 0.27, 0.2612, 0.24, 0.2394, 0.235, 0.2339, 0.234, 0.2340, 0.233, 0.2326, 0.23, 0.2277, 0.225, + 0.2235, 0.224, 0.2246, 0.226, 0.2382, 0.23, 0.2349, 0.24, 0.2477, 0.25, 0.2632, 0.27, 0.2714, 0.271, 0.2702, 0.27, 0.2637, 0.26, 0.2538, 0.25, 0.2479, 0.25, 0.2589, 0.26, 0.2918, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::J570_NeuQ1_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0610, 0.06, 0.0592, 0.04, 0.0339, 0.04, 0.0338, 0.034, 0.0350, 0.036, 0.0363, 0.037, 0.0380, 0.038, 0.0383, 0.0383, 0.0385, 0.04, 0.0408, 0.042, 0.0451, 0.05, @@ -2401,6 +2204,16 @@ const double ColorTemp::J570_NeuQ1_spect[97] = { 0.0351, 0.036, 0.0373, 0.038, 0.0411, 0.042, 0.0446, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + +const double ColorTemp::J570_NeuQ1_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0610, 0.06, 0.0592, 0.04, 0.0359, 0.04, 0.0338, 0.034, 0.0350, 0.036, 0.0363, 0.037, 0.0380, 0.038, 0.0383, 0.0383, 0.0385, 0.04, 0.0408, 0.042, 0.0451, 0.05, + 0.0524, 0.055, 0.0589, 0.058, 0.0595, 0.055, 0.0529, 0.05, 0.0456, 0.04, 0.0390, 0.035, 0.0330, 0.03, 0.0286, 0.028, 0.0275, 0.0276, 0.0275, 0.0278, 0.0279, 0.028, + 0.0289, 0.03, 0.0304, 0.031, 0.0340, 0.032, 0.0328, 0.033, 0.0341, 0.0345, 0.0346, 0.0346, 0.0347, 0.034, 0.0341, 0.034, 0.0336, 0.034, 0.0340, 0.035, + 0.0351, 0.036, 0.0373, 0.038, 0.0411, 0.042, 0.0446, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::J570_NeuS7_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1447, 0.06, 0.0448, 0.042, 0.0411, 0.03, 0.0282, 0.028, 0.0270, 0.029, 0.0298, 0.03, 0.0319, 0.032, 0.0331, 0.0333, 0.0335, 0.036, 0.0361, 0.038, 0.0403, 0.045, @@ -2409,6 +2222,17 @@ const double ColorTemp::J570_NeuS7_spect[97] = { 0.0361, 0.0362, 0.0363, 0.037, 0.0376, 0.04, 0.0412, 0.042, 0.0450, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + +const double ColorTemp::J570_NeuS7_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1447, 0.06, 0.0448, 0.042, 0.0511, 0.03, 0.0282, 0.028, 0.0270, 0.029, 0.0298, 0.03, 0.0319, 0.032, 0.0331, 0.0333, 0.0335, 0.036, 0.0361, 0.038, 0.0403, 0.045, + 0.0493, 0.05, 0.0599, 0.06, 0.0666, 0.062, 0.0606, 0.06, 0.0547, 0.05, 0.0488, 0.045, 0.0421, 0.04, 0.0366, 0.035, 0.0335, 0.033, 0.0323, 0.032, 0.0320, 0.032, + 0.0321, 0.0322, 0.0324, 0.033, 0.0333, 0.034, 0.0345, 0.035, 0.0356, 0.036, 0.0364, 0.037, 0.0372, 0.037, 0.0367, 0.0365, 0.0363, 0.0364, + 0.0361, 0.0362, 0.0363, 0.037, 0.0376, 0.04, 0.0412, 0.042, 0.0450, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + const double ColorTemp::J570_NeuV10_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1439, 0.07, 0.0583, 0.04, 0.0372, 0.037, 0.0362, 0.035, 0.0344, 0.034, 0.0340, 0.035, 0.0351, 0.036, 0.0361, 0.0361, 0.0361, 0.037, 0.0377, 0.039, 0.0404, 0.042, @@ -2417,6 +2241,17 @@ const double ColorTemp::J570_NeuV10_spect[97] = { 0.0341, 0.035, 0.0371, 0.038, 0.0399, 0.041, 0.0432, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + +const double ColorTemp::J570_NeuV10_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1439, 0.07, 0.0583, 0.04, 0.0392, 0.037, 0.0362, 0.035, 0.0344, 0.034, 0.0340, 0.035, 0.0351, 0.036, 0.0361, 0.0361, 0.0361, 0.037, 0.0377, 0.039, 0.0404, 0.042, + 0.0450, 0.047, 0.0483, 0.048, 0.0495, 0.045, 0.0436, 0.04, 0.0387, 0.036, 0.0343, 0.03, 0.0299, 0.028, 0.0271, 0.027, 0.0262, 0.0262, 0.0262, 0.0267, 0.0269, 0.027, + 0.0283, 0.029, 0.0299, 0.03, 0.0328, 0.031, 0.0319, 0.032, 0.0331, 0.0333, 0.0337, 0.0337, 0.0337, 0.0333, 0.0332, 0.0332, 0.0331, 0.0331, 0.0331, 0.034, + 0.0341, 0.035, 0.0371, 0.038, 0.0399, 0.041, 0.0432, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + const double ColorTemp::J570_NeuW18_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4685, 0.45, 0.4262, 0.5, 0.5061, 0.55, 0.5898, 0.6, 0.6487, 0.66, 0.6781, 0.68, 0.6947, 0.7, 0.7070, 0.71, 0.7185, 0.72, 0.7294, 0.73, 0.7383, 0.74, 0.7499, 0.75, @@ -2424,6 +2259,15 @@ const double ColorTemp::J570_NeuW18_spect[97] = { 0.6512, 0.65, 0.6462, 0.645, 0.6448, 0.645, 0.6485, 0.65, 0.6569, 0.66, 0.6698, 0.67, 0.6781, 0.68, 0.6822, 0.682, 0.6820, 0.682, 0.6815, 0.682, 0.6820, 0.69, 0.6907, 0.7, 0.7152, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + +const double ColorTemp::J570_NeuW18_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.4685, 0.45, 0.4262, 0.5, 0.5061, 0.55, 0.5998, 0.6, 0.6487, 0.66, 0.6781, 0.68, 0.6947, 0.7, 0.7070, 0.71, 0.7185, 0.72, 0.7294, 0.73, 0.7383, 0.74, 0.7499, 0.75, + 0.7582, 0.758, 0.7582, 0.755, 0.7531, 0.75, 0.7584, 0.745, 0.7422, 0.73, 0.7263, 0.72, 0.7033, 0.7, 0.6913, 0.69, 0.6820, 0.68, 0.6738, 0.67, 0.6628, 0.66, + 0.6512, 0.65, 0.6462, 0.645, 0.6448, 0.645, 0.6485, 0.65, 0.6569, 0.66, 0.6698, 0.67, 0.6781, 0.68, 0.6822, 0.682, 0.6820, 0.682, 0.6815, 0.682, 0.6820, 0.69, 0.6907, 0.7, 0.7152, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::J570_NeuZ14_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2765, 0.2, 0.1352, 0.13, 0.1222, 0.121, 0.1206, 0.13, 0.1300, 0.134, 0.1357, 0.14, 0.1407, 0.142, 0.1455, 0.147, 0.1485, 0.15, 0.1539, 0.16, 0.1648, 0.17, @@ -2433,6 +2277,15 @@ const double ColorTemp::J570_NeuZ14_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +const double ColorTemp::J570_NeuZ14_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2765, 0.2, 0.1352, 0.13, 0.1222, 0.121, 0.1206, 0.13, 0.1300, 0.134, 0.1357, 0.14, 0.1407, 0.142, 0.1455, 0.147, 0.1485, 0.15, 0.1539, 0.16, 0.1648, 0.17, + 0.1844, 0.2, 0.2015, 0.202, 0.2024, 0.2, 0.2022, 0.19, 0.1868, 0.185, 0.1841, 0.18, 0.1715, 0.16, 0.1566, 0.155, 0.1536, 0.154, 0.1545, 0.154, 0.1536, 0.151, + 0.1500, 0.148, 0.1471, 0.1472, 0.1478, 0.15, 0.1605, 0.153, 0.1552, 0.16, 0.1641, 0.17, 0.1751, 0.18, 0.1813, 0.181, 0.1801, 0.18, + 0.1757, 0.17, 0.1683, 0.165, 0.1642, 0.17, 0.1728, 0.18, 0.1970, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::J570_NeuC18_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0555, 0.055, 0.0545, 0.055, 0.0585, 0.058, 0.0577, 0.056, 0.0554, 0.056, 0.0564, 0.058, 0.0590, 0.06, 0.0611, 0.062, 0.0638, 0.065, 0.0685, 0.07, 0.0797, 0.09, @@ -2441,6 +2294,16 @@ const double ColorTemp::J570_NeuC18_spect[97] = { 0.0858, 0.09, 0.0903, 0.1, 0.1037, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + +const double ColorTemp::J570_NeuC18_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0555, 0.055, 0.0545, 0.055, 0.0585, 0.058, 0.0577, 0.056, 0.0554, 0.056, 0.0564, 0.058, 0.0590, 0.06, 0.0611, 0.062, 0.0638, 0.065, 0.0685, 0.07, 0.0797, 0.09, + 0.1009, 0.11, 0.1222, 0.124, 0.1398, 0.127, 0.1257, 0.123, 0.1208, 0.12, 0.1164, 0.11, 0.1067, 0.1, 0.0954, 0.09, 0.0895, 0.088, 0.0862, 0.085, 0.0834, 0.082, + 0.0806, 0.08, 0.0782, 0.078, 0.0880, 0.078, 0.0789, 0.08, 0.0813, 0.084, 0.0858, 0.09, 0.0911, 0.092, 0.0944, 0.093, 0.0938, 0.092, 0.0914, 0.09, 0.0878, 0.086, + 0.0858, 0.09, 0.0903, 0.1, 0.1037, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::J570_NeuD17_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1980, 0.1, 0.0793, 0.06, 0.0578, 0.05, 0.0476, 0.046, 0.0454, 0.046, 0.0471, 0.048, 0.0499, 0.05, 0.0518, 0.052, 0.0533, 0.055, 0.0574, 0.06, 0.0676, 0.07, @@ -2449,6 +2312,17 @@ const double ColorTemp::J570_NeuD17_spect[97] = { 0.0360, 0.037, 0.0376, 0.039, 0.0406, 0.042, 0.0448, 0.046, 0.0499, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + +const double ColorTemp::J570_NeuD17_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1980, 0.1, 0.0793, 0.06, 0.0578, 0.05, 0.0476, 0.046, 0.0454, 0.046, 0.0471, 0.048, 0.0499, 0.05, 0.0518, 0.052, 0.0533, 0.055, 0.0574, 0.06, 0.0676, 0.07, + 0.0897, 0.1, 0.1129, 0.113, 0.1240, 0.1, 0.0958, 0.08, 0.0743, 0.06, 0.0566, 0.05, 0.0422, 0.04, 0.0332, 0.03, 0.0297, 0.0295, 0.0292, 0.0293, 0.0294, 0.03, + 0.0306, 0.031, 0.0319, 0.032, 0.0439, 0.034, 0.0353, 0.036, 0.0363, 0.037, 0.0370, 0.037, 0.0372, 0.037, 0.0368, 0.0365, 0.0363, 0.036, + 0.0360, 0.037, 0.0376, 0.039, 0.0406, 0.042, 0.0448, 0.046, 0.0499, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + const double ColorTemp::J570_NeuJ11_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1274, 0.1, 0.0916, 0.08, 0.0656, 0.061, 0.0604, 0.06, 0.0570, 0.06, 0.0604, 0.062, 0.0644, 0.065, 0.0668, 0.069, 0.0700, 0.072, 0.0754, 0.08, 0.0874, 0.1, @@ -2457,6 +2331,16 @@ const double ColorTemp::J570_NeuJ11_spect[97] = { 0.0424, 0.043, 0.0458, 0.048, 0.0522, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +const double ColorTemp::J570_NeuJ11_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1274, 0.1, 0.0916, 0.08, 0.0756, 0.061, 0.0604, 0.06, 0.0570, 0.06, 0.0604, 0.062, 0.0644, 0.065, 0.0668, 0.069, 0.0700, 0.072, 0.0754, 0.08, 0.0874, 0.1, + 0.1111, 0.12, 0.1327, 0.132, 0.1413, 0.12, 0.1127, 0.1, 0.0931, 0.08, 0.0758, 0.06, 0.0580, 0.05, 0.0449, 0.04, 0.0385, 0.037, 0.0360, 0.036, 0.0351, 0.035, + 0.0351, 0.0354, 0.0355, 0.036, 0.0371, 0.0375, 0.0379, 0.038, 0.0388, 0.04, 0.0406, 0.041, 0.0414, 0.0415, 0.0416, 0.041, 0.0409, 0.04, 0.0398, 0.0397, 0.0397, 0.04, + 0.0424, 0.043, 0.0458, 0.048, 0.0522, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + const double ColorTemp::J570_NeuL4_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0348, 0.05, 0.0700, 0.09, 0.1043, 0.11, 0.1320, 0.14, 0.1505, 0.16, 0.1622, 0.17, 0.1721, 0.18, 0.1805, 0.185, 0.1877, 0.19, 0.1955, 0.2, 0.2068, 0.21, @@ -2466,6 +2350,15 @@ const double ColorTemp::J570_NeuL4_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; +const double ColorTemp::J570_NeuL4_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0348, 0.05, 0.0700, 0.09, 0.1043, 0.11, 0.1320, 0.14, 0.1505, 0.16, 0.1622, 0.17, 0.1721, 0.18, 0.1805, 0.185, 0.1877, 0.19, 0.1955, 0.2, 0.2068, 0.21, + 0.2226, 0.23, 0.2350, 0.235, 0.2452, 0.23, 0.2251, 0.22, 0.2128, 0.2, 0.1990, 0.18, 0.1761, 0.16, 0.1494, 0.13, 0.1296, 0.12, 0.1171, 0.11, 0.1089, 0.105, + 0.1010, 0.1, 0.0949, 0.093, 0.0826, 0.093, 0.0937, 0.095, 0.0961, 0.1, 0.1020, 0.11, 0.1104, 0.112, 0.1150, 0.115, 0.1155, 0.113, 0.1123, 0.11, + 0.1070, 0.105, 0.1040, 0.11, 0.1110, 0.12, 0.1323, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::Colorlab_n72_n2_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0116, 0.01, 0.0171, 0.05, 0.0625, 0.08, 0.1486, 0.16, 0.1963, 0.2, 0.2409, 0.26, 0.2974, 0.31, 0.3468, 0.36, 0.3790, 0.39, 0.4075, 0.41, 0.4216, 0.43, @@ -2482,6 +2375,34 @@ const double ColorTemp::Colorlab_10_n70_spect[97] = { 0.3187, 0.31, 0.3082, 0.305, 0.3014, 0.304, 0.3059, 0.31, 0.3253, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + +const double ColorTemp::Colorlab_10_n70_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0964, 0.1, 0.1534, 0.2, 0.2437, 0.33, 0.4663, 0.5, 0.6005, 0.65, 0.6958, 0.75, 0.8010, 0.83, 0.8598, 0.858, 0.8579, 0.85, 0.8432, 0.83, 0.8102, 0.79, + 0.7607, 0.7, 0.6760, 0.65, 0.5530, 0.55, 0.4212, 0.3, 0.2974, 0.25, 0.1839, 0.12, 0.0743, 0.03, -0.0208, -0.05, -0.0747, -0.08, -0.0913, -0.05, -0.0458, 0.03, + 0.0806, 0.1, 0.1936, 0.2, 0.2556, 0.27, 0.2816, 0.29, 0.2925, 0.3, 0.3033, 0.31, 0.3175, 0.32, 0.3257, 0.325, 0.3246, 0.32, + 0.3187, 0.31, 0.3082, 0.305, 0.3014, 0.304, 0.3059, 0.34, 0.3353, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_10_n70_spect3[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0964, 0.1, 0.1534, 0.2, 0.2437, 0.33, 0.4663, 0.5, 0.6005, 0.65, 0.6958, 0.75, 0.8010, 0.83, 0.8598, 0.858, 0.8579, 0.85, 0.8432, 0.83, 0.8102, 0.79, + 0.7607, 0.7, 0.6760, 0.65, 0.5530, 0.55, 0.4212, 0.3, 0.2974, 0.25, 0.1839, 0.12, 0.0743, 0.03, -0.0208, -0.05, -0.0747, -0.08, -0.0913, -0.05, -0.0458, 0.03, + 0.0806, 0.1, 0.1936, 0.22, 0.2556, 0.27, 0.2816, 0.29, 0.2925, 0.33, 0.3033, 0.33, 0.3175, 0.32, 0.3257, 0.325, 0.3246, 0.32, + 0.3187, 0.32, 0.3082, 0.305, 0.3014, 0.304, 0.3059, 0.36, 0.3353, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_10_n70_spect4[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0964, 0.1, 0.1534, 0.2, 0.2437, 0.34, 0.4663, 0.55, 0.6005, 0.65, 0.6958, 0.75, 0.8010, 0.83, 0.8598, 0.858, 0.8579, 0.86, 0.8432, 0.82, 0.8102, 0.79, + 0.7607, 0.7, 0.6760, 0.6, 0.5530, 0.5, 0.4212, 0.3, 0.2974, 0.20, 0.1839, 0.12, 0.0743, 0.03, -0.0208, -0.05, -0.0747, -0.08, -0.0913, -0.05, -0.0458, 0.03, + 0.0806, 0.1, 0.1936, 0.22, 0.2556, 0.27, 0.2816, 0.29, 0.2925, 0.33, 0.3033, 0.33, 0.3175, 0.32, 0.3257, 0.325, 0.3246, 0.32, + 0.3187, 0.32, 0.3082, 0.305, 0.3014, 0.304, 0.3059, 0.36, 0.3353, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + const double ColorTemp::Colorlab_n33_n70_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0615, 0.1, 0.1219, 0.2, 0.2179, 0.3, 0.4397, 0.5, 0.5722, 0.6, 0.6714, 0.7, 0.7834, 0.8, 0.8535, 0.86, 0.8647, 0.864, 0.8642, 0.864, 0.8429, 0.82, @@ -2522,11 +2443,8 @@ const double ColorTemp::Colorlab_n80_26_spect[97] = { -0.2047, -0.205, -0.2069, -0.208, -0.2099, -0.21, -0.2115, -0.21, -0.2106, -0.209, -0.2086, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -/* -//0,1767000 0,2207000 0,3142000 0,5269000 0,7018000 0,7605000 0,7580000 0,7366000 0,7182000 0,6929000 0,6661000 0,6542000 -//0,6420000 0,6085000 0,5752000 0,5728000 0,5723000 0,5318000 0,4982000 0,5226000 0,5670000 0,5929000 0,5977000 0,5975000 -//0,6002000 0,6065000 0,6177000 0,6352000 0,6526000 0,6623000 0,6633000 0,6593000 0,6517000 0,6479000 0,6607000 0,6908000 +/* const double ColorTemp::JDC468_greyc14_66_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1767, 0.19, 0.2207, 0.25, 0.3142, 0.40, 0.5269, 0.63, 0.7018, 0.73, 0.7605, 0.76, 0.7580, 0.74, 0.7366, 0.725, 0.7182, 0.705, 0.6929, 0.68, 0.6661, 0.66, 0.6542, 0.65, @@ -2534,9 +2452,6 @@ const double ColorTemp::JDC468_greyc14_66_spect[97] = { 0.6002, 0.602, 0.6065, 0.61, 0.6177, 0.62, 0.6352, 0.64, 0.6526, 0.66, 0.6623, 0.662, 0.6633, 0.66, 0.6593, 0.653, 0.6517, 0.65, 0.6479, 0.65, 0.6607, 0.69, 0.6908, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//0,1325000 0,1637000 0,2222000 0,3492000 0,4523000 0,4897000 0,4918000 0,4840000 0,4761000 0,4638000 0,4538000 0,4582000 -// 0,4588000 0,4360000 0,4091000 0,4101000 0,4128000 0,3785000 0,3494000 0,3720000 0,4122000 0,4339000 0,4362000 0,4355000 -// 0,4395000 0,4475000 0,4606000 0,4807000 0,5006000 0,5125000 0,5145000 0,5112000 0,5029000 0,4992000 0,5150000 0,5526000 const double ColorTemp::JDC468_greym13_325_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, @@ -2546,10 +2461,6 @@ const double ColorTemp::JDC468_greym13_325_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; -//0,0823000 0,1036000 0,1337000 0,1966000 0,2468000 0,2679000 0,2728000 0,2726000 0,2724000 0,2698000 0,2705000 0,2810000 -// 0,2879000 0,2756000 0,2586000 0,2601000 0,2617000 0,2357000 0,2124000 0,2241000 0,2471000 0,2581000 0,2569000 0,2548000 -// 0,2579000 0,2653000 0,2765000 0,2941000 0,3126000 0,3230000 0,3238000 0,3189000 0,3091000 0,3043000 0,3200000 0,3579000 - const double ColorTemp::JDC468_greyf26_156_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0823, 0.1, 0.1036, 0.11, 0.1337, 0.16, 0.1966, 0.22, 0.2468, 0.255, 0.2679, 0.27, 0.2728, 0.273, 0.2726, 0.273, 0.2724, 0.271, 0.2698, 0.27, 0.2705, 0.275, 0.2810, 0.285, @@ -2558,10 +2469,6 @@ const double ColorTemp::JDC468_greyf26_156_spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; */ -//A1 0.0912 0.1228 0.1712 0.2978 0.3713 0.4241 0.4861 0.5255 0.5355 0.5363 0.5237 0.5251 -// 0.5722 0.6554 0.6936 0.6675 0.6203 0.5651 0.5116 0.4825 0.4714 0.4866 0.5320 0.5729 -// 0.5968 0.6069 0.6131 0.6198 0.6285 0.6325 0.6316 0.6282 0.6227 0.6196 0.6215 0.6337 - const double ColorTemp::Colorlab_n80_5_9_5_9spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0912, 0.1, 0.1228, 0.15, 0.1712, 0.2, 0.2978, 0.32, 0.3713, 0.41, 0.4241, 0.44, 0.4861, 0.51, 0.5255, 0.53, 0.5355, 0.534, 0.5363, 0.53, 0.5237, 0.524, 0.5251, 0.56, @@ -2570,10 +2477,6 @@ const double ColorTemp::Colorlab_n80_5_9_5_9spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; /* -//A2 0.0385 0.0514 0.0711 0.1229 0.1528 0.1744 0.1999 0.2163 0.2209 0.2216 0.2167 0.2185 -//0.2414 0.2813 0.3012 0.2922 0.2734 0.2511 0.2292 0.2173 0.2127 0.2183 0.2354 0.2508 -//0.2599 0.2637 0.2662 0.2689 0.2725 0.2742 0.2738 0.2724 0.2701 0.2689 0.2697 0.2747 - const double ColorTemp::Colorlab_n57_5_6_9spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0385, 0.04, 0.0514, 0.06, 0.0711, 0.1, 0.1229, 0.14, 0.1528, 0.16, 0.1744, 0.18, 0.1999, 0.2, 0.2163, 0.22, 0.2209, 0.221, 0.2216, 0.22, 0.2167, 0.216, 0.2185, 0.23, @@ -2582,6 +2485,1720 @@ const double ColorTemp::Colorlab_n57_5_6_9spect[97] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; */ +const double ColorTemp::Colorlab_L61_110_110Rec2020spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2118, 0.2100, 0.1920, 0.1800, 0.1574, 0.1575, 0.1578, 0.1600, 0.1631, 0.1500, 0.1392, 0.1200, 0.1018, 0.650, 0.0430, 0.1000, -0.0212, 0.0543, -0.0929, -0.1111, -0.1519, -0.1600, -0.1876, -0.1923, -0.1950, -0.1850, -0.1775, -0.1600, -0.1448, -0.1000, -0.0914, -0.0100, -0.0271, 0.0120, 0.0300, 0.0550, 0.0732, 0.0900, 0.1017, 0.1234, 0.1425,//41 + 0.1468, 0.3619, 0.5434, 0.8773, 1.1111, 1.3269, 1.4355, 1.5694, 1.6100, 1.6707, 1.7100, 1.7137, 1.7235, 1.7332, 1.7410, 1.7420, 1.7420, 1.7422, 1.7450, 1.7475, 1.7510, 1.7519, 1.7550, 1.7584, 1.7610, 1.7627, 1.7600, 1.7601, 1.7620, 1.7630,//30 + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L63_120_m56Rec2020spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3223, 0.3500, 0.3687, 0.4000, 0.4394, 0.5100, 0.7018, 0.7500, 0.8667, 0.9000, 0.9539, 1.000, 1.0370, 1.040, 1.0410, 0.9800, 0.9653, 0.9200, 0.8675, 0.8100, 0.7631, 0.7100, + 0.6533, 0.5500, 0.5024, 0.4000, 0.3065, 0.2100, 0.1347, 0.1000, 0.0257, 0.0100, -0.0474, -0.0600, -0.1188, -0.1500, -0.1851, -0.2000, -0.2188, -0.2000, -0.1941, -0.0100, + 0.0977, 0.5000, 0.8071, 1.100, 1.4292, 1.5500, 1.7653, 1.8500, 1.9058, 1.9300, 1.9644, 1.9800, 1.9977, 2.010, 2.0234, 2.0300, 2.0337, 2.0250, 2.0381, 2.0360, 2.0358, 2.3010, 2.0302, 2.0280, 2.0265, 2.0227, 2.0292, 2.0290, 2.0547, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L63_m50_m60Rec2020spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0605, 0.1000, 0.1336, 0.2000, 0.2496, 0.4500, 0.5113, 0.6000, 0.6662, 0.7500, 0.7853, 0.9000, 0.9221, 0.9650, 1.0126, 1.0200, 1.0357, 1.0400, 1.0454, 1.0300, 1.0283, 1.0000, + 0.9940, 0.9500, 0.9371, 0.8800, 0.8515, 0.7900, 0.7337, 0.6500, 0.5897, 0.5300, 0.4428, 0.3200, 0.2986, 0.2100, 0.1731, 0.1300, 0.1012, 0.0800, 0.0678, 0.0500, 0.0461, 0.0300, 0.0176, 0.0100, + -0.0042, -0.0100, -0.0143, -0.0150, -0.0183, -0.0190, -0.0194, -0.0150, -0.0127, -0.0100, 0.0014, 0.0050, 0.0108, 0.0090, 0.0076, 0.0001, -0.0007, -0.0050, -0.0150, -0.0200, -0.0240, -0.0200, -0.0182, 0.0010, 0.0042, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L63_m120_80Rec2020spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0708, -0.0700, -0.0651, -0.0600, -0.0562, -0.0600, 0.0685, -0.0700, -0.0813, -0.0750, -0.0762, -0.0700, -0.0617, -0.0400, -0.0305, 0.0100, 0.0120, 0.0300, 0.0568, 0.0800, 0.0933, 0.1000, 0.1433, 0.2000, 0.2482, 0.31000, 0.4019, 0.4500, 0.5081, 0.5200, 0.5339, 0.5300, 0.5266, 0.5200, 0.5121, 0.5000, 0.4971, 0.4900, + 0.4877, 0.4700, 0.4672, 0.4000, 0.3479, 0.2000, 0.0648, -0.0100, -0.1825, -0.0250, -0.3147, -0.3500, -0.3697, -0.3800, -0.3911, -0.4000, -0.4007, -0.4020, -0.4050, + -0.4050, -0.4063, -0.4080, -0.4090, -0.4100, -0.4109, -0.4120, -0.4130, -0.4135, -0.4140, -0.4138, -0.4135, -0.4140, -0.4149, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L42_110_m100Prospect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2174, 0.2500, 0.2847, 0.3300, 0.3905, 0.5500, 0.6912, 0.7500, 0.8768, 0.9100, 0.9938, 1.0500, 1.1155, 1.1300, 1.1613, 1.1300, 1.1194, 1.0800, 1.0576, 1.0100, 0.9793, 0.9200, + 0.8769, 0.7700, 0.7035, 0.6000, 0.4573, 0.3400, 0.2303, 0.1100, 0.0648, 0.0100, -0.0656, -0.1100, -0.1884, -0.2300, -0.2951, -0.3200, -0.3541, -0.3542, -0.3546, -0.2300, + -0.1748, 0.1000, 0.2751, 0.4100, 0.6713, 0.7500, 0.8857, 0.9200, 0.9753, 1.000, 1.0120, 1.0200, 1.0363, 1.0400, 1.0595, 1.0600, 1.0712, 1.0720, 1.0726, 1.0700, 1.0669, 1.0600, 1.0558, 1.0500, 1.0484, 1.0501, 1.0534, 1.0700, 1.0805, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L42_m70_m100Prospect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0736, 0.1000, 0.1529, 0.2200, 0.2791, 0.4200, 0.5702, 0.6600, 0.7447, 0.8200, 0.8749, 0.9500, 1.0210, 1.0600, 1.1109, 1.1200, 1.1222, 1.1200, 1.1187, 1.0900, 1.0887, 1.0500, 1.0294, 0.9500, 0.9114, 0.8600, 0.7320, 0.6600, 0.5414, + 0.4500, 0.3630, 0.2500, 0.1980, 0.1100, 0.0409, 0.0100, -0.0935, -0.01200, -0.1707, -0.1900, -0.2017, -0.2000, -0.1920, -0.1700, -0.1434, -0.1200, -0.0975, -0.0800, -0.0714, + -0.7000, -0.0605, -0.0600, -0.0562, -0.0500, -0.0466, -0.0350, -0.0302, -0.0200, -0.0194, -0.0200, -0.0220, -0.0250, -0.0308, -0.0350, -0.0460, -0.0500, -0.0559, -0.0500, -0.0495, -0.0300, -0.0248, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L56_m120_90Prospect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0592, -0.0560, -0.0555, -0.0550, -0.0497, -0.0600, -0.0630, -0.0700, -0.0753, -0.0740, -0.0727, -0.0700, -0.0627, -0.0500, -0.0387, -0.0040, -0.0049, 0.0100, 0.0311, 0.0500, + 0.0607, 0.0800, 0.1009, 0.1500, 0.1840, 0.2500, 0.3055, 0.3400, 0.3899, 0.4000, 0.4115, 0.40800, 0.4069, 0.4000, 0.3968, 0.3900, 0.3862, 0.3800, 0.3795, 0.3700, 0.3633, 0.3200, 0.2672, 0.1300, 0.0388, + 0.0100, -0.1609, -0.2000, -0.2676, -0.3000, -0.3121, -0.3200, -0.3294, -0.3300, -0.3373, -0.3400, -0.3410, -0.3420, -0.3421, -0.3430, -0.3443, -0.3450, -0.3456, -0.3460, -0.3472, -0.3475, -0.3479, -0.3476, -0.3476, -0.3480, -0.3490, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L25_60_m120Prospect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1084, 0.1500, 0.1725, 0.2200, 0.2744, 0.4000, 0.5281, 0.6000, 0.6825, 0.7500, 0.7901, 0.8500, 0.9069, 0.9300, 0.9679, 0.9600, 0.9574, 0.9400, 0.9326, 0.9100, 0.8890, 0.8500, 0.8185, 0.7500, + 0.6837, 0.5400, 0.4837, 0.3500, 0.2905, 0.2000, 0.1352, 0.1000, 0.0028, -0.050, -0.1213, -0.2000, -0.2273, -0.2500, -0.2875, -0.2950, -0.3033, -0.2600, -0.2338, -0.1000, -0.0476, 0.0500, + 0.1181, 0.1500, 0.2081, 0.2200, 0.2458, 0.2550, 0.2608, 0.2650, 0.2741, 0.2800, 0.2906, 0.2950, 0.3003, 0.3000, 0.2994, 0.2950, 0.2930, 0.2850, 0.2813, 0.2800, 0.2735, 0.2750, 0.2786, 0.2900, 0.3006, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L75_50_120Prospect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1451, 0.1350, 0.1304, 0.1200, 0.1040, 0.1000, 0.0943, 0.0900, 0.0894, 0.8500, 0.0702, 0.0500, 0.0450, 0.0200, 0.0120, 0.0000, -0.0180, -0.0200, -0.0531, -0.0600, -0.0820, -0.0800, -0.0803, -0.0400, -0.0149, 0.0200, 0.1067, 0.1500, + 0.2101, 0.2500, 0.2775, 0.3000, 0.3323, 0.3500, 0.3756, 0.3900, 0.4057, 0.4100, 0.4259, 0.4300, 0.4494, 0.5000, 0.5688, 0.7500, 0.8473, 0.9500, 1.0899, 1.1500, 1.2215, 1.2500, + 1.2766, 1.2900, 1.3014, 1.305, 1.3127, 1.3150, 1.3176, 1.3170, 1.3169, 1.3180, 1.3199, 1.3200, 1.3227, 1.3250, 1.3272, 1.3300, 1.3306, 1.3300, 1.3285, 1.3295, 1.3301, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L75_m120_0Prospect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0548, -0.0200, -0.0126, 0.0100, 0.0544, 0.1100, 0.1678, 0.1900, 0.2289, 0.2500, 0.2929, 0.3300, 0.3761, 0.4100, 0.4556, 0.4800, 0.5149, 0.5400, 0.5703, 0.5900, 0.6035, 0.6300, 0.6419, 0.6800, 0.7270, 0.8000, 0.8497, 0.8700, + 0.9053, 0.8800, 0.8613, 0.8200, 0.7798, 0.7300, 0.6924, 0.6600, 0.6138, 0.5900, 0.5679, 0.5500, 0.5282, 0.4500, 0.3813, 0.2000, 0.0440, 0.0100, -0.2491, -0.3000, -0.4050, -0.4300, -0.4699, -0.4800, -0.4951, -0.5000, + -0.5029, -0.5020, -0.5010, -0.5000, -0.4978, -0.5000, -0.5025, -0.5050, -0.5087, -0.5100, -0.5181, -0.5200, -0.5237, -0.5220, -0.5203, -0.5200, -0.5111, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L22_2_1_3Prospect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0074, 0.008, 0.0095, 0.01, 0.0127, 0.02, 0.0215, 0.025, 0.0267, 0.03, 0.0302, 0.033, 0.0343, 0.035, 0.0366, 0.036, 0.0367, 0.037, 0.0362, 0.035, 0.0349, 0.035, 0.0344, 0.036, 0.0367, 0.040, 0.0411, 0.042, 0.0428, 0.041, + 0.0409, 0.038, 0.0379, 0.035, 0.0343, 0.032, 0.0309, 0.030, 0.0290, 0.029, 0.0286, 0.03, 0.0312, 0.035, 0.0381, 0.040, 0.0443, 0.045, 0.0477, 0.048, 0.0491, 0.0490, 0.0498, 0.050, + 0.0504, 0.051, 0.0511, 0.0512, 0.0514, 0.0514, 0.0514, 0.0512, 0.0511, 0.0510, 0.0508, 0.0507, 0.0506, 0.0506, 0.0507, 0.0510, 0.0516, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp:: Colorlab_L44_2_8_3_9spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0277, 0.030, 0.0351, 0.040, 0.0464, 0.060, 0.0782, 0.085, 0.0969, 0.010, 0.1096, 0.11, 0.1240, 0.130, 0.1321, 0.132, 0.1325, 0.131, 0.1305, 0.130, 0.1255, 0.125, + 0.1240, 0.130, 0.1328, 0.140, 0.1497, 0.150, 0.1569, 0.153, 0.1505, 0.140, 0.1399, 0.130, 0.1274, 0.120, 0.1152, 0.110, 0.1086, 0.108, 0.1070, 0.117, 0.1172, 0.130, + 0.1438, 0.150, 0.1672, 0.170, 0.1803, 0.181, 0.1858, 0.186, 0.1885, 0.190, 0.1907, 0.192, 0.1932, 0.194, 0.1942, 0.1942, 0.1941, 0.193, 0.1934, 0.193, 0.1922, 0.192, 0.1915, 0.191, 0.1919, 0.194, 0.1950, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L44_2_8_3_9spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0277, 0.030, 0.0351, 0.040, 0.0564, 0.060, 0.0782, 0.085, 0.0969, 0.010, 0.1096, 0.11, 0.1240, 0.130, 0.1321, 0.132, 0.1325, 0.131, 0.1305, 0.130, 0.1255, 0.125, + 0.1240, 0.130, 0.1328, 0.140, 0.1597, 0.150, 0.1569, 0.153, 0.1505, 0.140, 0.1399, 0.130, 0.1274, 0.120, 0.1152, 0.110, 0.1086, 0.108, 0.1070, 0.117, 0.1172, 0.130, + 0.1438, 0.150, 0.1672, 0.170, 0.1903, 0.181, 0.1858, 0.186, 0.1885, 0.190, 0.1907, 0.192, 0.1932, 0.194, 0.1942, 0.1942, 0.1941, 0.193, 0.1934, 0.193, 0.1922, 0.192, 0.1915, 0.191, 0.1919, 0.194, 0.1950, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L95_2_3_15_6spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1546, 0.18, 0.1934, 0.22, 0.2519, 0.35, 0.4184, 0.45, 0.5150, 0.55, 0.5811, 0.625, 0.6582, 0.689, 0.7035, 0.71, 0.7106, 0.705, 0.7042, 0.70, 0.6812, 0.682, 0.6845, 0.715, + 0.7647, 0.82, 0.9074, 0.95, 0.9847, 0.97, 0.9662, 0.94, 0.9160, 0.888, 0.8522, 0.81, 0.7878, 0.77, 0.7534, 0.75, 0.7438, 0.76, 0.900, 0.905, 0.9109, 0.95, 1.0180, 1.03, + 1.0784, 1.1, 1.1039, 1.11, 1.1176, 1.12, 1.1290, 1.13, 1.1417, 1.145, 1.1469, 1.146, 1.1463, 1.143, 1.1425, 1.30, 1.1360, 1.20, 1.1327, 1.133, 1.1348, 1.14, 1.1514, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L95_2_3_15_6spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1546, 0.18, 0.1934, 0.22, 0.2519, 0.35, 0.4284, 0.45, 0.5150, 0.55, 0.5811, 0.625, 0.6582, 0.689, 0.7035, 0.71, 0.7106, 0.705, 0.7042, 0.70, 0.6812, 0.682, 0.6845, 0.715, + 0.7647, 0.82, 0.9074, 0.95, 0.9847, 0.97, 0.9362, 0.91, 0.9160, 0.888, 0.8522, 0.81, 0.7878, 0.77, 0.7534, 0.75, 0.7438, 0.76, 0.900, 0.905, 0.9109, 0.95, 1.0180, 1.03, + 1.0784, 1.1, 1.1039, 1.11, 1.1176, 1.12, 1.1090, 1.13, 1.1417, 1.145, 1.1469, 1.146, 1.1463, 1.143, 1.1425, 1.30, 1.1360, 1.20, 1.1327, 1.133, 1.1348, 1.14, 1.1514, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_3_5_10_7spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0207, 0.022, 0.0249, 0.03, 0.0312, 0.04, 0.0503, 0.055, 0.0614, 0.065, 0.0687, 0.077, 0.0772, 0.08, 0.0819, 0.082, 0.0823, 0.085, 0.0810, 0.08, 0.0778, 0.078, 0.0784, 0.08, + 0.0893, 0.1, 0.1088, 0.11, 0.1202, 0.12, 0.1195, 0.115, 0.1147, 0.11, 0.1082, 0.105, 0.1012, 0.1, 0.0976, 0.97, 0.0969, 0.1, 0.1043, 0.11, 0.1231, 0.13, 0.1397, 0.145, + 0.1490, 0.15, 0.1529, 0.153, 0.1549, 0.155, 0.1564, 0.157, 0.1580, 0.1585, 0.1586, 0.1585, 0.1585, 0.1584, 0.1582, 0.158, 0.1575, 0.1573, 0.1572, 0.1573, 0.1574, 0.158, 0.1593, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_3_5_10_7spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0207, 0.022, 0.0249, 0.03, 0.0312, 0.04, 0.0603, 0.055, 0.0614, 0.065, 0.0687, 0.077, 0.0772, 0.08, 0.0819, 0.082, 0.0823, 0.085, 0.0810, 0.08, 0.0778, 0.078, 0.0784, 0.08, + 0.0893, 0.1, 0.1088, 0.11, 0.1202, 0.12, 0.1295, 0.115, 0.1147, 0.11, 0.1082, 0.105, 0.1012, 0.1, 0.0976, 0.97, 0.0969, 0.1, 0.1043, 0.11, 0.1231, 0.13, 0.1397, 0.145, + 0.1490, 0.15, 0.1529, 0.153, 0.1549, 0.155, 0.1664, 0.157, 0.1580, 0.1585, 0.1586, 0.1585, 0.1585, 0.1584, 0.1582, 0.158, 0.1575, 0.1573, 0.1572, 0.1573, 0.1574, 0.158, 0.1593, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_3_5_10_7spect3[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0207, 0.022, 0.0249, 0.03, 0.0212, 0.04, 0.0503, 0.055, 0.0614, 0.065, 0.0687, 0.077, 0.0772, 0.08, 0.0819, 0.082, 0.0823, 0.085, 0.0810, 0.08, 0.0778, 0.078, 0.0784, 0.08, + 0.0893, 0.1, 0.1088, 0.11, 0.1102, 0.12, 0.1195, 0.115, 0.1147, 0.11, 0.1082, 0.105, 0.1012, 0.1, 0.0976, 0.97, 0.0969, 0.1, 0.1043, 0.11, 0.1231, 0.13, 0.1397, 0.145, + 0.1490, 0.15, 0.1529, 0.153, 0.1449, 0.155, 0.1564, 0.157, 0.1580, 0.1585, 0.1486, 0.1585, 0.1585, 0.1584, 0.1582, 0.158, 0.1575, 0.1573, 0.1572, 0.1573, 0.1574, 0.158, 0.1593, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L34_1_8_1_9spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0154, 0.018, 0.0199, 0.021, 0.0267, 0.03, 0.0454, 0.05, 0.0564, 0.06, 0.0639, 0.07, 0.0726, 0.075, 0.0776, 0.078, 0.0781, 0.078, 0.0771, 0.075, 0.0744, 0.074, 0.0737, 0.075, + 0.0788, 0.08, 0.0886, 0.09, 0.0926, 0.09, 0.0886, 0.085, 0.0821, 0.08, 0.0745, 0.07, 0.0672, 0.065, 0.0632, 0.063, 0.0621, 0.066, 0.0672, 0.08, 0.0807, 0.09, 0.0927, 0.095, + 0.0995, 0.1, 0.1023, 0.102, 0.1037, 0.104, 0.1049, 0.105, 0.1063, 0.1065, 0.1069, 0.1069, 0.1069, 0.1065, 0.1064, 0.106, 0.1057, 0.1055, 0.1053, 0.1054, 0.1055, 0.107, 0.1073, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L34_1_8_1_9spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0154, 0.018, 0.0199, 0.021, 0.0297, 0.03, 0.0454, 0.05, 0.0564, 0.06, 0.0639, 0.07, 0.0726, 0.075, 0.0776, 0.078, 0.0781, 0.078, 0.0771, 0.075, 0.0744, 0.074, 0.0737, 0.075, + 0.0788, 0.08, 0.0886, 0.09, 0.0826, 0.09, 0.0886, 0.085, 0.0821, 0.08, 0.0745, 0.07, 0.0672, 0.065, 0.0632, 0.063, 0.0621, 0.066, 0.0672, 0.08, 0.0807, 0.09, 0.0927, 0.095, + 0.0995, 0.1, 0.1023, 0.102, 0.1137, 0.104, 0.1049, 0.105, 0.1063, 0.1065, 0.1069, 0.1069, 0.1069, 0.1065, 0.1064, 0.106, 0.1057, 0.1055, 0.1053, 0.1054, 0.1055, 0.107, 0.1073, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L64_1_8_m1_9spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0652, 0.08, 0.0864, 0.1, 0.1189, 0.15, 0.2063, 0.22, 0.2577, 0.28, 0.2935, 0.31, 0.3344, 0.34, 0.3582, 0.36, 0.3608, 0.36, 0.3569, 0.35, 0.3449, 0.34, 0.3395, 0.34, + 0.3558, 0.37, 0.3884, 0.39, 0.3971, 0.38, 0.3738, 0.35, 0.3408, 0.32, 0.3038, 0.28, 0.2686, 0.25, 0.2493, 0.245, 0.2435, 0.26, 0.2645, 0.3, 0.3207, 0.33, 0.3706, 0.38, + 0.398, 0.4, 0.4103, 0.415, 0.4163, 0.42, 0.4216, 0.425, 0.4278, 0.43, 0.4307, 0.4305, 0.4304, 0.43, 0.4282, 0.425, 0.4246, 0.424, 0.4225, 0.425, 0.4238, 0.43, 0.4321, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L84_0_8_m1spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1232, 0.15, 0.1635, 0.2, 0.2255, 0.3, 0.3913, 0.4, 0.4886, 0.5, 0.5567, 0.6, 0.6349, 0.65, 0.6810, 0.682, 0.6871, 0.685, 0.6811, 0.67, 0.6591, 0.655, 0.6507, 0.67, 0.6864, 0.70, 0.7553, 0.76, 0.7770, 0.75, + 0.7343, 0.7, 0.6719, 0.65, 0.6014, 0.55, 0.5340, 0.5, 0.4973, 0.49, 0.4858, 0.5, 0.5227, 0.55, 0.6222, 0.65, 0.7108, 0.75, 0.7606, 0.77, 0.7817, 0.79, 0.7925, 0.8, + 0.8023, 0.81, 0.8141, 0.815, 0.8196, 0.818, 0.8188, 0.817, 0.8147, 0.81, 0.8077, 0.805, 0.8037, 0.804, 0.8063, 0.81, 0.8221, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L63_1_3_m2spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0646, 0.07, 0.0858, 0.1, 0.1184, 0.15, 0.2058, 0.22, 0.2571, 0.27, 0.2929, 0.31, 0.3340, 0.34, 0.3580, 0.36, 0.3608, 0.355, 0.3572, 0.35, 0.3454, 0.345, 0.3402, 0.35, + 0.3568, 0.37, 0.3896, 0.39, 0.3985, 0.38, 0.3752, 0.36, 0.3420, 0.32, 0.3049, 0.29, 0.2695, 0.255, 0.2501, 0.245, 0.2442, 0.25, 0.2644, 0.3, 0.3188, 0.35, 0.3671, 0.38, + 0.3942, 0.4, 0.4056, 0.41, 0.4115, 0.415, 0.4167, 0.42, 0.4229, 0.425, 0.4258, 0.4255, 0.4254, 0.424, 0.4232, 0.42, 0.4196, 0.417, 0.4174, 0.418, 0.4188, 0.42, 0.4271, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L44_2_3_m3spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0287, 0.03, 0.0380, 0.04, 0.0523, 0.08, 0.0910, 0.1, 0.1137, 0.12, 0.1295, 0.13, 0.1475, 0.15, 0.1578, 0.158, 0.1586, 0.157, 0.1566, 0.155, 0.1510, 0.15, 0.1481, 0.15, + 0.1538, 0.16, 0.1657, 0.167, 0.1678, 0.16, 0.1569, 0.15, 0.1421, 0.13, 0.1258, 0.12, 0.1103, 0.11, 0.1018, 0.1, 0.0994, 0.1, 0.1093, 0.12, 0.1356, 0.14, 0.1590, 0.16, + 0.1720, 0.173, 0.1775, 0.18, 0.1802, 0.181, 0.1826, 0.184, 0.1854, 0.186, 0.1867, 0.1865, 0.1865, 0.186, 0.1856, 0.185, 0.1840, 0.184, 0.1830, 0.1835, 0.1836, 0.186, 0.1873, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L65_96_45spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2103, 0.2, 0.1996, 0.19, 0.1795, 0.19, 0.2091, 0.22, 0.2312, 0.23, 0.2217, 0.22, 0.2014, 0.18, 0.1560, 0.1, 0.0981, 0.05, 0.0316, 0.0, -0.0261, -0.05, -0.0622, -0.07, + -0.0700, -0.06, -0.0540, -0.04, -0.0294, -0.01, 0.0079, 0.03, 0.0536, 0.08, 0.0922, 0.1, 0.1193, 0.12, 0.1385, 0.16, 0.1735, 0.25, 0.3791, 0.5, 0.8646, 1.0, 1.2884, 1.35, + 1.5172, 1.6, 1.6128, 1.63, 1.6537, 1.66, 1.6730, 1.68, 1.682, 1.684, 1.6842, 1.685, 1.6888, 1.69, 1.6921, 1.695, 1.6967, 1.698, 1.6998, 1.699, 1.6979, 1.70, 1.7033, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L52_47_57spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0746, 0.7, 0.0693, 0.06, 0.0597, 0.06, 0.0637, 0.065, 0.0670, 0.063, 0.0611, 0.055, 0.0521, 0.04, 0.0367, 0.03, 0.0198, 0.0, -0.0001, -0.01, -0.0171, -0.02, -0.0218, -0.022, + -0.0029, 0.0, 0.0366, 0.05, 0.0710, 0.08, 0.0956, 0.1, 0.1172, 0.12, 0.1343, 0.14, 0.1459, 0.15, 0.1539, 0.16, 0.1656, 0.20, 0.2305, 0.3, 0.3828, 0.45, 0.5156, 0.55, + 0.5875, 0.6, 0.6176, 0.62, 0.6309, 0.632, 0.6371, 0.64, 0.6401, 0.6401, 0.6402, 0.6415, 0.6417, 0.642, 0.6430, 0.644, 0.6448, 0.645, 0.6462, 0.646, 0.6454, 0.646, 0.6469, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L31_62_27spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0456, 0.045, 0.0430, 0.04, 0.0383, 0.04, 0.0441, 0.045, 0.0486, 0.047, 0.0462, 0.045, 0.0413, 0.04, 0.0310, 0.02, 0.0180, 0.01, 0.0031, 0.0, -0.0096, -0.01, -0.0179, -0.02, + -0.0211, -0.02, -0.0198, -0.019, -0.0159, -0.01, -0.0081, 0.0, 0.0021, 0.02, 0.0109, 0.0105, 0.0172, 0.02, 0.0216, 0.025, 0.0294, 0.05, 0.0749, 0.1, 0.1824, 0.2, 0.2761, 0.3, + 0.3267, 0.33, 0.3479, 0.35, 0.3569, 0.36, 0.3611, 0.362, 0.3632, 0.363, 0.3635, 0.364, 0.3645, 0.365, 0.3653, 0.366, 0.3663, 0.367, 0.3670, 0.367, 0.3666, 0.367, 0.3677, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L79_m9_m28spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1188, 0.15, 0.1814, 0.2, 0.2793, 0.4, 0.5204, 0.6, 0.6631, 0.7, 0.7669, 0.8, 0.8855, 0.9, 0.9584, 0.96, 0.9703, 0.97, 0.9673, 0.96, 0.9410, 0.94, 0.9144, 0.91, 0.9020, 0.9, + 0.8941, 0.86, 0.8425, 0.8, 0.7410, 0.7, 0.6276, 0.6, 0.5106, 0.45, 0.4049, 0.35, 0.3456, 0.33, 0.3233, 0.33, 0.3475, 0.4, 0.4243, 0.45, 0.4941, 0.5, 0.5339, 0.54, 0.5507, 0.555, + 0.5593, 0.56, 0.5700, 0.575, 0.5852, 0.59, 0.5936, 0.592, 0.5918, 0.59, 0.5850, 0.58, 0.5735, 0.57, 0.5665, 0.57, 0.5710, 0.58, 0.5928, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L58_50_31spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1011, 0.11, 0.1006, 0.1, 0.0980, 0.11, 0.1257, 0.13, 0.1434, 0.145, 0.1459, 0.145, 0.1455, 0.14, 0.1325, 0.12, 0.1113, 0.1, 0.0852, 0.07, 0.0607, 0.05, 0.0494, 0.06, + 0.0625, 0.08, 0.0961, 0.1, 0.1233, 0.13, 0.1401, 0.15, 0.1549, 0.16, 0.1647, 0.165, 0.1692, 0.17, 0.1736, 0.18, 0.1864, 0.22, 0.2711, 0.35, 0.4721, 0.55, 0.6477, 0.7, 0.7428, 0.76, 0.7826, 0.79, + 0.8000, 0.804, 0.8088, 0.81, 0.8140, 0.815, 0.8150, 0.816, 0.8167, 0.817, 0.8176, 0.818, 0.8188, 0.819, 0.8198, 0.8195, 0.8192, 0.82, 0.8231, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L31_m52_27spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0093, -0.008, -0.0073, -0.005, -0.0042, -0.003, -0.0021, -0.002, -0.0018, 0.0, 0.0008, 0.004, 0.0053, 0.01, 0.0117, 0.015, 0.0191, 0.02, 0.0265, 0.03, 0.0321, 0.035, 0.0402, 0.05, 0.0582, 0.07, 0.0849, 0.1, + 0.1027, 0.103, 0.1056, 0.104, 0.1027, 0.1, 0.0984, 0.095, 0.0941, 0.093, 0.0915, 0.09, 0.0877, 0.08, 0.0684, 0.05, 0.0228, 0.0, -0.0170, -0.02, -0.0383, -0.04, -0.0471, -0.05, + -0.0505, -0.051, -0.0519, -0.052, -0.0523, -0.0523, -0.0524, -0.0528, -0.0529, -0.053, -0.0533, -0.0538, -0.0538, -0.54, -0.0541, -0.054, -0.0540, -0.054, -0.0538, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L44_2_2_m7_35spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0303, 0.04, 0.0412, 0.05, 0.0579, 0.08, 0.1021, 0.11, 0.1283, 0.135, 0.1465, 0.16, 0.1672, 0.17, 0.1790, 0.179, 0.1798, 0.178, 0.1775, 0.173, 0.1712, 0.17, 0.1668, 0.168, 0.1695, 0.18, 0.1769, 0.175, 0.1746, 0.17, 0.1600, 0.15, + 0.1422, 0.13, 0.1229, 0.11, 0.1049, 0.1, 0.0950, 0.093, 0.0921, 0.1, 0.1027, 0.12, 0.1314, 0.14, 0.1569, 0.16, 0.1711, 0.175, 0.1771, 0.18, 0.1800, 0.181, 0.1826, 0.184, 0.1857, 0.187, 0.1872, 0.1871, + 0.1871, 0.186, 0.1860, 0.185, 0.1841, 0.184, 0.1830, 0.183, 0.1837, 0.186, 0.1878, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L47_m10_8_0_41spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0213, 0.03, 0.0316, 0.04, 0.0475, 0.06, 0.0864, 0.09, 0.1088, 0.11, 0.1258, 0.13, 0.1458, 0.15, 0.1595, 0.16, 0.1641, 0.165, 0.1662, 0.164, 0.1639, 0.164, 0.1647, 0.17, 0.1775, 0.18, 0.1995, 0.2, 0.2080, 0.2, 0.1975, 0.19, 0.1809, 0.17, + 0.1621, 0.15, 0.1445, 0.14, 0.1347, 0.131, 0.1302, 0.13, 0.1289, 0.129, 0.1288, 0.129, 0.1291, 0.1295, 0.1298, 0.13, 0.1301, 0.1305, 0.1308, 0.131, 0.1323, 0.133, 0.1347, 0.135, + 0.1360, 0.136, 0.1355, 0.135, 0.1344, 0.133, 0.1325, 0.132, 0.1314, 0.132, 0.1321, 0.134, 0.1357, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L32_4_8_m3_2spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0163, 0.02, 0.0211, 0.025, 0.0285, 0.03, 0.0490, 0.05, 0.0611, 0.065, 0.0694, 0.07, 0.0786, 0.08, 0.0837, 0.083, 0.0835, 0.082, 0.0819, 0.08, 0.0785, 0.077, 0.0764, 0.077, 0.0784, 0.08, 0.0833, 0.083, 0.0835, 0.08, 0.0776, 0.075, + 0.0701, 0.065, 0.0617, 0.06, 0.0538, 0.05, 0.0494, 0.045, 0.0484, 0.05, 0.0552, 0.06, 0.0729, 0.08, 0.0885, 0.09, 0.0972, 0.1, 0.1008, 0.102, 0.1026, 0.0103, 0.1039, 0.0104, + 0.1055, 0.0106, 0.1062, 0.0161, 0.1061, 0.0106, 0.1056, 0.0105, 0.1048, 0.0104, 0.1044, 0.01045, 0.1047, 0.0105, 0.1066, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L57_m6_9_2_9spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0379, 0.04, 0.0525, 0.06, 0.0750, 0.1, 0.1325, 0.14, 0.1658, 0.18, 0.1901, 0.2, 0.2187, 0.22, 0.2373, 0.24, 0.2425, 0.243, 0.2437, 0.24, 0.2387, 0.236, 0.2394, 0.24, 0.2594, 0.28, 0.2945, 0.3, 0.3096, 0.3, + 0.2963, 0.28, 0.2737, 0.26, 0.2478, 0.23, 0.2230, 0.21, 0.2093, 0.205, 0.2038, 0.206, 0.2078, 0.21, 0.2218, 0.225, 0.2346, 0.24, 0.2423, 0.244, 0.2456, 0.246, 0.2478, 0.25, + 0.2505, 0.252, 0.2543, 0.255, 0.2562, 0.257, 0.2557, 0.255, 0.2541, 0.253, 0.2515, 0.252, 0.2500, 0.25, 0.2509, 0.252, 0.2564, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L33_2_4_m4_5spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0167, 0.02, 0.0223, 0.03, 0.0310, 0.04, 0.054, 0.06, 0.0679, 0.07, 0.0774, 0.08, 0.0881, 0.09, 0.0943, 0.095, 0.0946, 0.094, 0.0933, 0.09, 0.0899, 0.088, 0.0877, 0.088, + 0.0898, 0.09, 0.0949, 0.095, 0.0947, 0.09, 0.0875, 0.08, 0.0785, 0.07, 0.0685, 0.06, 0.0592, 0.055, 0.0541, 0.053, 0.0527, 0.055, 0.0587, 0.06, 0.0748, 0.08, 0.0891, 0.09, + 0.0971, 0.1, 0.1005, 0.102, 0.1021, 0.103, 0.1035, 0.104, 0.1052, 0.1055, 0.1060, 0.106, 0.1059, 0.106, 0.1053, 0.105, 0.1043, 0.104, 0.1038, 0.104, 0.1041, 0.105, 0.1063, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L35_11_65_m1_1spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0226, 0.025, 0.0276, 0.03, 0.0351, 0.04, 0.0579, 0.06, 0.0715, 0.075, 0.0802, 0.085, 0.0897, 0.09, 0.0940, 0.093, 0.0925, 0.09, 0.0891, 0.085, 0.0841, 0.082, 0.0810, 0.082, + 0.0830, 0.085, 0.0888, 0.089, 0.0897, 0.085, 0.0842, 0.08, 0.0772, 0.07, 0.0691, 0.065, 0.0612, 0.055, 0.0570, 0.057, 0.0568, 0.06, 0.0691, 0.08, 0.0998, 0.1, 0.1269, 0.13, + 0.1417, 0.145, 0.1479, 0.15, 0.1508, 0.151, 0.1527, 0.153, 0.1546, 0.155, 0.1554, 0.1554, 0.1555, 0.155, 0.1550, 0.155, 0.1543, 0.153, 0.1538, 0.154, 0.1541, 0.155, 0.1564, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L52_m2_7_8_9spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0316, 0.04, 0.0411, 0.05, 0.0556, 0.08, 0.0946, 0.1, 0.1172, 0.12, 0.1332, 0.14, 0.1521, 0.16, 0.1640, 0.165, 0.1670, 0.167, 0.1670, 0.165, 0.1628, 0.164, 0.1643, 0.17, 0.1829, 0.2, 0.2154, 0.22, 0.2324, 0.23, + 0.2267, 0.22, 0.2135, 0.2, 0.1973, 0.19, 0.1812, 0.18, 0.1725, 0.17, 0.1694, 0.17, 0.1756, 0.18, 0.1930, 0.2, 0.2085, 0.21, 0.2175, 0.22, 0.2213, 0.222, 0.2236, 0.224, 0.2259, 0.227, + 0.2287, 0.229, 0.2299, 0.2298, 0.2296, 0.229, 0.2286, 0.227, 0.2270, 0.227, 0.2261, 0.2265, 0.2267, 0.23, 0.2305, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L32_7_m2_5spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0170, 0.02, 0.0216, 0.025, 0.0285, 0.04, 0.0483, 0.05, 0.0600, 0.065, 0.0678, 0.07, 0.0765, 0.08, 0.0809, 0.0802, 0.0804, 0.079, 0.0783, 0.075, 0.0747, 0.074, 0.0724, 0.073, 0.0742, 0.077, 0.0789, 0.079, 0.0792, 0.075, + 0.0738, 0.07, 0.0670, 0.06, 0.0593, 0.055, 0.0519, 0.05, 0.0479, 0.0476, 0.0472, 0.05, 0.0552, 0.06, 0.0756, 0.09, 0.0937, 0.1, 0.1036, 0.104, 0.1078, 0.108, 0.1097, 0.11, + 0.1112, 0.112, 0.1127, 0.113, 0.1134, 0.1134, 0.1134, 0.113, 0.1130, 0.113, 0.1122, 0.112, 0.1118, 0.112, 0.1121, 0.113, 0.1140, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L32_3_4_m3_8spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0156, 0.02, 0.0205, 0.025, 0.0281, 0.03, 0.0488, 0.06, 0.0611, 0.065, 0.0694, 0.07, 0.0789, 0.08, 0.0842, 0.0843, 0.0843, 0.084, 0.0830, 0.08, 0.0798, 0.078, 0.0777, 0.078, 0.0797, 0.08, + 0.0844, 0.0844, 0.0843, 0.08, 0.0781, 0.075, 0.0702, 0.065, 0.0615, 0.06, 0.0534, 0.05, 0.0489, 0.048, 0.0477, 0.05, 0.0538, 0.06, 0.0697, 0.07, 0.0838, 0.09, 0.0916, 0.093, + 0.0949, 0.095, 0.0965, 0.097, 0.0978, 0.098, 0.0993, 0.1, 0.1000, 0.1, 0.0999, 0.0996, 0.0994, 0.099, 0.0986, 0.0985, 0.0981, 0.0985, 0.0984, 0.1, 0.1004, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L50_m5_3_6_5spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0275, 0.03, 0.0370, 0.04, 0.0515, 0.06, 0.0893, 0.1, 0.1111, 0.12, 0.1269, 0.13, 0.1456, 0.15, 0.1578, 0.16, 0.1614, 0.162, 0.1622, 0.16, 0.1589, 0.16, 0.1604, 0.17, 0.1776, 0.19, 0.2074, 0.21, + 0.2223, 0.22, 0.2158, 0.21, 0.2020, 0.19, 0.1855, 0.18, 0.1695, 0.165, 0.1607, 0.16, 0.1572, 0.16, 0.1605, 0.17, 0.1711, 0.18, 0.1807, 0.185, 0.1864, 0.188, 0.1889, 0.19, + 0.1906, 0.191, 0.1925, 0.194, 0.1951, 0.196, 0.1963, 0.196, 0.1960, 0.195, 0.1949, 0.194, 0.1933, 0.193, 0.1923, 0.1925, 0.1929, 0.195, 0.1966, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L44_3_96_m8_8spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0320, 0.04, 0.0431, 0.05, 0.0604, 0.09, 0.1063, 0.12, 0.1336, 0.14, 0.1524, 0.16, 0.1737, 0.18, 0.1856, 0.186, 0.1860, 0.185, 0.1831, 0.18, 0.1761, 0.175, 0.1709, 0.172, 0.1721, 0.175, 0.1773, 0.175, + 0.1732, 0.16, 0.1576, 0.15, 0.1391, 0.13, 0.1192, 0.11, 0.1007, 0.1, 0.0905, 0.09, 0.0877, 0.1, 0.1001, 0.12, 0.1329, 0.15, 0.1620, 0.17, 0.1782, 0.1850, 0.188, 0.1882, 0.19, + 0.1910, 0.193, 0.1942, 0.195, 0.1958, 0.1956, 0.195, 0.195, 0.1945, 0.193, 0.1926, 0.192, 0.1915, 0.192, 0.1922, 0.195, 0.1965, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L34_3_6_m5_4spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0184, 0.02, 0.0245, 0.03, 0.0339, 0.04, 0.0591, 0.06, 0.0741, 0.08, 0.0844, 0.09, 0.0960, 0.1, 0.1025, 0.105, 0.1026, 0.101, 0.1009, 0.1, 0.0970, 0.095, 0.0944, 0.095, + 0.0959, 0.1, 0.1004, 0.1, 0.0993, 0.095, 0.0913, 0.09, 0.0815, 0.08, 0.0707, 0.065, 0.0607, 0.06, 0.0552, 0.055, 0.0537, 0.06, 0.0609, 0.07, 0.0799, 0.08, 0.0968, 0.1, 0.1061, 0.11, 0.1101, 0.111, 0.1119, 0.112, 0.1135, 0.114, + 0.1153, 0.116, 0.1162, 0.1161, 0.1161, 0.116, 0.1155, 0.115, 0.1145, 0.114, 0.1139, 0.114, 0.1143, 0.115, 0.1166, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L31_5_9_m4spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0166, 0.02, 0.0214, 0.025, 0.0288, 0.04, 0.0495, 0.05, 0.0618, 0.065, 0.0700, 0.07, 0.0793, 0.08, 0.0842, 0.084, 0.0839, 0.083, 0.0820, 0.08, 0.0784, 0.077, 0.0761, 0.077, 0.0774, 0.08, 0.0813, 0.081, + 0.0808, 0.08, 0.0747, 0.07, 0.0671, 0.06, 0.0587, 0.055, 0.0508, 0.05, 0.0465, 0.046, 0.0456, 0.05, 0.0530, 0.06, 0.0720, 0.08, 0.0888, 0.09, 0.0981, 0.1, 0.1020, 0.102, + 0.1039, 0.104, 0.1053, 0.106, 0.1068, 0.107, 0.1076, 0.1075, 0.1075, 0.1074, 0.1071, 0.107, 0.1062, 0.106, 0.1058, 0.106, 0.1061, 0.107, 0.1080, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L35_3_4_m11spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0211, 0.025, 0.0291, 0.03, 0.0414, 0.05, 0.0739, 0.08, 0.0932, 0.1, 0.1066, 0.12, 0.1217, 0.13, 0.1302, 0.1302, 0.1303, 0.129, 0.1283, 0.125, 0.1235, 0.12, 0.1193, 0.118, 0.1180, 0.118, 0.1183, 0.115, 0.1129, 0.105, 0.1007, 0.9, + 0.0871, 0.08, 0.0727, 0.065, 0.0595, 0.053, 0.0521, 0.503, 0.0501, 0.055, 0.0583, 0.07, 0.0804, 0.09, 0.1000, 0.11, 0.1109, 0.115, 0.1154, 0.116, 0.1176, 0.118, 0.1195, 0.12, + 0.1217, 0.122, 0.1229, 0.122, 0.1227, 0.122, 0.1219, 0.121, 0.1205, 0.12, 0.1197, 0.12, 0.1202, 0.121, 0.1233, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L31_4_5_m4_7spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0163, 0.02, 0.0214, 0.025, 0.0292, 0.04, 0.0507, 0.06, 0.0634, 0.07, 0.0720, 0.08, 0.0818, 0.082, 0.0871, 0.087, 0.0870, 0.086, 0.0854, 0.084, 0.0820, 0.08, 0.0796, 0.08, + 0.0810, 0.082, 0.0849, 0.084, 0.0842, 0.08, 0.0776, 0.07, 0.0694, 0.065, 0.0605, 0.055, 0.0520, 0.05, 0.047, 0.046, 0.0463, 0.05, 0.0531, 0.06, 0.0706, 0.08, + 0.0862, 0.09, 0.0948, 0.0948, 0.0984, 0.1, 0.1001, 0.101, 0.1015, 0.102, 0.1031, 0.1032, 0.1038, 0.1038, 0.1038, 0.1035, 0.1033, 0.103, 0.1024, 0.102, 0.1019, 0.102, 0.1022, 0.103, 0.1043, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L35_4_8_m6_4spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0202, 0.025, 0.0268, 0.03, 0.0369, 0.05, 0.0643, 0.07, 0.0805, 0.09, 0.0917, 0.095, 0.1042, 0.11, 0.1110, 0.1105, 0.1109, 0.11, 0.1089, 0.105, 0.1045, 0.102, + 0.1013, 0.102, 0.1023, 0.105, 0.1060, 0.105, 0.1040, 0.1, 0.0951, 0.09, 0.0845, 0.08, 0.0729, 0.07, 0.0621, 0.06, 0.0562, 0.055, 0.0547, 0.06, 0.0631, 0.07, + 0.0851, 0.09, 0.1045, 0.11, 0.1153, 0.116, 0.1198, 0.12, 0.1220, 0.123, 0.1237, 0.124, 0.1257, 0.126, 0.1267, 0.1266, 0.1266, 0.126, 0.1259, 0.125, 0.1248, 0.1245, 0.1242, 0.1242, 0.1246, 0.126, 0.1272, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L95_10_7_m14_3spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2133, 0.25, 0.2824, 0.32, 0.3890, 0.5, 0.6783, 0.8, 0.8501, 0.9, 0.9674, 1.05, 1.0994, 1.11, 1.1716, 1.1705, 1.1704, 1.15, 1.1487, 1.12, 1.1019, 1.09, 1.0679, 1.07, 1.0770, 1.1, 1.1145, 1.1, 1.0929, 1.0, 0.9987, 0.9, + 0.8859, 0.8, 0.7633, 0.7, 0.6498, 0.6, 0.5873, 0.57, 0.5718, 0.6, 0.6609, 0.7, 0.8939, 1.0, 1.1003, 1.1, 1.2145, 1.25, 1.2625, 1.27, 1.2851, 1.3, 1.3037, 1.31, 1.3246, 1.33, + 1.3346, 1.334, 1.3339, 1.33, 1.3270, 1.32, 1.3152, 1.31, 1.3082, 1.31, 1.3127, 1.33, 1.340, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L36_34_m7_5spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0401, 0.045, 0.0459, 0.05, 0.0545, 0.07, 0.0861, 0.1, 0.1055, 0.11, 0.1162, 0.12, 0.1270, 0.128, 0.1290, 0.125, 0.1221, 0.12, 0.1125, 0.11, 0.1015, 0.1, 0.0924, 0.09, 0.0859, 0.085, 0.0806, 0.08, 0.0731, 0.07, 0.0646, 0.06, + 0.0570, 0.05, 0.0484, 0.04, 0.0399, 0.036, 0.0356, 0.037, 0.0378, 0.05, 0.0685, 0.1, 0.1433, 0.15, 0.2088, 0.22, 0.2444, 0.25, 0.2593, 0.26, 0.2658, 0.266, 0.2695, 0.27, + 0.2726, 0.273, 0.2738, 0.274, 0.2742, 0.274, 0.2738, 0.2733, 0.2731, 0.273, 0.2727, 0.273, 0.2730, 0.275, 0.2762, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L37_59_2spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0604, 0.061, 0.0622, 0.063, 0.0644, 0.07, 0.0898, 0.1, 0.1061, 0.11, 0.1114, 0.113, 0.1147, 0.11, 0.1079, 0.1, 0.0930, 0.08, 0.0749, 0.06, 0.0576, 0.05, 0.0442, 0.04, 0.0342, 0.03, 0.0265, 0.021, 0.0208, 0.02, 0.0197, 0.02, + 0.0219, 0.022, 0.0228, 0.022, 0.0220, 0.0225, 0.0225, 0.025, 0.0300, 0.05, 0.0857, 0.2, 0.2187, 0.3, 0.3350, 0.35, 0.3978, 0.4, 0.4241, 0.43, 0.4353, 0.44, 0.4410, 0.445, + 0.4447, 0.445, 0.4457, 0.446, 0.4467, 0.447, 0.4471, 0.4472, 0.4474, 0.4475, 0.4476, 0.4475, 0.4475, 0.45, 0.4504, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +const double ColorTemp::Colorlab_L69_14_m9spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1024, 0.12, 0.1316, 0.15, 0.1764, 0.2, 0.3024, 0.35, 0.3775, 0.4, 0.4274, 0.45, 0.4832, 0.5, 0.5118, 0.51, 0.5082, 0.5, 0.4953, 0.48, 0.4721, 0.46, 0.4554, 0.455, 0.4581, 0.46, 0.4737, 0.47, 0.4648, 0.44, 0.4258, 0.4, + 0.3795, 0.35, 0.3290, 0.3, 0.2813, 0.27, 0.2554, 0.253, 0.2506, 0.28, 0.2997, 0.33, 0.4254, 0.4, 0.5364, 0.55, 0.5976, 0.6, 0.6232, 0.63, 0.6351, 0.64, 0.6441, 0.65, + 0.6536, 0.655, 0.6580, 0.658, 0.6579, 0.656, 0.6551, 0.652, 0.6503, 0.65, 0.6474, 0.648, 0.6493, 0.67, 0.6613, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +const double ColorTemp::Colorlab_L92_13_m16spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2033, 0.23, 0.2685, 0.32, 0.3690, 0.5, 0.6430, 0.7, 0.8059, 0.85, 0.9166, 1.0, 1.0407, 1.1, 1.1075, 1.105, 1.1043, 1.09, 1.0816, 1.05, 1.0357, 1.02, 1.0006, 1.0, 1.0019, 1.02, 1.0261, 1.0, 0.9978, 0.95, 0.9063, 0.8, 0.7994, 0.75, 0.6845, 0.6, + 0.5772, 0.55, 0.5185, 0.52, 0.5047, 0.57, 0.5942, 0.7, 0.8269, 0.9, 1.0329, 1.1, 1.1466, 1.15, 1.1944, 1.2, 1.2167, 1.22, 1.2346, 1.24, 1.2546, 1.26, 1.2641, 1.264, + 1.2635, 1.26, 1.2571, 1.25, 1.2460, 1.24, 1.2394, 1.24, 1.2437, 1.25, 1.2695, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L49_21_m12spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0571, 0.06, 0.0711, 0.08, 0.0928, 0.11, 0.1566, 0.17, 0.1950, 0.2, 0.2195, 0.23, 0.2461, 0.25, 0.2579, 0.255, 0.2527, 0.25, 0.2427, 0.23, 0.2282, 0.22, 0.2160, 0.21, 0.2094, 0.206, 0.2057, 0.2, 0.1934, 0.18, 0.1722, 0.16, 0.1498, 0.13, 0.1258, 0.11, + 0.1033, 0.1, 0.0911, 0.0905, 0.0904, 0.1, 0.1245, 0.18, 0.2101, 0.25, 0.2855, 0.3, 0.3266, 0.33, 0.3439, 0.35, 0.3516, 0.355, 0.3568, 0.36, 0.3619, 0.363, 0.3642, 0.3644, + 0.3644, 0.364, 0.3631, 0.361, 0.3609, 0.36, 0.3596, 0.36, 0.3605, 0.365, 0.3665, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L56_20_m15spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0778, 0.08, 0.0988, 0.11, 0.1312, 0.19, 0.2241, 0.25, 0.2800, 0.3, 0.3163, 0.34, 0.3559, 0.36, 0.3744, 0.37, 0.3683, 0.36, 0.3553, 0.34, 0.3356, 0.32, 0.3184, 0.31, 0.3083, 0.305, 0.3014, 0.3, 0.2817, 0.26, 0.2492, 0.23, + 0.2150, 0.2, 0.1787, 0.15, 0.1448, 0.13, 0.1264, 0.125, 0.1244, 0.15, 0.1690, 0.22, 0.2816, 0.32, 0.3810, 0.4, 0.4353, 0.44, 0.4580, 0.46, 0.4682, 0.47, 0.4754, 0.48, + 0.4826, 0.483, 0.4859, 0.486, 0.4861, 0.485, 0.4842, 0.483, 0.4807, 0.48, 0.4787, 0.48, 0.4800, 0.485, 0.4888, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L68_21_m19spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1192, 0.13, 0.1536, 0.18, 0.2066, 0.3, 0.3562, 0.4, 0.4460, 0.45, 0.5051, 0.55, 0.5700, 0.6, 0.6015, 0.6, 0.5935, 0.58, 0.5748, 0.56, 0.5447, 0.53, 0.5182, 0.51, 0.5024, 0.5, 0.4912, 0.48, 0.4591, 0.42, 0.4053, 0.37, + 0.3484, 0.3, 0.2883, 0.25, 0.2325, 0.22, 0.2021, 0.2, 0.1976, 0.23, 0.2631, 0.33, 0.4293, 0.5, 0.5760, 0.6564, 0.6, 0.6901, 0.7, 0.7051, 0.71, 0.7161, 0.72, 0.7275, 0.73, + 0.7328, 0.733, 0.7329, 0.73, 0.7297, 0.725, 0.7241, 0.721, 0.7206, 0.722, 0.7229, 0.73, 0.7370, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L98_m2_m32spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2248, 0.3, 0.3270, 0.4, 0.4865, 0.6, 0.8902, 1.0, 1.1296, 1.13, 1.3004, 1.4, 1.4939, 1.5, 1.6083, 1.61, 1.6196, 1.61, 1.6050, 1.6, 1.5533, 1.54, 1.5033, 1.5, 1.4786, 1.47, 1.4628, 1.4, 1.3770, 1.3, 1.2127, 1.1, 1.0306, 0.9, 0.8418, 0.7, + 0.6705, 0.6, 0.574, 0.55, 0.5427, 0.6, 0.6117, 0.7, 0.8072, 0.9, 0.9823, 1.0, 1.0802, 1.1, 1.1215, 1.13, 1.1414, 1.15, 1.1617, 1.17, 1.1884, 1.2, 1.2025, 1.2, 1.2001, 1.19, + 1.1894, 1.18, 1.1710, 1.16, 1.1597, 1.16, 1.1670, 1.2, 1.2037, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L98_m2_m32spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2248, 0.3, 0.3370, 0.4, 0.4865, 0.6, 0.8902, 1.0, 1.1296, 1.13, 1.3004, 1.4, 1.4939, 1.5, 1.6083, 1.61, 1.6196, 1.61, 1.6050, 1.6, 1.5533, 1.54, 1.5033, 1.5, 1.4786, 1.47, 1.4628, 1.4, 1.3770, 1.3, 1.2127, 1.1, 1.0306, 0.9, 0.8418, 0.7, + 0.6705, 0.6, 0.584, 0.55, 0.5427, 0.6, 0.6117, 0.7, 0.8072, 0.9, 0.9823, 1.0, 1.0802, 1.1, 1.1215, 1.13, 1.1414, 1.15, 1.1617, 1.17, 1.1884, 1.2, 1.2025, 1.2, 1.2001, 1.19, + 1.1894, 1.18, 1.1810, 1.16, 1.1597, 1.16, 1.1670, 1.2, 1.2037, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L41_m27_m16spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0125, 0.02, 0.0262, 0.03, 0.0479, 0.06, 0.0964, 0.1, 0.1246, 0.13, 0.1469, 0.16, 0.1731, 0.18, 0.1917, 0.195, 0.1986, 0.2, 0.2028, 0.201, 0.2015, 0.2, 0.1997, 0.2, 0.2021, 0.203, 0.2066, 0.2, 0.1994, 0.18, 0.1778, 0.16, 0.1518, 0.13, + 0.1251, 0.11, 0.1012, 0.1, 0.0876, 0.085, 0.0805, 0.08, 0.0713, 0.06, 0.0537, 0.04, 0.0389, 0.035, 0.0313, 0.03, 0.0282, 0.025, 0.0273, 0.028, 0.0283, 0.03, 0.0308, 0.031, + 0.0325, 0.032, 0.0318, 0.031, 0.0301, 0.03, 0.0274, 0.028, 0.0258, 0.026, 0.0268, 0.03, 0.0311, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L41_m27_m16spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0125, 0.02, 0.0262, 0.03, 0.0489, 0.06, 0.0964, 0.1, 0.1246, 0.13, 0.1469, 0.16, 0.1731, 0.18, 0.1917, 0.195, 0.1986, 0.2, 0.2028, 0.201, 0.2015, 0.2, 0.1997, 0.2, 0.2021, 0.203, 0.2066, 0.2, 0.1994, 0.18, 0.1778, 0.16, 0.1518, 0.13, + 0.1251, 0.11, 0.1012, 0.1, 0.0886, 0.085, 0.0805, 0.08, 0.0713, 0.06, 0.0537, 0.04, 0.0389, 0.035, 0.0313, 0.03, 0.0282, 0.025, 0.0273, 0.028, 0.0283, 0.03, 0.0308, 0.031, + 0.0325, 0.032, 0.0318, 0.031, 0.0311, 0.03, 0.0274, 0.028, 0.0258, 0.026, 0.0268, 0.03, 0.0311, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L15_m9_4spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0016, 0.002, 0.0027, 0.003, 0.0043, 0.006, 0.0081, 0.009, 0.0102, 0.011, 0.0119, 0.012, 0.0140, 0.014, 0.0156, 0.016, 0.0164, 0.017, 0.0170, 0.017, 0.0171, 0.0175, 0.0177, 0.02, 0.0201, 0.022, 0.0241, 0.025, 0.0261, 0.026, 0.0254, 0.025, 0.0238, 0.23, + 0.0218, 0.02, 0.0200, 0.019, 0.0189, 0.0185, 0.0183, 0.018, 0.0172, 0.016, 0.0148, 0.013, 0.0127, 0.012, 0.0116, 0.0115, 0.0112, 0.0112, 0.0111, 0.0111, 0.0111, 0.0112, 0.0113, 0.0114, 0.0115, 0.0115, + 0.0114, 0.0114, 0.0113, 0.0112, 0.0111, 0.011, 0.0109, 0.0110, 0.011, 0.0114, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L15_m9_4spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0016, 0.002, 0.0027, 0.003, 0.0043, 0.006, 0.0081, 0.009, 0.0102, 0.011, 0.0119, 0.012, 0.0140, 0.014, 0.0156, 0.016, 0.0164, 0.017, 0.0170, 0.017, 0.0171, 0.0175, 0.0177, 0.02, 0.0201, 0.022, 0.0241, 0.025, 0.0261, 0.026, 0.0254, 0.025, 0.0238, 0.23, + 0.0218, 0.02, 0.0220, 0.019, 0.0199, 0.0188, 0.0183, 0.018, 0.0172, 0.016, 0.0148, 0.013, 0.0127, 0.012, 0.0116, 0.0115, 0.0112, 0.0112, 0.0111, 0.0111, 0.0111, 0.0112, 0.0113, 0.0114, 0.0115, 0.0115, + 0.0114, 0.0114, 0.0113, 0.0112, 0.0111, 0.011, 0.0109, 0.0110, 0.011, 0.0114, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L11_m11_2spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0008, 0.001, 0.0015, 0.002, 0.0027, 0.004, 0.0053, 0.006, 0.0067, 0.007, 0.0080, 0.009, 0.0095, 0.01, 0.0107, 0.0105, 0.0113, 0.011, 0.0118, 0.012, 0.0120, 0.012, 0.0124, 0.013, 0.0140, 0.015, 0.0165, 0.017, 0.0178, 0.0175, 0.0172, 0.017, + 0.0160, 0.015, 0.0145, 0.014, 0.0132, 0.013, 0.0124, 0.012, 0.0119, 0.011, 0.0108, 0.09, 0.0085, 0.007, 0.0064, 0.006, 0.0053, 0.005, 0.0048, + 0.0049, 0.0048, 0.0047, 0.0048, 0.0048, 0.0049, 0.005, 0.0050, 0.005, 0.0049, 0.0049, 0.0048, 0.0047, 0.0047, 0.0047, 0.0046, 0.0046, 0.0046, 0.0048, 0.0049, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L14_m4_3spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0024, 0.003, 0.0034, 0.004, 0.0049, 0.007, 0.0086, 0.01, 0.0108, 0.011, 0.0124, 0.013, 0.0144, 0.015, 0.0157, 0.016, 0.0162, 0.0163, 0.0164, 0.0163, 0.0162, 0.0164, 0.0165, 0.017, 0.0183, 0.02, 0.0213, 0.022, 0.0228, 0.0225, 0.0221, 0.021, + 0.0206, 0.02, 0.0188, 0.018, 0.0172, 0.017, 0.0162, 0.016, 0.0158, 0.0158, 0.0157, 0.0158, 0.0158, 0.0159, 0.0159, 0.016, 0.0160, 0.016, 0.0160, 0.0161, 0.0161, 0.0162, + 0.0163, 0.0164, 0.0165, 0.0165, 0.0166, 0.0166, 0.0166, 0.0166, 0.0165, 0.0164, 0.0163, 0.0163, 0.0162, 0.0162, 0.0162, 0.0165, 0.0166, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L41_38_24spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0455, 0.0455, 0.0453, 0.045, 0.0443, 0.05, 0.0570, 0.06, 0.0651, 0.065, 0.0664, 0.066, 0.0664, 0.065, 0.0607, 0.06, 0.0513, 0.04, 0.0397, 0.03, 0.0288, 0.025, 0.0239, 0.03, 0.0302, 0.04, 0.0460, 0.05, 0.0586, 0.06, 0.0662, 0.07, + 0.0727, 0.075, 0.0769, 0.077, 0.0788, 0.08, 0.0807, 0.085, 0.0863, 0.11, 0.1241, 0.18, 0.2137, 0.24, 0.2920, 0.3, 0.3344, 0.34, 0.3522, 0.354, 0.3599, 0.36, 0.3639, 0.365, + 0.3662, 0.366, 0.3667, 0.367, 0.3674, 0.3675, 0.3678, 0.368, 0.3684, 0.3688, 0.3688, 0.3685, 0.3686, 0.37, 0.3703, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L41_38_24spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0455, 0.0455, 0.0453, 0.045, 0.0443, 0.05, 0.0580, 0.06, 0.0651, 0.065, 0.0664, 0.066, 0.0664, 0.065, 0.0607, 0.06, 0.0513, 0.04, 0.0397, 0.03, 0.0288, 0.025, 0.0239, 0.03, 0.0302, 0.04, 0.0460, 0.05, 0.0586, 0.06, 0.0662, 0.07, + 0.0727, 0.075, 0.0769, 0.077, 0.0798, 0.08, 0.0807, 0.085, 0.0863, 0.11, 0.1241, 0.18, 0.2137, 0.24, 0.2920, 0.3, 0.3344, 0.34, 0.3522, 0.354, 0.3599, 0.36, 0.3639, 0.365, + 0.3662, 0.366, 0.3667, 0.367, 0.3684, 0.3675, 0.3678, 0.368, 0.3684, 0.3688, 0.3688, 0.3685, 0.3686, 0.37, 0.3703, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L53_48_58spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0768, 0.075, 0.0714, 0.07, 0.0615, 0.064, 0.0656, 0.067, 0.0689, 0.065, 0.0628, 0.06, 0.0534, 0.04, 0.0375, 0.03, 0.0201, 0.0, -0.0004, -0.01, -0.0180, -0.02, -0.0228, -0.03, -0.0035, 0.0, 0.0370, 0.05, 0.0724, 0.08, 0.0977, 0.1, 0.1200, 0.13, + 0.1376, 0.14, 0.1497, 0.15, 0.1580, 0.16, 0.1701, 0.2, 0.2370, 0.3, 0.3941, 0.45, 0.5311, 0.55, 0.6053, 0.62, 0.6364, 0.64, 0.6500, 0.65, 0.6564, 0.656, 0.6596, 0.6597, + 0.6597, 0.66, 0.6612, 0.662, 0.6625, 0.663, 0.6644, 0.665, 0.6658, 0.6652, 0.6650, 0.666, 0.6665, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L53_48_58spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0768, 0.075, 0.0714, 0.07, 0.0615, 0.064, 0.0656, 0.067, 0.0689, 0.065, 0.0628, 0.06, 0.0534, 0.04, 0.0375, 0.03, 0.0201, 0.0, -0.0004, -0.01, -0.0180, -0.02, -0.0228, -0.03, -0.0035, 0.0, 0.0370, 0.05, 0.0724, 0.08, 0.0977, 0.1, 0.1200, 0.13, + 0.1376, 0.14, 0.1497, 0.15, 0.1580, 0.165, 0.1801, 0.2, 0.2370, 0.3, 0.3941, 0.45, 0.5311, 0.55, 0.6053, 0.62, 0.6364, 0.64, 0.6500, 0.65, 0.6564, 0.656, 0.6596, 0.6597, + 0.6597, 0.66, 0.6612, 0.662, 0.6625, 0.683, 0.6644, 0.675, 0.6658, 0.6652, 0.6650, 0.666, 0.6665, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L70_44_86spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1186, 0.11, 0.1086, 0.1, 0.0903, 0.09, 0.0888, 0.088, 0.0885, 0.08, 0.0760, 0.06, 0.0594, 0.04, 0.0356, 0.02, 0.0128, 0.0, -0.0144, -0.02, -0.0376, -0.035, -0.0356, 0.0, 0.0195, 0.15, 0.1214, 0.2, 0.2062, 0.24, 0.2585, 0.26, 0.2993, 0.3, 0.3307, 0.34, 0.3516, 0.36, + 0.3660, 0.37, 0.3838, 0.41, 0.4778, 0.55, 0.6974, 0.8, 0.8888, 0.95, 0.9927, 1.0, 1.0362, 1.04, 1.0559, 1.06, 1.0651, 1.066, 1.0694, 1.069, 1.0690, 1.07, 1.0713, 1.072, + 1.0733, 1.074, 1.0766, 1.076, 1.0791, 1.078, 1.0775, 1.079, 1.0794, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L70_44_86spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1186, 0.11, 0.1086, 0.1, 0.103, 0.09, 0.0888, 0.088, 0.0885, 0.08, 0.0760, 0.06, 0.0594, 0.04, 0.0356, 0.02, 0.0128, 0.0, -0.0144, -0.02, -0.0376, -0.035, -0.0356, 0.0, 0.0195, 0.15, 0.1214, 0.2, 0.2062, 0.24, 0.2585, 0.26, 0.2993, 0.3, 0.3307, 0.34, 0.3516, 0.36, + 0.3660, 0.37, 0.3838, 0.41, 0.4878, 0.55, 0.6974, 0.8, 0.8888, 0.95, 0.9927, 1.0, 1.0362, 1.04, 1.0559, 1.06, 1.0651, 1.066, 1.0694, 1.069, 1.0690, 1.07, 1.0713, 1.072, + 1.0733, 1.074, 1.0866, 1.076, 1.0891, 1.078, 1.0775, 1.079, 1.0794, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L38_42_19spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0438, 0.044, 0.0438, 0.0435, 0.0431, 0.05, 0.0562, 0.06, 0.0646, 0.065, 0.0661, 0.0662, 0.0662, 0.061, 0.0604, 0.055, 0.0506, 0.04, 0.0387, 0.03, 0.0275, 0.025, 0.0213, 0.022, 0.0233, 0.03, 0.0322, 0.035, 0.0397, 0.04, 0.0451, 0.05, + 0.0506, 0.052, 0.0543, 0.055, 0.0560, 0.0565, 0.0577, 0.06, 0.0633, 0.09, 0.1014, 0.15, 0.1919, 0.22, 0.2710, 0.3, 0.3138, 0.32, 0.3317, 0.335, 0.3394, 0.34, 0.3433, 0.345, + 0.3457, 0.346, 0.3461, 0.3465, 0.3469, 0.347, 0.3473, 0.3475, 0.3478, 0.348, 0.3482, 0.348, 0.3480, 0.349, 0.3497, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L38_42_19spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0438, 0.044, 0.0438, 0.0435, 0.0441, 0.05, 0.0562, 0.06, 0.0646, 0.065, 0.0661, 0.0662, 0.0662, 0.061, 0.0604, 0.055, 0.0506, 0.04, 0.0387, 0.03, 0.0275, 0.025, 0.0213, 0.022, 0.0233, 0.03, 0.0322, 0.035, 0.0397, 0.04, 0.0451, 0.05, + 0.0506, 0.052, 0.0543, 0.055, 0.0570, 0.0565, 0.0577, 0.06, 0.0633, 0.09, 0.1014, 0.15, 0.1919, 0.22, 0.2710, 0.3, 0.3138, 0.32, 0.3317, 0.335, 0.3394, 0.34, 0.3433, 0.345, + 0.3457, 0.346, 0.3461, 0.3465, 0.3569, 0.348, 0.3473, 0.3475, 0.3478, 0.348, 0.3482, 0.348, 0.3480, 0.349, 0.3497, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L60_63_85spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1186, 0.11, 0.1079, 0.1, 0.0890, 0.089, 0.0882, 0.089, 0.0895, 0.08, 0.0764, 0.06, 0.0573, 0.04, 0.0286, 0.0, -0.0013, -0.02, -0.0355, -0.05, -0.0640, -0.07, + -0.0738, -0.06, -0.0504, 0.0, 0.0021, 0.03, 0.0514, 0.08, 0.0918, 0.1, 0.1301, 0.14, 0.1619, 0.17, 0.1847, 0.19, 0.2000, 0.21, 0.2206, 0.28, 0.3301, 0.4, 0.5869, 0.7, + 0.8108, 0.9, 0.9318, 0.94, 0.9824, 1.0, 1.0045, 1.01, 1.0146, 1.015, 1.0192, 1.093, 1.0192, 1.02, 1.0218, 1.022, 1.0241, 1.024, 1.0275, 1.03, 1.0300, 1.029, 1.0285, 1.03, 1.0302, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L60_63_85spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1186, 0.11, 0.1079, 0.1, 0.0900, 0.089, 0.0882, 0.089, 0.0895, 0.08, 0.0764, 0.06, 0.0573, 0.04, 0.0286, 0.0, -0.0013, -0.02, -0.0355, -0.05, -0.0640, -0.07, + -0.0738, -0.06, -0.0504, 0.0, 0.0021, 0.03, 0.0514, 0.08, 0.0918, 0.1, 0.1301, 0.14, 0.1619, 0.17, 0.1847, 0.19, 0.2000, 0.21, 0.2206, 0.28, 0.3301, 0.4, 0.5869, 0.7, + 0.8108, 0.9, 0.9418, 0.94, 0.9924, 1.0, 1.0045, 1.01, 1.0146, 1.015, 1.0192, 1.093, 1.0192, 1.05, 1.0218, 1.022, 1.0241, 1.024, 1.0275, 1.03, 1.0300, 1.029, 1.0285, 1.03, 1.0302, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L80_75_30spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2541, 0.255, 0.2557, 0.255, 0.2543, 0.3, 0.3359, 0.35, 0.3885, 0.39, 0.3999, 0.4, 0.4038, 0.4, 0.3722, 0.35, 0.3159, 0.3, 0.2468, 0.2, 0.1816, 0.15, 0.1439, 0.15, 0.1522, 0.18, 0.1981, 0.21, 0.2359, 0.25, 0.2630, 0.28, 0.2910, 0.3, + 0.3087, 0.31, 0.3154, 0.32, 0.3236, 0.34, 0.3555, 0.4, 0.5755, 0.8, 1.0987, 1.4, 1.5560, 1.7, 1.8035, 1.9, 1.9070, 1.92, 1.9519, 1.96, 1.9747, 1.98, 1.9884, 1.99, + 1.9914, 1.994, 1.9958, 1.996, 1.9979, 2.0, 2.0004, 2.01, 2.0024, 2.02, 2.0013, 2.012, 2.0117, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L80_75_30spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2541, 0.255, 0.2557, 0.255, 0.2543, 0.3, 0.3359, 0.35, 0.3885, 0.39, 0.3999, 0.4, 0.4038, 0.4, 0.3722, 0.35, 0.3159, 0.3, 0.2468, 0.2, 0.1816, 0.15, 0.1439, 0.15, 0.1522, 0.18, 0.1981, 0.21, 0.2359, 0.25, 0.2630, 0.28, 0.2910, 0.3, + 0.3087, 0.31, 0.3154, 0.32, 0.3236, 0.36, 0.3555, 0.4, 0.5755, 0.8, 1.0987, 1.4, 1.5560, 1.7, 1.8035, 1.9, 1.9070, 1.92, 1.9519, 1.96, 1.9747, 1.98, 1.9884, 1.99, + 1.9984, 1.994, 1.9958, 1.986, 1.9979, 2.06, 2.0004, 2.01, 2.0024, 2.02, 2.0013, 2.012, 2.0117, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L28_m21_24spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0003, 0.0, 0.0008, 0.002, 0.0025, 0.003, 0.0049, 0.005, 0.0059, 0.006, 0.0075, 0.01, 0.0101, 0.012, 0.0133, 0.015, 0.0167, 0.018, 0.0199, 0.02, 0.0221, 0.023, 0.0266, 0.03, 0.0388, 0.05, 0.0577, 0.07, 0.0706, 0.073, 0.0736, 0.073, + 0.0728, 0.071, 0.0708, 0.07, 0.0686, 0.069, 0.0673, 0.068, 0.0657, 0.06, 0.0582, 0.05, 0.0407, 0.03, 0.0255, 0.02, 0.0174, 0.015, 0.0141, 0.013, 0.0129, 0.0126, + 0.0125, 0.0125, 0.0125, 0.0125, 0.0125, 0.0124, 0.0123, 0.0122, 0.0121, 0.012, 0.0118, 0.0117, 0.0117, 0.0118, 0.0118, 0.012, 0.0121, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L28_m21_24spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0003, 0.0, 0.0008, 0.002, 0.0025, 0.003, 0.0049, 0.005, 0.0059, 0.006, 0.0075, 0.01, 0.0101, 0.012, 0.0133, 0.015, 0.0167, 0.018, 0.0199, 0.02, 0.0221, 0.023, 0.0266, 0.03, 0.0388, 0.05, 0.0577, 0.07, 0.0706, 0.073, 0.0736, 0.073, + 0.0728, 0.071, 0.0728, 0.07, 0.0686, 0.069, 0.0653, 0.068, 0.0657, 0.06, 0.0582, 0.05, 0.0407, 0.03, 0.0255, 0.02, 0.0174, 0.015, 0.0141, 0.013, 0.0129, 0.0126, + 0.0125, 0.0125, 0.0135, 0.0125, 0.0125, 0.0124, 0.0123, 0.0122, 0.0121, 0.012, 0.0118, 0.0117, 0.0117, 0.0118, 0.0118, 0.012, 0.0121, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L45_m33_47spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0048, -0.004, -0.0032, -0.002, -0.0011, -0.001, -0.0007, -0.001, -0.0021, -0.001, 0.0003, 0.003, 0.0040, 0.009, 0.0115, 0.02, 0.0213, 0.03, 0.0311, 0.032, 0.0385, 0.04, 0.0527, 0.08, 0.0890, 0.1, 0.1449, 0.15, 0.1843, 0.19, 0.1961, 0.1967, + 0.1967, 0.195, 0.1942, 0.193, 0.1905, 0.19, 0.1884, 0.185, 0.1842, 0.17, 0.1610, 0.13, 0.1059, 0.09, 0.0578, 0.04, 0.0323, 0.03, 0.0217, 0.02, + 0.0179, 0.018, 0.0164, 0.016, 0.0159, 0.0158, 0.0157, 0.0154, 0.0151, 0.015, 0.0147, 0.0143, 0.0142, 0.0142, 0.0141, 0.0142, 0.0142, 0.0143, 0.0143, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L45_m33_47spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0048, -0.004, -0.0032, -0.002, -0.0011, -0.001, -0.0007, -0.001, -0.0021, -0.001, 0.0003, 0.003, 0.0040, 0.009, 0.0115, 0.02, 0.0213, 0.03, 0.0311, 0.032, 0.0385, 0.04, 0.0527, 0.08, 0.0890, 0.1, 0.1449, 0.15, 0.1843, 0.19, 0.1961, 0.1967, + 0.1967, 0.195, 0.1942, 0.193, 0.2005, 0.19, 0.1884, 0.185, 0.1842, 0.19, 0.1610, 0.13, 0.1059, 0.09, 0.0578, 0.04, 0.0323, 0.03, 0.0217, 0.02, + 0.0179, 0.018, 0.0164, 0.016, 0.0159, 0.0158, 0.0157, 0.0154, 0.0151, 0.015, 0.0157, 0.0143, 0.0142, 0.0142, 0.0141, 0.0142, 0.0142, 0.0143, 0.0143, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L26_m7_404spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0064, 0.008, 0.0094, 0.01, 0.0142, 0.02, 0.0258, 0.03, 0.0324, 0.033, 0.0375, 0.04, 0.0435, 0.044, 0.0475, 0.048, 0.0489, 0.049, 0.0495, 0.049, 0.0489, 0.049, 0.0491, 0.05, 0.0529, 0.053, 0.0595, 0.06, 0.0621, 0.055, 0.0590, 0.058, 0.0541, 0.05, + 0.0485, 0.045, 0.0432, 0.042, 0.0403, 0.04, 0.0390, 0.038, 0.0386, 0.0386, 0.0386, 0.0387, 0.0387, 0.0388, 0.0389, 0.039, 0.0390, 0.0391, 0.0392, 0.0395, 0.0396, 0.04, + 0.0403, 0.0402, 0.0407, 0.0406, 0.0406, 0.0404, 0.0402, 0.04, 0.0397, 0.0395, 0.0394, 0.0395, 0.0396, 0.04, 0.0406, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L34_m61_2spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0084, -0.004, -0.0019, 0.0, 0.0084, 0.01, 0.0259, 0.03, 0.0352, 0.04, 0.0451, 0.05, 0.0580, 0.06, 0.0705, 0.075, 0.0800, 0.085, 0.0888, 0.09, 0.0942, 0.1, 0.1007, 0.11, + 0.1154, 0.12, 0.1367, 0.14, 0.1471, 0.142, 0.1409, 0.13, 0.1285, 0.12, 0.1150, 0.11, 0.1028, 0.1, 0.0957, 0.09, 0.0894, 0.07, 0.0660, 0.04, 0.0123, 0.0, -0.0345, -0.04, + -0.0593, -0.06, -0.0697, -0.07, -0.0737, -0.074, -0.0749, -0.0745, -0.0746, -0.0744, -0.0742, -0.0748, -0.0749, -0.075, -0.0759, -0.077, -0.0773, -0.078, -0.0782, -0.078, -0.0777, -0.077, -0.0762, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L32_m16_17spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0034, 0.004, 0.0056, 0.007, 0.0089, 0.01, 0.0160, 0.014, 0.0197, 0.02, 0.0232, 0.025, 0.0279, 0.03, 0.0322, 0.033, 0.0355, 0.037, 0.0383, 0.039, 0.0397, 0.04, 0.0436, 0.05, 0.0560, 0.07, 0.0757, 0.08, 0.0884, 0.09, + 0.0900, 0.089, 0.0875, 0.085, 0.0837, 0.08, 0.0796, 0.078, 0.0774, 0.076, 0.0756, 0.07, 0.0698, 0.06, 0.0566, 0.05, 0.0452, 0.04, 0.0392, 0.036, 0.0367, + 0.0360, 0.036, 0.0359, 0.036, 0.0363, 0.0364, 0.0364, 0.0363, 0.0362, 0.036, 0.0359, 0.0356, 0.0355, 0.0353, 0.0352, 0.0353, 0.0354, 0.036, 0.0361, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L30_m19_15spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0020, 0.003, 0.0043, 0.006, 0.0078, 0.01, 0.0149, 0.016, 0.0187, 0.02, 0.0223, 0.025, 0.0270, 0.03, 0.0315, 0.032, 0.0349, 0.036, 0.0379, 0.038, 0.0394, 0.04, 0.0431, 0.05, + 0.0542, 0.06, 0.0715, 0.08, 0.0824, 0.083, 0.0832, 0.081, 0.0801, 0.078, 0.0759, 0.074, 0.0717, 0.07, 0.0693, 0.068, 0.0673, 0.064, 0.0608, 0.05, 0.0458, 0.04, + 0.0328, 0.03, 0.0260, 0.025, 0.0232, 0.023, 0.0223, 0.0221, 0.0221, 0.0223, 0.0224, 0.0225, 0.0226, 0.0224, 0.0224, 0.0221, 0.0220, 0.022, 0.0216, 0.0215, 0.0213, 0.0214, 0.0215, 0.02, 0.0222, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L30_m17_16spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0027, 0.003, 0.0048, 0.006, 0.0080, 0.01, 0.0148, 0.015, 0.0183, 0.02, 0.0216, 0.025, 0.0261, 0.03, 0.0303, 0.032, 0.0334, 0.035, 0.0361, 0.037, 0.0375, 0.04, 0.0411, 0.05, 0.0524, 0.06, 0.0700, 0.08, 0.0813, 0.082, 0.0825, 0.08, 0.0799, 0.077, + 0.0761, 0.075, 0.0722, 0.07, 0.0700, 0.069, 0.0682, 0.067, 0.0624, 0.055, 0.0493, 0.04, 0.0378, 0.035, 0.0318, 0.03, 0.0294, 0.029, 0.0286, 0.0285, 0.0285, 0.0287, + 0.0288, 0.029, 0.0290, 0.029, 0.0287, 0.0285, 0.0284, 0.0282, 0.0280, 0.028, 0.0278, 0.0279, 0.0279, 0.028, 0.0286, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L35_m8_4spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0109, 0.014, 0.0158, 0.02, 0.0233, 0.03, 0.0419, 0.05, 0.0525, 0.06, 0.0606, 0.07, 0.0702, 0.075, 0.0768, 0.078, 0.0793, 0.08, 0.0805, 0.08, 0.0795, 0.08, 0.0806, 0.085, 0.0889, 0.1, 0.1028, 0.105, 0.1094, 0.106, 0.1054, 0.1, 0.0979, 0.09, + 0.0891, 0.085, 0.0807, 0.08, 0.0761, 0.075, 0.0739, 0.073, 0.0730, 0.073, 0.0722, 0.072, 0.0718, 0.0716, 0.0718, 0.0718, 0.0719, 0.072, 0.0722, 0.0725, 0.0729, 0.073, + 0.0741, 0.0745, 0.0746, 0.0744, 0.0744, 0.074, 0.0739, 0.073, 0.0730, 0.073, 0.0725, 0.0727, 0.0728, 0.073, 0.0745, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L37_m7_5spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0126, 0.015, 0.0178, 0.02, 0.0258, 0.03, 0.0457, 0.05, 0.0572, 0.06, 0.0658, 0.07, 0.0760, 0.08, 0.0830, 0.084, 0.0856, 0.086, 0.0867, 0.086, 0.0856, 0.086, 0.0868, 0.09, 0.0961, 0.1, 0.1120, 0.113, 0.1199, 0.118, 0.1160, 0.11, 0.1081, 0.1, + 0.0989, 0.09, 0.0900, 0.088, 0.0851, 0.084, 0.0828, 0.0825, 0.0825, 0.083, 0.0831, 0.0835, 0.0839, 0.084, 0.0846, 0.0845, 0.0849, 0.085, 0.0854, 0.086, 0.0862, 0.087, + 0.0875, 0.088, 0.0881, 0.088, 0.0879, 0.0875, 0.0873, 0.087, 0.0864, 0.086, 0.0858, 0.086, 0.0862, 0.087, 0.0881, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L45_m7_2spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0213, 0.03, 0.0302, 0.04, 0.0438, 0.06, 0.0780, 0.09, 0.0979, 0.1, 0.1125, 0.12, 0.1297, 0.13, 0.1411, 0.143, 0.1445, 0.1454, 0.1456, 0.143, 0.1428, 0.143, 0.1433, 0.15, 0.1548, 0.16, 0.1750, 0.18, 0.1833, 0.18, 0.1749, 0.17, 0.1610, 0.15, + 0.1452, 0.14, 0.1301, 0.13, 0.1219, 0.12, 0.1183, 0.119, 0.1197, 0.12, 0.1254, 0.13, 0.1308, 0.133, 0.1342, 0.135, 0.1356, 0.136, 0.1367, 0.137, 0.1383, 0.14, 0.1405, 0.141, + 0.1416, 0.1415, 0.1413, 0.141, 0.1403, 0.14, 0.1387, 0.138, 0.1378, 0.138, 0.1384, 0.14, 0.1416, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_m6_5spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0164, 0.02, 0.0226, 0.03, 0.0320, 0.04, 0.0562, 0.06, 0.0701, 0.08, 0.0804, 0.09, 0.0925, 0.1, 0.1006, 0.103, 0.1031, 0.1035, 0.1039, 0.103, 0.1021, 0.103, 0.1030, 0.11, 0.1135, 0.12, 0.1316, 0.13, 0.1403, 0.14, 0.1356, 0.13, 0.1264, 0.12, 0.1155, 0.11, 0.1050, 0.1, + 0.0992, 0.097, 0.0968, 0.097, 0.0979, 0.1, 0.1024, 0.103, 0.1065, 0.108, 0.1091, 0.11, 0.1102, 0.111, 0.1110, 0.111, 0.1122, 0.113, 0.1138, 0.114, 0.1145, 0.1145, 0.1143, 0.114, + 0.1136, 0.113, 0.1125, 0.112, 0.1119, 0.112, 0.1123, 0.113, 0.1146, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L46_m6_2spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0233, 0.03, 0.0322, 0.04, 0.0460, 0.06, 0.0811, 0.1, 0.1015, 0.11, 0.1163, 0.12, 0.1338, 0.14, 0.1451, 0.148, 0.1483, 0.145, 0.1489, 0.146, 0.1458, 0.146, 0.1461, 0.15, 0.1582, 0.17, 0.1795, 0.18, 0.1886, 0.181, 0.1804, 0.17, 0.1666, 0.16, + 0.1508, 0.14, 0.1356, 0.13, 0.1273, 0.125, 0.1239, 0.124, 0.1266, 0.13, 0.1356, 0.14, 0.1438, 0.145, 0.1488, 0.15, 0.1509, 0.152, 0.1523, 0.153, 0.1540, 0.155, 0.1563, 0.157, + 0.1574, 0.156, 0.1571, 0.157, 0.1562, 0.56, 0.1546, 0.154, 0.1537, 0.154, 0.1542, 0.156, 0.1576, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L48_m69_16spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0181, -0.01, -0.0091, 0.0, 0.0052, 0.01, 0.0259, 0.03, 0.0360, 0.04, 0.0492, 0.06, 0.0677, 0.08, 0.0879, 0.1, 0.1059, 0.11, 0.1233, 0.13, 0.1351, 0.14, 0.1511, 0.17, 0.1875, 0.2, 0.2413, 0.26, 0.2732, 0.271, 0.2706, 0.26, 0.2546, 0.24, + 0.2358, 0.22, 0.2184, 0.21, 0.2082, 0.2, 0.1975, 0.17, 0.1520, 0.06, 0.0462, 0.0, -0.0459, -0.06, -0.0950, -0.1, -0.1154, -0.12, -0.1232, -0.124, -0.1260, -0.126, + -0.1261, -0.126, -0.1257, -0.126, -0.1270, -0.128, -0.1285, -0.13, -0.1306, -0.132, -0.1318, -0.1312, -0.1311, -0.13, -0.1294, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L51_89_53spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1314, 0.13, 0.1218, 0.11, 0.1046, 0.11, 0.1137, 0.12, 0.1221, 0.12, 0.1115, 0.1, 0.0933, 0.08, 0.0607, 0.04, 0.0225, 0.0, -0.0208, -0.04, -0.0572, -0.06, -0.0798, -0.08, -0.0852, -0.08, -0.0759, -0.06, -0.0588, -0.04, -0.0307, 0.0, 0.0037, 0.0036, 0.0336, 0.04, + 0.0557, 0.06, 0.0706, 0.08, 0.0944, 0.15, 0.2271, 0.4, 0.5396, 0.7, 0.8124, 0.9, 0.9595, 1.0, 1.0210, 1.03, 1.0472, 1.05, 1.0593, 1.06, 1.0651, 1.0656, 1.0656, 1.067, + 1.0686, 1.07, 1.0711, 1.073, 1.0745, 1.075, 1.0768, 1.076, 1.0754, 1.077, 1.0780, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L49_84_33spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1189, 0.115, 0.1130, 0.11, 0.1020, 0.11, 0.1198, 0.125, 0.1331, 0.13, 0.1281, 0.12, 0.1169, 0.1, 0.0909, 0.07, 0.0573, 0.04, 0.0189, 0.0, -0.0145, -0.02, -0.0366, -0.04, + -0.0456, -0.044, -0.0438, -0.04, -0.0353, -0.02, -0.0165, 0.0, 0.0084, 0.01, 0.0297, 0.03, 0.0447, 0.05, 0.0554, 0.06, 0.0754, 0.1, 0.1935, 0.3, 0.4724, 0.6, 0.7159, 0.75, + 0.8473, 0.9, 0.9022, 0.91, 0.9255, 0.92, 0.9366, 0.94, 0.9423, 0.943, 0.9431, 0.944, 0.9457, 0.946, 0.9476, 0.95, 0.9501, 0.951, 0.9518, 0.951, 0.9508, 0.952, 0.9539, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L59_m51_31spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0123, -0.002, -0.0032, 0.0, 0.0108, 0.02, 0.0316, 0.04, 0.0410, 0.05, 0.0543, 0.06, 0.0737, 0.08, 0.0961, 0.1, 0.1175, 0.12, 0.1380, 0.14, 0.1519, 0.16, 0.1752, 0.2, 0.2340, 0.3, 0.3232, 0.35, 0.3810, 0.385, + 0.3880, 0.38, 0.3752, 0.36, 0.3573, 0.34, 0.3395, 0.33, 0.3292, 0.32, 0.3176, 0.3, 0.2669, 0.2, 0.1484, 0.1, 0.0451, 0.0, -0.0097, -0.02, -0.0324, -0.04, -0.0408, -0.042, + -0.0437, -0.0436, -0.0438, -0.0436, -0.0436, -0.045, -0.0450, -0.046, -0.0465, -0.047, -0.0486, -0.049, -0.0497, -0.0493, -0.0491, -0.048, -0.0472, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L48_m69_16spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0181, -0.02, -0.0090, 0.004, 0.0052, 0.01, 0.0259, 0.03, 0.0361, 0.04, 0.0493, 0.05, 0.0678, 0.07, 0.0880, 0.1, 0.1060, 0.11, 0.1235, 0.13, 0.1353, 0.14, 0.1513, 0.17, 0.1879, 0.21, 0.2419, 0.25, 0.2739, 0.273, 0.2713, 0.26, 0.2553, 0.24, 0.2366, 0.22, + 0.2191, 0.21, 0.2089, 0.2, 0.1982, 0.17, 0.1527, 0.08, 0.0468, 0.0, -0.0455, -0.05, -0.0946, -0.1, -0.1150, -0.12, -0.1228, -0.123, -0.1256, -0.125, -0.1258, -0.1255, + -0.1254, -0.125, -0.1267, -0.127, -0.1281, -0.13, -0.1303, -0.131, -0.1315, -0.131, -0.1308, -0.13, -0.1291, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L53_m71_6spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0168, -0.015, -0.0015, 0.01, 0.0226, 0.05, 0.0640, 0.07, 0.0860, 0.1, 0.1093, 0.12, 0.1397, 0.15, 0.1692, 0.18, 0.1916, 0.2, 0.2125, 0.22, 0.2250, 0.23, 0.2414, 0.27, 0.2802, 0.3, 0.3375, 0.35, 0.3670, 0.35, 0.3546, 0.33, + 0.3264, 0.3, 0.2951, 0.27, 0.2665, 0.25, 0.2499, 0.24, 0.2353, 0.2, 0.1811, 0.1, 0.0565, 0.0, -0.0519, -0.08, -0.1095, -0.1, -0.1334, -0.14, -0.1425, -0.143, + -0.1453, -0.145, -0.1446, -0.144, -0.1435, -0.144, -0.1452, -0.146, -0.1475, -0.15, -0.1509, -0.151, -0.1528, -0.153, -0.1516, -0.15, -0.1482, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L51_m89_53spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1331, 0.13, 0.1233, 0.11, 0.1059, 0.11, 0.1151, 0.12, 0.1236, 0.12, 0.1129, 0.1, 0.0946, 0.07, 0.0615, 0.05, 0.0228, 0.0, -0.0210, -0.04, -0.0579, -0.07, -0.0808, -0.08, -0.0863, -0.08, -0.0769, -0.06, -0.0595, -0.04, -0.0311, 0.001, 0.0037, 0.035, + 0.0341, 0.04, 0.0564, 0.06, 0.0716, 0.08, 0.0956, 0.15, 0.2300, 0.4, 0.5466, 0.7, 0.8229, 0.9, 0.9720, 1.0, 1.0342, 1.05, 1.0608, 1.07, 1.0730, 1.075, 1.0789, 1.079, + 1.0794, 1.08, 1.0825, 1.083, 1.0850, 1.088, 1.0884, 1.09, 1.0908, 1.09, 1.0894, 1.09, 1.0920, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L49_84_33spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1189, 0.125, 0.1130, 0.11, 0.1020, 0.11, 0.1198, 0.125, 0.1331, 0.13, 0.1281, 0.12, 0.1369, 0.1, 0.0909, 0.07, 0.0573, 0.04, 0.0189, 0.0, -0.0145, -0.02, -0.0366, -0.04, + -0.0456, -0.044, -0.0438, -0.04, -0.0353, -0.02, -0.0165, 0.0, 0.0084, 0.01, 0.0297, 0.03, 0.0447, 0.05, 0.0554, 0.06, 0.0754, 0.1, 0.1935, 0.3, 0.4724, 0.6, 0.7159, 0.75, + 0.8473, 0.9, 0.9122, 0.91, 0.9255, 0.92, 0.9366, 0.94, 0.9423, 0.943, 0.9431, 0.944, 0.9457, 0.946, 0.9476, 0.95, 0.9501, 0.951, 0.9518, 0.951, 0.9508, 0.952, 0.9539, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L36_m27_28spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0012, 0.0, 0.0007, 0.004, 0.0036, 0.007, 0.0079, 0.009, 0.0095, 0.01, 0.0123, 0.012, 0.0168, 0.02, 0.0223, 0.025, 0.0280, 0.03, 0.0335, 0.035, 0.0373, 0.04, 0.0447, 0.06, 0.0645, 0.08, 0.0949, 0.1, 0.1156, 0.12, 0.1202, 0.12, + 0.1185, 0.115, 0.1149, 0.113, 0.1110, 0.11, 0.1088, 0.107, 0.1060, 0.1, 0.0931, 0.08, 0.0628, 0.05, 0.0363, 0.03, 0.0224, 0.02, 0.0166, 0.015, 0.0145, 0.014, 0.0138, 0.0138, + 0.0138, 0.0138, 0.0138, 0.0135, 0.0134, 0.0132, 0.0131, 0.013, 0.0126, 0.0125, 0.0124, 0.0125, 0.0125, 0.013, 0.0130, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L36_m27_28spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0012, 0.0, 0.0007, 0.004, 0.0036, 0.007, 0.0079, 0.009, 0.0095, 0.01, 0.0153, 0.012, 0.0168, 0.02, 0.0223, 0.025, 0.0280, 0.03, 0.0335, 0.035, 0.0373, 0.04, 0.0447, 0.06, 0.0645, 0.08, 0.0949, 0.1, 0.1156, 0.12, 0.1202, 0.12, + 0.1185, 0.115, 0.1249, 0.113, 0.1110, 0.11, 0.1088, 0.107, 0.1060, 0.1, 0.0931, 0.08, 0.0628, 0.05, 0.0363, 0.03, 0.0224, 0.02, 0.0166, 0.015, 0.0145, 0.014, 0.0138, 0.0138, + 0.0138, 0.0138, 0.0138, 0.0135, 0.0134, 0.0132, 0.0131, 0.013, 0.0136, 0.0125, 0.0124, 0.0125, 0.0125, 0.013, 0.0130, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L36_m27_28spect3[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0012, 0.0, 0.0007, 0.004, 0.0036, 0.007, 0.0079, 0.009, 0.0095, 0.01, 0.0153, 0.012, 0.0168, 0.02, 0.0223, 0.025, 0.0280, 0.03, 0.0335, 0.035, 0.0373, 0.04, 0.0447, 0.06, 0.0645, 0.08, 0.0949, 0.1, 0.1156, 0.12, 0.1202, 0.12, + 0.1185, 0.115, 0.1049, 0.113, 0.1110, 0.11, 0.1088, 0.107, 0.1060, 0.1, 0.0931, 0.08, 0.0628, 0.05, 0.0363, 0.03, 0.0224, 0.02, 0.0166, 0.015, 0.0145, 0.014, 0.0138, 0.0138, + 0.0138, 0.0138, 0.0138, 0.0135, 0.0134, 0.0132, 0.0131, 0.012, 0.0136, 0.0115, 0.0124, 0.0125, 0.0125, 0.013, 0.0130, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L63_16_71spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0572, 0.055, 0.0533, 0.05, 0.0456, 0.0455, 0.0455, 0.045, 0.0446, 0.04, 0.0397, 0.035, 0.0344, 0.03, 0.0278, 0.025, 0.0233, 0.02, 0.0164, 0.01, 0.0099, 0.02, 0.0210, 0.05, 0.0751, 0.1, 0.1672, 0.2, 0.2386, 0.25, 0.2735, 0.28, + 0.2946, 0.3, 0.308, 0.31, 0.3164, 0.32, 0.3222, 0.325, 0.3282, 0.35, 0.3595, 0.4, 0.4319, 0.45, 0.4950, 0.5, 0.5297, 0.53, 0.5443, 0.55, 0.5516, 0.553, 0.5552, 0.556, + 0.5571, 0.557, 0.5568, 0.557, 0.5575, 0.558, 0.5582, 0.559, 0.5596, 0.56, 0.5608, 0.56, 0.5600, 0.56, 0.5611, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L84_4_46spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0967, 0.1, 0.1060, 0.11, 0.1183, 0.14, 0.1696, 0.18, 0.1976, 0.2, 0.2146, 0.22, 0.2361, 0.24, 0.2486, 0.25, 0.2527, 0.251, 0.2504, 0.25, 0.2420, 0.25, 0.2618, 0.3, 0.3581, 0.4, 0.5200, 0.6, 0.6329, 0.65, 0.6662, 0.67, + 0.6704, 0.67, 0.6620, 0.65, 0.6470, 0.645, 0.6405, 0.6402, 0.6404, 0.65, 0.6689, 0.7, 0.7383, 0.75, 0.7991, 0.8, 0.8336, 0.84, 0.8483, 0.85, 0.8569, 0.86, 0.8627, 0.865, 0.8680, 0.868, 0.8691, 0.869, 0.8693, 0.869, + 0.8685, 0.868, 0.8675, 0.8675, 0.8675, 0.8675, 0.8674, 0.87, 0.8737, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L84_4_46spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0967, 0.1, 0.1060, 0.12, 0.1183, 0.14, 0.1696, 0.18, 0.1976, 0.2, 0.2146, 0.22, 0.2361, 0.24, 0.2486, 0.25, 0.2527, 0.251, 0.2504, 0.25, 0.2420, 0.25, 0.2618, 0.3, 0.3581, 0.4, 0.5200, 0.6, 0.6329, 0.65, 0.6662, 0.67, + 0.6704, 0.67, 0.6620, 0.65, 0.6570, 0.645, 0.6405, 0.6402, 0.6404, 0.65, 0.6689, 0.7, 0.7383, 0.75, 0.7991, 0.8, 0.8336, 0.84, 0.8483, 0.85, 0.8569, 0.86, 0.8627, 0.865, 0.8680, 0.868, 0.8691, 0.869, 0.8693, 0.869, + 0.8685, 0.868, 0.8675, 0.8685, 0.8675, 0.8675, 0.8674, 0.87, 0.8737, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L75_m66_19spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0156, 0.0, 0.0098, 0.02, 0.0496, 0.1, 0.1201, 0.13, 0.1571, 0.18, 0.1958, 0.22, 0.2475, 0.28, 0.2978, 0.31, 0.3372, 0.35, 0.3735, 0.38, 0.3950, 0.4, 0.4291, 0.5, 0.5173, 0.6, 0.6511, 0.7, 0.7285, 0.72, 0.7189, 0.7, 0.6762, 0.67, 0.6258, 0.6, 0.5783, 0.56, 0.5509, 0.53, + 0.5265, 0.5, 0.4363, 0.3, 0.2287, 0.1, 0.0482, 0.0, -0.0474, -0.06, -0.0871, -0.1, -0.1017, -0.105, -0.1059, -0.105, -0.1043, -0.103, -0.1026, -0.104, -0.1055, -0.108, + -0.1092, -0.11, -0.1148, -0.115, -0.1179, -0.116, -0.1160, -0.11, -0.1098, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L75_m66_19spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0156, 0.0, 0.0098, 0.03, 0.0496, 0.1, 0.1201, 0.13, 0.1571, 0.18, 0.1958, 0.22, 0.2475, 0.28, 0.2978, 0.31, 0.3372, 0.35, 0.3735, 0.38, 0.3950, 0.4, 0.4291, 0.5, 0.5173, 0.6, 0.6511, 0.7, 0.7285, 0.72, 0.7189, 0.7, 0.6762, 0.67, 0.6258, 0.6, 0.5783, 0.56, 0.5509, 0.53, + 0.5265, 0.5, 0.4363, 0.3, 0.2587, 0.1, 0.0482, 0.0, -0.0494, -0.06, -0.0871, -0.1, -0.1017, -0.105, -0.1059, -0.105, -0.1043, -0.103, -0.1026, -0.104, -0.1055, -0.108, + -0.1092, -0.11, -0.1148, -0.115, -0.1179, -0.116, -0.1160, -0.11, -0.1098, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L64_m82_m6spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0171, 0.01, 0.0138, 0.05, 0.0628, 0.1, 0.1546, 0.2, 0.2056, 0.22, 0.2535, 0.3, 0.3138, 0.35, 0.3665, 0.4, 0.4005, 0.42, 0.4306, 0.44, 0.4457, 0.45, 0.4630, 0.5, 0.5062, 0.53, 0.5693, 0.58, 0.5909, 0.57, 0.5532, 0.5, 0.4940, 0.45, 0.4313, 0.4, + 0.3751, 0.35, 0.3425, 0.33, 0.3178, 0.3, 0.2396, 0.1, 0.0625, 0.0, -0.0910, -0.1, -0.1723, -0.2, -0.2062, -0.21, -0.2191, -0.22, -0.2221, -0.22, -0.2193, -0.219, -0.2165, -0.218, + -0.2193, -0.22, -0.2235, -0.23, -0.2302, -0.232, -0.2341, -0.232, -0.2317, -0.23, -0.2240, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L64_m82_m6spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + -0.0171, 0.01, 0.0138, 0.05, 0.0648, 0.1, 0.1546, 0.2, 0.2056, 0.22, 0.2535, 0.3, 0.3138, 0.35, 0.3665, 0.4, 0.4105, 0.42, 0.4306, 0.44, 0.4457, 0.45, 0.4630, 0.5, 0.5062, 0.53, 0.5693, 0.58, 0.5909, 0.57, 0.5532, 0.5, 0.4940, 0.45, 0.4313, 0.4, + 0.3751, 0.35, 0.3425, 0.33, 0.3378, 0.3, 0.2396, 0.1, 0.0625, 0.0, -0.0910, -0.1, -0.1723, -0.2, -0.2062, -0.21, -0.2191, -0.22, -0.2221, -0.22, -0.2193, -0.219, -0.2165, -0.218, + -0.2193, -0.22, -0.2235, -0.23, -0.2302, -0.232, -0.2341, -0.232, -0.2317, -0.23, -0.2240, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L66_m71_m17spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0007, 0.03, 0.0403, 0.08, 0.1029, 0.2, 0.2297, 0.25, 0.3019, 0.33, 0.3645, 0.4, 0.4407, 0.5, 0.5018, 0.52, 0.5344, 0.55, 0.5612, 0.57, 0.5702, 0.574, 0.5790, 0.6, 0.6080, 0.63, 0.6506, 0.65, 0.6510, 0.6, 0.5942, 0.55, 0.5179, 0.5, 0.4388, 0.4, + 0.3682, 0.34, 0.3275, 0.31, 0.3009, 0.25, 0.2329, 0.1, 0.0832, 0.0, -0.0461, -0.1, -0.1142, -0.12, -0.1425, -0.15, -0.1531, -0.154, -0.1542, -0.15, -0.1490, -0.145, + -0.1449, -0.148, -0.1478, -0.15, -0.1529, -0.16, -0.1611, -0.165, -0.1661, -0.164, -0.1630, -0.16, -0.1522, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L66_m71_m17spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0007, 0.03, 0.0403, 0.08, 0.1429, 0.2, 0.2297, 0.25, 0.3019, 0.33, 0.3645, 0.4, 0.4407, 0.54, 0.5018, 0.52, 0.5344, 0.55, 0.5612, 0.57, 0.5702, 0.574, 0.5790, 0.6, 0.6080, 0.63, 0.6506, 0.65, 0.6510, 0.6, 0.5942, 0.55, 0.5179, 0.5, 0.4388, 0.4, + 0.3682, 0.34, 0.3275, 0.31, 0.3009, 0.28, 0.2329, 0.1, 0.0832, 0.0, -0.0461, -0.1, -0.1142, -0.12, -0.1425, -0.15, -0.1531, -0.154, -0.1542, -0.15, -0.1490, -0.145, + -0.1449, -0.148, -0.1478, -0.15, -0.1529, -0.16, -0.1611, -0.165, -0.1661, -0.164, -0.1630, -0.16, -0.1522, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L22_m8_m60spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0228, 0.03, 0.0416, 0.06, 0.0715, 0.1, 0.1422, 0.15, 0.1848, 0.2, 0.2159, 0.24, 0.2505, 0.26, 0.2709, 0.272, 0.2720, 0.27, 0.2693, 0.265, 0.2605, 0.25, 0.2450, 0.22, 0.2153, 0.2, 0.1709, 0.15, 0.1245, 0.1, 0.0821, 0.06, 0.0434, 0.02, 0.0065, 0.0, + -0.0251, -0.03, -0.0432, -0.045, -0.0497, -0.043, -0.0419, -0.02, -0.0173, 0.0, 0.0051, 0.01, 0.0174, 0.03, 0.0226, 0.0225, 0.0247, 0.025, 0.0275, 0.03, 0.0317, 0.032, + 0.0343, 0.034, 0.0338, 0.032, 0.0318, 0.03, 0.0282, 0.027, 0.0259, 0.027, 0.0274, 0.03, 0.0335, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L22_m8_m60spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0228, 0.03, 0.0416, 0.07, 0.0715, 0.1, 0.1422, 0.15, 0.1848, 0.2, 0.2159, 0.26, 0.2505, 0.26, 0.2709, 0.272, 0.2720, 0.27, 0.2693, 0.265, 0.2605, 0.25, 0.2450, 0.22, 0.2153, 0.2, 0.1709, 0.15, 0.1245, 0.1, 0.0821, 0.06, 0.0434, 0.02, 0.0065, 0.0, + -0.0251, -0.03, -0.0432, -0.045, -0.0497, -0.043, -0.0419, -0.025, -0.0173, 0.0, 0.0051, 0.01, 0.0174, 0.03, 0.0226, 0.0225, 0.0247, 0.025, 0.0275, 0.03, 0.0317, 0.032, + 0.0343, 0.034, 0.0338, 0.032, 0.0318, 0.03, 0.0292, 0.027, 0.0259, 0.027, 0.0274, 0.03, 0.0335, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L15_m4_m42spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0109, 0.015, 0.0194, 0.02, 0.0328, 0.05, 0.0647, 0.07, 0.0839, 0.09, 0.0978, 0.1, 0.1134, 0.12, 0.1225, 0.123, 0.123, 0.122, 0.1217, 0.12, 0.1177, 0.115, 0.1108, 0.1, 0.0982, 0.08, 0.0795, 0.06, 0.0595, 0.05, 0.0408, 0.03, 0.0236, 0.01, + 0.0072, 0.007, -0.0070, -0.01, -0.0151, -0.016, -0.0180, -0.015, -0.0141, -0.001, -0.0023, 0.0, 0.0084, 0.01, 0.0143, 0.015, 0.0168, 0.017, 0.0178, 0.018, 0.0191, 0.02, + 0.0210, 0.022, 0.0222, 0.022, 0.0220, 0.022, 0.0211, 0.02, 0.0195, 0.019, 0.0185, 0.019, 0.0191, 0.02, 0.0219, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L15_m4_m42spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0109, 0.015, 0.0184, 0.02, 0.0328, 0.05, 0.0647, 0.07, 0.0839, 0.09, 0.0978, 0.1, 0.1134, 0.12, 0.1325, 0.123, 0.123, 0.122, 0.1217, 0.12, 0.1177, 0.115, 0.1108, 0.1, 0.0982, 0.08, 0.0795, 0.06, 0.0595, 0.05, 0.0408, 0.03, 0.0236, 0.01, + 0.0072, 0.007, -0.0070, -0.01, -0.0151, -0.016, -0.0180, -0.025, -0.0141, -0.001, -0.0023, 0.0, 0.0084, 0.01, 0.0143, 0.015, 0.0168, 0.017, 0.0178, 0.018, 0.0191, 0.02, + 0.0210, 0.022, 0.0222, 0.022, 0.0220, 0.022, 0.0211, 0.02, 0.0195, 0.019, 0.0185, 0.019, 0.0191, 0.02, 0.0219, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L13_3_m23spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0064, 0.007, 0.0098, 0.01, 0.0153, 0.02, 0.0290, 0.03, 0.0372, 0.04, 0.0430, 0.045, 0.0495, 0.05, 0.0531, 0.0531, 0.0531, 0.053, 0.0523, 0.051, 0.0503, 0.05, 0.0475, 0.045, + 0.0433, 0.04, 0.0373, 0.031, 0.0303, 0.025, 0.0232, 0.02, 0.0164, 0.01, 0.0098, 0.005, 0.0039, 0.001, 0.0007, 0.0, -0.0004, 0.0, 0.0024, 0.01, 0.0101, 0.012, 0.0170, 0.02, 0.0208, 0.023, 0.0223, 0.023, 0.0230, 0.0231, 0.0237, 0.024, + 0.0246, 0.025, 0.0251, 0.025, 0.0250, 0.0248, 0.0247, 0.0245, 0.0240, 0.024, 0.0236, 0.0236, 0.0239, 0.024, 0.0251, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L27_4_m90spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0543, 0.08, 0.0957, 0.12, 0.1617, 0.25, 0.3197, 0.35, 0.4152, 0.45, 0.4840, 0.5, 0.5600, 0.6, 0.6032, 0.603, 0.6029, 0.6, 0.5940, 0.595, 0.5722, 0.55, 0.5340, 0.5, 0.4601, 0.4, 0.3492, 0.3, 0.2374, 0.15, 0.1408, 0.1, + 0.0549, 0.0, -0.0262, -0.05, -0.0957, -0.1, -0.1353, -0.14, -0.1485, -0.13, -0.1237, -0.1, -0.0512, 0.0, 0.0139, 0.04, 0.0497, 0.05, 0.0646, 0.07, 0.0706, 0.071, 0.0773, 0.08, + 0.0870, 0.09, 0.0929, 0.092, 0.0920, 0.09, 0.0876, 0.08, 0.0798, 0.077, 0.0747, 0.076, 0.0781, 0.08, 0.0916, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L19_1_m29spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0109, 0.015, 0.0175, 0.02, 0.0278, 0.04, 0.0531, 0.06, 0.0682, 0.07, 0.0791, 0.08, 0.0912, 0.095, 0.0982, 0.098, 0.0983, 0.098, 0.0971, 0.095, 0.0936, 0.09, 0.0886, 0.085, 0.0806, 0.07, 0.0692, 0.06, 0.0561, 0.05, 0.0427, 0.03, 0.0299, 0.02, 0.0174, 0.01, + 0.0064, 0.003, 0.0002, 0.0, -0.0018, 0.0, 0.0025, 0.01, 0.0148, 0.02, 0.0259, 0.03, 0.0320, 0.033, 0.0346, 0.035, 0.0357, 0.036, 0.0368, 0.037, 0.0384, 0.039, + 0.0394, 0.0393, 0.0392, 0.039, 0.0385, 0.038, 0.0373, 0.037, 0.0366, 0.037, 0.0371, 0.038, 0.0393, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L27_4_m90spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0543, 0.09, 0.0957, 0.12, 0.1617, 0.28, 0.3197, 0.35, 0.4152, 0.45, 0.4840, 0.53, 0.5600, 0.6, 0.6032, 0.603, 0.6029, 0.6, 0.5940, 0.595, 0.5722, 0.55, 0.5340, 0.5, 0.4601, 0.4, 0.3492, 0.3, 0.2374, 0.15, 0.1408, 0.1, + 0.0549, 0.0, -0.0262, -0.05, -0.0957, -0.1, -0.1353, -0.15, -0.1485, -0.13, -0.1237, -0.1, -0.0512, 0.0, 0.0139, 0.04, 0.0497, 0.05, 0.0646, 0.07, 0.0706, 0.071, 0.0773, 0.08, + 0.0870, 0.09, 0.0929, 0.092, 0.0920, 0.09, 0.0876, 0.08, 0.0798, 0.077, 0.0747, 0.076, 0.0781, 0.08, 0.0916, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L16_0_m44spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0128, 0.02, 0.0219, 0.03, 0.0364, 0.06, 0.0714, 0.08, 0.0924, 0.1, 0.1076, 0.11, 0.1244, 0.13, 0.1341, 0.1341, 0.1343, 0.133, 0.1325, 0.13, 0.1278, 0.125, 0.1200, 0.11, 0.1057, 0.1, 0.0845, 0.07, 0.0623, 0.05, 0.0419, 0.03, 0.0232, 0.01, + 0.0055, 0.0, -0.0099, -0.01, -0.0186, -0.02, -0.0216, -0.02, -0.0163, -0.01, -0.0009, 0.0, 0.0130, 0.02, 0.0207, 0.022, 0.0239, 0.024, 0.0252, 0.026, 0.0267, 0.027, + 0.0288, 0.03, 0.0301, 0.03, 0.0299, 0.029, 0.0290, 0.028, 0.0273, 0.027, 0.0261, 0.0265, 0.0269, 0.028, 0.0299, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L16_0_m44spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0128, 0.02, 0.0219, 0.03, 0.0384, 0.06, 0.0714, 0.08, 0.0924, 0.1, 0.1076, 0.11, 0.1244, 0.13, 0.1371, 0.1341, 0.1343, 0.133, 0.1325, 0.13, 0.1278, 0.125, 0.1200, 0.11, 0.1057, 0.1, 0.0845, 0.07, 0.0623, 0.05, 0.0419, 0.03, 0.0232, 0.01, + 0.0055, 0.0, -0.0099, -0.01, -0.0186, -0.02, -0.0216, -0.02, -0.0163, -0.01, -0.0009, 0.0, 0.0130, 0.02, 0.0207, 0.022, 0.0239, 0.024, 0.0252, 0.026, 0.0267, 0.027, + 0.0288, 0.03, 0.0301, 0.03, 0.0299, 0.029, 0.0290, 0.028, 0.0283, 0.027, 0.0261, 0.0265, 0.0269, 0.028, 0.0299, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L13_m3_m36spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0078, 0.01, 0.0136, 0.02, 0.0228, 0.03, 0.0448, 0.05, 0.0581, 0.06, 0.0677, 0.07, 0.0784, 0.08, 0.0847, 0.085, 0.0850, 0.085, 0.0841, 0.083, 0.0813, 0.08, 0.0767, 0.07, 0.0682, 0.06, 0.0556, 0.05, 0.0420, 0.03, 0.0293, 0.02, 0.0175, 0.01, + 0.0062, 0.0, -0.0036, -0.005, -0.0092, -0.01, -0.0112, -0.003, -0.0084, -0.0001, -0.0001, 0.0, 0.0075, 0.01, 0.0117, 0.012, 0.0135, 0.014, 0.0142, 0.015, 0.0151, 0.016, + 0.0164, 0.017, 0.0172, 0.0171, 0.0171, 0.017, 0.0165, 0.016, 0.0154, 0.015, 0.0147, 0.015, 0.0151, 0.016, 0.0170, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L13_m3_m36spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0078, 0.01, 0.0136, 0.03, 0.0228, 0.03, 0.0448, 0.05, 0.0581, 0.06, 0.0677, 0.07, 0.0794, 0.08, 0.0847, 0.089, 0.0850, 0.085, 0.0841, 0.083, 0.0813, 0.08, 0.0767, 0.07, 0.0682, 0.06, 0.0556, 0.05, 0.0420, 0.03, 0.0293, 0.02, 0.0175, 0.01, + 0.0062, 0.0, -0.0036, -0.005, -0.0092, -0.01, -0.0112, -0.003, -0.0084, -0.0001, -0.0001, 0.0, 0.0085, 0.01, 0.0117, 0.012, 0.0135, 0.014, 0.0142, 0.015, 0.0151, 0.016, + 0.0164, 0.017, 0.0172, 0.0171, 0.0171, 0.017, 0.0165, 0.016, 0.0154, 0.015, 0.0147, 0.015, 0.0151, 0.016, 0.0170, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L31_m23_m60spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0283, 0.04, 0.0551, 0.07, 0.0978, 0.12, 0.1970, 0.23, 0.2564, 0.28, 0.3006, 0.34, 0.3502, 0.37, 0.3806, 0.381, 0.3845, 0.383, 0.3832, 0.38, 0.3728, 0.36, 0.3536, 0.33, 0.3176, 0.3, 0.2634, 0.25, 0.2037, 0.17, 0.1453, 0.1, 0.0903, 0.05, + 0.0375, 0.0, -0.0080, -0.05, -0.0340, -0.04, -0.0443, -0.04, -0.0399, -0.03, -0.0206, -0.02, -0.0026, 0.0, 0.0076, 0.01, 0.0119, 0.012, 0.0137, 0.015, 0.0171, 0.02, 0.0228, 0.025, + 0.0265, 0.026, 0.0256, 0.023, 0.0226, 0.02, 0.0175, 0.016, 0.0142, 0.016, 0.0164, 0.02, 0.0248, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L31_m23_m60spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0283, 0.04, 0.0551, 0.08, 0.0978, 0.12, 0.1970, 0.23, 0.2564, 0.28, 0.3006, 0.34, 0.3802, 0.37, 0.3806, 0.381, 0.3845, 0.385, 0.3832, 0.38, 0.3728, 0.36, 0.3536, 0.33, 0.3176, 0.3, 0.2634, 0.25, 0.2037, 0.17, 0.1453, 0.1, 0.0903, 0.05, + 0.0375, 0.0, -0.0080, -0.05, -0.0340, -0.04, -0.0443, -0.04, -0.0399, -0.03, -0.0206, -0.02, -0.0026, 0.0, 0.0076, 0.01, 0.0119, 0.012, 0.0137, 0.015, 0.0171, 0.02, 0.0228, 0.025, + 0.0265, 0.026, 0.0256, 0.023, 0.0246, 0.02, 0.0175, 0.016, 0.0142, 0.016, 0.0164, 0.02, 0.0248, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L17_3_m40spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0127, 0.02, 0.0210, 0.03, 0.0341, 0.05, 0.0660, 0.07, 0.0852, 0.09, 0.0990, 0.11, 0.1142, 0.12, 0.1229, 0.1228, 0.1228, 0.121, 0.1209, 0.12, 0.1164, 0.11, 0.1092, 0.1, 0.0964, 0.08, 0.0777, 0.06, 0.0578, 0.04, 0.0396, 0.03, 0.0229, 0.02, + 0.0069, 0.0, -0.0069, -0.01, -0.0148, -0.015, -0.0173, -0.015, -0.0116, 0.0, 0.0046, 0.01, 0.0191, 0.02, 0.0270, 0.03, 0.0304, 0.031, 0.0317, 0.032, 0.0332, 0.034, + 0.0352, 0.036, 0.0364, 0.0363, 0.0362, 0.036, 0.0353, 0.034, 0.0338, 0.033, 0.0328, 0.033, 0.0335, 0.035, 0.0362, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L17_3_m40spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0127, 0.02, 0.0210, 0.03, 0.0361, 0.05, 0.0660, 0.07, 0.0852, 0.09, 0.0990, 0.11, 0.1142, 0.12, 0.1229, 0.1248, 0.1228, 0.121, 0.1209, 0.12, 0.1164, 0.11, 0.1092, 0.1, 0.0964, 0.08, 0.0777, 0.06, 0.0578, 0.04, 0.0396, 0.03, 0.0229, 0.02, + 0.0069, 0.0, -0.0069, -0.01, -0.0148, -0.015, -0.0173, -0.015, -0.0116, 0.0, 0.0046, 0.015, 0.0191, 0.02, 0.0270, 0.03, 0.0304, 0.031, 0.0317, 0.032, 0.0332, 0.034, + 0.0352, 0.036, 0.0364, 0.0363, 0.0362, 0.036, 0.0353, 0.034, 0.0338, 0.033, 0.0328, 0.033, 0.0335, 0.035, 0.0362, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L17_3_m40spect3[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0127, 0.02, 0.0210, 0.03, 0.0341, 0.05, 0.0660, 0.07, 0.0852, 0.09, 0.0990, 0.11, 0.1142, 0.12, 0.1229, 0.1228, 0.1228, 0.121, 0.1209, 0.12, 0.1164, 0.11, 0.1092, 0.1, 0.0964, 0.08, 0.0777, 0.06, 0.0578, 0.04, 0.0396, 0.03, 0.0229, 0.02, + 0.0069, 0.0, -0.0069, -0.01, -0.0148, -0.015, -0.0173, -0.015, -0.0116, 0.0, 0.0046, 0.01, 0.0191, 0.02, 0.0270, 0.03, 0.0304, 0.031, 0.0317, 0.032, 0.0332, 0.034, + 0.0352, 0.036, 0.0364, 0.0363, 0.0362, 0.036, 0.0353, 0.034, 0.0338, 0.033, 0.0328, 0.033, 0.0335, 0.035, 0.0362, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L17_3_m40spect4[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0127, 0.02, 0.0210, 0.03, 0.0361, 0.05, 0.0660, 0.07, 0.0852, 0.09, 0.0990, 0.11, 0.1142, 0.12, 0.1229, 0.1248, 0.1228, 0.121, 0.1209, 0.12, 0.1164, 0.11, 0.1092, 0.1, 0.0964, 0.08, 0.0777, 0.06, 0.0578, 0.04, 0.0396, 0.03, 0.0229, 0.02, + 0.0069, 0.0, -0.0069, -0.01, -0.0148, -0.015, -0.0173, -0.015, -0.0116, 0.0, 0.0046, 0.015, 0.0191, 0.02, 0.0270, 0.03, 0.0304, 0.031, 0.0317, 0.032, 0.0332, 0.034, + 0.0352, 0.036, 0.0364, 0.0363, 0.0362, 0.036, 0.0353, 0.034, 0.0338, 0.033, 0.0328, 0.033, 0.0335, 0.035, 0.0362, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L17_3_m40spect5[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0127, 0.02, 0.0210, 0.03, 0.0361, 0.05, 0.0660, 0.07, 0.0852, 0.09, 0.0990, 0.11, 0.1142, 0.12, 0.1229, 0.1248, 0.1228, 0.121, 0.1209, 0.12, 0.1164, 0.11, 0.1092, 0.1, 0.0964, 0.08, 0.0777, 0.06, 0.0578, 0.04, 0.0396, 0.03, 0.0229, 0.02, + 0.0069, 0.0, -0.0069, -0.01, -0.0148, -0.015, -0.0173, -0.015, -0.0116, 0.0, 0.0046, 0.015, 0.0191, 0.02, 0.0270, 0.03, 0.0304, 0.031, 0.0317, 0.032, 0.0332, 0.034, + 0.0352, 0.036, 0.0364, 0.0363, 0.0362, 0.036, 0.0353, 0.034, 0.0338, 0.033, 0.0328, 0.033, 0.0335, 0.035, 0.0362, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L17_3_m40spect6[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0127, 0.02, 0.0210, 0.03, 0.0361, 0.05, 0.0660, 0.07, 0.0852, 0.09, 0.0990, 0.11, 0.1142, 0.12, 0.1229, 0.1248, 0.1228, 0.121, 0.1209, 0.12, 0.1164, 0.11, 0.1092, 0.1, 0.0964, 0.08, 0.0777, 0.06, 0.0578, 0.04, 0.0396, 0.03, 0.0229, 0.02, + 0.0069, 0.0, -0.0069, -0.01, -0.0148, -0.015, -0.0173, -0.015, -0.0116, 0.0, 0.0046, 0.015, 0.0191, 0.02, 0.0270, 0.03, 0.0304, 0.031, 0.0317, 0.032, 0.0332, 0.034, + 0.0352, 0.036, 0.0364, 0.0363, 0.0362, 0.036, 0.0353, 0.034, 0.0338, 0.033, 0.0328, 0.033, 0.0335, 0.035, 0.0362, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L21_9_m7spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0096, 0.01, 0.0122, 0.014, 0.0162, 0.02, 0.0277, 0.03, 0.0346, 0.035, 0.0391, 0.04, 0.0440, 0.045, 0.0464, 0.046, 0.0458, 0.045, 0.0443, 0.043, 0.0419, 0.041, 0.0400, 0.04, 0.0391, 0.039, 0.0389, 0.037, 0.0369, 0.035, 0.0330, 0.03, 0.0288, 0.025, 0.0243, 0.022, + 0.0201, 0.02, 0.0178, 0.0176, 0.0175, 0.02, 0.0227, 0.03, 0.0360, 0.04, 0.0477, 0.05, 0.0541, 0.055, 0.0568, 0.057, 0.0580, 0.058, 0.0589, 0.059, 0.0598, 0.06, 0.0602, 0.0602, 0.0602, 0.06, 0.0599, 0.0599, + 0.0595, 0.0595, 0.0592, 0.0594, 0.0594, 0.06, 0.0605, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L78_4_m74spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.2087, 0.3, 0.3297, 0.4, 0.5205, 0.8, 0.9908, 1.1, 1.2731, 1.3, 1.4747, 1.6, 1.6992, 1.75, 1.8277, 1.82, 1.8300, 1.82, 1.8050, 1.75, 1.7397, 1.7, 1.6470, 1.6, 1.5025, 1.4, 1.2968, 1.1, 1.0577, 1.0, 0.8101, 0.8, 0.5740, 0.4, 0.3430, 0.25, + 0.1407, 0.05, 0.0264, 0.0, -0.0107, 0.0, 0.0733, 0.2, 0.3116, 0.4, 0.5251, 0.6, 0.6429, 0.65, 0.6923, 0.7, 0.7137, 0.72, 0.7360, 0.75, 0.7658, 0.77, 0.7831, 0.782, + 0.7804, 0.77, 0.7677, 0.75, 0.7455, 0.74, 0.7313, 0.74, 0.7406, 0.77, 0.7819, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L31_m58_m66spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0229, 0.04, 0.0549, 0.08, 0.1059, 0.15, 0.2207, 0.24, 0.2892, 0.3, 0.3414, 0.36, 0.4006, 0.42, 0.4386, 0.44, 0.4461, 0.445, 0.4480, 0.44, 0.4387, 0.442, 0.4182, 0.4, 0.3771, 0.35, 0.3139, 0.3, 0.2436, 0.2, 0.1736, 0.15, 0.1070, 0.07, + 0.0432, 0.0, -0.0114, -0.02, -0.0429, -0.05, -0.0567, -0.06, -0.0618, -0.063, -0.0637, -0.0637, -0.0639, -0.0635, -0.0635, -0.0634, -0.0632, -0.0632, -0.0632, 0.06, -0.0601, -0.06, -0.0539, -0.05, + -0.0497, 0.05, -0.0510, -0.054, -0.0546, -0.06, -0.0608, -0.062, -0.0649, -0.0622, -0.0622, -0.055, -0.0526, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L61_m11_m12spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0509, 0.06, 0.0770, 0.1, 0.1178, 0.2, 0.2177, 0.25, 0.2762, 0.3, 0.3194, 0.32, 0.3695, 0.37, 0.4016, 0.402, 0.4093, 0.41, 0.4106, 0.41, 0.4017, 0.4, 0.3957, 0.4, 0.4047, 0.41, 0.4237, 0.42, 0.4184, 0.4, 0.3820, 0.35, 0.3365, 0.3, 0.2881, 0.25, + 0.2436, 0.22, 0.2188, 0.21, 0.2086, 0.21, 0.2133, 0.22, 0.2323, 0.24, 0.2499, 0.25, 0.2605, 0.265, 0.2650, 0.266, 0.2679, 0.27, 0.2720, 0.275, 0.2783, 0.28, 0.2816, 0.281, + 0.2808, 0.28, 0.2779, 0.275, 0.2731, 0.271, 0.2702, 0.272, 0.2720, 0.28, 0.2811, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L61_m11_m12spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0509, 0.06, 0.0770, 0.1, 0.1578, 0.2, 0.2177, 0.25, 0.2762, 0.3, 0.3194, 0.32, 0.3695, 0.37, 0.4016, 0.402, 0.4093, 0.41, 0.4106, 0.41, 0.4017, 0.4, 0.3957, 0.4, 0.4047, 0.41, 0.4237, 0.42, 0.4184, 0.4, 0.3820, 0.35, 0.3365, 0.3, 0.2881, 0.25, + 0.2436, 0.22, 0.2188, 0.21, 0.2186, 0.21, 0.2133, 0.22, 0.2323, 0.24, 0.2499, 0.25, 0.2605, 0.265, 0.2650, 0.266, 0.2679, 0.27, 0.2720, 0.275, 0.2783, 0.28, 0.2816, 0.281, + 0.2808, 0.28, 0.2779, 0.275, 0.2831, 0.271, 0.2702, 0.272, 0.2720, 0.28, 0.2811, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L29_1_m13spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0147, 0.02, 0.0212, 0.03, 0.0313, 0.04, 0.0571, 0.06, 0.0724, 0.08, 0.0832, 0.09, 0.0955, 0.1, 0.1026, 0.102, 0.1031, 0.102, 0.1019, 0.1, 0.0985, 0.096, 0.0950, 0.094, 0.0930, 0.092, 0.0914, 0.09, 0.0855, 0.08, 0.0749, 0.07, 0.0634, 0.06, 0.0515, 0.05, + 0.0407, 0.04, 0.0346, 0.04, 0.0327, 0.033, 0.0377, 0.04, 0.0517, 0.06, 0.0642, 0.07, 0.0711, 0.072, 0.0740, 0.075, 0.0754, 0.076, 0.0768, 0.077, 0.0785, 0.079, 0.0794, 0.0793, + 0.0792, 0.079, 0.0786, 0.078, 0.0774, 0.077, 0.0767, 0.077, 0.0772, 0.078, 0.0795, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L29_1_m13spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0147, 0.02, 0.0212, 0.03, 0.0343, 0.04, 0.0571, 0.06, 0.0724, 0.08, 0.0832, 0.09, 0.0995, 0.1, 0.1026, 0.102, 0.1031, 0.102, 0.1019, 0.1, 0.0985, 0.096, 0.0950, 0.094, 0.0930, 0.092, 0.0914, 0.09, 0.0855, 0.08, 0.0749, 0.07, 0.0634, 0.06, 0.0515, 0.05, + 0.0407, 0.04, 0.0346, 0.04, 0.0327, 0.033, 0.0377, 0.04, 0.0517, 0.06, 0.0642, 0.07, 0.0711, 0.072, 0.0740, 0.075, 0.0754, 0.076, 0.0768, 0.077, 0.0785, 0.079, 0.0794, 0.0793, + 0.0792, 0.079, 0.0786, 0.078, 0.0794, 0.077, 0.0767, 0.077, 0.0772, 0.078, 0.0795, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L2_14_m1spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0020, 0.002, 0.0021, 0.0021, 0.0022, 0.003, 0.0030, 0.0033, 0.0036, 0.0035, 0.0038, 0.0038, 0.0039, 0.0038, 0.0036, 0.0035, 0.0030, 0.003, 0.0024, 0.002, 0.0017, 0.0015, 0.0011, 0.001, 0.0004, 0.0, -0.0004, -0.001, -0.0010, -0.0011, -0.0012, -0.0011, -0.0011, -0.0011, -0.0011, -0.001, + -0.0011, -0.0011, -0.0011, -0.001, -0.0008, 0.0, 0.0012, 0.004, 0.0061, 0.01, 0.0104, 0.011, 0.0127, 0.013, 0.0136, 0.014, 0.0140, 0.0142, 0.0142, 0.0143, 0.0144, 0.0144, + 0.0144, 0.0144, 0.0144, 0.0145, 0.0145, 0.0145, 0.0145, 0.0145, 0.0145, 0.0145, 0.0145, 0.0145, 0.0146, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L5_39_m7spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0070, 0.007, 0.0072, 0.0075, 0.0076, 0.01, 0.0108, 0.011, 0.0129, 0.013, 0.0136, 0.014, 0.0140, 0.0135, 0.0131, 0.012, 0.0112, 0.01, 0.0088, 0.008, 0.0066, 0.005, 0.0046, 0.003, 0.0021, 0.0, -0.0009, -0.002, -0.0032, -0.003, + -0.0039, -0.0039, -0.0039, -0.004, -0.0040, -0.004, -0.0041, -0.0041, -0.0041, -0.0035, -0.0032, 0.0, 0.0038, 0.03, 0.0205, 0.03, 0.0351, 0.04, 0.0429, 0.045, 0.0462, 0.047, + 0.0476, 0.048, 0.0483, 0.0485, 0.0487, 0.0488, 0.0489, 0.049, 0.0490, 0.049, 0.0490, 0.049, 0.0491, 0.0491, 0.0491, 0.0491, 0.0491, 0.0492, 0.0494, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L15_5_m13spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0064, 0.007, 0.0089, 0.01, 0.0129, 0.02, 0.0233, 0.025, 0.0295, 0.03, 0.0338, 0.035, 0.0386, 0.04, 0.0411, 0.041, 0.0409, 0.04, 0.0400, 0.039, 0.0383, 0.037, 0.0364, 0.035, 0.0345, 0.033, 0.0321, 0.03, 0.0285, 0.025, 0.0240, 0.02, 0.0194, 0.015, 0.0148, 0.012, + 0.0106, 0.01, 0.0083, 0.008, 0.0077, 0.01, 0.0107, 0.015, 0.0188, 0.02, 0.0260, 0.027, 0.0299, 0.03, 0.0316, 0.032, 0.0323, 0.033, 0.0330, 0.033, 0.0337, 0.034, 0.0341, 0.034, + 0.0340, 0.034, 0.0338, 0.033, 0.0333, 0.033, 0.0330, 0.033, 0.0332, 0.034, 0.0342, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +const double ColorTemp::Colorlab_L12_5_m6spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0039, 0.004, 0.0052, 0.006, 0.0072, 0.01, 0.0127, 0.013, 0.0159, 0.016, 0.0181, 0.02, 0.0205, 0.021, 0.0218, 0.0217, 0.0217, 0.0215, 0.0212, 0.021, 0.0202, 0.02, 0.0194, 0.019, 0.0190, 0.019, 0.0187, 0.018, 0.0177, 0.016, 0.0157, 0.014, + 0.0135, 0.012, 0.0112, 0.01, 0.0091, 0.008, 0.0079, 0.0077, 0.0077, 0.008, 0.0096, 0.01, 0.0145, 0.015, 0.0189, 0.02, 0.0213, 0.021, 0.0223, 0.0222, 0.0227, 0.023, + 0.0231, 0.0231, 0.0235, 0.0236, 0.0237, 0.0237, 0.0237, 0.0236, 0.0235, 0.0233, 0.0233, 0.0232, 0.0233, 0.0233, 0.0235, 0.0238, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L12_5_m6spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0039, 0.004, 0.0062, 0.006, 0.0072, 0.01, 0.0147, 0.013, 0.0159, 0.016, 0.0181, 0.02, 0.0205, 0.021, 0.0218, 0.0257, 0.0217, 0.0215, 0.0212, 0.021, 0.0202, 0.02, 0.0194, 0.019, 0.0190, 0.019, 0.0187, 0.018, 0.0177, 0.016, 0.0157, 0.014, + 0.0135, 0.012, 0.0112, 0.01, 0.0099, 0.008, 0.0079, 0.0087, 0.0077, 0.008, 0.0096, 0.01, 0.0145, 0.015, 0.0189, 0.02, 0.0213, 0.021, 0.0223, 0.0222, 0.0227, 0.023, + 0.0231, 0.0231, 0.0235, 0.0236, 0.0237, 0.0237, 0.0237, 0.0236, 0.0235, 0.0233, 0.0233, 0.0232, 0.0233, 0.0233, 0.0235, 0.0238, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L37_m59_m24spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0007, 0.01, 0.0162, 0.03, 0.0407, 0.06, 0.0911, 0.1, 0.1203, 0.13, 0.1448, 0.16, 0.1741, 0.18, 0.1965, 0.2, 0.2068, 0.21, 0.2149, 0.215, 0.2165, 0.216, 0.2159, 0.216, 0.2165, 0.2165, 0.2165, 0.21, 0.2046, 0.19, 0.1781, 0.16, 0.1472, 0.13, 0.1161, 0.1, + 0.0889, 0.08, 0.0732, 0.07, 0.0636, 0.05, 0.0426, 0.0, -0.0029, -0.02, -0.0419, -0.05, -0.0625, -0.07, -0.0711, -0.073, -0.0743, -0.074, -0.0744, -0.073, -0.0722, -0.071, + -0.0705, -0.071, -0.0715, -0.072, -0.0735, -0.075, -0.0766, -0.077, -0.0786, -0.078, -0.0773, -0.074, -0.0731, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; +const double ColorTemp::Colorlab_L37_m59_m24spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0007, 0.01, 0.0162, 0.03, 0.0427, 0.06, 0.0911, 0.1, 0.1203, 0.13, 0.1548, 0.16, 0.1741, 0.18, 0.1965, 0.2, 0.2068, 0.24, 0.2149, 0.215, 0.2165, 0.216, 0.2159, 0.216, 0.2165, 0.2165, 0.2165, 0.21, 0.2046, 0.19, 0.1781, 0.16, 0.1472, 0.13, 0.1161, 0.1, + 0.0889, 0.08, 0.0732, 0.07, 0.0636, 0.05, 0.0426, 0.0, -0.0029, -0.02, -0.0429, -0.05, -0.0625, -0.07, -0.0711, -0.073, -0.0743, -0.074, -0.0744, -0.073, -0.0722, -0.071, + -0.0705, -0.071, -0.0715, -0.072, -0.0735, -0.075, -0.0766, -0.077, -0.0786, -0.078, -0.0773, -0.074, -0.0731, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L15_55_23spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0184, 0.017, 0.0169, 0.015, 0.0143, 0.015, 0.0153, 0.016, 0.0164, 0.015, 0.0147, 0.013, 0.0119, 0.01, 0.0070, 0.005, 0.0012, 0.0, -0.0052, -0.01, -0.0106, -0.012, -0.0143, -0.015, -0.0166, -0.016, -0.0177, -0.017, -0.0169, -0.015, + -0.0134, -0.01, -0.0085, -0.005, -0.0041, -0.0008, -0.0008, 0.0, 0.0014, 0.002, 0.0049, 0.02, 0.0244, 0.05, 0.0701, 0.1, 0.1100, 0.12, 0.1315, 0.14, 0.1405, 0.142, 0.1443, 0.145, + 0.1461, 0.1463, 0.1469, 0.1469, 0.1469, 0.148, 0.1474, 0.1476, 0.1478, 0.148, 0.1483, 0.1485, 0.1486, 0.1486, 0.1484, 0.1485, 0.1487, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L11_m55_m11spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0164, 0.017, 0.0170, 0.017, 0.0179, 0.02, 0.0254, 0.03, 0.0304, 0.0302, 0.0321, 0.031, 0.0331, 0.032, 0.0310, 0.03, 0.0264, 0.025, 0.0209, 0.02, 0.0156, 0.0120, 0.0108, 0.01, 0.0048, 0.0, -0.0025, -0.005, -0.0079, -0.008, -0.0098, -0.0098, -0.0098, -0.0098, -0.0099, -0.01, + -0.0103, -0.0102, -0.0102, -0.01, -0.0080, 0.0, 0.0084, 0.02, 0.0478, 0.06, 0.0823, 0.09, 0.1008, 0.105, 0.1086, 0.11, 0.1118, 0.112, 0.1135, 0.114, 0.1145, 0.1146, 0.1148, 0.115, + 0.1152, 0.1152, 0.1153, 0.1153, 0.1153, 0.1153, 0.1154, 0.1154, 0.1154, 0.116, 0.1162, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L8_m10_m2spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0006, 0.001, 0.0013, 0.002, 0.0025, 0.004, 0.0050, 0.0055, 0.0064, 0.007, 0.0076, 0.008, 0.0090, 0.01, 0.0101, 0.0102, 0.0106, 0.011, 0.0111, 0.0111, 0.0111, 0.0112, 0.0113, 0.012, 0.0122, 0.013, 0.0135, 0.014, 0.0140, 0.014, + 0.0131, 0.012, 0.0118, 0.011, 0.0104, 0.01, 0.0091, 0.009, 0.0083, 0.008, 0.0079, 0.0075, 0.0070, 0.006, 0.0050, 0.004, 0.0033, 0.003, 0.0024, 0.0022, 0.0021, 0.002, 0.0019, 0.002, 0.0020, 0.002, 0.0021, 0.0022, 0.0022, 0.0021, + 0.0021, 0.002, 0.0020, 0.002, 0.0019, 0.0018, 0.0018, 0.0018, 0.0018, 0.0019, 0.0021, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L14_m10_m7spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0023, 0.003, 0.0042, 0.006, 0.0071, 0.01, 0.0139, 0.015, 0.0179, 0.02, 0.0209, 0.022, 0.0245, 0.026, 0.0270, 0.0275, 0.0278, 0.028, 0.0283, 0.028, 0.0280, 0.028, 0.0277, 0.028, 0.0282, 0.029, 0.0293, 0.029, 0.0286, 0.027, 0.0258, 0.024, 0.0224, 0.02, + 0.0188, 0.017, 0.0156, 0.014, 0.0137, 0.013, 0.0128, 0.0125, 0.0120, 0.011, 0.0107, 0.01, 0.0096, 0.0094, 0.0091, 0.009, 0.0089, 0.0089, 0.0089, 0.009, 0.0091, 0.0092, 0.0095, 0.0095, + 0.0097, 0.0096, 0.0096, 0.0095, 0.0094, 0.0093, 0.0090, 0.009, 0.0088, 0.0089, 0.0089, 0.009, 0.0095, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L20_m16_m13spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0039, 0.005, 0.0080, 0.01, 0.0144, 0.02, 0.0290, 0.03, 0.0375, 0.04, 0.0442, 0.05, 0.0519, 0.054, 0.0573, 0.058, 0.0591, 0.06, 0.0600, 0.06, 0.0594, 0.059, 0.0584, 0.058, 0.0579, 0.0578, 0.0575, 0.056, 0.0540, 0.05, 0.0471, 0.04, + 0.0393, 0.035, 0.0313, 0.03, 0.0242, 0.022, 0.0202, 0.02, 0.0182, 0.017, 0.0161, 0.014, 0.0125, 0.01, 0.0095, 0.009, 0.0081, 0.008, 0.0075, 0.0074, 0.0073, 0.0075, + 0.0076, 0.008, 0.0084, 0.0087, 0.0089, 0.0088, 0.0087, 0.0085, 0.0082, 0.008, 0.0074, 0.007, 0.0069, 0.007, 0.0073, 0.008, 0.0085, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L8_m10_m2spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0006, 0.001, 0.0013, 0.003, 0.0025, 0.004, 0.0050, 0.0055, 0.0064, 0.007, 0.0076, 0.009, 0.0090, 0.01, 0.0101, 0.0102, 0.0106, 0.012, 0.0111, 0.0111, 0.0121, 0.0122, 0.0113, 0.012, 0.0122, 0.013, 0.0135, 0.014, 0.0140, 0.014, + 0.0131, 0.012, 0.0128, 0.011, 0.0114, 0.01, 0.0091, 0.009, 0.0083, 0.008, 0.0079, 0.0075, 0.0070, 0.006, 0.0050, 0.004, 0.0033, 0.003, 0.0024, 0.0022, 0.0021, 0.002, 0.0019, 0.002, 0.0020, 0.002, 0.0021, 0.0022, 0.0022, 0.0021, + 0.0021, 0.002, 0.0020, 0.002, 0.0019, 0.0018, 0.0018, 0.0018, 0.0018, 0.0019, 0.0021, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L14_m10_m7spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0023, 0.003, 0.0042, 0.006, 0.0091, 0.01, 0.0149, 0.015, 0.0179, 0.02, 0.0209, 0.022, 0.0265, 0.026, 0.0270, 0.0275, 0.0278, 0.028, 0.0293, 0.028, 0.0280, 0.029, 0.0277, 0.028, 0.0282, 0.029, 0.0293, 0.029, 0.0286, 0.027, 0.0258, 0.024, 0.0224, 0.02, + 0.0198, 0.017, 0.0156, 0.014, 0.0137, 0.013, 0.0128, 0.0125, 0.0120, 0.011, 0.0107, 0.01, 0.0096, 0.0094, 0.0091, 0.009, 0.0089, 0.0089, 0.0089, 0.009, 0.0091, 0.0092, 0.0095, 0.0095, + 0.0097, 0.0096, 0.0096, 0.0095, 0.0094, 0.0093, 0.0090, 0.009, 0.0088, 0.0089, 0.0089, 0.009, 0.0095, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L20_m16_m13spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0039, 0.005, 0.0080, 0.01, 0.0144, 0.02, 0.0290, 0.03, 0.0375, 0.04, 0.0442, 0.05, 0.0519, 0.054, 0.0573, 0.06, 0.0591, 0.06, 0.0600, 0.06, 0.0654, 0.065, 0.0654, 0.065, 0.0659, 0.0578, 0.0575, 0.056, 0.0540, 0.05, 0.0471, 0.04, + 0.0393, 0.035, 0.0313, 0.03, 0.0242, 0.022, 0.0202, 0.02, 0.0182, 0.017, 0.0161, 0.014, 0.0125, 0.01, 0.0095, 0.009, 0.0081, 0.008, 0.0075, 0.0074, 0.0073, 0.0075, + 0.0076, 0.008, 0.0084, 0.0087, 0.0089, 0.0088, 0.0087, 0.0085, 0.0082, 0.008, 0.0074, 0.007, 0.0069, 0.007, 0.0073, 0.008, 0.0085, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L6_m9_1spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0002, 0.0005, 0.0007, 0.001, 0.0014, 0.002, 0.0030, 0.0035, 0.0039, 0.004, 0.0046, 0.005, 0.0056, 0.006, 0.0064, 0.0064, 0.0069, 0.007, 0.0073, 0.0073, 0.0074, 0.0076, 0.0077, 0.008, 0.0087, 0.009, 0.0101, 0.0102, 0.0108, 0.011, + 0.0103, 0.01, 0.0095, 0.009, 0.0085, 0.008, 0.0076, 0.0075, 0.0071, 0.007, 0.0068, 0.006, 0.0058, 0.004, 0.0037, 0.002, 0.0018, 0.001, 0.0008, 0.0006, 0.0004, 0.0004, + 0.0003, 0.0003, 0.0003, 0.0003, 0.0003, 0.0004, 0.0004, 0.0004, 0.0004, 0.0003, 0.0003, 0.0003, 0.0002, 0.0002, 0.0001, 0.0001, 0.0002, 0.0002, 0.0003, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L20_m9_m10spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0050, 0.006, 0.0084, 0.01, 0.0139, 0.02, 0.0266, 0.03, 0.0342, 0.035, 0.0398, 0.04, 0.0464, 0.05, 0.0507, 0.052, 0.0518, 0.052, 0.0522, 0.052, 0.0513, 0.051, 0.0503, 0.0502, 0.0502, 0.0503, 0.0504, 0.05, 0.0480, 0.048, 0.0425, 0.04, 0.0361, 0.03, + 0.0296, 0.025, 0.0236, 0.022, 0.0203, 0.02, 0.0188, 0.0185, 0.0185, 0.0188, 0.0188, 0.019, 0.0191, 0.0195, 0.0195, 0.0195, 0.0196, 0.0197, 0.0198, 0.02, 0.0202, 0.0205, + 0.0209, 0.021, 0.0214, 0.0214, 0.0213, 0.021, 0.0209, 0.0205, 0.0202, 0.02, 0.0198, 0.02, 0.0201, 0.021, 0.0212, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L85_10_45spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1141, 0.12, 0.1230, 0.13, 0.1346, 0.16, 0.1906, 0.2, 0.2220, 0.23, 0.2391, 0.25, 0.2598, 0.26, 0.2687, 0.267, 0.2673, 0.26, 0.2587, 0.25, 0.2448, 0.25, 0.2597, 0.3, 0.3501, 0.4, 0.5052, 0.55, 0.6139, 0.63, 0.6472, 0.65, + 0.6535, 0.65, 0.6470, 0.64, 0.6334, 0.63, 0.6279, 0.63, 0.6307, 0.66, 0.6778, 0.7, 0.7914, 0.82, 0.8909, 0.9, 0.9462, 0.95, 0.9695, 0.97, 0.9817, 0.982, + 0.9893, 0.99, 0.9956, 0.996, 0.9969, 0.997, 0.9975, 0.997, 0.9969, 0.9965, 0.9962, 0.9963, 0.9963, 0.9962, 0.9962, 1.0, 1.0030, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L90_m7_82spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0733, 0.073, 0.0730, 0.07, 0.0698, 0.07, 0.0777, 0.0777, 0.0779, 0.078, 0.0780, 0.08, 0.0835, 0.09, 0.0925, 0.1, 0.1077, 0.11, 0.1187, 0.12, 0.1248, 0.15, 0.1700, 0.25, 0.3233, 0.4, 0.5715, 0.65, 0.7545, 0.8, 0.8254, 0.84, 0.8529, 0.86, 0.8634, 0.864, 0.8632, 0.864, + 0.8651, 0.864, 0.8637, 0.86, 0.8584, 0.85, 0.8439, 0.84, 0.8309, 0.83, 0.8259, 0.825, 0.8241, 0.824, 0.8265, 0.827, 0.8286, 0.83, 0.8306, 0.83, 0.8299, 0.829, + 0.8296, 0.8296, 0.8296, 0.83, 0.8301, 0.831, 0.8314, 0.831, 0.8305, 0.832, 0.8331, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L95_2_18spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1508, 0.16, 0.1879, 0.2, 0.2437, 0.3, 0.4029, 0.45, 0.4951, 0.52, 0.5582, 0.6, 0.6321, 0.65, 0.6760, 0.68, 0.6838, 0.68, 0.6784, 0.66, 0.6570, 0.66, 0.6625, 0.7, 0.7471, 0.8, 0.8962, 0.9, 0.9795, 0.97, 0.9654, 0.95, 0.9187, 0.9, + 0.8583, 0.8, 0.7967, 0.78, 0.7639, 0.76, 0.7546, 0.77, 0.7979, 0.85, 0.9113, 1.0, 1.0117, 1.04, 1.0684, 1.08, 1.0924, 1.1, 1.1055, 1.11, 1.1164, 1.12, 1.1286, 1.13, + 1.1336, 1.133, 1.1330, 1.13, 1.1293, 1.125, 1.1232, 1.122, 1.1200, 1.121, 1.1220, 1.13, 1.1380, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L39_7_4spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0233, 0.025, 0.0285, 0.03, 0.0364, 0.04, 0.0599, 0.065, 0.0737, 0.08, 0.0827, 0.09, 0.0929, 0.095, 0.0982, 0.098, 0.0978, 0.096, 0.0954, 0.094, 0.0910, 0.09, 0.0896, 0.093, 0.0965, 0.1, 0.1100, 0.112, 0.1163, 0.113, 0.1124, 0.11, 0.1055, 0.1, 0.0970, 0.09, + 0.0885, 0.086, 0.0840, 0.084, 0.0834, 0.09, 0.0936, 0.1, 0.1194, 0.13, 0.1421, 0.15, 0.1547, 0.157, 0.1600, 0.162, 0.1625, 0.163, 0.1644, 0.165, 0.1663, 0.167, 0.1671, 0.1671, + 0.1671, 0.167, 0.1666, 0.166, 0.1658, 0.1656, 0.1653, 0.1655, 0.1656, 0.167, 0.1679, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L39_4_1spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0226, 0.025, 0.0290, 0.03, 0.0386, 0.05, 0.0656, 0.07, 0.0815, 0.09, 0.0923, 0.1, 0.1046, 0.11, 0.1114, 0.1113, 0.1116, 0.11, 0.1098, 0.108, 0.1056, 0.104, 0.1038, 0.108, 0.1097, 0.11, 0.1214, 0.123, 0.1256, 0.12, 0.1193, 0.115, + 0.1100, 0.1, 0.0992, 0.09, 0.0888, 0.085, 0.0831, 0.082, 0.0817, 0.085, 0.0903, 0.1, 0.1126, 0.12, 0.1324, 0.135, 0.1434, 0.145, 0.1480, 0.15, 0.1503, 0.152, 0.1521, 0.153, + 0.1541, 0.155, 0.1550, 0.155, 0.1549, 0.1545, 0.1543, 0.154, 0.1533, 0.153, 0.1527, 0.153, 0.1531, 0.154, 0.1557, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L39_3_m1spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0221, 0.025, 0.0288, 0.03, 0.0392, 0.05, 0.0673, 0.07, 0.0839, 0.09, 0.0953, 0.1, 0.1083, 0.11, 0.1158, 0.116, 0.1163, 0.115, 0.1147, 0.112, 0.1105, 0.11, 0.1087, 0.11, 0.1140, 0.12, 0.1248, 0.125, 0.1279, 0.125, 0.1207, 0.115, 0.1104, 0.1, 0.0988, 0.09, 0.0876, 0.085, 0.0816, 0.08, 0.0799, 0.08, + 0.0877, 0.09, 0.1083, 0.11, 0.1265, 0.13, 0.1367, 0.14, 0.1410, 0.142, 0.1431, 0.144, 0.1449, 0.146, 0.1470, 0.1474, 0.1479, 0.1478, 0.1478, 0.1475, 0.1472, 0.147, 0.1460, 0.146, 0.1454, 0.1456, 0.1458, 0.147, 0.1485, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_3_m2spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0242, 0.03, 0.0316, 0.035, 0.0430, 0.06, 0.0740, 0.08, 0.0923, 0.1, 0.1049, 0.11, 0.1192, 0.12, 0.1272, 0.1275, 0.1275, 0.126, 0.1256, 0.124, 0.1208, 0.12, 0.1184, 0.12, 0.1232, 0.13, 0.1333, 0.134, 0.1355, 0.13, 0.1272, 0.12, + 0.1157, 0.11, 0.1029, 0.1, 0.0906, 0.09, 0.0840, 0.083, 0.0822, 0.09, 0.0913, 0.1, 0.1150, 0.12, 0.1360, 0.14, 0.1477, 0.15, 0.1526, 0.154, 0.1550, 0.156, 0.1570, 0.158, + 0.1593, 0.16, 0.1603, 0.1602, 0.1602, 0.16, 0.1595, 0.1594, 0.1582, 0.158, 0.1575, 0.158, 0.1580, 0.159, 0.1609, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L36_2_2spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0173, 0.02, 0.0222, 0.025, 0.0296, 0.04, 0.0501, 0.055, 0.0621, 0.07, 0.0704, 0.075, 0.0798, 0.08, 0.0852, 0.085, 0.0856, 0.085, 0.0845, 0.083, 0.0815, 0.081, 0.0806, 0.084, 0.0864, 0.09, 0.0975, 0.1, 0.1021, 0.1, 0.0979, 0.095, + 0.0909, 0.09, 0.0827, 0.08, 0.0747, 0.073, 0.0703, 0.07, 0.0692, 0.07, 0.0752, 0.08, 0.0908, 0.1, 0.1046, 0.11, 0.1124, 0.113, 0.1156, 0.116, 0.1173, 0.118, 0.1187, 0.123, + 0.1202, 0.1205, 0.1209, 0.1208, 0.1208, 0.1205, 0.1203, 0.12, 0.1195, 0.1194, 0.1191, 0.1193, 0.1194, 0.12, 0.1213, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L39_7_4spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0233, 0.028, 0.0285, 0.03, 0.0364, 0.04, 0.0599, 0.065, 0.0737, 0.08, 0.0927, 0.09, 0.0929, 0.095, 0.0982, 0.098, 0.0978, 0.096, 0.0954, 0.094, 0.0910, 0.09, 0.0896, 0.093, 0.0965, 0.1, 0.1100, 0.112, 0.1163, 0.113, 0.1124, 0.11, 0.1055, 0.1, 0.0970, 0.09, + 0.0885, 0.086, 0.0840, 0.084, 0.0834, 0.09, 0.0936, 0.1, 0.1294, 0.15, 0.1521, 0.17, 0.1647, 0.167, 0.1600, 0.162, 0.1625, 0.163, 0.1644, 0.165, 0.1663, 0.167, 0.1671, 0.1671, + 0.1671, 0.167, 0.1666, 0.166, 0.1658, 0.1656, 0.1653, 0.1655, 0.1656, 0.167, 0.1679, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L39_4_1spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0226, 0.025, 0.0290, 0.035, 0.0386, 0.05, 0.0656, 0.07, 0.0855, 0.09, 0.0923, 0.105, 0.1046, 0.11, 0.1114, 0.1113, 0.1216, 0.13, 0.1298, 0.118, 0.1056, 0.104, 0.1038, 0.108, 0.1097, 0.11, 0.1214, 0.123, 0.1256, 0.12, 0.1193, 0.115, + 0.1100, 0.1, 0.0992, 0.09, 0.0888, 0.085, 0.0831, 0.082, 0.0817, 0.085, 0.0903, 0.1, 0.1126, 0.12, 0.1324, 0.135, 0.1434, 0.145, 0.1480, 0.15, 0.1503, 0.152, 0.1521, 0.153, + 0.1541, 0.155, 0.1550, 0.155, 0.1549, 0.1545, 0.1543, 0.154, 0.1533, 0.153, 0.1527, 0.153, 0.1531, 0.154, 0.1557, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L39_3_m1spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0221, 0.025, 0.0288, 0.03, 0.0392, 0.05, 0.0693, 0.07, 0.0839, 0.09, 0.0953, 0.1, 0.1083, 0.11, 0.1258, 0.126, 0.1263, 0.125, 0.1247, 0.122, 0.1205, 0.11, 0.1087, 0.11, 0.1140, 0.12, 0.1248, 0.125, 0.1279, 0.125, 0.1207, 0.115, 0.1104, 0.1, 0.0988, 0.09, 0.0876, 0.085, 0.0816, 0.08, 0.0799, 0.08, + 0.0877, 0.09, 0.1083, 0.11, 0.1265, 0.13, 0.1367, 0.14, 0.1410, 0.142, 0.1431, 0.144, 0.1449, 0.146, 0.1470, 0.1474, 0.1479, 0.1478, 0.1478, 0.1475, 0.1472, 0.147, 0.1460, 0.146, 0.1454, 0.1456, 0.1458, 0.147, 0.1485, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_3_m2spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0242, 0.03, 0.0316, 0.035, 0.0430, 0.06, 0.080, 0.088, 0.0923, 0.1, 0.1049, 0.11, 0.1192, 0.12, 0.1372, 0.1375, 0.1375, 0.136, 0.1356, 0.134, 0.1308, 0.13, 0.1284, 0.12, 0.1232, 0.13, 0.1333, 0.134, 0.1355, 0.13, 0.1272, 0.12, + 0.1157, 0.11, 0.1029, 0.1, 0.0906, 0.09, 0.0840, 0.083, 0.0822, 0.09, 0.0913, 0.1, 0.1150, 0.12, 0.1360, 0.14, 0.1477, 0.15, 0.1526, 0.154, 0.1550, 0.156, 0.1570, 0.158, + 0.1593, 0.16, 0.1603, 0.1602, 0.1602, 0.16, 0.1595, 0.1594, 0.1582, 0.158, 0.1575, 0.158, 0.1580, 0.159, 0.1609, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L36_2_2spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0173, 0.02, 0.0222, 0.025, 0.0296, 0.05, 0.0501, 0.055, 0.0621, 0.07, 0.0704, 0.075, 0.0798, 0.08, 0.0852, 0.085, 0.0856, 0.095, 0.0945, 0.083, 0.0815, 0.081, 0.0806, 0.084, 0.0864, 0.09, 0.0975, 0.1, 0.1021, 0.1, 0.0979, 0.095, + 0.0909, 0.09, 0.0827, 0.08, 0.0747, 0.073, 0.0703, 0.07, 0.0692, 0.07, 0.0752, 0.08, 0.0908, 0.11, 0.1146, 0.12, 0.1224, 0.123, 0.1256, 0.126, 0.1273, 0.128, 0.1287, 0.123, + 0.1202, 0.1205, 0.1209, 0.1208, 0.1208, 0.1205, 0.1203, 0.12, 0.1195, 0.1194, 0.1191, 0.1193, 0.1194, 0.12, 0.1213, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_4_m2spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0248, 0.03, 0.0323, 0.04, 0.0437, 0.06, 0.0752, 0.08, 0.0937, 0.1, 0.1064, 0.11, 0.1208, 0.124, 0.1289, 0.129, 0.1292, 0.128, 0.1271, 0.125, 0.1222, 0.12, 0.1197, 0.12, 0.1246, 0.13, 0.1350, 0.136, 0.1373, 0.13, 0.1289, 0.12, 0.1174, 0.11, + 0.1045, 0.1, 0.0921, 0.09, 0.0854, 0.084, 0.0837, 0.09, 0.0931, 0.1, 0.1177, 0.12, 0.1396, 0.14, 0.1517, 0.153, 0.1568, 0.158, 0.1593, 0.16, 0.1613, 0.162, 0.1636, 0.164, + 0.1647, 0.1646, 0.1646, 0.164, 0.1639, 0.163, 0.1626, 0.162, 0.1619, 0.162, 0.1624, 0.164, 0.1654, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L41_1_m6spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0259, 0.03, 0.0352, 0.04, 0.0494, 0.07, 0.0872, 0.1, 0.1094, 0.11, 0.1250, 0.13, 0.1427, 0.15, 0.1530, 0.153, 0.1539, 0.153, 0.1522, 0.15, 0.1470, 0.145, 0.1436, 0.145, 0.1469, 0.15, 0.1549, 0.155, 0.1541, 0.15, 0.1421, 0.13, 0.1269, 0.12, + 0.1105, 0.1, 0.0951, 0.09, 0.0866, 0.085, 0.0840, 0.09, 0.0926, 0.1, 0.1159, 0.12, 0.1366, 0.14, 0.1482, 0.15, 0.1531, 0.154, 0.1555, 0.156, 0.1577, 0.16, 0.1603, 0.161, + 0.1616, 0.1615, 0.1614, 0.161, 0.1605, 0.16, 0.1588, 0.158, 0.1579, 0.158, 0.1585, 0.16, 0.1620, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_4_m2spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0248, 0.03, 0.0323, 0.04, 0.0437, 0.06, 0.0752, 0.08, 0.0937, 0.1, 0.1064, 0.11, 0.1208, 0.134, 0.1389, 0.139, 0.1292, 0.128, 0.1271, 0.125, 0.1222, 0.12, 0.1197, 0.12, 0.1246, 0.13, 0.1350, 0.136, 0.1373, 0.13, 0.1289, 0.12, 0.1174, 0.11, + 0.1145, 0.12, 0.0921, 0.09, 0.0854, 0.084, 0.0837, 0.09, 0.0931, 0.1, 0.1177, 0.12, 0.1396, 0.14, 0.1517, 0.153, 0.1568, 0.158, 0.1593, 0.16, 0.1613, 0.162, 0.1636, 0.164, + 0.1647, 0.1646, 0.1646, 0.164, 0.1639, 0.163, 0.1626, 0.162, 0.1619, 0.162, 0.1624, 0.164, 0.1654, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L41_1_m6spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0259, 0.03, 0.0352, 0.04, 0.0494, 0.07, 0.0872, 0.1, 0.1194, 0.12, 0.1350, 0.14, 0.1527, 0.15, 0.1530, 0.153, 0.1539, 0.153, 0.1522, 0.15, 0.1470, 0.145, 0.1436, 0.145, 0.1469, 0.15, 0.1549, 0.155, 0.1541, 0.15, 0.1421, 0.13, 0.1269, 0.12, + 0.1105, 0.1, 0.0951, 0.09, 0.0866, 0.085, 0.0840, 0.09, 0.0926, 0.1, 0.1259, 0.13, 0.1366, 0.14, 0.1482, 0.15, 0.1531, 0.154, 0.1555, 0.156, 0.1577, 0.16, 0.1603, 0.161, + 0.1616, 0.1615, 0.1614, 0.161, 0.1605, 0.16, 0.1588, 0.158, 0.1579, 0.158, 0.1585, 0.16, 0.1620, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L41_12_14spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0272, 0.03, 0.0306, 0.033, 0.0354, 0.04, 0.0536, 0.06, 0.0644, 0.07, 0.0705, 0.074, 0.0774, 0.078, 0.0799, 0.079, 0.0780, 0.075, 0.0744, 0.07, 0.0694, 0.069, 0.0688, 0.07, 0.0795, 0.09, 0.0995, 0.1, 0.1121, 0.113, 0.1134, 0.112, + 0.1112, 0.11, 0.1069, 0.105, 0.1018, 0.1, 0.0993, 0.1, 0.1001, 0.11, 0.1147, 0.13, 0.1503, 0.16, 0.1815, 0.19, 0.1986, 0.2, 0.2058, 0.206, 0.2093, 0.21, 0.2114, 0.212, + 0.2132, 0.2134, 0.2137, 0.2139, 0.2139, 0.2138, 0.2137, 0.2134, 0.2133, 0.2132, 0.2131, 0.2132, 0.2132, 0.214, 0.2152, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L41_12_14spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0272, 0.03, 0.0306, 0.035, 0.0354, 0.04, 0.0536, 0.06, 0.0644, 0.07, 0.0705, 0.074, 0.0774, 0.078, 0.0799, 0.079, 0.0780, 0.075, 0.0744, 0.07, 0.0694, 0.069, 0.0688, 0.07, 0.0795, 0.09, 0.0995, 0.1, 0.1121, 0.113, 0.1134, 0.112, + 0.1112, 0.11, 0.1069, 0.105, 0.1018, 0.1, 0.0993, 0.11, 0.1101, 0.12, 0.1147, 0.13, 0.1503, 0.16, 0.1815, 0.19, 0.1986, 0.2, 0.2058, 0.206, 0.2093, 0.21, 0.2114, 0.212, + 0.2132, 0.2134, 0.2137, 0.2239, 0.2139, 0.2158, 0.2237, 0.2234, 0.2133, 0.2132, 0.2131, 0.2132, 0.2132, 0.214, 0.2152, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L10_0_m22spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0048, 0.006, 0.0077, 0.009, 0.0124, 0.015, 0.0238, 0.025, 0.0306, 0.033, 0.0356, 0.04, 0.0410, 0.042, 0.0442, 0.0443, 0.0443, 0.044, 0.0438, 0.043, 0.0422, 0.041, 0.0400, 0.038, 0.0363, 0.035, 0.0310, 0.03, 0.0250, 0.02, 0.0188, 0.015, 0.0130, 0.01, + 0.0073, 0.005, 0.0024, 0.0, -0.0004, -0.0005, -0.0014, 0.0, 0.0004, 0.001, 0.0057, 0.01, 0.0104, 0.012, 0.0130, 0.013, 0.0141, 0.0144, 0.0146, 0.015, 0.0151, 0.0155, + 0.0158, 0.016, 0.0162, 0.0162, 0.0161, 0.016, 0.0158, 0.0155, 0.0153, 0.015, 0.0149, 0.015, 0.0152, 0.016, 0.0162, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L38_60_8spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0621, 0.0625, 0.0627, 0.0627, 0.0627, 0.07, 0.0842, 0.09, 0.0982, 0.1, 0.1014, 0.102, 0.1024, 0.1, 0.0937, 0.08, 0.0780, 0.07, 0.0591, 0.05, 0.0416, 0.03, 0.0288, 0.025, 0.0210, 0.02, 0.0170, 0.016, 0.0150, 0.016, 0.0173, 0.02, 0.0226, 0.025, + 0.0263, 0.027, 0.0279, 0.029, 0.0298, 0.03, 0.0382, 0.07, 0.0962, 0.12, 0.2343, 0.3, 0.3551, 0.4, 0.4203, 0.43, 0.4476, 0.45, 0.4592, 0.46, 0.4651, 0.466, 0.4686, 0.469, + 0.4694, 0.48, 0.4706, 0.471, 0.4711, 0.4712, 0.4717, 0.472, 0.4721, 0.472, 0.4719, 0.473, 0.4745, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L49_85_39spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1217, 0.12, 0.1146, 0.11, 0.1016, 0.11, 0.1161, 0.12, 0.1275, 0.123, 0.1207, 0.11, 0.1072, 0.09, 0.0793, 0.06, 0.0447, 0.05, 0.0051, 0.0, -0.0289, -0.03, -0.0507, -0.055, -0.0582, -0.055, -0.0533, -0.05, -0.0417, -0.02, -0.0198, 0.0, 0.0081, 0.02, 0.0321, 0.04, + 0.0494, 0.05, 0.0614, 0.07, 0.0824, 0.1, 0.2039, 0.35, 0.4906, 0.6, 0.7408, 0.84, 0.8758, 0.9, 0.9322, 0.94, 0.9562, 0.96, 0.9675, 0.97, 0.9731, 0.974, 0.9738, 0.975, + 0.9766, 0.977, 0.9786, 0.98, 0.9814, 0.983, 0.9833, 0.983, 0.9822, 0.984, 0.9851, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L42_1_m18spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0312, 0.04, 0.0454, 0.06, 0.0676, 0.1, 0.1240, 0.14, 0.1575, 0.17, 0.1813, 0.19, 0.2081, 0.21, 0.2238, 0.223, 0.2249, 0.223, 0.2224, 0.22, 0.2149, 0.21, 0.2071, 0.205, 0.2014, 0.2, 0.1956, 0.19, 0.1811, 0.17, 0.1572, 0.14, 0.1316, 0.12, 0.1053, 0.1, + 0.0815, 0.07, 0.0682, 0.065, 0.0639, 0.07, 0.0744, 0.09, 0.1040, 0.11, 0.1304, 0.135, 0.1451, 0.15, 0.1513, 0.153, 0.1542, 0.155, 0.1571, 0.16, 0.1608, 0.161, 0.1628, 0.1625, + 0.1625, 0.162, 0.1610, 0.16, 0.1585, 0.157, 0.1569, 0.157, 0.1579, 0.16, 0.1630, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +const double ColorTemp::Colorlab_L48_19_m25spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0617, 0.07, 0.0822, 0.1, 0.1139, 0.15, 0.2009, 0.22, 0.2533, 0.27, 0.2882, 0.3, 0.3264, 0.33, 0.3452, 0.342, 0.3406, 0.335, 0.3301, 0.32, 0.3131, 0.3, 0.2953, 0.28, 0.2766, 0.26, 0.2542, 0.24, 0.2234, 0.2, 0.1866, 0.17, 0.1506, 0.13, 0.1139, 0.1, 0.0806, 0.07, + 0.0623, 0.06, 0.0591, 0.08, 0.0942, 0.14, 0.1841, 0.21, 0.2635, 0.28, 0.3069, 0.31, 0.3251, 0.33, 0.3331, 0.335, 0.3391, 0.34, 0.3455, 0.346, 0.3487, 0.3467, 0.3486, 0.347, + 0.3467, 0.345, 0.3432, 0.342, 0.3411, 0.342, 0.3425, 0.35, 0.3505, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L30_21_m25spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0291, 0.03, 0.0386, 0.04, 0.0533, 0.08, 0.0940, 0.1, 0.1187, 0.12, 0.1349, 0.14, 0.1524, 0.16, 0.1605, 0.16, 0.1574, 0.155, 0.1515, 0.15, 0.1428, 0.14, 0.1330, 0.13, 0.1204, 0.11, 0.1039, 0.09, 0.0852, 0.07, 0.0667, 0.05, + 0.0496, 0.04, 0.0326, 0.02, 0.0173, 0.01, 0.0089, 0.008, 0.0078, 0.005, 0.0265, 0.005, 0.0738, 0.1, 0.1155, 0.12, 0.1383, 0.14, 0.1478, 0.15, 0.1519, 0.154, 0.1548, 0.156, + 0.1579, 0.158, 0.1594, 0.1594, 0.1594, 0.159, 0.1585, 0.1575, 0.1570, 0.156, 0.1559, 0.156, 0.1566, 0.159, 0.1603, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L15_10_m15spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0079, 0.01, 0.0107, 0.012, 0.0149, 0.02, 0.0264, 0.03, 0.0334, 0.035, 0.0381, 0.04, 0.0431, 0.044, 0.0456, 0.045, 0.0449, 0.044, 0.0435, 0.042, 0.0412, 0.04, 0.0386, 0.036, 0.0355, 0.033, 0.0316, 0.03, 0.0268, 0.025, 0.0216, 0.02, 0.0167, 0.015, + 0.0118, 0.01, 0.0073, 0.006, 0.0049, 0.004, 0.0045, 0.008, 0.0092, 0.001, 0.0212, 0.003, 0.0318, 0.0033, 0.0376, 0.04, 0.0401, 0.042, 0.0411, 0.0411, 0.0419, 0.042, + 0.0428, 0.043, 0.0432, 0.0432, 0.0432, 0.043, 0.0429, 0.0426, 0.0425, 0.0423, 0.0422, 0.0423, 0.0424, 0.043, 0.0434, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L48_19_m25spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0617, 0.07, 0.0822, 0.1, 0.1339, 0.25, 0.2009, 0.22, 0.2533, 0.29, 0.2882, 0.333, 0.3264, 0.38, 0.3452, 0.362, 0.3406, 0.335, 0.3301, 0.32, 0.3131, 0.3, 0.2953, 0.28, 0.2766, 0.26, 0.2542, 0.24, 0.2234, 0.2, 0.1866, 0.17, 0.1506, 0.13, 0.1139, 0.1, 0.0806, 0.07, + 0.0623, 0.06, 0.0591, 0.08, 0.0942, 0.14, 0.1841, 0.21, 0.2635, 0.28, 0.3069, 0.31, 0.3251, 0.33, 0.3331, 0.335, 0.3391, 0.34, 0.3455, 0.346, 0.3487, 0.3467, 0.3486, 0.347, + 0.3467, 0.345, 0.3432, 0.342, 0.3411, 0.342, 0.3425, 0.35, 0.3505, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L30_21_m25spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0291, 0.03, 0.0386, 0.04, 0.0533, 0.08, 0.0940, 0.1, 0.1187, 0.12, 0.1349, 0.15, 0.1624, 0.18, 0.1805, 0.18, 0.1774, 0.165, 0.1715, 0.15, 0.1428, 0.14, 0.1330, 0.13, 0.1204, 0.11, 0.1039, 0.09, 0.0852, 0.07, 0.0667, 0.05, + 0.0496, 0.04, 0.0326, 0.02, 0.0173, 0.01, 0.0089, 0.008, 0.0078, 0.005, 0.0265, 0.005, 0.0738, 0.1, 0.1155, 0.12, 0.1383, 0.14, 0.1478, 0.15, 0.1519, 0.154, 0.1548, 0.156, + 0.1579, 0.158, 0.1594, 0.1594, 0.1594, 0.159, 0.1585, 0.1575, 0.1570, 0.156, 0.1559, 0.156, 0.1566, 0.159, 0.1603, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L15_10_m15spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0079, 0.01, 0.0107, 0.012, 0.0149, 0.02, 0.0364, 0.04, 0.0434, 0.045, 0.0481, 0.04, 0.0431, 0.044, 0.0456, 0.045, 0.0449, 0.044, 0.0435, 0.042, 0.0412, 0.04, 0.0386, 0.036, 0.0355, 0.033, 0.0316, 0.03, 0.0268, 0.025, 0.0216, 0.02, 0.0167, 0.015, + 0.0118, 0.01, 0.0073, 0.006, 0.0049, 0.004, 0.0045, 0.008, 0.0092, 0.001, 0.0212, 0.003, 0.0318, 0.0033, 0.0376, 0.04, 0.0401, 0.042, 0.0411, 0.0411, 0.0419, 0.042, + 0.0528, 0.053, 0.0532, 0.0532, 0.0532, 0.043, 0.0429, 0.0426, 0.0425, 0.0423, 0.0422, 0.0423, 0.0424, 0.043, 0.0434, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L60_26_m25spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1040, 0.12, 0.1343, 0.15, 0.1812, 0.25, 0.3138, 0.35, 0.3938, 0.42, 0.4460, 0.48, 0.5027, 0.51, 0.5290, 0.52, 0.5196, 0.51, 0.5009, 0.49, 0.4726, 0.46, 0.4448, 0.43, 0.4186, 0.4, 0.3893, 0.36, 0.3469, 0.3, 0.2943, 0.28, 0.2426, 0.2, 0.1892, 0.16, 0.1403, 0.13, + 0.1136, 0.112, 0.1104, 0.15, 0.1729, 0.2, 0.3309, 0.4, 0.4702, 0.5, 0.5463, 0.56, 0.5782, 0.58, 0.5922, 0.6, 0.6022, 0.61, 0.6123, 0.615, 0.6171, 0.616, 0.6173, 0.616, + 0.6145, 0.61, 0.6095, 0.62, 0.6064, 0.607, 0.6085, 0.61, 0.6208, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_26_m45spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0615, 0.07, 0.0862, 0.1, 0.1249, 0.2, 0.2272, 0.25, 0.2893, 0.3, 0.3312, 0.35, 0.3766, 0.38, 0.3991, 0.395, 0.3933, 0.39, 0.3810, 0.37, 0.3613, 0.35, 0.3361, 0.3, 0.2979, 0.26, 0.2449, 0.2, 0.1884, 0.15, 0.1364, 0.1, 0.0895, 0.06, 0.0437, 0.04, + 0.0034, 0.0, -0.0191, -0.002, -0.0235, 0.0, 0.0145, 0.1, 0.1129, 0.15, 0.2000, 0.22, 0.2475, 0.25, 0.2673, 0.27, 0.2757, 0.28, 0.2822, 0.285, 0.2894, 0.29, + 0.2933, 0.293, 0.2932, 0.292, 0.2908, 0.29, 0.2865, 0.286, 0.2837, 0.285, 0.2855, 0.29, 0.2947, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_26_m45spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0615, 0.07, 0.0862, 0.1, 0.1249, 0.2, 0.2272, 0.25, 0.2893, 0.3, 0.3312, 0.35, 0.3766, 0.38, 0.3991, 0.395, 0.3933, 0.39, 0.3810, 0.37, 0.3613, 0.35, 0.3361, 0.3, 0.2979, 0.26, 0.2449, 0.2, 0.1884, 0.15, 0.1364, 0.1, 0.0895, 0.06, 0.0437, 0.04, + 0.0034, 0.0, -0.0191, -0.002, -0.0235, 0.0, 0.0145, 0.1, 0.1129, 0.15, 0.2000, 0.22, 0.2475, 0.25, 0.2673, 0.27, 0.2757, 0.28, 0.2822, 0.285, 0.2894, 0.29, + 0.2933, 0.293, 0.2932, 0.292, 0.2908, 0.29, 0.2865, 0.286, 0.2837, 0.285, 0.2855, 0.29, 0.2947, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L20_10_m45spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0196, 0.02, 0.0309, 0.04, 0.0487, 0.08, 0.0931, 0.1, 0.1199, 0.12, 0.1388, 0.14, 0.1595, 0.16, 0.1708, 0.17, 0.1699, 0.167, 0.1665, 0.16, 0.1595, 0.15, 0.1489, 0.14, 0.1303, 0.12, 0.1032, 0.09, 0.0751, 0.06, 0.0499, 0.03, 0.0273, 0.04, + 0.0056, 0.0, -0.0131, -0.02, -0.0237, -0.025, -0.0268, -0.02, -0.0165, 0.01, 0.0117, 0.02, 0.0369, 0.04, 0.0507, 0.051, 0.0564, 0.057, 0.0588, 0.06, 0.0610, 0.062, + 0.0639, 0.064, 0.0656, 0.0655, 0.0654, 0.065, 0.0642, 0.063, 0.0622, 0.061, 0.0608, 0.061, 0.0617, 0.064, 0.0656, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L20_10_m45spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0196, 0.02, 0.0309, 0.04, 0.0487, 0.08, 0.0931, 0.1, 0.1299, 0.14, 0.1588, 0.16, 0.1795, 0.18, 0.1908, 0.18, 0.1799, 0.187, 0.1665, 0.16, 0.1595, 0.15, 0.1489, 0.14, 0.1303, 0.12, 0.1032, 0.09, 0.0751, 0.06, 0.0499, 0.03, 0.0273, 0.04, + 0.0056, 0.0, 0., 0., 0., 0., 0., 0., 0., 0.01, 0.0117, 0.02, 0.0369, 0.04, 0.0507, 0.051, 0.0564, 0.057, 0.0588, 0.06, 0.0610, 0.062, + 0.0639, 0.064, 0.0656, 0.0655, 0.0654, 0.065, 0.0642, 0.063, 0.0622, 0.061, 0.0608, 0.061, 0.0617, 0.064, 0.0656, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L20_10_m45spect3[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0196, 0.02, 0.0309, 0.04, 0.0387, 0.08, 0.0831, 0.1, 0.1099, 0.11, 0.1188, 0.11, 0.1395, 0.14, 0.1508, 0.16, 0.1599, 0.157, 0.1465, 0.16, 0.1595, 0.15, 0.1489, 0.14, 0.1303, 0.12, 0.1032, 0.09, 0.0751, 0.06, 0.0499, 0.03, 0.0273, 0.04, + 0.0056, 0.0, -0.0131, -0.02, -0.0237, -0.025, -0.0268, -0.02, -0.0165, 0.01, 0.0117, 0.02, 0.0369, 0.04, 0.0507, 0.051, 0.0564, 0.057, 0.0588, 0.06, 0.0610, 0.062, + 0.0639, 0.064, 0.0656, 0.0655, 0.0654, 0.065, 0.0642, 0.063, 0.0622, 0.061, 0.0608, 0.061, 0.0617, 0.064, 0.0656, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::ColorBlueSkyK3_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.4939, 0.435, 0.3859, 0.403, 0.4298, 0.456, 0.4880, 0.525, 0.5528, 0.572, 0.5672, 0.578, 0.5880, 0.595, 0.5994, 0.602, 0.6029, 0.600, 0.5981, 0.588, 0.5808, 0.571, 0.5618, 0.551, + 0.5369, 0.503, 0.4819, 0.452, 0.4190, 0.404, 0.3921, 0.386, 0.3815, 0.364, 0.3400, 0.321, 0.2991, 0.298, 0.2977, 0.304, 0.3090, 0.309, 0.3088, 0.302, 0.2930, 0.284, 0.2753, 0.271, + 0.2660, 0.265, 0.2636, 0.266, 0.2678, 0.275, 0.2811, 0.290, 0.2995, 0.306, 0.3125, 0.314, 0.3153, 0.313, 0.3111, 0.307, 0.3006, 0.298, .2952, 0.306, 0.3116, 0.325, 0.3584, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::ColorBlueSkyK9_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.4058, 0.441, 0.4734, 0.562, 0.5572, 0.65, 0.6051, 0.643, 0.7098, 0.725, 0.7392, 0.735, 0.7118, 0.712, 0.7135, 0.711, 0.7071, 0.702, 0.6938, 0.681, 0.6702, 0.663, 0.6511, 0.642, + 0.6282, 0.604, 0.5732, 0.542, 0.5103, 0.499, 0.4913, 0.492, 0.4926, 0.475, 0.4604, 0.452, 0.4341, 0.453, 0.4648, 0.496, 0.5111, 0.525, 0.5335, 0.531, 0.5283, 0.522, 0.5154, 0.512, + 0.5098, 0.509, 0.5093, 0.513, 0.5151, 0.523, 0.5309, 0.544, 0.5520, 0.562, 0.5642, 0.565, 0.5657, 0.562, 0.5598, 0.554, 0.5489, 0.546, 0.5430, 0.553, 0.5601, 0.576, 0.6067, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::ColorBlueSkyC4_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3280, 0.2950, 0.2611, 0.334, 0.3981, 0.453, 0.4946, 0.548, 0.5692, 0.585, 0.5932, 0.611, 0.6512, 0.6621, 0.6507, 0.631, 0.6310, 0.625, 0.6181, 0.607, 0.5847, 0.563, 0.5488, 0.524, + 0.5066, 0.465, 0.4358, 0.398, 0.3585, 0.336, 0.3151, 0.302, 0.2855, 0.254, 0.2309, 0.203, 0.1786, 0.166, 0.1546, 0.149, 0.1443, 0.143, 0.1359, 0.131, 0.1245, 0.123, 0.115, 0.114, + 0.1120, 0.112, 0.1127, 0.114, 0.1169, 0.122, 0.1275, 0.133, 0.1421, 0.147, 0.1504, 0.149, 0.1488, 0.145, 0.1416, 0.136, 0.1303, 0.127, 0.1241, 0.132, 0.1355, 0.155, 0.1739, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::ColorBlueSkyC14_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.5697, 0.511, 0.4660, 0.481, 0.5500, 0.588, 0.5560, 0.633, 0.6572, 0.682, 0.6902, 0.693, 0.6932, 0.684, 0.6950, 0.699, 0.7069, 0.717, 0.7292, 0.735, 0.7488, 0.757, 0.7678, 0.773, + 0.7786, 0.776, 0.7721, 0.765, 0.7544, 0.746, 0.7394, 0.731, 0.7232, 0.704, 0.6889, 0.674, 0.6446, 0.631, 0.6171, 0.606, 0.5966, 0.585, 0.5743, 0.5570, 0.5425, 0.529, 0.5093, 0.498, + 0.4884, 0.482, 0.4784, 0.478, 0.4774, 0.481, 0.4822, 0.487, 0.4944, 0.503, 0.5076, 0.512, 0.5186, 0.522, 0.5268, 0.529, 0.5303, 0.532, 0.5332, 0.539, 0.5454, 0.565, 0.5760, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::ColorBlueSkyE4_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1483, 0.161, 0.1756, 0.213, 0.2536, 0.283, 0.3584, 0.391, 0.3965, 0.437, 0.4589, 0.495, 0.4946, 0.526, 0.5427, 0.569, 0.5239, 0.522, 0.5193, 0.508, 0.4917, 0.476, 0.4569, 0.431, + 0.4123, 0.375, 0.3422, 0.309, 0.2672, 0.242, 0.2179, 0.208, 0.1820, 0.162, 0.1356, 0.113, 0.0972, 0.091, 0.0784, 0.073, 0.0698, 0.066, 0.0646, 0.062, 0.0592, 0.057, 0.0556, 0.055, + 0.0546, 0.055, 0.0551, 0.056, 0.0571, 0.059, 0.0611, 0.064, 0.0670, 0.069, 0.0701, 0.070, 0.0692, 0.067, 0.0661, 0.065, 0.0620, 0.061, 0.0606, 0.063, 0.0663, 0.072, 0.0834, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::ColorBlueSkyM1_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3100, 0.303, 0.2922, 0.322, 0.3514, 0.376, 0.4342, 0.484, 0.4843, 0.497, 0.4969, 0.497, 0.5502, 0.557, 0.5633, 0.556, 0.5187, 0.518, 0.5179, 0.511, 0.5057, 0.497, 0.4928, 0.483, + 0.4729, 0.454, 0.4235, 0.398, 0.3643, 0.346, 0.3371, 0.329, 0.3234, 0.301, 0.2827, 0.263, 0.2418, 0.235, 0.2338, 0.235, 0.2370, 0.236, 0.2329, 0.226, 0.2184, 0.213, 0.2028, 0.198, + 0.1958, 0.194, 0.1937, 0.196, 0.1973, 0.203, 0.2084, 0.212, 0.2244, 0.233, 0.2351, 0.236, 0.2372, 0.234, 0.2331, 0.229, 0.2239, 0.222, 0.2178, 0.224, 0.2319, 0.251, 0.2731, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::ColorBlueSky2B1_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.5277, 0.485, 0.4431, 0.476, 0.5472, 0.599, 0.5920, 0.667, 0.6887, 0.693, 0.6950, 0.721, 0.7401, 0.737, 0.7640, 0.718, 0.7202, 0.720, 0.7193, 0.713, 0.7053, 0.695, 0.6891, 0.674, + 0.6657, 0.632, 0.6181, 0.587, 0.5614, 0.543, 0.5312, 0.521, 0.5101, 0.483, 0.4589, 0.431, 0.4045, 0.398, 0.3857, 0.385, 0.3826, 0.376, 0.3751, 0.364, 0.3574, 0.346, 0.3393, 0.335, + 0.3314, 0.331, 0.3304, 0.333, 0.3368, 0.346, 0.3523, 0.363, 0.3742, 0.382, 0.3874, 0.385, 0.3883, 0.384, 0.3818, 0.375, 0.3693, 0.364, 0.3616, 0.374, 0.3800, 0.396, 0.4324, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::ColorBlueSkyT7_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.1943, 0.256, 0.3199, 0.376, 0.4836, 0.554, 0.5843, 0.592, 0.6643, 0.661, 0.6899, 0.694, 0.6939, 0.708, 0.7525, 0.756, 0.7329, 0.741, 0.7482, 0.751, 0.7527, 0.752, 0.7514, 0.745, + 0.7383, 0.721, 0.7028, 0.675, 0.6526, 0.631, 0.6034, 0.589, 0.5500, 0.512, 0.4708, 0.432, 0.3848, 0.342, 0.3268, 0.311, 0.2929, 0.282, 0.2712, 0.261, 0.2493, 0.236, 0.2316, 0.227, + 0.2243, 0.223, 0.2234, 0.229, 0.2288, 0.235, 0.2436, 0.255, 0.2640, 0.268, 0.2762, 0.277, 0.2767, 0.272, 0.2693, 0.263, 0.2566, 0.254, 0.2489, 0.255, 0.2665, 0.275, 0.3165, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::ColorBlueSkyU19_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.5829, 0.534, 0.4865, 0.489, 0.5227, 0.552, 0.5890, 0.633, 0.6621, 0.661, 0.6832, 0.682, 0.6928, 0.694, 0.6932, 0.687, 0.6989, 0.688, 0.6884, 0.683, 0.6771, 0.671, 0.6648, 0.665, + 0.6465, 0.622, 0.6038, 0.583, 0.5524, 0.542, 0.5297, 0.523, 0.5194, 0.492, 0.4797, 0.451, 0.4387, 0.436, 0.4356, 0.442, 0.4455, 0.445, 0.4444, 0.432, 0.4282, 0.413, 0.4094, 0.404, + 0.4009, 0.400, 0.3992, 0.402, 0.4046, 0.411, 0.4185, 0.426, 0.4385, 0.446, 0.4515, 0.452, 0.4545, 0.452, 0.4505, 0.446, 0.4411, 0.438, 0.4368, 0.443, 0.4539, 0.467, 0.5013, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::ColorBlueSkyU2_spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.3594, 0.345, 0.3625, 0.363, 0.3614, 0.376, 0.3854, 0.397, 0.4497, 0.484, 0.4960, 0.496, 0.4990, 0.497, 0.4993, 0.494, 0.5302, 0.537, 0.5434, 0.538, 0.5476, 0.564, 0.5745, 0.583, + 0.5940, 0.593, 0.5901, 0.580, 0.5703, 0.563, 0.5545, 0.546, 0.5384, 0.521, 0.5029, 0.478, 0.4592, 0.444, 0.4334, 0.421, 0.4149, 0.408, 0.3947, 0.378, 0.3657, 0.352, 0.3363, 0.324, + 0.3177, 0.313, 0.3087, 0.308, 0.3077, 0.310, 0.3123, 0.317, 0.3231, 0.329, 0.3351, 0.339, 0.3454, 0.348, 0.3520, 0.353, 0.3545, 0.355, 0.3562, 0.359, 0.3674, 0.375, 0.3976, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_1_m40spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0411, 0.05, 0.0646, 0.09, 0.1016, 0.15, 0.1929, 0.22, 0.2476, 0.26, 0.2868, 0.3, 0.3304, 0.34, 0.3556, 0.356, 0.3564, 0.352, 0.3519, 0.34, 0.3395, 0.33, 0.3223, 0.3, 0.2967, 0.28, 0.2606, 0.23, 0.2170, 0.19, 0.1700, 0.15, 0.1245, 0.1, 0.0798, 0.06, + 0.0405, 0.03, 0.0183, 0.015, 0.0110, 0.02, 0.0267, 0.05, 0.0715, 0.1, 0.1117, 0.12, 0.1339, 0.14, 0.1432, 0.145, 0.1473, 0.15, 0.1516, 0.155, 0.1574, 0.16, 0.1608, 0.1605, + 0.1602, 0.16, 0.1578, 0.155, 0.1535, 0.153, 0.1507, 0.152, 0.1525, 0.158, 0.1605, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L30_4_m30spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0229, 0.03, 0.0346, 0.04, 0.0531, 0.08, 0.0995, 0.11, 0.1274, 0.13, 0.1471, 0.15, 0.1690, 0.17, 0.1813, 0.182, 0.1812, 0.18, 0.1784, 0.175, 0.1716, 0.17, 0.1627, 0.16, 0.1501, 0.14, 0.1326, 0.12, 0.1112, 0.1, 0.0880, 0.07, 0.0655, 0.05, + 0.0433, 0.03, 0.0237, 0.02, 0.0126, 0.009, 0.0092, 0.01, 0.0190, 0.03, 0.0460, 0.06, 0.0701, 0.075, 0.0834, 0.085, 0.0889, 0.09, 0.0914, 0.092, 0.0937, 0.095, 0.0967, 0.097, + 0.0984, 0.0982, 0.0982, 0.098, 0.0970, 0.096, 0.0949, 0.094, 0.0935, 0.094, 0.0944, 0.097, 0.0985, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L8_11_m25spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0057, 0.007, 0.0084, 0.01, 0.0126, 0.02, 0.0234, 0.025, 0.0300, 0.032, 0.0345, 0.036, 0.0395, 0.04, 0.0420, 0.042, 0.0415, 0.041, 0.0404, 0.04, 0.0385, 0.037, 0.0358, 0.034, 0.0314, 0.03, 0.0250, 0.02, 0.0184, 0.015, 0.0126, 0.01, + 0.0073, 0.005, 0.0022, 0.0, -0.0022, -0.003, -0.0047, -0.005, -0.0053, -0.003, -0.0019, 0.0, 0.0070, 0.01, 0.0149, 0.016, 0.0192, 0.02, 0.0210, 0.022, 0.0217, 0.022, 0.0224, 0.0224, + 0.0231, 0.0234, 0.0235, 0.0235, 0.0235, 0.0233, 0.0232, 0.023, 0.0227, 0.0225, 0.0224, 0.0225, 0.0226, 0.023, 0.0236, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +const double ColorTemp::Colorlab_L40_1_m40spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0411, 0.05, 0.0686, 0.09, 0.1016, 0.15, 0.1929, 0.22, 0.2776, 0.28, 0.2968, 0.34, 0.3804, 0.39, 0.3756, 0.356, 0.3564, 0.352, 0.3519, 0.34, 0.3395, 0.33, 0.3223, 0.3, 0.2967, 0.28, 0.2606, 0.23, 0.2170, 0.19, 0.1700, 0.15, 0.1245, 0.1, 0.0798, 0.06, + 0.0405, 0.03, 0.0183, 0.015, 0.0110, 0.02, 0.0267, 0.05, 0.0715, 0.1, 0.1117, 0.12, 0.1339, 0.14, 0.1432, 0.145, 0.1473, 0.15, 0.1516, 0.155, 0.1574, 0.16, 0.1608, 0.1605, + 0.1602, 0.16, 0.1578, 0.155, 0.1535, 0.153, 0.1507, 0.152, 0.1525, 0.158, 0.1605, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L30_4_m30spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0229, 0.03, 0.0346, 0.04, 0.0531, 0.08, 0.0995, 0.11, 0.1274, 0.13, 0.1871, 0.19, 0.1990, 0.21, 0.2013, 0.212, 0.2012, 0.18, 0.1784, 0.175, 0.1716, 0.17, 0.1627, 0.16, 0.1501, 0.14, 0.1326, 0.12, 0.1112, 0.1, 0.0880, 0.07, 0.0655, 0.05, + 0.0433, 0.03, 0.0237, 0.02, 0.0126, 0.009, 0.0092, 0.01, 0.0190, 0.03, 0.0460, 0.06, 0.0701, 0.075, 0.0834, 0.085, 0.0889, 0.09, 0.0914, 0.092, 0.0937, 0.095, 0.0967, 0.097, + 0.0984, 0.0982, 0.0982, 0.098, 0.0970, 0.096, 0.0949, 0.094, 0.0935, 0.094, 0.0944, 0.097, 0.0985, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L8_11_m25spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0057, 0.007, 0.0094, 0.01, 0.0126, 0.02, 0.0234, 0.045, 0.0300, 0.032, 0.0445, 0.036, 0.0395, 0.04, 0.0440, 0.042, 0.0415, 0.041, 0.0404, 0.04, 0.0455, 0.037, 0.0358, 0.034, 0.0314, 0.03, 0.0250, 0.02, 0.0184, 0.015, 0.0126, 0.01, + 0.0073, 0.005, 0.0022, 0.0, -0.0022, -0.003, -0.0047, -0.005, -0.0053, -0.003, -0.0019, 0.0, 0.0070, 0.01, 0.0149, 0.016, 0.0192, 0.02, 0.0210, 0.022, 0.0217, 0.022, 0.0224, 0.0224, + 0.0231, 0.0234, 0.0235, 0.0235, 0.0235, 0.0233, 0.0232, 0.023, 0.0227, 0.0225, 0.0224, 0.0225, 0.0226, 0.023, 0.0236, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + +const double ColorTemp::Colorlab_L26_m8_m25spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0133, 0.02, 0.0223, 0.03, 0.0365, 0.05, 0.0706, 0.08, 0.0908, 0.1, 0.1057, 0.11, 0.1225, 0.13, 0.1328, 0.133, 0.1343, 0.134, 0.1337, 0.1232, 0.1300, 0.126, 0.1247, 0.12, 0.1174, 0.11, 0.1072, 0.1, 0.0930, 0.08, 0.0757, 0.06, 0.0583, 0.05, + 0.0410, 0.03, 0.0258, 0.02, 0.0172, 0.015, 0.0139, 0.015, 0.0166, 0.02, 0.0259, 0.03, 0.0344, 0.036, 0.0392, 0.04, 0.0412, 0.042, 0.0421, 0.043, 0.0435, 0.044, + 0.0456, 0.046, 0.0468, 0.0465, 0.0465, 0.046, 0.0455, 0.044, 0.0439, 0.043, 0.0428, 0.043, 0.0435, 0.045, 0.0465, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L26_m8_m25spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0133, 0.02, 0.0223, 0.03, 0.0385, 0.07, 0.0806, 0.09, 0.1008, 0.12, 0.1357, 0.13, 0.1425, 0.14, 0.1428, 0.143, 0.1443, 0.134, 0.1337, 0.1232, 0.1300, 0.126, 0.1247, 0.12, 0.1174, 0.11, 0.1072, 0.1, 0.0930, 0.08, 0.0757, 0.06, 0.0583, 0.05, + 0.0410, 0.03, 0.0258, 0.02, 0.0172, 0.015, 0.0139, 0.015, 0.0166, 0.02, 0.0259, 0.03, 0.0344, 0.036, 0.0392, 0.04, 0.0412, 0.042, 0.0421, 0.043, 0.0435, 0.044, + 0.0456, 0.046, 0.0468, 0.0465, 0.0465, 0.046, 0.0455, 0.044, 0.0439, 0.043, 0.0428, 0.043, 0.0435, 0.045, 0.0465, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L26_m8_m25spect3[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0133, 0.02, 0.0223, 0.03, 0.0265, 0.05, 0.0606, 0.08, 0.0808, 0.09, 0.1057, 0.10, 0.1125, 0.12, 0.1228, 0.123, 0.1243, 0.124, 0.1337, 0.1232, 0.1300, 0.126, 0.1247, 0.12, 0.1174, 0.11, 0.1072, 0.1, 0.0930, 0.08, 0.0757, 0.06, 0.0583, 0.05, + 0.0410, 0.03, 0.0258, 0.02, 0.0172, 0.015, 0.0139, 0.015, 0.0166, 0.02, 0.0259, 0.03, 0.0344, 0.036, 0.0392, 0.04, 0.0412, 0.042, 0.0421, 0.043, 0.0435, 0.044, + 0.0456, 0.046, 0.0468, 0.0465, 0.0465, 0.046, 0.0455, 0.044, 0.0439, 0.043, 0.0428, 0.043, 0.0435, 0.045, 0.0465, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L22_1_m42spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0170, 0.02, 0.0284, 0.03, 0.0463, 0.06, 0.0898, 0.1, 0.1160, 0.12, 0.1348, 0.14, 0.1557, 0.16, 0.1678, 0.168, 0.1680, 0.167, 0.1658, 0.164, 0.1600, 0.155, 0.1507, 0.14, 0.1346, 0.12, 0.1109, 0.1, 0.0853, 0.07, 0.0608, 0.05, 0.0380, 0.02, 0.0161, 0.0, + -0.0028, -0.01, -0.0136, -0.015, -0.0172, -0.012, -0.0104, 0.0, 0.0095, 0.02, 0.0274, 0.03, 0.0372, 0.04, 0.0413, 0.042, 0.0431, 0.044, 0.0450, 0.046, 0.0477, 0.048, 0.0493, 0.049, + 0.0490, 0.048, 0.0478, 0.046, 0.0457, 0.045, 0.0444, 0.045, 0.0453, 0.048, 0.0490, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L22_1_m42spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0170, 0.02, 0.0284, 0.03, 0.0463, 0.06, 0.0898, 0.1, 0.1160, 0.12, 0.1548, 0.16, 0.1657, 0.17, 0.1778, 0.168, 0.1680, 0.167, 0.1658, 0.164, 0.1600, 0.155, 0.1507, 0.14, 0.1346, 0.12, 0.1109, 0.1, 0.0853, 0.07, 0.0608, 0.05, 0.0380, 0.02, 0.0161, 0.0, + -0.0028, -0.01, -0.0136, -0.015, -0.0172, -0.012, -0.0104, 0.0, 0.0095, 0.02, 0.0274, 0.03, 0.0372, 0.04, 0.0413, 0.042, 0.0431, 0.044, 0.0450, 0.046, 0.0477, 0.048, 0.0493, 0.049, + 0.0490, 0.048, 0.0478, 0.046, 0.0457, 0.045, 0.0444, 0.045, 0.0453, 0.048, 0.0490, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L22_1_m42spect3[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0170, 0.02, 0.0284, 0.03, 0.0463, 0.06, 0.0898, 0.1, 0.1160, 0.12, 0.1548, 0.16, 0.1657, 0.17, 0.1778, 0.168, 0.1680, 0.167, 0.1658, 0.164, 0.1600, 0.155, 0.1507, 0.14, 0.1346, 0.12, 0.1109, 0.1, 0.0853, 0.07, 0.0608, 0.05, 0.0380, 0.02, 0.0161, 0.0, + 0.0, 0.0, 0.01, 0.01, 0.01, 0.01, 0.0, 0.0, 0.0095, 0.02, 0.0274, 0.03, 0.0372, 0.04, 0.0413, 0.042, 0.0431, 0.044, 0.0450, 0.046, 0.0477, 0.048, 0.0493, 0.049, + 0.0490, 0.048, 0.0478, 0.046, 0.0457, 0.045, 0.0444, 0.045, 0.0453, 0.048, 0.0490, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L22_1_m42spect4[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0170, 0.02, 0.0284, 0.03, 0.0463, 0.06, 0.0898, 0.1, 0.1160, 0.12, 0.1548, 0.16, 0.1657, 0.17, 0.1778, 0.168, 0.1680, 0.167, 0.1658, 0.164, 0.1600, 0.155, 0.1507, 0.14, 0.1346, 0.12, 0.1109, 0.1, 0.0853, 0.07, 0.0608, 0.05, 0.0380, 0.02, 0.0161, 0.0, + 0.0, 0.0, 0.01, 0.01, 0.01, 0.01, 0.0, 0.0, 0.0095, 0.02, 0.0274, 0.03, 0.0372, 0.04, 0.0413, 0.042, 0.0431, 0.044, 0.0450, 0.046, 0.0477, 0.048, 0.0493, 0.049, + 0.0490, 0.048, 0.0478, 0.046, 0.0457, 0.045, 0.0444, 0.045, 0.0453, 0.048, 0.0490, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L27_m1_m47spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0237, 0.03, 0.0400, 0.05, 0.0657, 0.09, 0.1278, 0.14, 0.1651, 0.18, 0.1921, 0.21, 0.2221, 0.23, 0.2395, 0.24, 0.2400, 0.24, 0.2371, 0.23, 0.2289, 0.22, 0.2159, 0.2, 0.1930, 0.18, 0.1595, 0.14, 0.1230, 0.1, + 0.0879, 0.07, 0.0553, 0.04, 0.0239, 0.0, -0.0034, -0.01, -0.0188, -0.02, -0.0241, -0.02, -0.0151, 0.0, 0.0117, 0.02, 0.0359, 0.04, 0.0492, 0.05, 0.0548, 0.055, 0.0571, 0.058, + 0.0598, 0.06, 0.0637, 0.065, 0.0660, 0.066, 0.0656, 0.064, 0.0638, 0.062, 0.0608, 0.06, 0.0589, 0.06, 0.0601, 0.065, 0.0655, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L27_m1_m47spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0237, 0.03, 0.0450, 0.05, 0.0657, 0.09, 0.1478, 0.16, 0.1751, 0.21, 0.2221, 0.23, 0.2421, 0.24, 0.2495, 0.25, 0.2500, 0.25, 0.2471, 0.24, 0.2389, 0.22, 0.2159, 0.2, 0.1930, 0.18, 0.1595, 0.14, 0.1230, 0.1, + 0.0879, 0.07, 0.0553, 0.04, 0.0239, 0.0, -0.0034, -0.01, -0.0188, -0.02, -0.0241, -0.02, -0.0151, 0.0, 0.0117, 0.02, 0.0359, 0.04, 0.0492, 0.05, 0.0548, 0.055, 0.0571, 0.058, + 0.0598, 0.06, 0.0637, 0.065, 0.0660, 0.066, 0.0656, 0.064, 0.0638, 0.062, 0.0608, 0.06, 0.0589, 0.06, 0.0601, 0.065, 0.0655, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_30_m30spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0552, 0.06, 0.0713, 0.08, 0.0964, 0.12, 0.1678, 0.19, 0.2112, 0.22, 0.2391, 0.25, 0.2689, 0.275, 0.2818, 0.28, 0.2749, 0.27, 0.2630, 0.25, 0.2464, 0.23, 0.2282, 0.21, 0.2049, 0.19, 0.1748, 0.16, 0.1415, 0.12, 0.1097, 0.1, + 0.0810, 0.07, 0.0523, 0.04, 0.0265, 0.02, 0.0123, 0.012, 0.0113, 0.03, 0.0487, 0.1, 0.1428, 0.18, 0.2257, 0.25, 0.2708, 0.28, 0.2897, 0.29, 0.2977, 0.3, 0.3033, 0.304, + 0.3088, 0.31, 0.3115, 0.3116, 0.3117, 0.3108, 0.3102, 0.31, 0.3076, 0.306, 0.3059, 0.306, 0.3070, 0.31, 0.3136, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_30_m30spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0552, 0.06, 0.0713, 0.08, 0.0864, 0.1, 0.1478, 0.19, 0.212, 0.22, 0.2391, 0.24, 0.2589, 0.255, 0.2818, 0.28, 0.2749, 0.27, 0.2630, 0.25, 0.2464, 0.23, 0.2282, 0.21, 0.2049, 0.19, 0.1748, 0.16, 0.1415, 0.12, 0.1097, 0.1, + 0.0810, 0.07, 0.0523, 0.04, 0.0265, 0.02, 0.0123, 0.012, 0.0113, 0.03, 0.0487, 0.1, 0.1428, 0.18, 0.2257, 0.25, 0.2708, 0.28, 0.2897, 0.29, 0.2977, 0.3, 0.3033, 0.304, + 0.3088, 0.3, 0.3015, 0.3016, 0.3017, 0.3108, 0.3002, 0.29, 0.2876, 0.286, 0.2859, 0.286, 0.2870, 0.28, 0.2836, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_20_m35spect[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0502, .06, 0.0694, 0.08, 0.0994, 0.13, 0.1794, 0.2, 0.2277, 0.25, 0.2604, 0.28, 0.2959, 0.3, 0.3137, 0.31, 0.3096, 0.305, 0.3004, 0.29, 0.2852, 0.27, 0.2669, 0.25, 0.2418, 0.22, 0.2080, 0.19, + 0.1696, 0.15, 0.1312, 0.1, 0.0955, 0.08, 0.0602, 0.04, 0.0288, 0.02, 0.0113, 0.01, 0.0078, 0.03, 0.0373, 0.1, 0.1136, 0.15, 0.1811, 0.2, 0.2180, 0.22, 0.2334, 0.24, + 0.2400, 0.241, 0.2452, 0.25, 0.2508, 0.252, 0.2538, 0.254, 0.2537, 0.252, 0.2519, 0.25, 0.2485, 0.246, 0.2464, 0.247, 0.2478, 0.26, 0.2550, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + +const double ColorTemp::Colorlab_L40_20_m35spect2[97] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0502, .06, 0.0694, 0.08, 0.0994, 0.13, 0.1794, 0.2, 0.2277, 0.25, 0.2604, 0.28, 0.2959, 0.3, 0.3137, 0.31, 0.2896, 0.285, 0.2804, 0.27, 0.2652, 0.25, 0.2469, 0.25, 0.2418, 0.22, 0.2080, 0.19, + 0.1696, 0.15, 0.1312, 0.1, 0.0955, 0.08, 0.0602, 0.04, 0.0288, 0.02, 0.0113, 0.01, 0.0078, 0.03, 0.0373, 0.1, 0.1136, 0.15, 0.1811, 0.2, 0.2180, 0.22, 0.2334, 0.24, + 0.2400, 0.241, 0.2452, 0.23, 0.2308, 0.232, 0.2338, 0.234, 0.2337, 0.232, 0.2319, 0.23, 0.2385, 0.236, 0.2364, 0.237, 0.2378, 0.24, 0.2450, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 +}; + + + +//3 A3 0.0552 0.0713 0.0964 0.1678 0.2112 0.2391 0.2689 0.2818 0.2749 0.2630 0.2464 0.2282 0.2049 0.1748 0.1415 0.1097 0.0810 0.0523 0.0265 0.0123 0.0113 0.0487 0.1428 0.2257 0.2708 0.2897 0.2977 0.3033 0.3088 0.3115 0.3117 0.3102 0.3076 0.3059 0.3070 0.3136 +//4 A4 0.0502 0.0694 0.0994 0.1794 0.2277 0.2604 0.2959 0.3137 0.3096 0.3004 0.2852 0.2669 0.2418 0.2080 0.1696 0.1312 0.0955 0.0602 0.0288 0.0113 0.0078 0.0373 0.1136 0.1811 0.2180 0.2334 0.2400 0.2452 0.2508 0.2538 0.2537 0.2519 0.2485 0.2464 0.2478 0.2550 + + /* * Name: XYZtoCorColorTemp.c * @@ -2686,7 +4303,7 @@ int ColorTemp::XYZtoCorColorTemp(double x0, double y0, double z0, double &temp) return 0; /* success */ } -void ColorTemp::cieCAT02(double Xw, double Yw, double Zw, double &CAM02BB00, double &CAM02BB01, double &CAM02BB02, double &CAM02BB10, double &CAM02BB11, double &CAM02BB12, double &CAM02BB20, double &CAM02BB21, double &CAM02BB22, double adap ) +void ColorTemp::cieCAT02(double Xw, double Yw, double Zw, double &CAM02BB00, double &CAM02BB01, double &CAM02BB02, double &CAM02BB10, double &CAM02BB11, double &CAM02BB12, double &CAM02BB20, double &CAM02BB21, double &CAM02BB22, double adap) { // CIECAT02 - J.Desmis January 2012 review September 2012 @@ -2738,20 +4355,20 @@ void ColorTemp::cieCAT02(double Xw, double Yw, double Zw, double &CAM02BB00, dou inv_white_orig[2][2] = 1. / cam_orig[2]; // 1/BeS //intermediates computation - for(int i = 0; i < 3; i++) - for(int j = 0; j < 3 ; j++) { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3 ; j++) { intermed[i][j] = inv_white_orig[i][i] * CAT02[i][j]; } - for(int i = 0; i < 3; i++) - for(int j = 0; j < 3 ; j++) { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3 ; j++) { intermed_2[i][j] = cam_dest[i] * intermed[i][j]; } //and CAM02 - for(int i = 0; i < 3; i++) - for(int j = 0; j < 3; j++) - for(int k = 0; k < 3; k++) { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + for (int k = 0; k < 3; k++) { CAM02[i][j] += INVCAT02[i][k] * intermed_2[k][j]; } @@ -2969,19 +4586,20 @@ void ColorTemp::icieCAT02float(float Xw, float Yw, float Zw, float &iCAM02BB00, } -void ColorTemp::temp2mulxyz (double temp, const std::string &method, StandardObserver observer, double &Xxyz, double &Zxyz) +void ColorTemp::temp2mulxyz(double temp, const std::string &method, StandardObserver observer, double &Xxyz, double &Zxyz) { double x, y, z; // We first test for specially handled methods const auto iterator = spectMap.find(method); const auto &color_match = (observer == StandardObserver::TEN_DEGREES) ? cie_colour_match_jd : cie_colour_match_jd2; -/* if(observer == StandardObserver::TEN_DEGREES){ - printf("General Observer 10°\n"); - } else { - printf("General Observer 2°\n"); - } -*/ +/* + if(observer == StandardObserver::TEN_DEGREES){ + printf("General Observer 10°\n"); + } else { + printf("General Observer 2°\n"); + } +*/ if (iterator != spectMap.end()) { spectrum_to_xyz_preset(iterator->second, x, y, z, color_match); } else { @@ -2998,7 +4616,7 @@ void ColorTemp::temp2mulxyz (double temp, const std::string &method, StandardObs x_D = -4.6070e9 / (temp * temp * temp) + 2.9678e6 / (temp * temp) + 0.09911e3 / temp + 0.244063; } else if (temp <= 25000) { x_D = -2.0064e9 / (temp * temp * temp) + 1.9018e6 / (temp * temp) + 0.24748e3 / temp + 0.237040; - } else /*if (temp > 25000)*/ { + } else { /*if (temp > 25000)*/ x_D = -2.0064e9 / (temp * temp * temp) + 1.9018e6 / (temp * temp) + 0.24748e3 / temp + 0.237040 - ((temp - 25000) / 25000) * 0.025; //Jacques empirical adjustment for very high temp (underwater !) } @@ -3016,7 +4634,7 @@ void ColorTemp::temp2mulxyz (double temp, const std::string &method, StandardObs Zxyz = (1.0 - x - y) / y; } -void ColorTemp::temp2mul (double temp, double green, double equal, StandardObserver observer, double& rmul, double& gmul, double& bmul) const +void ColorTemp::temp2mul(double temp, double green, double equal, StandardObserver observer, double& rmul, double& gmul, double& bmul) const { clip(temp, green, equal); double Xwb, Zwb; @@ -3024,8 +4642,8 @@ void ColorTemp::temp2mul (double temp, double green, double equal, StandardObser double adj = 1.0; - if(equal < 0.9999 || equal > 1.0001 ) { - adj = (100.0 + ( 1000.0 - (1000.0 * equal) ) / 20.0) / 100.0; + if (equal < 0.9999 || equal > 1.0001) { + adj = (100.0 + (1000.0 - (1000.0 * equal)) / 20.0) / 100.0; } @@ -3048,7 +4666,7 @@ void ColorTemp::temp2mul (double temp, double green, double equal, StandardObser bmul /= maxRGB; - if(settings->CRI_color != 0) { //activate if CRi_color !=0 + if (settings->CRI_color != 0) { //activate if CRi_color !=0 // begin CRI_RT : color rendering index RT - adaptation of CRI by J.Desmis // CRI = 100 for Blackbody and Daylight // calculate from spectral data values X, Y, Z , for color of colorchecker24 , SG, DC, JDC_468 @@ -3083,7 +4701,7 @@ void ColorTemp::temp2mul (double temp, double green, double equal, StandardObser bool CRI_type = false; double tempw; - if (method == "Fluo F1") { + if (method == "Fluo F1") { CRI_type = true; tempw = 6430; illum = 1; @@ -3151,7 +4769,7 @@ void ColorTemp::temp2mul (double temp, double green, double equal, StandardObser CRI_type = true; tempw = 3930; illum = 17; - } else if (method == "Solux Lamp 4700K" ) { + } else if (method == "Solux Lamp 4700K") { CRI_type = true; tempw = 4700; illum = 18; @@ -3188,20 +4806,21 @@ void ColorTemp::temp2mul (double temp, double green, double equal, StandardObser float CRI_RTs = 0.0, CRIs[8]; const auto &color_match = (observer == StandardObserver::TEN_DEGREES) ? cie_colour_match_jd : cie_colour_match_jd2; + //exceptional must be used by advice people - if(observer == StandardObserver::TEN_DEGREES){ + if (observer == StandardObserver::TEN_DEGREES) { printf("CRI Observer 10°\n"); } else { printf("CRI Observer 2°\n"); } - for(int i = 0; i < N_c; i++) { + for (int i = 0; i < N_c; i++) { spectrum_to_color_xyz_preset(spec_color[i], spect_illum[illum + 3], XchkLamp[i], YchkLamp[i], ZchkLamp[i], color_match); } //calculate XYZ for each color : for Blackbody and Daylight at tempw - if(tempw <= INITIALBLACKBODY) { - for(int i = 0; i < N_c; i++) { + if (tempw <= INITIALBLACKBODY) { + for (int i = 0; i < N_c; i++) { spectrum_to_color_xyz_blackbody(spec_color[i], tempw, Xchk[i], Ychk[i], Zchk[i], color_match); } @@ -3222,7 +4841,7 @@ void ColorTemp::temp2mul (double temp, double green, double equal, StandardObser m11 = (-1.3515 - 1.7703 * x_DD + 5.9114 * y_DD) / interm2; m22 = (0.03 - 31.4424 * x_DD + 30.0717 * y_DD) / interm2; - for(int i = 0; i < N_c; i++) { + for (int i = 0; i < N_c; i++) { spectrum_to_color_xyz_daylight(spec_color[i], m11, m22, Xchk[i], Ychk[i], Zchk[i], color_match); } @@ -3245,7 +4864,7 @@ void ColorTemp::temp2mul (double temp, double green, double equal, StandardObser cieCAT02(Xwb, Ywb, Zwb, CAM02BB00, CAM02BB01, CAM02BB02, CAM02BB10, CAM02BB11, CAM02BB12, CAM02BB20, CAM02BB21, CAM02BB22, adap); //here new value of X,Y,Z for lamp with chromatic CAM02 adaptation - for(int i = 0; i < N_c; i++) { + for (int i = 0; i < N_c; i++) { Xcam02Lamp[i] = CAM02BB00 * XchkLamp[i] + CAM02BB01 * YchkLamp[i] + CAM02BB02 * ZchkLamp[i] ; Ycam02Lamp[i] = CAM02BB10 * XchkLamp[i] + CAM02BB11 * YchkLamp[i] + CAM02BB12 * ZchkLamp[i] ; Zcam02Lamp[i] = CAM02BB20 * XchkLamp[i] + CAM02BB21 * YchkLamp[i] + CAM02BB22 * ZchkLamp[i] ; @@ -3257,7 +4876,7 @@ void ColorTemp::temp2mul (double temp, double green, double equal, StandardObser //here new value of X,Y,Z for blackbody with chromatic CAM02 adaptation - for(int i = 0; i < N_c; i++) { + for (int i = 0; i < N_c; i++) { Xcam02[i] = CAM02BB00 * Xchk[i] + CAM02BB01 * Ychk[i] + CAM02BB02 * Zchk[i] ; Ycam02[i] = CAM02BB10 * Xchk[i] + CAM02BB11 * Ychk[i] + CAM02BB12 * Zchk[i] ; Zcam02[i] = CAM02BB20 * Xchk[i] + CAM02BB21 * Ychk[i] + CAM02BB22 * Zchk[i] ; @@ -3269,25 +4888,25 @@ void ColorTemp::temp2mul (double temp, double green, double equal, StandardObser // Lamp double fx[50], fy[50], fz[50]; - for(int i = 0; i < N_c; i++) { + for (int i = 0; i < N_c; i++) { xr[i] = Xcam02Lamp[i] / whiteD50[0]; yr[i] = Ycam02Lamp[i] / whiteD50[1]; zr[i] = Zcam02Lamp[i] / whiteD50[2]; // xr, yr , zr > epsilon - if(xr[i] > epsilon) { + if (xr[i] > epsilon) { fx[i] = std::cbrt(xr[i]); } else { fx[i] = (903.3 * xr[i] + 16.0) / 116.0; } - if(yr[i] > epsilon) { + if (yr[i] > epsilon) { fy[i] = std::cbrt(yr[i]); } else { fy[i] = (903.3 * yr[i] + 16.0) / 116.0; } - if(zr[i] > epsilon) { + if (zr[i] > epsilon) { fz[i] = std::cbrt(zr[i]); } else { fz[i] = (903.3 * zr[i] + 16.0) / 116.0; @@ -3295,32 +4914,33 @@ void ColorTemp::temp2mul (double temp, double green, double equal, StandardObser } double Llamp[50], alamp[50], blamp[50]; - for(int i = 0; i < N_c; i++) { + + for (int i = 0; i < N_c; i++) { Llamp[i] = 116.0 * fy[i] - 16.0; alamp[i] = 500.0 * (fx[i] - fy[i]); blamp[i] = 200.0 * (fy[i] - fz[i]); } //blackbody at tempx - for(int i = 0; i < N_c; i++) { + for (int i = 0; i < N_c; i++) { xr[i] = Xcam02[i] / whiteD50[0]; yr[i] = Ycam02[i] / whiteD50[1]; zr[i] = Zcam02[i] / whiteD50[2]; // - if(xr[i] > epsilon) { + if (xr[i] > epsilon) { fx[i] = std::cbrt(xr[i]); } else { fx[i] = (903.3 * xr[i] + 16.0) / 116.0; } - if(yr[i] > epsilon) { + if (yr[i] > epsilon) { fy[i] = std::cbrt(yr[i]); } else { fy[i] = (903.3 * yr[i] + 16.0) / 116.0; } - if(zr[i] > epsilon) { + if (zr[i] > epsilon) { fz[i] = std::cbrt(zr[i]); } else { fz[i] = (903.3 * zr[i] + 16.0) / 116.0; @@ -3329,61 +4949,61 @@ void ColorTemp::temp2mul (double temp, double green, double equal, StandardObser double Lbb[50], abb[50], bbb[50]; - for(int i = 0; i < N_c; i++) { + for (int i = 0; i < N_c; i++) { Lbb[i] = 116.*fy[i] - 16.; abb[i] = 500.*(fx[i] - fy[i]); bbb[i] = 200.*(fy[i] - fz[i]); } //display value to verify calculus - if(settings->CRI_color != 0) { + if (settings->CRI_color != 0) { printf("Color Number %i\n", numero_color); printf("L_refer=%2.2f a=%2.2f b=%2.2f\n", Lbb[numero_color], abb[numero_color], bbb[numero_color]); printf("L_lamp=%2.2f al=%2.2f bl=%2.2f\n", Llamp[numero_color], alamp[numero_color], blamp[numero_color]); } //then calculate DeltaE CIE 1976 - for(int i = 0; i < 8; i++) { + for (int i = 0; i < 8; i++) { DeltaEs[i] = sqrt((Lbb[i] - Llamp[i]) * (Lbb[i] - Llamp[i]) + (abb[i] - alamp[i]) * (abb[i] - alamp[i]) + (bbb[i] - blamp[i]) * (bbb[i] - blamp[i])); } - for(int i = 0; i < 8; i++) { + for (int i = 0; i < 8; i++) { CRIs[i] = 100 - 3.f * DeltaEs[i]; //3.0 coef to adapt ==> same results than CRI "official" } - for(int i = 0; i < 8; i++) { + for (int i = 0; i < 8; i++) { CRI_RTs += CRIs[i]; } CRI_RTs /= 8; - for(int i = 0; i < 8; i++) { + for (int i = 0; i < 8; i++) { quadCRIs += (CRIs[i] - CRI_RTs) * (CRIs[i] - CRI_RTs); } quadCRIs /= 8; - for(int i = 0; i < N_c; i++) { + for (int i = 0; i < N_c; i++) { DeltaE[i] = sqrt((Lbb[i] - Llamp[i]) * (Lbb[i] - Llamp[i]) + (abb[i] - alamp[i]) * (abb[i] - alamp[i]) + (bbb[i] - blamp[i]) * (bbb[i] - blamp[i])); } - for(int i = 0; i < N_c; i++) { + for (int i = 0; i < N_c; i++) { CRI[i] = 100 - 3.f * DeltaE[i]; //3.0 coef to adapt ==> same results than CRI "official" } - for(int i = 0; i < N_c; i++) { + for (int i = 0; i < N_c; i++) { CRI_RT += CRI[i]; } CRI_RT /= N_c; - for(int i = 0; i < N_c; i++) { + for (int i = 0; i < N_c; i++) { quadCRI += (CRI[i] - CRI_RT) * (CRI[i] - CRI_RT); } quadCRI /= N_c; - if(settings->CRI_color != 0) { + if (settings->CRI_color != 0) { printf("CRI_standard=%i CRI:1->8=%i %i %i %i %i %i %i %i Sigma=%2.1f\n", (int) CRI_RTs, (int) CRIs[0], (int) CRIs[1], (int) CRIs[2], (int) CRIs[3], (int) CRIs[4], (int) CRIs[5], (int) CRIs[6], (int) CRIs[7], sqrt(static_cast(quadCRIs))); printf("CRI_RT_exten=%i CRI:9->20=%i %i %i %i %i %i %i %i %i %i %i %i Sigma=%2.1f\n", (int) CRI_RT, (int) CRI[8], (int) CRI[9], (int) CRI[10], (int) CRI[11], (int) CRI[12], (int) CRI[13], (int) CRI[14], (int) CRI[15], (int) CRI[16], (int) CRI[17], (int) CRI[18], (int) CRI[19], static_cast(sqrt(quadCRI))); } @@ -3400,6 +5020,7 @@ double ColorTemp::blackbody_spect(double wavelength, double temperature) const double wlm = wavelength * 1e-9; /* Wavelength in meters */ return (3.7417715247e-16 / rtengine::pow5(wlm)) / //3.7417..= c1 = 2*Pi*h*c2 where h=Planck constant, c=velocity of light (xexp(1.438786e-2 / (wlm * temperature)) - 1.0); //1.4387..= c2 = h*c/k where k=Boltzmann constant + } /* @@ -3427,6 +5048,7 @@ void ColorTemp::spectrum_to_xyz_daylight(double _m1, double _m2, double &x, doub for (i = 0, lambda = 350.; lambda < 830.1; i++, lambda += 5.) { double Me = daylight_spect(lambda, _m1, _m2); + // printf("Day Me=%f \n", Me); X += Me * color_match[i][0]; Y += Me * color_match[i][1]; Z += Me * color_match[i][2]; @@ -3526,7 +5148,7 @@ void ColorTemp::spectrum_to_color_xyz_preset(const double* spec_color, const dou void ColorTemp::spectrum_to_color_xyz_daylight(const double* spec_color, double _m1, double _m2, double &xx, double &yy, double &zz, const color_match_type &color_match) { int i; - double lambda, X = 0, Y = 0, Z = 0; + double lambda, X = 0, Y = 0, Z = 0, Yo = 0; for (i = 0, lambda = 350; lambda < 830.1; i++, lambda += 5) { const double Me = spec_color[i]; @@ -3536,16 +5158,67 @@ void ColorTemp::spectrum_to_color_xyz_daylight(const double* spec_color, double Z += Mc * color_match[i][2] * Me; } - xx = X / Y; - yy = 1.0; - zz = Z / Y; + for (i = 0, lambda = 350; lambda < 830.1; i++, lambda += 5) { + + const double Mc1 = daylight_spect(lambda, _m1, _m2); + Yo += color_match[i][1] * Mc1; + } + + xx = X / Yo; + yy = Y / Yo; + zz = Z / Yo; } -//calculate XYZ from spectrum data (color) and illuminant : J.Desmis december 2011 +void ColorTemp::whitepoint(double tempw, double &xx, double &yy, double &zz, const color_match_type &color_match) +{ + if (tempw <= INITIALBLACKBODY) { + spectrum_to_whitepoint_xyz_blackbody(tempw, xx, yy, zz, color_match); + } else { + double m11, m22, x_DD, y_DD, interm2; + + if (tempw <= 7000) { + x_DD = -4.6070e9 / (tempw * tempw * tempw) + 2.9678e6 / (tempw * tempw) + 0.09911e3 / tempw + 0.244063; + } else { + x_DD = -2.0064e9 / (tempw * tempw * tempw) + 1.9018e6 / (tempw * tempw) + 0.24748e3 / tempw + 0.237040; + } + + y_DD = -3.0 * x_DD * x_DD + 2.87 * x_DD - 0.275; + //calculate D -daylight in function of s0, s1, s2 and temp ==> x_D y_D + //S(lamda)=So(lambda)+m1*s1(lambda)+m2*s2(lambda) + interm2 = (0.0241 + 0.2562 * x_DD - 0.734 * y_DD); + m11 = (-1.3515 - 1.7703 * x_DD + 5.9114 * y_DD) / interm2; + m22 = (0.03 - 31.4424 * x_DD + 30.0717 * y_DD) / interm2; + + spectrum_to_whitepoint_xyz_daylight(m11, m22, xx, yy, zz, color_match); + } +} + +void ColorTemp::spectrum_to_whitepoint_xyz_daylight(double _m1, double _m2, double &xx, double &yy, double &zz, const color_match_type &color_match) +{ + int i; + double lambda, X = 0, Z = 0, Yo = 0; + + for (i = 0, lambda = 350; lambda < 830.1; i++, lambda += 5) { + const double Mc = daylight_spect(lambda, _m1, _m2); + X += Mc * color_match[i][0]; + Z += Mc * color_match[i][2]; + } + + for (i = 0, lambda = 350; lambda < 830.1; i++, lambda += 5) { + const double Mc1 = daylight_spect(lambda, _m1, _m2); + Yo += color_match[i][1] * Mc1; + } + + xx = X / Yo; + yy = 1.; + zz = Z / Yo; +} + +//calculate XYZ from spectrum data (color) and illuminant : J.Desmis december 2011 bug found 4/2023 void ColorTemp::spectrum_to_color_xyz_blackbody(const double* spec_color, double _temp, double &xx, double &yy, double &zz, const color_match_type &color_match) { int i; - double lambda, X = 0, Y = 0, Z = 0; + double lambda, X = 0, Y = 0, Z = 0, Yo = 0; for (i = 0, lambda = 350; lambda < 830.1; i++, lambda += 5) { const double Me = spec_color[i]; @@ -3555,11 +5228,39 @@ void ColorTemp::spectrum_to_color_xyz_blackbody(const double* spec_color, double Z += Mc * color_match[i][2] * Me; } - xx = X / Y; - yy = 1.0; - zz = Z / Y; + for (i = 0, lambda = 350; lambda < 830.1; i++, lambda += 5) { + const double Mc1 = blackbody_spect(lambda, _temp); + Yo += color_match[i][1] * Mc1; + } + + xx = X / Yo; + yy = Y / Yo; + zz = Z / Yo; } +void ColorTemp::spectrum_to_whitepoint_xyz_blackbody(double _temp, double &xx, double &yy, double &zz, const color_match_type &color_match) +{ + int i; + double lambda, X = 0, Z = 0, Yo = 0; + + for (i = 0, lambda = 350; lambda < 830.1; i++, lambda += 5) { + const double Mc = blackbody_spect(lambda, _temp); + X += Mc * color_match[i][0]; + Z += Mc * color_match[i][2]; + } + + for (i = 0, lambda = 350; lambda < 830.1; i++, lambda += 5) { + const double Mc1 = blackbody_spect(lambda, _temp); + Yo += color_match[i][1] * Mc1; + } + + xx = X / Yo; + yy = 1.; + zz = Z / Yo; +} + + + double ColorTemp::daylight_spect(double wavelength, double m1, double m2) { //Values for Daylight illuminant: s0 s1 s2 @@ -3581,17 +5282,116 @@ double ColorTemp::daylight_spect(double wavelength, double m1, double m2) 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 }; - int wlm = (int) ((wavelength - 350.) / 5.); + int wlm = (int)((wavelength - 350.) / 5.); return (s0[wlm] + m1 * s1[wlm] + m2 * s2[wlm]); } -//tempxy : return x and y of xyY for 200 or more refreence color, and for T temperature from 2000K to 12000K + + +//tempxy : return x and y of xyY for 406 or more refreence color, and for T temperature from 2000K to 12000K // we can change step for temperature and increase number for T > 7500K if necessary //these values Temp, x, y are references for all calculations and very precise. -//copyright J.Desmis august 2017 and june 2018 -void ColorTemp::tempxy(bool separated, int repref, float **Tx, float **Ty, float **Tz, float **Ta, float **Tb, float **TL, double *TX, double *TY, double *TZ, const procparams::WBParams & wbpar) +//copyright J.Desmis august 2017 and june 2018 - 05/2023 +void ColorTemp::tempxy(bool separated, int repref, float **Tx, float **Ty, float **Tz, float **Ta, float **Tb, float **TL, double *TX, double *TY, double *TZ, const procparams::WBParams & wbpar, int ttbeg, int ttend, double &wpx, double &wpz, double *WPX, double *WPZ) { const double* spec_colorforxcyc[] = {//color references + JDC468_BluH10_spect, JDC468_BluD6_spect, ColorchechCyaF3_spect, JDC468_BluM5_spect, // 0 3 + ColorGreenM25_spect, JDC468_GreK7_spect, ColabSky42_0_m24_spect, ColabSky60_0_m31_spect, ColorchechBluC150_m5_m22_spect,//8 + JDC468_GreQ7_spect, ColorchechDCBluN881_m7_m14_spect, ColorchechGreB3_spect, ColorchechPurD2_spect, //12 + ColorchechSGBlaN3_6_spect, ColorchechGraC4_67_spect, JDC468_K15_87greyspect,//15 + JDC468_GraK14_44_spect, ColorGreenalsi_spect, Fictif_61greyspect, ColorchechGreD1_spect,//19 + ColorchechWhiA496_spect, JDC468_GreA10_spect, JDC468_GreI8_spect,//22 + ColabSkin91_4_14_spect, JDC468_PurE24_spect, //24 + ColorchechSGSkiK285_11_17_spect, ColorchechGreE2_spect, ColorchechMagE3_spect, //27 + ColorchechSkiB166_18_18_spect, ColabSkin70_7_32_spect, ColorchechSGSkiF763_14_26_spect,//30 + ColorchechSkiA138_13_14_spect, ColabSkin57_22_18_spect, JDC468_YelN10_spect,//33 + ColabSkin35_15_17_spect, ColabSkin40_17_17_spect, ColorRedkurttu_spect, ColorYellowkeltano_spect, ColorchechYelD3_spect, JDC468_OraO18_spect,//39 + JDC468_GreN7_spect, JDC468_RedG21va_spect, JDC468_OraD17_spect,//42 + ColorchechredC3_spect, JDC468_RedI9_spect, ColorRedpetunia_spect, ColorchechOraA2_spect,//46 + ColabSkin87_8_8_spect, ColabSkin89_8_21_spect, ColabSkin75_8_4_spect, ColabSkin75_10_33_spect,//50 + ColabSkin65_33_11_spect, ColabSkin65_7_24_spect, ColabSkin57_19_6_spect, ColabSkin57_4_19_spect, ColabSkin57_10_28_spect, ColabSkin40_17_6_spect,//56 + ColabSkin26_18_18_spect, ColabSkin90_m1_20_spect, ColorRedlupiini_spect, ColorRedhevosminttu_spect, //60 + ColorRedneilikka_spect, ColorRedpelagornia_spect, ColorRedtalvio_spect, ColorBrownpoimulehti_spect, ColorOrangetuntematon_spect,//65 + ColorOrangetlehmus_spect, ColorOrangvaahtera_spect, ColorBrownlehmus_spect, ColorBrownuotiosammal_spect,//69 + ColorBlacksoil_spect, ColorGraynahjajaekaelae_spect, //71 + ColorGreennuotisammal_spect, ColorGreenleskenlehti_spect, ColorGreenlinnunkaali_spect, //74 + ColorGreenpelto_spect, ColorGreenrodvoikukka, ColorGreenlehmus, ColorGreenlinden, ColorYellowlehmus, ColorYellowsuikeroalpi, //80 + ColorYellowpensashanhikki1, ColorYellowpensashanhikki2, ColorBluehiidenvirna, ColorBluekurkkuyrtti, //84 + ColorPinksiankaersaemoe, ColorVioletharakankello, ColorVioletalsikeapila, ColorVioletakilleija, ColorOrangekehaekukka,//89 + ColorRedpihlaja, ColorVioletpetunia, ColorVioletorvokki, ColorBluesinisievikki, ColorBlueiisoppi, ColorBluelobelia, //95 + ColorWhiteojaka, ColorWhitepetunia, ColorWhitepelargonia, ColorWhitepaeivaen, JDC468_B14_75Redspect,//100 + ColorGreenkoriste, ColorGreenpoimulehti, ColorGreenhopeapaju, //103 + ColorReduuden, ColorRedpajuan, ColorRedjaloan, ColorBlueukon, ColorBlueorvokki, ColorBluemalvikki, //109 + ColorBlackmaito, ColorOrangpihlaja, ColorBlackpihlaja, //112 + ColorViolA1_spect, ColorViolA4_spect, ColorViolA6_spect, ColorBlueSkyK3_spect, ColorBlueSkyK9_spect, //117 + ColorBlueSkyC4_spect, ColorBlueSkyC14_spect, ColorBlueSkyE4_spect, //120 + ColorBlueSkyM1_spect, ColorBlueSky2B1_spect, ColorBlueSkyT7_spect, //123 + ColorBlueSkyU19_spect, ColorBlueSkyU2_spect, ColorBlueSkyT17_spect, //126 + ColorBlackM8_spect, ColorBlackM12_spect, ColorBlackM13_spect, ColorWhite2B12_spect, ColorWhite2B14_spect, //131 + JDC468_Blackred97_spect, JDC468_Blackredbl443_spect, JDC468_Blackbl27_spect, JDC468_Blackbl28_spect, //135 + JDC468_Blackgr214_spect, JDC468_Blackbl436_spect, JDC468_Whitebl455_spect, JDC468_Blackvio101_spect, JDC468_Whitebl92_spect, JDC468_Greyredbl94_spect, //141 + JDC468_Blue32_spect, JDC468_Blue236_spect, JDC468_Gre300_spect, //144 + JDC468_Blue340_spect, JDC468_Gree110_spect, JDC468_Gree457_spect, JDC468_Yel241_spect, JDC468_Ora321_spect, JDC468_Yellow353_spect, JDC468_Mag465_spect, //151 + JDC468_Mag333_spect, JDC468_Mag203_spect, J570_BlueB6_spect, J570_BlueB15_spect, J570_BlueC2_spect, J570_BlueC14_spect, J570_BlueC16_spect,//158 + J570_BlueF1_spect, J570_BlueF2_spect, J570_BlueF10_spect, J570_BlueF13_spect, J570_BlueG9_spect, J570_BlueG19_spect, J570_BlueI5_spect,//165 + J570_BlueI3_spect, J570_BlueI19_spect, J570_BlueJ4_spect, J570_BlueJ6_spect, J570_BlueJ11_spect, J570_BlueK5_spect, //171 + J570_BlueN1_spect, J570_BlueN4_spect, J570_BlueO19_spect, J570_BlueU8_spect, J570_NeuN8_spect,//176 + J570_NeuN9_spect, J570_NeuO8_spect, J570_NeuO11_spect, J570_NeuD5_spect,//180 + J570_NeuE11_spect, J570_NeuK16_spect, J570_NeuM3_spect, J570_NeuN18_spect, J570_NeuQ1_spect, J570_NeuS7_spect, J570_NeuV10_spect, J570_NeuW18_spect, J570_NeuZ14_spect, //189 + J570_NeuC18_spect, J570_NeuD17_spect, J570_NeuJ11_spect, J570_NeuL4_spect, Colorlab_n72_n2_spect,//194 + Colorlab_10_n70_spect, Colorlab_n33_n70_spect, Colorlab_n8_n74_spect, Colorlab_19_n69_spect, Colorlab_n80_10_spect, Colorlab_n80_26_spect,//200 + Colorlab_n80_5_9_5_9spect, /* JDC468_greyc14_66_spect, JDC468_greym13_325_spect, JDC468_greyf26_156_spect, Colorlab_n57_5_6_9spect,*/ Colorlab_L61_110_110Rec2020spect,//202 + Colorlab_L63_120_m56Rec2020spect, Colorlab_L63_m50_m60Rec2020spect, Colorlab_L63_m120_80Rec2020spect, Colorlab_L42_110_m100Prospect, Colorlab_L42_m70_m100Prospect,//207 + Colorlab_L56_m120_90Prospect, Colorlab_L25_60_m120Prospect, Colorlab_L75_50_120Prospect, Colorlab_L75_m120_0Prospect, J570_NeuN8_spect2, J570_NeuN9_spect2, //213 + J570_NeuO8_spect2, J570_NeuO11_spect2, J570_NeuD5_spect2, J570_NeuE11_spect2, J570_NeuK16_spect2, J570_NeuM3_spect2, Colorlab_L22_2_1_3Prospect,//220 + Colorlab_L44_2_8_3_9spect, Colorlab_L44_2_8_3_9spect2, Colorlab_L95_2_3_15_6spect, Colorlab_L95_2_3_15_6spect2, Colorlab_L40_3_5_10_7spect,//225 + Colorlab_L40_3_5_10_7spect2, /*Colorlab_L40_3_5_10_7Prospect3,*/ Colorlab_L34_1_8_1_9spect, Colorlab_L34_1_8_1_9spect2, Colorlab_L64_1_8_m1_9spect,//229 + Colorlab_L84_0_8_m1spect, Colorlab_L63_1_3_m2spect, Colorlab_L44_2_3_m3spect, Colorlab_L65_96_45spect, Colorlab_L52_47_57spect, Colorlab_L31_62_27spect, //235 + Colorlab_L79_m9_m28spect, Colorlab_L58_50_31spect, Colorlab_L31_m52_27spect, Colorlab_L44_2_2_m7_35spect, Colorlab_L47_m10_8_0_41spect, Colorlab_L32_4_8_m3_2spect,//241 + Colorlab_L57_m6_9_2_9spect, Colorlab_L33_2_4_m4_5spect, Colorlab_L35_11_65_m1_1spect, Colorlab_L52_m2_7_8_9spect, Colorlab_L32_7_m2_5spect, Colorlab_L32_3_4_m3_8spect,//247 + Colorlab_L50_m5_3_6_5spect, Colorlab_L44_3_96_m8_8spect, Colorlab_L34_3_6_m5_4spect, Colorlab_L31_5_9_m4spect, Colorlab_L35_3_4_m11spect, Colorlab_L31_4_5_m4_7spect, //253 + Colorlab_L35_4_8_m6_4spect, Colorlab_L95_10_7_m14_3spect, Colorlab_L36_34_m7_5spect, Colorlab_L37_59_2spect, Colorlab_L69_14_m9spect, Colorlab_L92_13_m16spect,//259 + Colorlab_L49_21_m12spect, Colorlab_L56_20_m15spect, Colorlab_L68_21_m19spect, //262 + Colorlab_L98_m2_m32spect, Colorlab_L98_m2_m32spect2, Colorlab_L41_m27_m16spect, Colorlab_L41_m27_m16spect2, Colorlab_L15_m9_4spect, Colorlab_L15_m9_4spect2,//268 + Colorlab_L11_m11_2spect, Colorlab_L14_m4_3spect, Colorlab_L41_38_24spect, Colorlab_L41_38_24spect2, Colorlab_L53_48_58spect, Colorlab_L53_48_58spect2,//274 + Colorlab_L70_44_86spect, Colorlab_L70_44_86spect2, Colorlab_L38_42_19spect, Colorlab_L38_42_19spect2, //278 + Colorlab_L60_63_85spect, Colorlab_L60_63_85spect2, Colorlab_L80_75_30spect, Colorlab_L80_75_30spect2, Colorlab_L28_m21_24spect,//284 + Colorlab_L45_m33_47spect, Colorlab_L45_m33_47spect2, Colorlab_L26_m7_404spect, Colorlab_L34_m61_2spect, Colorlab_L32_m16_17spect, Colorlab_L30_m19_15spect, + Colorlab_L30_m17_16spect, Colorlab_L35_m8_4spect, Colorlab_L37_m7_5spect, Colorlab_L45_m7_2spect, Colorlab_L40_m6_5spect, Colorlab_L46_m6_2spect, Colorlab_L48_m69_16spect, + Colorlab_L51_89_53spect, Colorlab_L49_84_33spect, Colorlab_L59_m51_31spect, Colorlab_L48_m69_16spect2, Colorlab_L53_m71_6spect, Colorlab_L51_m89_53spect2, + Colorlab_L49_84_33spect2, Colorlab_L36_m27_28spect, Colorlab_L36_m27_28spect2, Colorlab_L36_m27_28spect3, Colorlab_L63_16_71spect, + Colorlab_L84_4_46spect, Colorlab_L84_4_46spect2, Colorlab_L75_m66_19spect, Colorlab_L75_m66_19spect2, Colorlab_L64_m82_m6spect, Colorlab_L64_m82_m6spect2, + Colorlab_L66_m71_m17spect, Colorlab_L66_m71_m17spect2, Colorlab_L22_m8_m60spect, //317 + Colorlab_L22_m8_m60spect2, Colorlab_L15_m4_m42spect, Colorlab_L15_m4_m42spect2, Colorlab_L13_3_m23spect, Colorlab_L27_4_m90spect, Colorlab_L19_1_m29spect, + Colorlab_L27_4_m90spect2, Colorlab_L16_0_m44spect, Colorlab_L16_0_m44spect2, Colorlab_L13_m3_m36spect, Colorlab_L13_m3_m36spect2, + Colorlab_L31_m23_m60spect, Colorlab_L31_m23_m60spect2, Colorlab_L17_3_m40spect, Colorlab_L17_3_m40spect2, Colorlab_L21_9_m7spect, Colorlab_L78_4_m74spect, + Colorlab_L31_m58_m66spect, Colorlab_L61_m11_m12spect, Colorlab_L61_m11_m12spect2, Colorlab_L29_1_m13spect, Colorlab_L29_1_m13spect2, Colorlab_L2_14_m1spect, //339 + Colorlab_L5_39_m7spect, Colorlab_L15_5_m13spect, Colorlab_L12_5_m6spect, Colorlab_L12_5_m6spect2, Colorlab_L37_m59_m24spect, Colorlab_L37_m59_m24spect2,//345 + Colorlab_L15_55_23spect, Colorlab_L11_m55_m11spect, Colorlab_L8_m10_m2spect, Colorlab_L14_m10_m7spect, Colorlab_L20_m16_m13spect, Colorlab_L8_m10_m2spect2, Colorlab_L14_m10_m7spect2, Colorlab_L20_m16_m13spect2, //353 + Colorlab_L6_m9_1spect, Colorlab_L20_m9_m10spect, Colorlab_L85_10_45spect, Colorlab_L90_m7_82spect, Colorlab_L95_2_18spect, + Colorlab_L39_7_4spect, Colorlab_L39_4_1spect, Colorlab_L39_3_m1spect, Colorlab_L40_3_m2spect, Colorlab_L36_2_2spect, + Colorlab_L39_7_4spect2, Colorlab_L39_4_1spect2, Colorlab_L39_3_m1spect2, Colorlab_L40_3_m2spect2, Colorlab_L36_2_2spect2, //369 + Colorlab_L40_4_m2spect, Colorlab_L41_1_m6spect, Colorlab_L40_4_m2spect2, Colorlab_L41_1_m6spect2, Colorlab_L41_12_14spect, Colorlab_L41_12_14spect2, + Colorlab_L10_0_m22spect, Colorlab_L38_60_8spect, Colorlab_L49_85_39spect, Colorlab_L42_1_m18spect, //379 + Colorlab_L48_19_m25spect, Colorlab_L30_21_m25spect, Colorlab_L15_10_m15spect, Colorlab_L48_19_m25spect2, Colorlab_L30_21_m25spect2, Colorlab_L15_10_m15spect2, + Colorlab_L60_26_m25spect, Colorlab_L40_26_m45spect, Colorlab_L20_10_m45spect, //388 + ColorBlueSkyK3_spect2, ColorBlueSkyK9_spect2, ColorBlueSkyC4_spect2, ColorBlueSkyC14_spect2, ColorBlueSkyE4_spect2, + ColorBlueSkyM1_spect2, ColorBlueSky2B1_spect2, ColorBlueSkyT7_spect2, ColorBlueSkyU19_spect2, ColorBlueSkyU2_spect2, + Colorlab_L40_1_m40spect, Colorlab_L30_4_m30spect, Colorlab_L8_11_m25spect, Colorlab_L40_1_m40spect2, Colorlab_L30_4_m30spect2, Colorlab_L8_11_m25spect2, + Colorlab_L26_m8_m25spect, Colorlab_L26_m8_m25spect2, //406 + Colorlab_L17_3_m40spect3, Colorlab_L17_3_m40spect4, Colorlab_L17_3_m40spect5, Colorlab_L40_26_m45spect2, Colorlab_L17_3_m40spect6, ColorchechCyaF3_spect2, ColorchechCyaF3_spect3, + Colorlab_L22_1_m42spect, Colorlab_L27_m1_m47spect, Colorlab_L26_m8_m25spect3, Colorlab_L22_1_m42spect2, Colorlab_L27_m1_m47spect2, + Colorlab_L40_30_m30spect, Colorlab_L40_20_m35spect, Colorlab_L20_10_m45spect2, Colorlab_L20_10_m45spect3, + Colorlab_L40_30_m30spect2, Colorlab_L40_20_m35spect2, Colorlab_10_n70_spect2, Colorlab_L22_1_m42spect3, Colorlab_10_n70_spect3, Colorlab_L22_1_m42spect4, Colorlab_10_n70_spect4 + //J570_NeuN18_spect2, J570_NeuQ1_spect2 //J570_NeuS7_spect2, J570_NeuV10_spect2, J570_NeuW18_spect2, + //J570_NeuZ14_spect2, + //J570_NeuC18_spect2, + //J570_NeuD17_spect2, + //J570_NeuJ11_spect2, + //J570_NeuL4_spect2 + };// + + const double* spec_colorforxcyc_old[] = {//color references for 5.9 JDC468_BluH10_spect, JDC468_BluD6_spect, ColorchechCyaF3_spect, JDC468_BluM5_spect, // 0 3 ColorGreenM25_spect, JDC468_GreK7_spect, ColabSky42_0_m24_spect, ColabSky60_0_m31_spect, ColorchechBluC150_m5_m22_spect,//8 JDC468_GreQ7_spect, ColorchechDCBluN881_m7_m14_spect, ColorchechGreB3_spect, ColorchechPurD2_spect, //12 @@ -3641,17 +5441,212 @@ void ColorTemp::tempxy(bool separated, int repref, float **Tx, float **Ty, float Colorlab_10_n70_spect, Colorlab_n33_n70_spect, Colorlab_n8_n74_spect, Colorlab_19_n69_spect, Colorlab_n80_10_spect, Colorlab_n80_26_spect, Colorlab_n80_5_9_5_9spect //, Colorlab_n57_5_6_9spect - /*JDC468_greyc14_66_spect, JDC468_greym13_325_spect, JDC468_greyf26_156_spect*/ }; + typedef struct WbTxyz { double Tem; double XX; double ZZ; } WbTxyz; //probably can be "passed" with rawimagesource.cc but I don't know how to do this. - constexpr WbTxyz Txyz[118] = {//temperature Xwb Zwb 118 values - same table as in Rawimagesource.cc x wb and y wb are calculated after + constexpr WbTxyz Txyz[191] = {//temperature Xwb Zwb 191 values - same table as in Rawimagesource.cc x wb and y wb are calculated after + {2001., 1.273842, 0.145295}, + {2051., 1.258802, 0.156066}, + {2101., 1.244008, 0.167533}, + {2151., 1.230570, 0.178778}, + {2201., 1.217338, 0.190697}, + {2251., 1.205305, 0.202338}, + {2301., 1.193444, 0.214632}, + {2351., 1.182648, 0.226598}, + {2401., 1.171996, 0.239195}, + {2451., 1.162290, 0.251421}, + {2501., 1.152883, 0.264539}, + {2551., 1.143965, 0.276682}, + {2605., 1.134667, 0.290722}, + {2655., 1.126659, 0.303556}, + {2705., 1.119049, 0.316446}, + {2755., 1.111814, 0.329381}, + {2790., 1.106961, 0.338455}, + {2803., 1.105381, 0.342193}, + {2825., 1.102275, 0.347542}, + {2856., 1.098258, 0.355599}, + {2880., 1.095233, 0.361840}, + {2910., 1.091550, 0.369645}, + {2930., 1.089155, 0.374849}, + {2960., 1.085649, 0.382655}, + {2980., 1.083369, 0.387858}, + {3003., 1.080982, 0.394258}, + {3025., 1.078397, 0.399561}, + {3050., 1.075727, 0.406057}, + {3075., 1.073122, 0.412550}, + {3103., 1.070277, 0.419815}, + {3128., 1.067801, 0.426296}, + {3153., 1.065384, 0.432769}, + {3175., 1.063305, 0.438459}, + {3203., 1.060906, 0.446161}, + {3225., 1.058738, 0.451367}, + {3250., 1.056535, 0.457806}, + {3280., 1.053960, 0.465519}, + {3303., 1.052034, 0.471422}, + {3353., 1.047990, 0.484218}, + {3400., 1.044547, 0.496719}, + {3450., 1.040667, 0.508891}, + {3500., 1.037145, 0.521523}, + {3550., 1.033783, 0.534090}, + {3600., 1.030574, 0.546590}, + {3650., 1.027510, 0.559020}, + {3699., 1.024834, 0.571722}, + {3801., 1.019072, 0.596102}, + {3851., 1.016527, 0.608221}, + {3902., 1.014244, 0.621136}, + {3952., 1.011729, 0.632447}, + {4002., 0.996153, 0.609518}, + {4052., 0.993720, 0.620805}, + {4102., 0.993908, 0.631520}, + {4152., 0.989179, 0.643262}, + {4202., 0.989283, 0.653999}, + {4252., 0.985039, 0.665536}, + {4302., 0.985067, 0.676288}, + {4352., 0.981271, 0.687599}, + {4402., 0.981228, 0.698349}, + {4452., 0.977843, 0.709425}, + {4502., 0.977736, 0.720159}, + {4552., 0.974728, 0.730993}, + {4602., 0.974562, 0.741698}, + {4652., 0.971899, 0.752284}, + {4702., 0.971681, 0.762949}, + {4752., 0.969335, 0.773285}, + {4802., 0.969069, 0.783899}, + {4827., 0.967570, 0.788836}, + {4852., 0.967011, 0.793982}, + {4877., 0.966465, 0.799108}, + {4902., 0.965933, 0.804214}, + {4914., 0.965682, 0.806658}, + {4927., 0.965414, 0.809229}, + {4940., 0.965149, 0.811937}, + {4952., 0.964908, 0.814366}, + {4965., 0.964650, 0.816993}, + {4977., 0.964415, 0.819412}, + {4990., 0.964163, 0.822028}, + {5002., 0.963934, 0.824438},//80 + {5015., 0.963689, 0.827044}, + {5027., 0.963465, 0.829444}, + {5040., 0.963226, 0.832039}, + {5051., 0.963008, 0.834429}, + {5065., 0.963226, 0.832039}, + {5077., 0.962563, 0.839395}, + {5090., 0.962336, 0.841968}, + {5102., 0.962129, 0.844339}, + {5115., 0.961907, 0.846902}, + {5127., 0.961706, 0.849263}, + {5140., 0.961490, 0.851815}, + {5151., 0.961294, 0.854166}, + {5177., 0.960893, 0.859049}, + {5202., 0.960501, 0.863911}, + {5253., 0.959749, 0.873572}, + {5302., 0.959313, 0.883815}, + {5351., 0.958361, 0.892644}, + {5402., 0.957903, 0.902793}, + {5452., 0.957116, 0.911379}, + {5502., 0.956639, 0.921431}, + {5553., 0.956002, 0.929779}, + {5602., 0.955509, 0.939728}, + {5652., 0.955008, 0.947842}, + {5702., 0.954502, 0.957685}, + {5752., 0.954124, 0.965569}, + {5802., 0.953608, 0.975303}, + {5852., 0.953342, 0.982963}, + {5902., 0.952818, 0.992584}, + {5952., 0.952652, 1.000025}, + {6002., 0.952122, 1.009532}, + {6052., 0.952047, 1.016759}, + {6102., 0.951514, 1.026149}, + {6152., 0.951520, 1.033168}, + {6202., 0.950985, 1.042439}, + {6252., 0.951064, 1.049256}, + {6302., 0.950530, 1.058406}, + {6352., 0.950674, 1.065027}, + {6380., 0.950576, 1.069386}, + {6402., 0.950143, 1.074055}, + {6425., 0.950428, 1.076341}, + {6452., 0.950345, 1.080484}, + {6475., 0.950277, 1.083996}, + {6502., 0.950201, 1.088097}, + {6525., 0.950139, 1.091573}, + {6552., 0.950070, 1.095633}, + {6575., 0.950014, 1.099075}, + {6602., 0.949952, 1.103094}, + {6625., 0.949902, 1.106501}, + {6652., 0.949846, 1.110479}, + {6675., 0.949801, 1.113852}, + {6702., 0.949752, 1.119138}, + {6725., 0.949712, 1.121128}, + {6752., 0.949668, 1.125027}, + {6802., 0.949596, 1.132190}, + {6852., 0.949533, 1.139281}, + {6902., 0.949033, 1.147691}, + {6952., 0.949437, 1.153246}, + {7002., 0.949402, 1.160129}, + {7052., 0.949376, 1.166966}, + {7102., 0.949358, 1.173732}, + {7152., 0.949348, 1.180429}, + {7202., 0.949346, 1.187058}, + {7252., 0.949350, 1.193619}, + {7301., 0.948896, 1.201432}, + {7352., 0.949380, 1.206541}, + {7402., 0.949405, 1.212904}, + {7451., 0.949434, 1.219076}, + {7501., 0.949471, 1.225312}, + {7551., 0.949512, 1.231485}, + {7601., 0.949099, 1.239061}, + {7675., 0.949638, 1.246525}, + {7751., 0.949729, 1.255559}, + {7825., 0.949828, 1.264225}, + {7901., 0.949498, 1.274460}, + {7952., 0.950018, 1.278800}, + {8025., 0.950137, 1.287013}, + {8095., 0.950259, 1.294777}, + {8151., 0.950361, 1.300912}, + {8225., 0.950501, 1.308915}, + {8301., 0.950253, 1.318464}, + {8375., 0.950804, 1.324786}, + {8451., 0.950966, 1.332651}, + {8525., 0.951129, 1.340199}, + {8601., 0.950941, 1.349261}, + {8701., 0.951533, 1.357724}, + {8801., 0.951772, 1.367421}, + {8901., 0.952018, 1.376935}, + {9001., 0.951969, 1.387639}, + {9201., 0.952784, 1.404422}, + {9401., 0.953081, 1.423213},//since 5 2023 I increased the number of temp references above 9401K + {9651., 0.953993, 1.442883}, + {9901., 0.954537, 1.464134}, + {10201., 0.955520, 1.485825}, + {10501., 0.956321, 1.508623}, + {10751., 0.957057, 1.524806}, + {11001., 0.957747, 1.541281}, + {11251., 0.958436, 1.557207}, + {11501., 0.959112, 1.572366}, + {11751., 0.959784, 1.587037}, + {12001., 0.960440, 1.601019},//since 5 2023 I increased the number of temp references above 12000K + {12251., 0.961090, 1.614566}, + {12501., 0.963963, 1.627492}, + {12751., 0.962350, 1.640031}, + {13001., 0.962962, 1.652055}, + {13251., 0.963561, 1.663638}, + {13501., 0.964147, 1.674804}, + {13751., 0.964720, 1.685571}, + {14001., 0.965279, 1.695919}, + {14251., 0.965827, 1.705950}, + {14501., 0.966363, 1.715637}, + {14751., 0.966886, 1.724998}, + {15001., 0.967397, 1.734047} + }; + + //compatibility 5.9 + constexpr WbTxyz Txyzs[118] = {//temperature Xwb Zwb 118 values - same table as in Rawimagesource.cc x wb and y wb are calculated after for 5.9 {2001., 1.273842, 0.145295}, {2101., 1.244008, 0.167533}, {2201., 1.217338, 0.190697}, @@ -3773,12 +5768,28 @@ void ColorTemp::tempxy(bool separated, int repref, float **Tx, float **Ty, float }; int N_c = sizeof(spec_colorforxcyc) / sizeof(spec_colorforxcyc[0]); //number of color + + if (wbpar.itcwb_sampling) { + N_c = sizeof(spec_colorforxcyc_old) / sizeof(spec_colorforxcyc_old[0]); //number of color 5.9 + } + + int N_t = sizeof(Txyz) / sizeof(Txyz[0]); //number of temperature White point + + if (wbpar.itcwb_sampling) { + N_t = sizeof(Txyzs) / sizeof(Txyzs[0]); //number of temperature White point 5.9 + } + + if (settings->verbose) { + printf("Number max spectral colors=%i Number sampling temp=%i\n", N_c, N_t); + } + typedef struct XYZref { double Xref; double Yref; double Zref; } XYZref; + XYZref Refxyz[N_c + 1]; for (int i = 0; i < N_c; i++) { @@ -3787,16 +5798,33 @@ void ColorTemp::tempxy(bool separated, int repref, float **Tx, float **Ty, float Refxyz[i].Zref = 0.f; } - const color_match_type &color_match = (wbpar.observer == StandardObserver::TEN_DEGREES) ? cie_colour_match_jd : cie_colour_match_jd2; - - // const color_match_type &color_match = (wbpar.observer == StandardObserver::TEN_DEGREES) ? cie_colour_match_jd : cie_colour_match_jd2; + bool observerchoice = false; + + observerchoice = (wbpar.observer == StandardObserver::TEN_DEGREES); + + if (wbpar.itcwb_sampling) { + observerchoice = false; + } + + const color_match_type &color_match = observerchoice ? cie_colour_match_jd : cie_colour_match_jd2; if (separated) { - const double tempw = Txyz[repref].Tem; + double tempw = Txyz[repref].Tem; + + if (wbpar.itcwb_sampling) { + tempw = Txyzs[repref].Tem; + } + + double yy = 0.; + whitepoint(tempw, wpx, yy, wpz, color_match); if (tempw <= INITIALBLACKBODY) { - for (int i = 0; i < N_c; i++) { - spectrum_to_color_xyz_blackbody(spec_colorforxcyc[i], tempw, TX[i], TY[i], TZ[i], color_match); + for (int i = 0; i < N_c; i++) { + if (! wbpar.itcwb_sampling) { + spectrum_to_color_xyz_blackbody(spec_colorforxcyc[i], tempw, TX[i], TY[i], TZ[i], color_match); + } else { + spectrum_to_color_xyz_blackbody(spec_colorforxcyc_old[i], tempw, TX[i], TY[i], TZ[i], color_match); + } } } else { double m11, m22, x_DD, y_DD, interm2; @@ -3815,16 +5843,33 @@ void ColorTemp::tempxy(bool separated, int repref, float **Tx, float **Ty, float m22 = (0.03 - 31.4424 * x_DD + 30.0717 * y_DD) / interm2; for (int i = 0; i < N_c; i++) { - spectrum_to_color_xyz_daylight(spec_colorforxcyc[i], m11, m22, TX[i], TY[i], TZ[i], color_match); + if (! wbpar.itcwb_sampling) { + spectrum_to_color_xyz_daylight(spec_colorforxcyc[i], m11, m22, TX[i], TY[i], TZ[i], color_match); + } else { + spectrum_to_color_xyz_daylight(spec_colorforxcyc_old[i], m11, m22, TX[i], TY[i], TZ[i], color_match); + } } } } else { - for (int tt = 0; tt < N_t; tt++) { - const double tempw = Txyz[tt].Tem; + for (int tt = ttbeg; tt < ttend; tt++) { + double tempw = Txyz[tt].Tem; + + if (wbpar.itcwb_sampling) { + tempw = Txyzs[repref].Tem; + } + + double yy = 0.; + whitepoint(tempw, wpx, yy, wpz, color_match); + WPX[tt] = wpx; + WPZ[tt] = wpz; if (tempw <= INITIALBLACKBODY) { for (int i = 0; i < N_c; i++) { - spectrum_to_color_xyz_blackbody(spec_colorforxcyc[i], tempw, Refxyz[i].Xref, Refxyz[i].Yref, Refxyz[i].Zref, color_match); + if (! wbpar.itcwb_sampling) { + spectrum_to_color_xyz_blackbody(spec_colorforxcyc[i], tempw, Refxyz[i].Xref, Refxyz[i].Yref, Refxyz[i].Zref, color_match); + } else { + spectrum_to_color_xyz_blackbody(spec_colorforxcyc_old[i], tempw, Refxyz[i].Xref, Refxyz[i].Yref, Refxyz[i].Zref, color_match); + } } } else { double x_DD; @@ -3843,7 +5888,11 @@ void ColorTemp::tempxy(bool separated, int repref, float **Tx, float **Ty, float const double m22 = (0.03 - 31.4424 * x_DD + 30.0717 * y_DD) / interm2; for (int i = 0; i < N_c; i++) { - spectrum_to_color_xyz_daylight(spec_colorforxcyc[i], m11, m22, Refxyz[i].Xref, Refxyz[i].Yref, Refxyz[i].Zref, color_match); + if (! wbpar.itcwb_sampling) { + spectrum_to_color_xyz_daylight(spec_colorforxcyc[i], m11, m22, Refxyz[i].Xref, Refxyz[i].Yref, Refxyz[i].Zref, color_match); + } else { + spectrum_to_color_xyz_daylight(spec_colorforxcyc_old[i], m11, m22, Refxyz[i].Xref, Refxyz[i].Yref, Refxyz[i].Zref, color_match); + } } } diff --git a/rtengine/colortemp.h b/rtengine/colortemp.h index 0fe56b7cd..db69abe2d 100644 --- a/rtengine/colortemp.h +++ b/rtengine/colortemp.h @@ -56,13 +56,13 @@ private: void temp2mul (double temp, double green, double equal, StandardObserver observer, double& rmul, double& gmul, double& bmul) const; const static std::map spectMap; public: - static constexpr StandardObserver DEFAULT_OBSERVER = StandardObserver::TEN_DEGREES; - + // static constexpr StandardObserver DEFAULT_OBSERVER = StandardObserver::TEN_DEGREES; + static constexpr StandardObserver DEFAULT_OBSERVER = StandardObserver::TWO_DEGREES; ColorTemp () : temp(-1.), green(-1.), equal (1.), method("Custom") {} explicit ColorTemp (double e) : temp(-1.), green(-1.), equal (e), method("Custom") {} ColorTemp (double t, double g, double e, const std::string &m, StandardObserver o); ColorTemp (double mulr, double mulg, double mulb, double e, StandardObserver observer); - static void tempxy(bool separated, int repref, float **Tx, float **Ty, float **Tz, float **Ta, float **Tb, float **TL, double *TX, double *TY, double *TZ, const procparams::WBParams & wbpar); + static void tempxy(bool separated, int repref, float **Tx, float **Ty, float **Tz, float **Ta, float **Tb, float **TL, double *TX, double *TY, double *TZ, const procparams::WBParams & wbpar, int ttbeg, int ttend, double &wpx, double &wpz, double *WPX, double *WPZ); void update (const double rmul, const double gmul, const double bmul, const double equal, StandardObserver observer, const double tempBias=0.0) { @@ -169,6 +169,8 @@ public: static const double ColorchechGreE2_spect[97]; static const double ColorchechGreB3_spect[97]; static const double ColorchechCyaF3_spect[97]; + static const double ColorchechCyaF3_spect2[97]; + static const double ColorchechCyaF3_spect3[97]; static const double ColorchechPurD2_spect[97]; static const double ColorchechMagE3_spect[97]; static const double ColorchechSkiA138_13_14_spect[97]; @@ -376,21 +378,259 @@ public: static const double J570_NeuD17_spect[97];//neutral static const double J570_NeuJ11_spect[97];//neutral static const double J570_NeuL4_spect[97];//neutral + + static const double J570_NeuN8_spect2[97];//neutral + static const double J570_NeuN9_spect2[97];//neutral + static const double J570_NeuO8_spect2[97];//neutral + static const double J570_NeuO11_spect2[97];//neutral + static const double J570_NeuD5_spect2[97];//neutral + static const double J570_NeuE11_spect2[97];//neutral + static const double J570_NeuK16_spect2[97];//neutral + static const double J570_NeuM3_spect2[97];//neutral + static const double J570_NeuN18_spect2[97];//neutral + static const double J570_NeuQ1_spect2[97];//neutral + static const double J570_NeuS7_spect2[97];//neutral + static const double J570_NeuV10_spect2[97];//neutral + + static const double J570_NeuW18_spect2[97];//neutral + static const double J570_NeuZ14_spect2[97];//neutral + static const double J570_NeuC18_spect2[97];//neutral + static const double J570_NeuD17_spect2[97];//neutral + static const double J570_NeuJ11_spect2[97];//neutral + static const double J570_NeuL4_spect2[97];//neutral + static const double Colorlab_n72_n2_spect[97]; static const double Colorlab_10_n70_spect[97]; + static const double Colorlab_10_n70_spect2[97]; + static const double Colorlab_10_n70_spect3[97]; + static const double Colorlab_10_n70_spect4[97]; static const double Colorlab_n33_n70_spect[97]; static const double Colorlab_n8_n74_spect[97]; static const double Colorlab_19_n69_spect[97]; static const double Colorlab_n80_10_spect[97]; static const double Colorlab_n80_26_spect[97]; static const double Colorlab_n80_5_9_5_9spect[97]; +// static const double JDC468_greyc14_66_spect[97]; +// static const double JDC468_greym13_325_spect[97]; +// static const double JDC468_greyf26_156_spect[97]; // static const double Colorlab_n57_5_6_9spect[97]; - - /* - static const double JDC468_greyc14_66_spect[97]; - static const double JDC468_greym13_325_spect[97]; - static const double JDC468_greyf26_156_spect[97]; - */ + static const double Colorlab_L61_110_110Rec2020spect[97]; + static const double Colorlab_L63_120_m56Rec2020spect[97]; + static const double Colorlab_L63_m50_m60Rec2020spect[97]; + static const double Colorlab_L63_m120_80Rec2020spect[97]; + static const double Colorlab_L42_110_m100Prospect[97]; + static const double Colorlab_L42_m70_m100Prospect[97]; + static const double Colorlab_L56_m120_90Prospect[97]; + static const double Colorlab_L25_60_m120Prospect[97]; + static const double Colorlab_L75_50_120Prospect[97]; + static const double Colorlab_L75_m120_0Prospect[97]; + static const double Colorlab_L22_2_1_3Prospect[97]; + static const double Colorlab_L44_2_8_3_9spect[97]; + static const double Colorlab_L44_2_8_3_9spect2[97]; + static const double Colorlab_L95_2_3_15_6spect[97]; + static const double Colorlab_L95_2_3_15_6spect2[97]; + static const double Colorlab_L40_3_5_10_7spect[97]; + static const double Colorlab_L40_3_5_10_7spect2[97]; + static const double Colorlab_L40_3_5_10_7spect3[97]; + static const double Colorlab_L34_1_8_1_9spect[97]; + static const double Colorlab_L34_1_8_1_9spect2[97]; + static const double Colorlab_L64_1_8_m1_9spect[97]; + static const double Colorlab_L84_0_8_m1spect[97]; + static const double Colorlab_L63_1_3_m2spect[97]; + static const double Colorlab_L44_2_3_m3spect[97]; + static const double Colorlab_L65_96_45spect[97]; + static const double Colorlab_L52_47_57spect[97]; + static const double Colorlab_L31_62_27spect[97]; + static const double Colorlab_L79_m9_m28spect[97]; + static const double Colorlab_L58_50_31spect[97]; + static const double Colorlab_L31_m52_27spect[97]; + static const double Colorlab_L44_2_2_m7_35spect[97]; + static const double Colorlab_L47_m10_8_0_41spect[97]; + static const double Colorlab_L32_4_8_m3_2spect[97]; + static const double Colorlab_L57_m6_9_2_9spect[97]; + static const double Colorlab_L33_2_4_m4_5spect[97]; + static const double Colorlab_L35_11_65_m1_1spect[97]; + static const double Colorlab_L52_m2_7_8_9spect[97]; + static const double Colorlab_L32_7_m2_5spect[97]; + static const double Colorlab_L32_3_4_m3_8spect[97]; + static const double Colorlab_L50_m5_3_6_5spect[97]; + static const double Colorlab_L44_3_96_m8_8spect[97]; + static const double Colorlab_L34_3_6_m5_4spect[97]; + static const double Colorlab_L31_5_9_m4spect[97]; + static const double Colorlab_L35_3_4_m11spect[97]; + static const double Colorlab_L31_4_5_m4_7spect[97]; + static const double Colorlab_L35_4_8_m6_4spect[97]; + static const double Colorlab_L95_10_7_m14_3spect[97]; + static const double Colorlab_L36_34_m7_5spect[97]; + static const double Colorlab_L37_59_2spect[97]; + static const double Colorlab_L69_14_m9spect[97]; + static const double Colorlab_L92_13_m16spect[97]; + static const double Colorlab_L49_21_m12spect[97]; + static const double Colorlab_L56_20_m15spect[97]; + static const double Colorlab_L68_21_m19spect[97]; + static const double Colorlab_L98_m2_m32spect[97]; + static const double Colorlab_L98_m2_m32spect2[97]; + static const double Colorlab_L41_m27_m16spect[97]; + static const double Colorlab_L41_m27_m16spect2[97]; + static const double Colorlab_L15_m9_4spect[97]; + static const double Colorlab_L15_m9_4spect2[97]; + static const double Colorlab_L11_m11_2spect[97]; + static const double Colorlab_L14_m4_3spect[97]; + static const double Colorlab_L41_38_24spect[97]; + static const double Colorlab_L41_38_24spect2[97]; + static const double Colorlab_L53_48_58spect[97]; + static const double Colorlab_L53_48_58spect2[97]; + static const double Colorlab_L70_44_86spect[97]; + static const double Colorlab_L70_44_86spect2[97]; + static const double Colorlab_L38_42_19spect[97]; + static const double Colorlab_L38_42_19spect2[97]; + static const double Colorlab_L60_63_85spect[97]; + static const double Colorlab_L60_63_85spect2[97]; + static const double Colorlab_L80_75_30spect[97]; + static const double Colorlab_L80_75_30spect2[97]; + static const double Colorlab_L28_m21_24spect[97]; + static const double Colorlab_L28_m21_24spect2[97]; + static const double Colorlab_L45_m33_47spect[97]; + static const double Colorlab_L45_m33_47spect2[97]; + static const double Colorlab_L26_m7_404spect[97]; + static const double Colorlab_L34_m61_2spect[97]; + static const double Colorlab_L32_m16_17spect[97]; + static const double Colorlab_L30_m19_15spect[97]; + static const double Colorlab_L30_m17_16spect[97]; + static const double Colorlab_L35_m8_4spect[97]; + static const double Colorlab_L37_m7_5spect[97]; + static const double Colorlab_L45_m7_2spect[97]; + static const double Colorlab_L40_m6_5spect[97]; + static const double Colorlab_L46_m6_2spect[97]; + static const double Colorlab_L48_m69_16spect[97]; + static const double Colorlab_L51_89_53spect[97]; + static const double Colorlab_L49_84_33spect[97]; + static const double Colorlab_L59_m51_31spect[97]; + static const double Colorlab_L48_m69_16spect2[97]; + static const double Colorlab_L53_m71_6spect[97]; + static const double Colorlab_L51_m89_53spect2[97]; + static const double Colorlab_L49_84_33spect2[97]; + static const double Colorlab_L36_m27_28spect[97]; + static const double Colorlab_L36_m27_28spect2[97]; + static const double Colorlab_L36_m27_28spect3[97]; + static const double Colorlab_L63_16_71spect[97]; + static const double Colorlab_L84_4_46spect[97]; + static const double Colorlab_L84_4_46spect2[97]; + static const double Colorlab_L75_m66_19spect[97]; + static const double Colorlab_L75_m66_19spect2[97]; + static const double Colorlab_L64_m82_m6spect[97]; + static const double Colorlab_L64_m82_m6spect2[97]; + static const double Colorlab_L66_m71_m17spect[97]; + static const double Colorlab_L66_m71_m17spect2[97]; + static const double Colorlab_L22_m8_m60spect[97]; + static const double Colorlab_L22_m8_m60spect2[97]; + static const double Colorlab_L15_m4_m42spect[97]; + static const double Colorlab_L15_m4_m42spect2[97]; + static const double Colorlab_L13_3_m23spect[97]; + static const double Colorlab_L27_4_m90spect[97]; + static const double Colorlab_L19_1_m29spect[97]; + static const double Colorlab_L27_4_m90spect2[97]; + static const double Colorlab_L16_0_m44spect[97]; + static const double Colorlab_L16_0_m44spect2[97]; + static const double Colorlab_L13_m3_m36spect[97]; + static const double Colorlab_L13_m3_m36spect2[97]; + static const double Colorlab_L31_m23_m60spect[97]; + static const double Colorlab_L31_m23_m60spect2[97]; + static const double Colorlab_L17_3_m40spect[97]; + static const double Colorlab_L17_3_m40spect2[97]; + static const double Colorlab_L17_3_m40spect3[97]; + static const double Colorlab_L17_3_m40spect4[97]; + static const double Colorlab_L17_3_m40spect5[97]; + static const double Colorlab_L17_3_m40spect6[97]; + static const double Colorlab_L21_9_m7spect[97]; + static const double Colorlab_L78_4_m74spect[97]; + static const double Colorlab_L31_m58_m66spect[97]; + static const double Colorlab_L61_m11_m12spect[97]; + static const double Colorlab_L61_m11_m12spect2[97]; + static const double Colorlab_L29_1_m13spect[97]; + static const double Colorlab_L29_1_m13spect2[97]; + static const double Colorlab_L2_14_m1spect[97]; + static const double Colorlab_L5_39_m7spect[97]; + static const double Colorlab_L15_5_m13spect[97]; + static const double Colorlab_L12_5_m6spect[97]; + static const double Colorlab_L12_5_m6spect2[97]; + static const double Colorlab_L37_m59_m24spect[97]; + static const double Colorlab_L37_m59_m24spect2[97]; + static const double Colorlab_L15_55_23spect[97]; + static const double Colorlab_L11_m55_m11spect[97]; + static const double Colorlab_L8_m10_m2spect[97]; + static const double Colorlab_L14_m10_m7spect[97]; + static const double Colorlab_L20_m16_m13spect[97]; + static const double Colorlab_L8_m10_m2spect2[97]; + static const double Colorlab_L14_m10_m7spect2[97]; + static const double Colorlab_L20_m16_m13spect2[97]; + static const double Colorlab_L6_m9_1spect[97]; + static const double Colorlab_L20_m9_m10spect[97]; + static const double Colorlab_L85_10_45spect[97]; + static const double Colorlab_L90_m7_82spect[97]; + static const double Colorlab_L95_2_18spect[97]; + static const double Colorlab_L39_7_4spect[97]; + static const double Colorlab_L39_4_1spect[97]; + static const double Colorlab_L39_3_m1spect[97]; + static const double Colorlab_L40_3_m2spect[97]; + static const double Colorlab_L36_2_2spect[97]; + static const double Colorlab_L39_7_4spect2[97]; + static const double Colorlab_L39_4_1spect2[97]; + static const double Colorlab_L39_3_m1spect2[97]; + static const double Colorlab_L40_3_m2spect2[97]; + static const double Colorlab_L36_2_2spect2[97]; + static const double Colorlab_L40_4_m2spect[97]; + static const double Colorlab_L41_1_m6spect[97]; + static const double Colorlab_L40_4_m2spect2[97]; + static const double Colorlab_L41_1_m6spect2[97]; + static const double Colorlab_L41_12_14spect[97]; + static const double Colorlab_L41_12_14spect2[97]; + static const double Colorlab_L10_0_m22spect[97]; + static const double Colorlab_L38_60_8spect[97]; + static const double Colorlab_L49_85_39spect[97]; + static const double Colorlab_L42_1_m18spect[97]; + static const double Colorlab_L48_19_m25spect[97]; + static const double Colorlab_L30_21_m25spect[97]; + static const double Colorlab_L15_10_m15spect[97]; + static const double Colorlab_L48_19_m25spect2[97]; + static const double Colorlab_L30_21_m25spect2[97]; + static const double Colorlab_L15_10_m15spect2[97]; + static const double Colorlab_L60_26_m25spect[97]; + static const double Colorlab_L40_26_m45spect[97]; + static const double Colorlab_L40_26_m45spect2[97]; + static const double Colorlab_L20_10_m45spect[97]; + static const double Colorlab_L20_10_m45spect2[97]; + static const double Colorlab_L20_10_m45spect3[97]; + static const double ColorBlueSkyK3_spect2[97]; + static const double ColorBlueSkyK9_spect2[97]; + static const double ColorBlueSkyC4_spect2[97]; + static const double ColorBlueSkyC14_spect2[97]; + static const double ColorBlueSkyE4_spect2[97]; + static const double ColorBlueSkyM1_spect2[97]; + static const double ColorBlueSky2B1_spect2[97]; + static const double ColorBlueSkyT7_spect2[97]; + static const double ColorBlueSkyU19_spect2[97]; + static const double ColorBlueSkyU2_spect2[97]; + static const double Colorlab_L40_1_m40spect[97]; + static const double Colorlab_L30_4_m30spect[97]; + static const double Colorlab_L8_11_m25spect[97]; + static const double Colorlab_L40_1_m40spect2[97]; + static const double Colorlab_L30_4_m30spect2[97]; + static const double Colorlab_L8_11_m25spect2[97]; + static const double Colorlab_L26_m8_m25spect[97]; + static const double Colorlab_L26_m8_m25spect2[97]; + static const double Colorlab_L26_m8_m25spect3[97]; + static const double Colorlab_L22_1_m42spect[97]; + static const double Colorlab_L22_1_m42spect2[97]; + static const double Colorlab_L22_1_m42spect3[97]; + static const double Colorlab_L22_1_m42spect4[97]; + static const double Colorlab_L27_m1_m47spect[97]; + static const double Colorlab_L27_m1_m47spect2[97]; + static const double Colorlab_L40_30_m30spect[97]; + static const double Colorlab_L40_30_m30spect2[97]; + static const double Colorlab_L40_20_m35spect[97]; + static const double Colorlab_L40_20_m35spect2[97]; + static void spectrum_to_xyz_daylight (double _m1, double _m2, double &x, double &y, double &z, const color_match_type &color_match); static void spectrum_to_xyz_blackbody (double _temp, double &x, double &y, double &z, const color_match_type &color_match); static void spectrum_to_xyz_preset (const double* spec_intens, double &x, double &y, double &z, const color_match_type &color_match); @@ -398,6 +638,9 @@ public: static void spectrum_to_color_xyz_daylight (const double* spec_color, double _m1, double _m2, double &xx, double &yy, double &zz, const color_match_type &color_match); static void spectrum_to_color_xyz_blackbody (const double* spec_color, double _temp, double &xx, double &yy, double &zz, const color_match_type &color_match); static void spectrum_to_color_xyz_preset (const double* spec_color, const double* spec_intens, double &xx, double &yy, double &zz, const color_match_type &color_match); + static void spectrum_to_whitepoint_xyz_daylight (double _m1, double _m2, double &xx, double &yy, double &zz, const color_match_type &color_match); + static void spectrum_to_whitepoint_xyz_blackbody (double _temp, double &xx, double &yy, double &zz, const color_match_type &color_match); + static void whitepoint (double tempw, double &xx, double &yy, double &zz,const color_match_type &color_match); }; } diff --git a/rtengine/dcp.cc b/rtengine/dcp.cc index b65bb5f72..940b3c0c0 100644 --- a/rtengine/dcp.cc +++ b/rtengine/dcp.cc @@ -24,6 +24,7 @@ #include #include #include +#include #include "dcp.h" @@ -35,11 +36,9 @@ #include "rawimagesource.h" #include "rt_math.h" #include "utils.h" -#include "../rtexif/rtexif.h" #include "../rtgui/options.h" using namespace rtengine; -using namespace rtexif; namespace { @@ -430,8 +429,392 @@ std::map getAliases(const Glib::ustring& profile_dir) return res; } +/** + * Returns a locale-independent case-insensitive collate key. Differs from + * Glib::ustring::casefold_collate_key() in that the Glib method may return + * different results depending on the current locale. + */ +std::string casefold_collate_key(const Glib::ustring &str) +{ + return str.casefold().raw(); } +class DCPMetadata +{ +private: + enum TagType { + INVALID = 0, + BYTE = 1, + ASCII = 2, + SHORT = 3, + LONG = 4, + RATIONAL = 5, + SBYTE = 6, + UNDEFINED = 7, + SSHORT = 8, + SLONG = 9, + SRATIONAL = 10, + FLOAT = 11, + DOUBLE = 12 + }; + + enum ByteOrder { + UNKNOWN = 0, + INTEL = 0x4949, + MOTOROLA = 0x4D4D + }; + +public: + explicit DCPMetadata(FILE *file) : + file_(file), + order_(UNKNOWN) + { + } + + bool parse() + { + if (!file_) { +#ifndef NDEBUG + std::cerr << "ERROR: No file opened." << std::endl; +#endif + return false; + } + + setlocale(LC_NUMERIC, "C"); // to set decimal point in sscanf + + // read tiff header + std::fseek(file_, 0, SEEK_SET); + std::uint16_t bo; + std::fread(&bo, 1, 2, file_); + order_ = ByteOrder(bo); + + get2(); // Skip + + // Seek to IFD + const std::size_t offset = get4(); + std::fseek(file_, offset, SEEK_SET); + + // First read the IFD directory + const std::uint16_t numtags = get2(); + + if (numtags > 1000) { // KodakIfd has lots of tags, thus 1000 as the limit + return false; + } + + for (std::uint16_t i = 0; i < numtags; ++i) { + Tag tag; + if (parseTag(tag)) { + tags_[tag.id] = std::move(tag); + } + } + + return true; + } + + bool find(int id) const + { + return tags_.find(id) != tags_.end(); + } + + std::string toString(int id) const + { + const Tags::const_iterator tag = tags_.find(id); + if (tag != tags_.end()) { + if (tag->second.type == ASCII) { + return std::string(tag->second.value.begin(), tag->second.value.end()).c_str(); + } + } + return {}; + } + + std::int32_t toInt(int id, std::size_t offset = 0, TagType as_type = INVALID) const + { + const Tags::const_iterator tag = tags_.find(id); + if (tag == tags_.end()) { + return 0; + } + + if (as_type == INVALID) { + as_type = tag->second.type; + } + + switch (as_type) { + case SBYTE: { + if (offset < tag->second.value.size()) { + return static_cast(tag->second.value[offset]); + } + return 0; + } + + case BYTE: { + if (offset < tag->second.value.size()) { + return tag->second.value[offset]; + } + return 0; + } + + case SSHORT: { + if (offset + 1 < tag->second.value.size()) { + return static_cast(sget2(tag->second.value.data() + offset)); + } + return 0; + } + + case SHORT: { + if (offset + 1 < tag->second.value.size()) { + return sget2(tag->second.value.data() + offset); + } + return 0; + } + + case SLONG: + case LONG: { + if (offset + 3 < tag->second.value.size()) { + return sget4(tag->second.value.data() + offset); + } + return 0; + } + + case SRATIONAL: + case RATIONAL: { + if (offset + 7 < tag->second.value.size()) { + const std::uint32_t denominator = sget4(tag->second.value.data() + offset + 4); + return + denominator == 0 + ? 0 + : static_cast(sget4(tag->second.value.data() + offset)) / denominator; + } + return 0; + } + + case FLOAT: { + return toDouble(id, offset); + } + + default: { + return 0; + } + } + } + + int toShort(int id, std::size_t offset = 0) const + { + return toInt(id, offset, SHORT); + } + + double toDouble(int id, std::size_t offset = 0) const + { + const Tags::const_iterator tag = tags_.find(id); + if (tag == tags_.end()) { + return 0.0; + } + + switch (tag->second.type) { + case SBYTE: { + if (offset < tag->second.value.size()) { + return static_cast(tag->second.value[offset]); + } + return 0.0; + } + + case BYTE: { + if (offset < tag->second.value.size()) { + return tag->second.value[offset]; + } + return 0.0; + } + + case SSHORT: { + if (offset + 1 < tag->second.value.size()) { + return static_cast(sget2(tag->second.value.data() + offset)); + } + return 0.0; + } + + case SHORT: { + if (offset + 1 < tag->second.value.size()) { + return sget2(tag->second.value.data() + offset); + } + return 0.0; + } + + case SLONG: + case LONG: { + if (offset + 3 < tag->second.value.size()) { + return sget4(tag->second.value.data() + offset); + } + return 0.0; + } + + case SRATIONAL: + case RATIONAL: { + if (offset + 7 < tag->second.value.size()) { + const std::int32_t numerator = sget4(tag->second.value.data() + offset); + const std::int32_t denominator = sget4(tag->second.value.data() + offset + 4); + return + denominator == 0 + ? 0.0 + : static_cast(numerator) / static_cast(denominator); + } + return 0.0; + } + + case FLOAT: { + if (offset + 3 < tag->second.value.size()) { + union IntFloat { + std::uint32_t i; + float f; + } conv; + + conv.i = sget4(tag->second.value.data() + offset); + return conv.f; // IEEE FLOATs are already C format, they just need a recast + } + return 0.0; + } + + default: { + return 0.0; + } + } + } + + unsigned int getCount(int id) const + { + const Tags::const_iterator tag = tags_.find(id); + if (tag != tags_.end()) { + return tag->second.count; + } + return 0; + } + +private: + struct Tag { + int id; + std::vector value; + TagType type; + unsigned int count; + }; + + using Tags = std::unordered_map; + + std::uint16_t sget2(const std::uint8_t* s) const + { + if (order_ == INTEL) { + return s[0] | s[1] << 8; + } else { + return s[0] << 8 | s[1]; + } + } + + std::uint32_t sget4(const std::uint8_t* s) const + { + if (order_ == INTEL) { + return s[0] | s[1] << 8 | s[2] << 16 | s[3] << 24; + } else { + return s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3]; + } + } + + std::uint16_t get2() + { + std::uint16_t res = std::numeric_limits::max(); + std::fread(&res, 1, 2, file_); + return sget2(reinterpret_cast(&res)); + } + + std::uint32_t get4() + { + std::uint32_t res = std::numeric_limits::max(); + std::fread(&res, 1, 4, file_); + return sget4(reinterpret_cast(&res)); + } + + static int getTypeSize(TagType type) + { + switch (type) { + case INVALID: + case BYTE: + case ASCII: + case SBYTE: + case UNDEFINED: { + return 1; + } + + case SHORT: + case SSHORT: { + return 2; + } + + case LONG: + case SLONG: + case FLOAT: { + return 4; + } + + case RATIONAL: + case SRATIONAL: + case DOUBLE: { + return 8; + } + } + + return 1; + } + + bool parseTag(Tag& tag) + { + tag.id = get2(); + tag.type = TagType(get2()); + tag.count = std::max(1U, get4()); + + // Filter out invalid tags + // Note: The large count is to be able to pass LeafData ASCII tag which can be up to almost 10 megabytes, + // (only a small part of it will actually be parsed though) + if ( + tag.type == INVALID + || tag.type > DOUBLE + || tag.count > 10 * 1024 * 1024 + ) { + tag.type = INVALID; + return false; + } + + // Store next Tag's position in file + const std::size_t saved_position = std::ftell(file_) + 4; + + // Load value field (possibly seek before) + const std::size_t value_size = static_cast(tag.count) * getTypeSize(tag.type); + + if (value_size > 4) { + if (std::fseek(file_, get4(), SEEK_SET) == -1) { + tag.type = INVALID; + return false; + } + } + + // Read value + tag.value.resize(value_size + 1); + const std::size_t read = std::fread(tag.value.data(), 1, value_size, file_); + if (read != value_size) { + tag.type = INVALID; + return false; + } + tag.value[read] = '\0'; + + // Seek back to the saved position + std::fseek(file_, saved_position, SEEK_SET); + + return true; + } + + FILE* const file_; + + Tags tags_; + ByteOrder order_; +}; + +} // namespace + struct DCPProfileApplyState::Data { float pro_photo[3][3]; float work[3][3]; @@ -462,23 +845,23 @@ DCPProfile::DCPProfile(const Glib::ustring& filename) : delta_info.hue_step = delta_info.val_step = look_info.hue_step = look_info.val_step = 0; constexpr int tiff_float_size = 4; - enum class TagKey : int { - COLOR_MATRIX_1 = 50721, - COLOR_MATRIX_2 = 50722, - PROFILE_HUE_SAT_MAP_DIMS = 50937, - PROFILE_HUE_SAT_MAP_DATA_1 = 50938, - PROFILE_HUE_SAT_MAP_DATA_2 = 50939, - PROFILE_TONE_CURVE = 50940, - PROFILE_TONE_COPYRIGHT = 50942, - CALIBRATION_ILLUMINANT_1 = 50778, - CALIBRATION_ILLUMINANT_2 = 50779, - FORWARD_MATRIX_1 = 50964, - FORWARD_MATRIX_2 = 50965, - PROFILE_LOOK_TABLE_DIMS = 50981, // ProfileLookup is the low quality variant - PROFILE_LOOK_TABLE_DATA = 50982, - PROFILE_HUE_SAT_MAP_ENCODING = 51107, - PROFILE_LOOK_TABLE_ENCODING = 51108, - BASELINE_EXPOSURE_OFFSET = 51109 + enum TagKey { + TAG_KEY_COLOR_MATRIX_1 = 50721, + TAG_KEY_COLOR_MATRIX_2 = 50722, + TAG_KEY_PROFILE_HUE_SAT_MAP_DIMS = 50937, + TAG_KEY_PROFILE_HUE_SAT_MAP_DATA_1 = 50938, + TAG_KEY_PROFILE_HUE_SAT_MAP_DATA_2 = 50939, + TAG_KEY_PROFILE_TONE_CURVE = 50940, + TAG_KEY_PROFILE_TONE_COPYRIGHT = 50942, + TAG_KEY_CALIBRATION_ILLUMINANT_1 = 50778, + TAG_KEY_CALIBRATION_ILLUMINANT_2 = 50779, + TAG_KEY_FORWARD_MATRIX_1 = 50964, + TAG_KEY_FORWARD_MATRIX_2 = 50965, + TAG_KEY_PROFILE_LOOK_TABLE_DIMS = 50981, // ProfileLookup is the low quality variant + TAG_KEY_PROFILE_LOOK_TABLE_DATA = 50982, + TAG_KEY_PROFILE_HUE_SAT_MAP_ENCODING = 51107, + TAG_KEY_PROFILE_LOOK_TABLE_ENCODING = 51108, + TAG_KEY_BASELINE_EXPOSURE_OFFSET = 51109 }; static const float adobe_camera_raw_default_curve[] = { @@ -748,54 +1131,48 @@ DCPProfile::DCPProfile(const Glib::ustring& filename) : return; } - ExifManager exifManager(file, nullptr, true); - exifManager.parseTIFF(false); - std::unique_ptr tagDir(exifManager.roots.at(0)); + DCPMetadata md(file); + if (!md.parse()) { + printf ("Unable to load DCP profile '%s'.", filename.c_str()); + return; + } - Tag* tag = tagDir->getTag(toUnderlying(TagKey::CALIBRATION_ILLUMINANT_1)); light_source_1 = - tag - ? tag->toInt(0, rtexif::SHORT) - : -1; - tag = tagDir->getTag(toUnderlying(TagKey::CALIBRATION_ILLUMINANT_2)); + md.find(TAG_KEY_CALIBRATION_ILLUMINANT_1) + ? md.toShort(TAG_KEY_CALIBRATION_ILLUMINANT_1) + : -1; light_source_2 = - tag - ? tag->toInt(0, rtexif::SHORT) - : -1; + md.find(TAG_KEY_CALIBRATION_ILLUMINANT_2) + ? md.toShort(TAG_KEY_CALIBRATION_ILLUMINANT_2) + : -1; temperature_1 = calibrationIlluminantToTemperature(light_source_1); temperature_2 = calibrationIlluminantToTemperature(light_source_2); - const bool has_second_hue_sat = tagDir->getTag(toUnderlying(TagKey::PROFILE_HUE_SAT_MAP_DATA_2)); // Some profiles have two matrices, but just one huesat + const bool has_second_hue_sat = md.find(TAG_KEY_PROFILE_HUE_SAT_MAP_DATA_2); // Some profiles have two matrices, but just one huesat // Fetch Forward Matrices, if any - tag = tagDir->getTag(toUnderlying(TagKey::FORWARD_MATRIX_1)); - - if (tag) { - has_forward_matrix_1 = true; + has_forward_matrix_1 = md.find(TAG_KEY_FORWARD_MATRIX_1); + if (has_forward_matrix_1) { for (int row = 0; row < 3; ++row) { for (int col = 0; col < 3; ++col) { - forward_matrix_1[row][col] = tag->toDouble((col + row * 3) * 8); + forward_matrix_1[row][col] = md.toDouble(TAG_KEY_FORWARD_MATRIX_1, (col + row * 3) * 8); } } } - tag = tagDir->getTag(toUnderlying(TagKey::FORWARD_MATRIX_2)); - - if (tag) { - has_forward_matrix_2 = true; + has_forward_matrix_2 = md.find(TAG_KEY_FORWARD_MATRIX_2); + if (has_forward_matrix_2) { for (int row = 0; row < 3; ++row) { for (int col = 0; col < 3; ++col) { - forward_matrix_2[row][col] = tag->toDouble((col + row * 3) * 8); + forward_matrix_2[row][col] = md.toDouble(TAG_KEY_FORWARD_MATRIX_2, (col + row * 3) * 8); } } } // Color Matrix (one is always there) - tag = tagDir->getTag(toUnderlying(TagKey::COLOR_MATRIX_1)); - - if (!tag) { + if (!md.find(TAG_KEY_COLOR_MATRIX_1)) { std::cerr << "DCP '" << filename << "' is missing 'ColorMatrix1'. Skipped." << std::endl; fclose(file); return; @@ -805,29 +1182,24 @@ DCPProfile::DCPProfile(const Glib::ustring& filename) : for (int row = 0; row < 3; ++row) { for (int col = 0; col < 3; ++col) { - color_matrix_1[row][col] = tag->toDouble((col + row * 3) * 8); + color_matrix_1[row][col] = md.toDouble(TAG_KEY_COLOR_MATRIX_1, (col + row * 3) * 8); } } - tag = tagDir->getTag(toUnderlying(TagKey::PROFILE_LOOK_TABLE_DIMS)); + if (md.find(TAG_KEY_PROFILE_LOOK_TABLE_DIMS)) { + look_info.hue_divisions = md.toInt(TAG_KEY_PROFILE_LOOK_TABLE_DIMS, 0); + look_info.sat_divisions = md.toInt(TAG_KEY_PROFILE_LOOK_TABLE_DIMS, 4); + look_info.val_divisions = md.toInt(TAG_KEY_PROFILE_LOOK_TABLE_DIMS, 8); - if (tag) { - look_info.hue_divisions = tag->toInt(0); - look_info.sat_divisions = tag->toInt(4); - look_info.val_divisions = tag->toInt(8); - - tag = tagDir->getTag(toUnderlying(TagKey::PROFILE_LOOK_TABLE_ENCODING)); - look_info.srgb_gamma = tag && tag->toInt(0); - - tag = tagDir->getTag(toUnderlying(TagKey::PROFILE_LOOK_TABLE_DATA)); - look_info.array_count = tag->getCount() / 3; + look_info.srgb_gamma = md.find(TAG_KEY_PROFILE_LOOK_TABLE_ENCODING) && md.toInt(TAG_KEY_PROFILE_LOOK_TABLE_ENCODING); + look_info.array_count = md.getCount(TAG_KEY_PROFILE_LOOK_TABLE_DATA) / 3; look_table.resize(look_info.array_count); for (unsigned int i = 0; i < look_info.array_count; i++) { - look_table[i].hue_shift = tag->toDouble((i * 3) * tiff_float_size); - look_table[i].sat_scale = tag->toDouble((i * 3 + 1) * tiff_float_size); - look_table[i].val_scale = tag->toDouble((i * 3 + 2) * tiff_float_size); + look_table[i].hue_shift = md.toDouble(TAG_KEY_PROFILE_LOOK_TABLE_DATA, (i * 3) * tiff_float_size); + look_table[i].sat_scale = md.toDouble(TAG_KEY_PROFILE_LOOK_TABLE_DATA, (i * 3 + 1) * tiff_float_size); + look_table[i].val_scale = md.toDouble(TAG_KEY_PROFILE_LOOK_TABLE_DATA, (i * 3 + 2) * tiff_float_size); } // Precalculated constants for table application @@ -844,25 +1216,20 @@ DCPProfile::DCPProfile(const Glib::ustring& filename) : look_info.pc.val_step = look_info.hue_divisions * look_info.pc.hue_step; } - tag = tagDir->getTag(toUnderlying(TagKey::PROFILE_HUE_SAT_MAP_DIMS)); + if (md.find(TAG_KEY_PROFILE_HUE_SAT_MAP_DIMS)) { + delta_info.hue_divisions = md.toInt(TAG_KEY_PROFILE_HUE_SAT_MAP_DIMS, 0); + delta_info.sat_divisions = md.toInt(TAG_KEY_PROFILE_HUE_SAT_MAP_DIMS, 4); + delta_info.val_divisions = md.toInt(TAG_KEY_PROFILE_HUE_SAT_MAP_DIMS, 8); - if (tag) { - delta_info.hue_divisions = tag->toInt(0); - delta_info.sat_divisions = tag->toInt(4); - delta_info.val_divisions = tag->toInt(8); - - tag = tagDir->getTag(toUnderlying(TagKey::PROFILE_HUE_SAT_MAP_ENCODING)); - delta_info.srgb_gamma = tag && tag->toInt(0); - - tag = tagDir->getTag(toUnderlying(TagKey::PROFILE_HUE_SAT_MAP_DATA_1)); - delta_info.array_count = tag->getCount() / 3; + delta_info.srgb_gamma = md.find(TAG_KEY_PROFILE_HUE_SAT_MAP_ENCODING) && md.toInt(TAG_KEY_PROFILE_HUE_SAT_MAP_ENCODING); + delta_info.array_count = md.getCount(TAG_KEY_PROFILE_HUE_SAT_MAP_DATA_1) / 3; deltas_1.resize(delta_info.array_count); for (unsigned int i = 0; i < delta_info.array_count; ++i) { - deltas_1[i].hue_shift = tag->toDouble((i * 3) * tiff_float_size); - deltas_1[i].sat_scale = tag->toDouble((i * 3 + 1) * tiff_float_size); - deltas_1[i].val_scale = tag->toDouble((i * 3 + 2) * tiff_float_size); + deltas_1[i].hue_shift = md.toDouble(TAG_KEY_PROFILE_HUE_SAT_MAP_DATA_1, (i * 3) * tiff_float_size); + deltas_1[i].sat_scale = md.toDouble(TAG_KEY_PROFILE_HUE_SAT_MAP_DATA_1, (i * 3 + 1) * tiff_float_size); + deltas_1[i].val_scale = md.toDouble(TAG_KEY_PROFILE_HUE_SAT_MAP_DATA_1, (i * 3 + 2) * tiff_float_size); } delta_info.pc.h_scale = @@ -882,14 +1249,14 @@ DCPProfile::DCPProfile(const Glib::ustring& filename) : // Second matrix has_color_matrix_2 = true; - tag = tagDir->getTag(toUnderlying(TagKey::COLOR_MATRIX_2)); + const bool cm2 = md.find(TAG_KEY_COLOR_MATRIX_2); for (int row = 0; row < 3; ++row) { for (int col = 0; col < 3; ++col) { color_matrix_2[row][col] = - tag - ? tag->toDouble((col + row * 3) * 8) - : color_matrix_1[row][col]; + cm2 + ? md.toDouble(TAG_KEY_COLOR_MATRIX_2, (col + row * 3) * 8) + : color_matrix_1[row][col]; } } @@ -898,27 +1265,21 @@ DCPProfile::DCPProfile(const Glib::ustring& filename) : deltas_2.resize(delta_info.array_count); // Saturation maps. Need to be unwinded. - tag = tagDir->getTag(toUnderlying(TagKey::PROFILE_HUE_SAT_MAP_DATA_2)); - for (unsigned int i = 0; i < delta_info.array_count; ++i) { - deltas_2[i].hue_shift = tag->toDouble((i * 3) * tiff_float_size); - deltas_2[i].sat_scale = tag->toDouble((i * 3 + 1) * tiff_float_size); - deltas_2[i].val_scale = tag->toDouble((i * 3 + 2) * tiff_float_size); + deltas_2[i].hue_shift = md.toDouble(TAG_KEY_PROFILE_HUE_SAT_MAP_DATA_2, (i * 3) * tiff_float_size); + deltas_2[i].sat_scale = md.toDouble(TAG_KEY_PROFILE_HUE_SAT_MAP_DATA_2, (i * 3 + 1) * tiff_float_size); + deltas_2[i].val_scale = md.toDouble(TAG_KEY_PROFILE_HUE_SAT_MAP_DATA_2, (i * 3 + 2) * tiff_float_size); } } } - tag = tagDir->getTag(toUnderlying(TagKey::BASELINE_EXPOSURE_OFFSET)); - - if (tag) { - has_baseline_exposure_offset = true; - baseline_exposure_offset = tag->toDouble(); + has_baseline_exposure_offset = md.find(TAG_KEY_BASELINE_EXPOSURE_OFFSET); + if (has_baseline_exposure_offset) { + baseline_exposure_offset = md.toDouble(TAG_KEY_BASELINE_EXPOSURE_OFFSET); } // Read tone curve points, if any, but disable to RTs own profiles - tag = tagDir->getTag(toUnderlying(TagKey::PROFILE_TONE_CURVE)); - - if (tag) { + if (md.find(TAG_KEY_PROFILE_TONE_CURVE)) { std::vector curve_points = { static_cast(DCT_Spline) // The first value is the curve type }; @@ -926,9 +1287,9 @@ DCPProfile::DCPProfile(const Glib::ustring& filename) : // Push back each X/Y coordinates in a loop bool curve_is_linear = true; - for (int i = 0; i < tag->getCount(); i += 2) { - const double x = tag->toDouble((i + 0) * tiff_float_size); - const double y = tag->toDouble((i + 1) * tiff_float_size); + for (unsigned int i = 0, n = md.getCount(TAG_KEY_PROFILE_TONE_CURVE); i < n; i += 2) { + const double x = md.toDouble(TAG_KEY_PROFILE_TONE_CURVE, (i + 0) * tiff_float_size); + const double y = md.toDouble(TAG_KEY_PROFILE_TONE_CURVE, (i + 1) * tiff_float_size); if (x != y) { curve_is_linear = false; @@ -944,9 +1305,7 @@ DCPProfile::DCPProfile(const Glib::ustring& filename) : tone_curve.Set(DiagonalCurve(curve_points, CURVES_MIN_POLY_POINTS)); } } else { - tag = tagDir->getTag(toUnderlying(TagKey::PROFILE_TONE_COPYRIGHT)); - - if (tag && tag->valueToString().find("Adobe Systems") != std::string::npos) { + if (md.find(TAG_KEY_PROFILE_TONE_COPYRIGHT) && md.toString(TAG_KEY_PROFILE_TONE_COPYRIGHT).find("Adobe Systems") != std::string::npos) { // An Adobe profile without tone curve is expected to have the Adobe Default Curve, we add that std::vector curve_points = { static_cast(DCT_Spline) @@ -1799,7 +2158,7 @@ void DCPStore::init(const Glib::ustring& rt_profile_dir, bool loadAll) std::deque dirs = { rt_profile_dir, - Glib::build_filename(options.rtdir, "dcpprofiles") + Glib::build_filename(options.rtdir, "dcpprofiles") }; while (!dirs.empty()) { @@ -1831,7 +2190,7 @@ void DCPStore::init(const Glib::ustring& rt_profile_dir, bool loadAll) && lastdot <= sname.size() - 4 && !sname.casefold().compare(lastdot, 4, ".dcp") ) { - file_std_profiles[sname.substr(0, lastdot).casefold_collate_key()] = fname; // They will be loaded and cached on demand + file_std_profiles[casefold_collate_key(sname.substr(0, lastdot))] = fname; // They will be loaded and cached on demand } } else { // Directory @@ -1842,10 +2201,10 @@ void DCPStore::init(const Glib::ustring& rt_profile_dir, bool loadAll) for (const auto& alias : getAliases(rt_profile_dir)) { const Glib::ustring alias_name = Glib::ustring(alias.first).uppercase(); - const std::map::const_iterator real = file_std_profiles.find(Glib::ustring(alias.second).casefold_collate_key()); + const std::map::const_iterator real = file_std_profiles.find(casefold_collate_key(alias.second)); if (real != file_std_profiles.end()) { - file_std_profiles[alias_name.casefold_collate_key()] = real->second; + file_std_profiles[casefold_collate_key(alias_name)] = real->second; } } } @@ -1892,7 +2251,7 @@ DCPProfile* DCPStore::getProfile(const Glib::ustring& filename) const DCPProfile* DCPStore::getStdProfile(const Glib::ustring& requested_cam_short_name) const { - const std::map::const_iterator iter = file_std_profiles.find(requested_cam_short_name.casefold_collate_key()); + const std::map::const_iterator iter = file_std_profiles.find(casefold_collate_key(requested_cam_short_name)); if (iter != file_std_profiles.end()) { return getProfile(iter->second); } diff --git a/rtengine/dcraw.c b/rtengine/dcraw.c index 9ce6d4d3c..f97407f26 100644 --- a/rtengine/dcraw.c +++ b/rtengine/dcraw.c @@ -51,7 +51,7 @@ #ifdef __CYGWIN__ #include #endif -#ifdef WIN32 +#ifdef _WIN32 #include #include #pragma comment(lib, "ws2_32.lib") @@ -3846,7 +3846,7 @@ void CLASS bad_pixels (const char *cfname) free (fname); if (errno != ERANGE) return; } -#if defined(WIN32) || defined(DJGPP) +#if defined(_WIN32) || defined(DJGPP) if (fname[1] == ':') memmove (fname, fname+2, len-2); for (cp=fname; *cp; cp++) @@ -9979,7 +9979,7 @@ int CLASS main (int argc, const char **argv) fprintf (stderr,_("Will not write an image to the terminal!\n")); return 1; } -#if defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) +#if defined(_WIN32) || defined(DJGPP) || defined(__CYGWIN__) if (setmode(1,O_BINARY) < 0) { perror ("setmode()"); return 1; diff --git a/rtengine/dcraw.cc b/rtengine/dcraw.cc index c7bcfc910..efa119d07 100644 --- a/rtengine/dcraw.cc +++ b/rtengine/dcraw.cc @@ -86,7 +86,7 @@ #ifdef __CYGWIN__ #include #endif -#ifdef WIN32 +#ifdef _WIN32 #include #include #ifndef strcasecmp @@ -4516,7 +4516,7 @@ mask_set: // free (fname); // if (errno != ERANGE) return; // } -//#if defined(WIN32) || defined(DJGPP) +//#if defined(_WIN32) || defined(DJGPP) // if (fname[1] == ':') // memmove (fname, fname+2, len-2); // for (cp=fname; *cp; cp++) @@ -8675,7 +8675,8 @@ void CLASS adobe_coeff (const char *make, const char *model) { "Olympus E-M5MarkII", 0, 0, { 9422,-3258,-711,-2655,10898,2015,-512,1354,5512 } }, { "Olympus E-M5", 0, 0xfe1, - { 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } }, + { 8380,-2630,-639,-2887,10725,2496,-627,1427,5438 } },//D65 +// { 9033,-3597, 26,-2351, 9700, 3111, -181, 807, 5838} },//stDA { "Olympus PEN-F", 0, 0, { 9476,-3182,-765,-2613,10958,1893,-449,1315,5268 } }, { "Olympus SH-2", 0, 0, diff --git a/rtengine/dcraw.h b/rtengine/dcraw.h index aadc0b969..4f1db420c 100644 --- a/rtengine/dcraw.h +++ b/rtengine/dcraw.h @@ -33,7 +33,7 @@ public: typedef unsigned short ushort; typedef unsigned char uchar; typedef unsigned short (*dcrawImage_t)[4]; -#ifdef WIN32 +#ifdef _WIN32 typedef __int64 INT64; typedef unsigned __int64 UINT64; #else diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index bce6f2291..6abfc7aba 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -231,18 +231,18 @@ void Crop::update(int todo) if (settings->leveldnautsimpl == 1) { if (params.dirpyrDenoise.Cmethod == "MAN" || params.dirpyrDenoise.Cmethod == "PON") { PreviewProps pp(trafx, trafy, trafw * skip, trafh * skip, skip); - parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw, 0); + parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw); } } else { if (params.dirpyrDenoise.C2method == "MANU") { PreviewProps pp(trafx, trafy, trafw * skip, trafh * skip, skip); - parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw, 0); + parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw); } } if ((settings->leveldnautsimpl == 1 && params.dirpyrDenoise.Cmethod == "PRE") || (settings->leveldnautsimpl == 0 && params.dirpyrDenoise.C2method == "PREV")) { PreviewProps pp(trafx, trafy, trafw * skip, trafh * skip, skip); - parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw, 0); + parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw); if ((!isDetailWindow) && parent->adnListener && skip == 1 && params.dirpyrDenoise.enabled) { float lowdenoise = 1.f; @@ -454,7 +454,7 @@ void Crop::update(int todo) for (int wcr = 0; wcr <= 2; wcr++) { for (int hcr = 0; hcr <= 2; hcr++) { PreviewProps ppP(coordW[wcr], coordH[hcr], crW, crH, 1); - parent->imgsrc->getImage(parent->currWB, tr, origCropPart, ppP, params.toneCurve, params.raw, 0); + parent->imgsrc->getImage(parent->currWB, tr, origCropPart, ppP, params.toneCurve, params.raw); // we only need image reduced to 1/4 here for (int ii = 0; ii < crH; ii += 2) { @@ -615,7 +615,7 @@ void Crop::update(int todo) // if (params.dirpyrDenoise.Cmethod=="AUT" || params.dirpyrDenoise.Cmethod=="PON") {//reinit origCrop after Auto if ((settings->leveldnautsimpl == 1 && params.dirpyrDenoise.Cmethod == "AUT") || (settings->leveldnautsimpl == 0 && params.dirpyrDenoise.C2method == "AUTO")) { //reinit origCrop after Auto PreviewProps pp(trafx, trafy, trafw * skip, trafh * skip, skip); - parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw, 0); + parent->imgsrc->getImage(parent->currWB, tr, origCrop, pp, params.toneCurve, params.raw); } if ((todo & M_SPOT) && params.spot.enabled && !params.spot.entries.empty()) { @@ -751,7 +751,7 @@ void Crop::update(int todo) fattalCrop.reset(f); PreviewProps pp(0, 0, parent->fw, parent->fh, skip); int tr = getCoarseBitMask(params.coarse); - parent->imgsrc->getImage(parent->currWB, tr, f, pp, params.toneCurve, params.raw, 0); + parent->imgsrc->getImage(parent->currWB, tr, f, pp, params.toneCurve, params.raw); parent->imgsrc->convertColorSpace(f, params.icm, parent->currWB); if (params.dirpyrDenoise.enabled || params.filmNegative.enabled || params.spot.enabled) { @@ -1765,6 +1765,11 @@ void Crop::freeAll() shbuffer = nullptr; } + if (shbuf_real) { + delete [] shbuf_real; + shbuf_real = nullptr; + } + PipetteBuffer::flush(); } diff --git a/rtengine/dfmanager.cc b/rtengine/dfmanager.cc index 34215e58c..52de10339 100644 --- a/rtengine/dfmanager.cc +++ b/rtengine/dfmanager.cc @@ -569,7 +569,7 @@ dfInfo* rtengine::DFManager::Implementation::addFileInfo(const Glib::ustring& fi return &(iter->second); } - FramesData idata(filename, std::unique_ptr(new RawMetaDataLocation(ri.get_exifBase(), ri.get_ciffBase(), ri.get_ciffLen())), true); + FramesData idata(filename); /* Files are added in the map, divided by same maker/model,ISO and shutter*/ std::string key(dfInfo::key(toUppercase(idata.getMake()), toUppercase(idata.getModel()), idata.getISOSpeed(), idata.getShutterSpeed())); auto iter = dfList.find(key); diff --git a/rtengine/dynamicprofile.cc b/rtengine/dynamicprofile.cc index 32be2ceb2..774d23ee9 100644 --- a/rtengine/dynamicprofile.cc +++ b/rtengine/dynamicprofile.cc @@ -88,7 +88,7 @@ bool DynamicProfileRule::matches (const rtengine::FramesMetaData *im, const Gli && camera (im->getCamera()) && lens (im->getLens()) && path (filename) - && imagetype(im->getImageType(0))); + && imagetype(im->getImageType())); } namespace @@ -221,7 +221,7 @@ bool DynamicProfileRules::loadRules() try { rule.profilepath = kf.get_string (group, "profilepath"); - #if defined (WIN32) + #if defined (_WIN32) // if this is Windows, replace any "/" in the path with "\\" size_t pos = rule.profilepath.find("/"); while (pos != Glib::ustring::npos) { @@ -229,7 +229,7 @@ bool DynamicProfileRules::loadRules() pos = rule.profilepath.find("/", pos); } #endif - #if !defined (WIN32) + #if !defined (_WIN32) // if this is not Windows, replace any "\\" in the path with "/" size_t pos = rule.profilepath.find("\\"); while (pos != Glib::ustring::npos) { diff --git a/rtengine/ffmanager.cc b/rtengine/ffmanager.cc index c55bc5108..bd6428127 100644 --- a/rtengine/ffmanager.cc +++ b/rtengine/ffmanager.cc @@ -342,7 +342,7 @@ ffInfo* FFManager::addFileInfo (const Glib::ustring& filename, bool pool) return &(iter->second); } - FramesData idata(filename, std::unique_ptr(new RawMetaDataLocation(ri.get_exifBase(), ri.get_ciffBase(), ri.get_ciffLen())), true); + FramesData idata(filename); /* Files are added in the map, divided by same maker/model,lens and aperture*/ std::string key(ffInfo::key(idata.getMake(), idata.getModel(), idata.getLens(), idata.getFocalLen(), idata.getFNumber())); iter = ffList.find(key); diff --git a/rtengine/filmnegativeproc.cc b/rtengine/filmnegativeproc.cc index eb029d77a..416f495c5 100644 --- a/rtengine/filmnegativeproc.cc +++ b/rtengine/filmnegativeproc.cc @@ -84,7 +84,7 @@ void getSpotAvgMax(ImageSource *imgsrc, ColorTemp currWB, const std::unique_ptr< } rtengine::Imagefloat spotImg(spotSize, spotSize); - imgsrc->getImage(currWB, tr, &spotImg, pp, params->toneCurve, params->raw, 0); + imgsrc->getImage(currWB, tr, &spotImg, pp, params->toneCurve, params->raw); auto avgMax = [spotSize, &spotImg](RGB & avg, RGB & max) -> void { avg = {}; diff --git a/rtengine/gauss.cc b/rtengine/gauss.cc index 99201a860..0575f73c0 100644 --- a/rtengine/gauss.cc +++ b/rtengine/gauss.cc @@ -19,6 +19,7 @@ #include #include #include +#include #include "gauss.h" @@ -1129,40 +1130,45 @@ template void gaussVertical (T** src, T** dst, const int W, const int H // process 'numcols' columns for better usage of L1 cpu cache (especially faster for large values of H) static const int numcols = 8; - double temp2[H][numcols] ALIGNED16; + std::vector temp2(H * numcols); double temp2Hm1[numcols], temp2H[numcols], temp2Hp1[numcols]; + + auto coord = + [](const int &x, const int &y) -> int { + return x * numcols + y; + }; #ifdef _OPENMP #pragma omp for nowait #endif for (unsigned int i = 0; i < static_cast(std::max(0, W - numcols + 1)); i += numcols) { for (int k = 0; k < numcols; k++) { - temp2[0][k] = B * src[0][i + k] + b1 * src[0][i + k] + b2 * src[0][i + k] + b3 * src[0][i + k]; - temp2[1][k] = B * src[1][i + k] + b1 * temp2[0][k] + b2 * src[0][i + k] + b3 * src[0][i + k]; - temp2[2][k] = B * src[2][i + k] + b1 * temp2[1][k] + b2 * temp2[0][k] + b3 * src[0][i + k]; + temp2[coord(0, k)] = B * src[0][i + k] + b1 * src[0][i + k] + b2 * src[0][i + k] + b3 * src[0][i + k]; + temp2[coord(1, k)] = B * src[1][i + k] + b1 * temp2[coord(0, k)] + b2 * src[0][i + k] + b3 * src[0][i + k]; + temp2[coord(2, k)] = B * src[2][i + k] + b1 * temp2[coord(1, k)] + b2 * temp2[coord(0, k)] + b3 * src[0][i + k]; } for (int j = 3; j < H; j++) { for (int k = 0; k < numcols; k++) { - temp2[j][k] = B * src[j][i + k] + b1 * temp2[j - 1][k] + b2 * temp2[j - 2][k] + b3 * temp2[j - 3][k]; + temp2[coord(j, k)] = B * src[j][i + k] + b1 * temp2[coord(j - 1, k)] + b2 * temp2[coord(j - 2, k)] + b3 * temp2[coord(j - 3, k)]; } } for (int k = 0; k < numcols; k++) { - temp2Hm1[k] = src[H - 1][i + k] + M[0][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[0][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[0][2] * (temp2[H - 3][k] - src[H - 1][i + k]); - temp2H[k] = src[H - 1][i + k] + M[1][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[1][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[1][2] * (temp2[H - 3][k] - src[H - 1][i + k]); - temp2Hp1[k] = src[H - 1][i + k] + M[2][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[2][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[2][2] * (temp2[H - 3][k] - src[H - 1][i + k]); + temp2Hm1[k] = src[H - 1][i + k] + M[0][0] * (temp2[coord(H - 1, k)] - src[H - 1][i + k]) + M[0][1] * (temp2[coord(H - 2, k)] - src[H - 1][i + k]) + M[0][2] * (temp2[coord(H - 3, k)] - src[H - 1][i + k]); + temp2H[k] = src[H - 1][i + k] + M[1][0] * (temp2[coord(H - 1, k)] - src[H - 1][i + k]) + M[1][1] * (temp2[coord(H - 2, k)] - src[H - 1][i + k]) + M[1][2] * (temp2[coord(H - 3, k)] - src[H - 1][i + k]); + temp2Hp1[k] = src[H - 1][i + k] + M[2][0] * (temp2[coord(H - 1, k)] - src[H - 1][i + k]) + M[2][1] * (temp2[coord(H - 2, k)] - src[H - 1][i + k]) + M[2][2] * (temp2[coord(H - 3, k)] - src[H - 1][i + k]); } for (int k = 0; k < numcols; k++) { - dst[H - 1][i + k] = temp2[H - 1][k] = temp2Hm1[k]; - dst[H - 2][i + k] = temp2[H - 2][k] = B * temp2[H - 2][k] + b1 * temp2[H - 1][k] + b2 * temp2H[k] + b3 * temp2Hp1[k]; - dst[H - 3][i + k] = temp2[H - 3][k] = B * temp2[H - 3][k] + b1 * temp2[H - 2][k] + b2 * temp2[H - 1][k] + b3 * temp2H[k]; + dst[H - 1][i + k] = temp2[coord(H - 1, k)] = temp2Hm1[k]; + dst[H - 2][i + k] = temp2[coord(H - 2, k)] = B * temp2[coord(H - 2, k)] + b1 * temp2[coord(H - 1, k)] + b2 * temp2H[k] + b3 * temp2Hp1[k]; + dst[H - 3][i + k] = temp2[coord(H - 3, k)] = B * temp2[coord(H - 3, k)] + b1 * temp2[coord(H - 2, k)] + b2 * temp2[coord(H - 1, k)] + b3 * temp2H[k]; } for (int j = H - 4; j >= 0; j--) { for (int k = 0; k < numcols; k++) { - dst[j][i + k] = temp2[j][k] = B * temp2[j][k] + b1 * temp2[j + 1][k] + b2 * temp2[j + 2][k] + b3 * temp2[j + 3][k]; + dst[j][i + k] = temp2[coord(j, k)] = B * temp2[coord(j, k)] + b1 * temp2[coord(j + 1, k)] + b2 * temp2[coord(j + 2, k)] + b3 * temp2[coord(j + 3, k)]; } } } @@ -1173,24 +1179,24 @@ template void gaussVertical (T** src, T** dst, const int W, const int H // process remaining columns for (int i = W - (W % numcols); i < W; i++) { - temp2[0][0] = B * src[0][i] + b1 * src[0][i] + b2 * src[0][i] + b3 * src[0][i]; - temp2[1][0] = B * src[1][i] + b1 * temp2[0][0] + b2 * src[0][i] + b3 * src[0][i]; - temp2[2][0] = B * src[2][i] + b1 * temp2[1][0] + b2 * temp2[0][0] + b3 * src[0][i]; + temp2[coord(0, 0)] = B * src[0][i] + b1 * src[0][i] + b2 * src[0][i] + b3 * src[0][i]; + temp2[coord(1, 0)] = B * src[1][i] + b1 * temp2[coord(0, 0)] + b2 * src[0][i] + b3 * src[0][i]; + temp2[coord(2, 0)] = B * src[2][i] + b1 * temp2[coord(1, 0)] + b2 * temp2[coord(0, 0)] + b3 * src[0][i]; for (int j = 3; j < H; j++) { - temp2[j][0] = B * src[j][i] + b1 * temp2[j - 1][0] + b2 * temp2[j - 2][0] + b3 * temp2[j - 3][0]; + temp2[coord(j, 0)] = B * src[j][i] + b1 * temp2[coord(j - 1, 0)] + b2 * temp2[coord(j - 2, 0)] + b3 * temp2[coord(j - 3, 0)]; } - double temp2Hm1 = src[H - 1][i] + M[0][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[0][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[0][2] * (temp2[H - 3][0] - src[H - 1][i]); - double temp2H = src[H - 1][i] + M[1][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[1][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[1][2] * (temp2[H - 3][0] - src[H - 1][i]); - double temp2Hp1 = src[H - 1][i] + M[2][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[2][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[2][2] * (temp2[H - 3][0] - src[H - 1][i]); + double temp2Hm1 = src[H - 1][i] + M[0][0] * (temp2[coord(H - 1, 0)] - src[H - 1][i]) + M[0][1] * (temp2[coord(H - 2, 0)] - src[H - 1][i]) + M[0][2] * (temp2[coord(H - 3, 0)] - src[H - 1][i]); + double temp2H = src[H - 1][i] + M[1][0] * (temp2[coord(H - 1, 0)] - src[H - 1][i]) + M[1][1] * (temp2[coord(H - 2, 0)] - src[H - 1][i]) + M[1][2] * (temp2[coord(H - 3, 0)] - src[H - 1][i]); + double temp2Hp1 = src[H - 1][i] + M[2][0] * (temp2[coord(H - 1, 0)] - src[H - 1][i]) + M[2][1] * (temp2[coord(H - 2, 0)] - src[H - 1][i]) + M[2][2] * (temp2[coord(H - 3, 0)] - src[H - 1][i]); - dst[H - 1][i] = temp2[H - 1][0] = temp2Hm1; - dst[H - 2][i] = temp2[H - 2][0] = B * temp2[H - 2][0] + b1 * temp2[H - 1][0] + b2 * temp2H + b3 * temp2Hp1; - dst[H - 3][i] = temp2[H - 3][0] = B * temp2[H - 3][0] + b1 * temp2[H - 2][0] + b2 * temp2[H - 1][0] + b3 * temp2H; + dst[H - 1][i] = temp2[coord(H - 1, 0)] = temp2Hm1; + dst[H - 2][i] = temp2[coord(H - 2, 0)] = B * temp2[coord(H - 2, 0)] + b1 * temp2[coord(H - 1, 0)] + b2 * temp2H + b3 * temp2Hp1; + dst[H - 3][i] = temp2[coord(H - 3, 0)] = B * temp2[coord(H - 3, 0)] + b1 * temp2[coord(H - 2, 0)] + b2 * temp2[coord(H - 1, 0)] + b3 * temp2H; for (int j = H - 4; j >= 0; j--) { - dst[j][i] = temp2[j][0] = B * temp2[j][0] + b1 * temp2[j + 1][0] + b2 * temp2[j + 2][0] + b3 * temp2[j + 3][0]; + dst[j][i] = temp2[coord(j, 0)] = B * temp2[coord(j, 0)] + b1 * temp2[coord(j + 1, 0)] + b2 * temp2[coord(j + 2, 0)] + b3 * temp2[coord(j + 3, 0)]; } } } @@ -1208,40 +1214,45 @@ template void gaussVerticaldiv (T** src, T** dst, T** divBuffer, const // process 'numcols' columns for better usage of L1 cpu cache (especially faster for large values of H) static const int numcols = 8; - double temp2[H][numcols] ALIGNED16; + std::vector temp2(H * numcols); double temp2Hm1[numcols], temp2H[numcols], temp2Hp1[numcols]; + + auto coord = + [](const int &x, const int &y) -> int { + return x * numcols + y; + }; #ifdef _OPENMP #pragma omp for nowait #endif for (int i = 0; i < W - numcols + 1; i += numcols) { for (int k = 0; k < numcols; k++) { - temp2[0][k] = B * src[0][i + k] + b1 * src[0][i + k] + b2 * src[0][i + k] + b3 * src[0][i + k]; - temp2[1][k] = B * src[1][i + k] + b1 * temp2[0][k] + b2 * src[0][i + k] + b3 * src[0][i + k]; - temp2[2][k] = B * src[2][i + k] + b1 * temp2[1][k] + b2 * temp2[0][k] + b3 * src[0][i + k]; + temp2[coord(0, k)] = B * src[0][i + k] + b1 * src[0][i + k] + b2 * src[0][i + k] + b3 * src[0][i + k]; + temp2[coord(1, k)] = B * src[1][i + k] + b1 * temp2[coord(0, k)] + b2 * src[0][i + k] + b3 * src[0][i + k]; + temp2[coord(2, k)] = B * src[2][i + k] + b1 * temp2[coord(1, k)] + b2 * temp2[coord(0, k)] + b3 * src[0][i + k]; } for (int j = 3; j < H; j++) { for (int k = 0; k < numcols; k++) { - temp2[j][k] = B * src[j][i + k] + b1 * temp2[j - 1][k] + b2 * temp2[j - 2][k] + b3 * temp2[j - 3][k]; + temp2[coord(j, k)] = B * src[j][i + k] + b1 * temp2[coord(j - 1, k)] + b2 * temp2[coord(j - 2, k)] + b3 * temp2[coord(j - 3, k)]; } } for (int k = 0; k < numcols; k++) { - temp2Hm1[k] = src[H - 1][i + k] + M[0][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[0][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[0][2] * (temp2[H - 3][k] - src[H - 1][i + k]); - temp2H[k] = src[H - 1][i + k] + M[1][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[1][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[1][2] * (temp2[H - 3][k] - src[H - 1][i + k]); - temp2Hp1[k] = src[H - 1][i + k] + M[2][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[2][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[2][2] * (temp2[H - 3][k] - src[H - 1][i + k]); + temp2Hm1[k] = src[H - 1][i + k] + M[0][0] * (temp2[coord(H - 1, k)] - src[H - 1][i + k]) + M[0][1] * (temp2[coord(H - 2, k)] - src[H - 1][i + k]) + M[0][2] * (temp2[coord(H - 3, k)] - src[H - 1][i + k]); + temp2H[k] = src[H - 1][i + k] + M[1][0] * (temp2[coord(H - 1, k)] - src[H - 1][i + k]) + M[1][1] * (temp2[coord(H - 2, k)] - src[H - 1][i + k]) + M[1][2] * (temp2[coord(H - 3, k)] - src[H - 1][i + k]); + temp2Hp1[k] = src[H - 1][i + k] + M[2][0] * (temp2[coord(H - 1, k)] - src[H - 1][i + k]) + M[2][1] * (temp2[coord(H - 2, k)] - src[H - 1][i + k]) + M[2][2] * (temp2[coord(H - 3, k)] - src[H - 1][i + k]); } for (int k = 0; k < numcols; k++) { - dst[H - 1][i + k] = rtengine::max(divBuffer[H - 1][i + k] / (temp2[H - 1][k] = temp2Hm1[k]), 0.0); - dst[H - 2][i + k] = rtengine::max(divBuffer[H - 2][i + k] / (temp2[H - 2][k] = B * temp2[H - 2][k] + b1 * temp2[H - 1][k] + b2 * temp2H[k] + b3 * temp2Hp1[k]), 0.0); - dst[H - 3][i + k] = rtengine::max(divBuffer[H - 3][i + k] / (temp2[H - 3][k] = B * temp2[H - 3][k] + b1 * temp2[H - 2][k] + b2 * temp2[H - 1][k] + b3 * temp2H[k]), 0.0); + dst[H - 1][i + k] = rtengine::max(divBuffer[H - 1][i + k] / (temp2[coord(H - 1, k)] = temp2Hm1[k]), 0.0); + dst[H - 2][i + k] = rtengine::max(divBuffer[H - 2][i + k] / (temp2[coord(H - 2, k)] = B * temp2[coord(H - 2, k)] + b1 * temp2[coord(H - 1, k)] + b2 * temp2H[k] + b3 * temp2Hp1[k]), 0.0); + dst[H - 3][i + k] = rtengine::max(divBuffer[H - 3][i + k] / (temp2[coord(H - 3, k)] = B * temp2[coord(H - 3, k)] + b1 * temp2[coord(H - 2, k)] + b2 * temp2[coord(H - 1, k)] + b3 * temp2H[k]), 0.0); } for (int j = H - 4; j >= 0; j--) { for (int k = 0; k < numcols; k++) { - dst[j][i + k] = rtengine::max(divBuffer[j][i + k] / (temp2[j][k] = B * temp2[j][k] + b1 * temp2[j + 1][k] + b2 * temp2[j + 2][k] + b3 * temp2[j + 3][k]), 0.0); + dst[j][i + k] = rtengine::max(divBuffer[j][i + k] / (temp2[coord(j, k)] = B * temp2[coord(j, k)] + b1 * temp2[coord(j + 1, k)] + b2 * temp2[coord(j + 2, k)] + b3 * temp2[coord(j + 3, k)]), 0.0); } } } @@ -1252,24 +1263,24 @@ template void gaussVerticaldiv (T** src, T** dst, T** divBuffer, const // process remaining columns for (int i = W - (W % numcols); i < W; i++) { - temp2[0][0] = B * src[0][i] + b1 * src[0][i] + b2 * src[0][i] + b3 * src[0][i]; - temp2[1][0] = B * src[1][i] + b1 * temp2[0][0] + b2 * src[0][i] + b3 * src[0][i]; - temp2[2][0] = B * src[2][i] + b1 * temp2[1][0] + b2 * temp2[0][0] + b3 * src[0][i]; + temp2[coord(0, 0)] = B * src[0][i] + b1 * src[0][i] + b2 * src[0][i] + b3 * src[0][i]; + temp2[coord(1, 0)] = B * src[1][i] + b1 * temp2[coord(0, 0)] + b2 * src[0][i] + b3 * src[0][i]; + temp2[coord(2, 0)] = B * src[2][i] + b1 * temp2[coord(1, 0)] + b2 * temp2[coord(0, 0)] + b3 * src[0][i]; for (int j = 3; j < H; j++) { - temp2[j][0] = B * src[j][i] + b1 * temp2[j - 1][0] + b2 * temp2[j - 2][0] + b3 * temp2[j - 3][0]; + temp2[coord(j, 0)] = B * src[j][i] + b1 * temp2[coord(j - 1, 0)] + b2 * temp2[coord(j - 2, 0)] + b3 * temp2[coord(j - 3, 0)]; } - double temp2Hm1 = src[H - 1][i] + M[0][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[0][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[0][2] * (temp2[H - 3][0] - src[H - 1][i]); - double temp2H = src[H - 1][i] + M[1][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[1][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[1][2] * (temp2[H - 3][0] - src[H - 1][i]); - double temp2Hp1 = src[H - 1][i] + M[2][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[2][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[2][2] * (temp2[H - 3][0] - src[H - 1][i]); + double temp2Hm1 = src[H - 1][i] + M[0][0] * (temp2[coord(H - 1, 0)] - src[H - 1][i]) + M[0][1] * (temp2[coord(H - 2, 0)] - src[H - 1][i]) + M[0][2] * (temp2[coord(H - 3, 0)] - src[H - 1][i]); + double temp2H = src[H - 1][i] + M[1][0] * (temp2[coord(H - 1, 0)] - src[H - 1][i]) + M[1][1] * (temp2[coord(H - 2, 0)] - src[H - 1][i]) + M[1][2] * (temp2[coord(H - 3, 0)] - src[H - 1][i]); + double temp2Hp1 = src[H - 1][i] + M[2][0] * (temp2[coord(H - 1, 0)] - src[H - 1][i]) + M[2][1] * (temp2[coord(H - 2, 0)] - src[H - 1][i]) + M[2][2] * (temp2[coord(H - 3, 0)] - src[H - 1][i]); - dst[H - 1][i] = rtengine::max(divBuffer[H - 1][i] / (temp2[H - 1][0] = temp2Hm1), 0.0); - dst[H - 2][i] = rtengine::max(divBuffer[H - 2][i] / (temp2[H - 2][0] = B * temp2[H - 2][0] + b1 * temp2[H - 1][0] + b2 * temp2H + b3 * temp2Hp1), 0.0); - dst[H - 3][i] = rtengine::max(divBuffer[H - 3][i] / (temp2[H - 3][0] = B * temp2[H - 3][0] + b1 * temp2[H - 2][0] + b2 * temp2[H - 1][0] + b3 * temp2H), 0.0); + dst[H - 1][i] = rtengine::max(divBuffer[H - 1][i] / (temp2[coord(H - 1, 0)] = temp2Hm1), 0.0); + dst[H - 2][i] = rtengine::max(divBuffer[H - 2][i] / (temp2[coord(H - 2, 0)] = B * temp2[coord(H - 2, 0)] + b1 * temp2[coord(H - 1, 0)] + b2 * temp2H + b3 * temp2Hp1), 0.0); + dst[H - 3][i] = rtengine::max(divBuffer[H - 3][i] / (temp2[coord(H - 3, 0)] = B * temp2[coord(H - 3, 0)] + b1 * temp2[coord(H - 2, 0)] + b2 * temp2[coord(H - 1, 0)] + b3 * temp2H), 0.0); for (int j = H - 4; j >= 0; j--) { - dst[j][i] = rtengine::max(divBuffer[j][i] / (temp2[j][0] = B * temp2[j][0] + b1 * temp2[j + 1][0] + b2 * temp2[j + 2][0] + b3 * temp2[j + 3][0]), 0.0); + dst[j][i] = rtengine::max(divBuffer[j][i] / (temp2[coord(j, 0)] = B * temp2[coord(j, 0)] + b1 * temp2[coord(j + 1, 0)] + b2 * temp2[coord(j + 2, 0)] + b3 * temp2[coord(j + 3, 0)]), 0.0); } } } @@ -1286,40 +1297,45 @@ template void gaussVerticalmult (T** src, T** dst, const int W, const i // process 'numcols' columns for better usage of L1 cpu cache (especially faster for large values of H) static const int numcols = 8; - double temp2[H][numcols] ALIGNED16; + std::vector temp2(H * numcols); double temp2Hm1[numcols], temp2H[numcols], temp2Hp1[numcols]; + + auto coord = + [](const int &x, const int &y) -> int { + return x * numcols + y; + }; #ifdef _OPENMP #pragma omp for nowait #endif for (int i = 0; i < W - numcols + 1; i += numcols) { for (int k = 0; k < numcols; k++) { - temp2[0][k] = B * src[0][i + k] + b1 * src[0][i + k] + b2 * src[0][i + k] + b3 * src[0][i + k]; - temp2[1][k] = B * src[1][i + k] + b1 * temp2[0][k] + b2 * src[0][i + k] + b3 * src[0][i + k]; - temp2[2][k] = B * src[2][i + k] + b1 * temp2[1][k] + b2 * temp2[0][k] + b3 * src[0][i + k]; + temp2[coord(0, k)] = B * src[0][i + k] + b1 * src[0][i + k] + b2 * src[0][i + k] + b3 * src[0][i + k]; + temp2[coord(1, k)] = B * src[1][i + k] + b1 * temp2[coord(0, k)] + b2 * src[0][i + k] + b3 * src[0][i + k]; + temp2[coord(2, k)] = B * src[2][i + k] + b1 * temp2[coord(1, k)] + b2 * temp2[coord(0, k)] + b3 * src[0][i + k]; } for (int j = 3; j < H; j++) { for (int k = 0; k < numcols; k++) { - temp2[j][k] = B * src[j][i + k] + b1 * temp2[j - 1][k] + b2 * temp2[j - 2][k] + b3 * temp2[j - 3][k]; + temp2[coord(j, k)] = B * src[j][i + k] + b1 * temp2[coord(j - 1, k)] + b2 * temp2[coord(j - 2, k)] + b3 * temp2[coord(j - 3, k)]; } } for (int k = 0; k < numcols; k++) { - temp2Hm1[k] = src[H - 1][i + k] + M[0][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[0][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[0][2] * (temp2[H - 3][k] - src[H - 1][i + k]); - temp2H[k] = src[H - 1][i + k] + M[1][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[1][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[1][2] * (temp2[H - 3][k] - src[H - 1][i + k]); - temp2Hp1[k] = src[H - 1][i + k] + M[2][0] * (temp2[H - 1][k] - src[H - 1][i + k]) + M[2][1] * (temp2[H - 2][k] - src[H - 1][i + k]) + M[2][2] * (temp2[H - 3][k] - src[H - 1][i + k]); + temp2Hm1[k] = src[H - 1][i + k] + M[0][0] * (temp2[coord(H - 1, k)] - src[H - 1][i + k]) + M[0][1] * (temp2[coord(H - 2, k)] - src[H - 1][i + k]) + M[0][2] * (temp2[coord(H - 3, k)] - src[H - 1][i + k]); + temp2H[k] = src[H - 1][i + k] + M[1][0] * (temp2[coord(H - 1, k)] - src[H - 1][i + k]) + M[1][1] * (temp2[coord(H - 2, k)] - src[H - 1][i + k]) + M[1][2] * (temp2[coord(H - 3, k)] - src[H - 1][i + k]); + temp2Hp1[k] = src[H - 1][i + k] + M[2][0] * (temp2[coord(H - 1, k)] - src[H - 1][i + k]) + M[2][1] * (temp2[coord(H - 2, k)] - src[H - 1][i + k]) + M[2][2] * (temp2[coord(H - 3, k)] - src[H - 1][i + k]); } for (int k = 0; k < numcols; k++) { - dst[H - 1][i + k] *= temp2[H - 1][k] = temp2Hm1[k]; - dst[H - 2][i + k] *= temp2[H - 2][k] = B * temp2[H - 2][k] + b1 * temp2[H - 1][k] + b2 * temp2H[k] + b3 * temp2Hp1[k]; - dst[H - 3][i + k] *= temp2[H - 3][k] = B * temp2[H - 3][k] + b1 * temp2[H - 2][k] + b2 * temp2[H - 1][k] + b3 * temp2H[k]; + dst[H - 1][i + k] *= temp2[coord(H - 1, k)] = temp2Hm1[k]; + dst[H - 2][i + k] *= temp2[coord(H - 2, k)] = B * temp2[coord(H - 2, k)] + b1 * temp2[coord(H - 1, k)] + b2 * temp2H[k] + b3 * temp2Hp1[k]; + dst[H - 3][i + k] *= temp2[coord(H - 3, k)] = B * temp2[coord(H - 3, k)] + b1 * temp2[coord(H - 2, k)] + b2 * temp2[coord(H - 1, k)] + b3 * temp2H[k]; } for (int j = H - 4; j >= 0; j--) { for (int k = 0; k < numcols; k++) { - dst[j][i + k] *= (temp2[j][k] = B * temp2[j][k] + b1 * temp2[j + 1][k] + b2 * temp2[j + 2][k] + b3 * temp2[j + 3][k]); + dst[j][i + k] *= (temp2[coord(j, k)] = B * temp2[coord(j, k)] + b1 * temp2[coord(j + 1, k)] + b2 * temp2[coord(j + 2, k)] + b3 * temp2[coord(j + 3, k)]); } } } @@ -1330,24 +1346,24 @@ template void gaussVerticalmult (T** src, T** dst, const int W, const i // process remaining columns for (int i = W - (W % numcols); i < W; i++) { - temp2[0][0] = B * src[0][i] + b1 * src[0][i] + b2 * src[0][i] + b3 * src[0][i]; - temp2[1][0] = B * src[1][i] + b1 * temp2[0][0] + b2 * src[0][i] + b3 * src[0][i]; - temp2[2][0] = B * src[2][i] + b1 * temp2[1][0] + b2 * temp2[0][0] + b3 * src[0][i]; + temp2[coord(0, 0)] = B * src[0][i] + b1 * src[0][i] + b2 * src[0][i] + b3 * src[0][i]; + temp2[coord(1, 0)] = B * src[1][i] + b1 * temp2[coord(0, 0)] + b2 * src[0][i] + b3 * src[0][i]; + temp2[coord(2, 0)] = B * src[2][i] + b1 * temp2[coord(1, 0)] + b2 * temp2[coord(0, 0)] + b3 * src[0][i]; for (int j = 3; j < H; j++) { - temp2[j][0] = B * src[j][i] + b1 * temp2[j - 1][0] + b2 * temp2[j - 2][0] + b3 * temp2[j - 3][0]; + temp2[coord(j, 0)] = B * src[j][i] + b1 * temp2[coord(j - 1, 0)] + b2 * temp2[coord(j - 2, 0)] + b3 * temp2[coord(j - 3, 0)]; } - double temp2Hm1 = src[H - 1][i] + M[0][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[0][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[0][2] * (temp2[H - 3][0] - src[H - 1][i]); - double temp2H = src[H - 1][i] + M[1][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[1][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[1][2] * (temp2[H - 3][0] - src[H - 1][i]); - double temp2Hp1 = src[H - 1][i] + M[2][0] * (temp2[H - 1][0] - src[H - 1][i]) + M[2][1] * (temp2[H - 2][0] - src[H - 1][i]) + M[2][2] * (temp2[H - 3][0] - src[H - 1][i]); + double temp2Hm1 = src[H - 1][i] + M[0][0] * (temp2[coord(H - 1, 0)] - src[H - 1][i]) + M[0][1] * (temp2[coord(H - 2, 0)] - src[H - 1][i]) + M[0][2] * (temp2[coord(H - 3, 0)] - src[H - 1][i]); + double temp2H = src[H - 1][i] + M[1][0] * (temp2[coord(H - 1, 0)] - src[H - 1][i]) + M[1][1] * (temp2[coord(H - 2, 0)] - src[H - 1][i]) + M[1][2] * (temp2[coord(H - 3, 0)] - src[H - 1][i]); + double temp2Hp1 = src[H - 1][i] + M[2][0] * (temp2[coord(H - 1, 0)] - src[H - 1][i]) + M[2][1] * (temp2[coord(H - 2, 0)] - src[H - 1][i]) + M[2][2] * (temp2[coord(H - 3, 0)] - src[H - 1][i]); - dst[H - 1][i] *= temp2[H - 1][0] = temp2Hm1; - dst[H - 2][i] *= temp2[H - 2][0] = B * temp2[H - 2][0] + b1 * temp2[H - 1][0] + b2 * temp2H + b3 * temp2Hp1; - dst[H - 3][i] *= temp2[H - 3][0] = B * temp2[H - 3][0] + b1 * temp2[H - 2][0] + b2 * temp2[H - 1][0] + b3 * temp2H; + dst[H - 1][i] *= temp2[coord(H - 1, 0)] = temp2Hm1; + dst[H - 2][i] *= temp2[coord(H - 2, 0)] = B * temp2[coord(H - 2, 0)] + b1 * temp2[coord(H - 1, 0)] + b2 * temp2H + b3 * temp2Hp1; + dst[H - 3][i] *= temp2[coord(H - 3, 0)] = B * temp2[coord(H - 3, 0)] + b1 * temp2[coord(H - 2, 0)] + b2 * temp2[coord(H - 1, 0)] + b3 * temp2H; for (int j = H - 4; j >= 0; j--) { - dst[j][i] *= (temp2[j][0] = B * temp2[j][0] + b1 * temp2[j + 1][0] + b2 * temp2[j + 2][0] + b3 * temp2[j + 3][0]); + dst[j][i] *= (temp2[coord(j, 0)] = B * temp2[coord(j, 0)] + b1 * temp2[coord(j + 1, 0)] + b2 * temp2[coord(j + 2, 0)] + b3 * temp2[coord(j + 3, 0)]); } } } diff --git a/rtengine/hilite_recon.cc b/rtengine/hilite_recon.cc index f573ff015..653ce80a2 100644 --- a/rtengine/hilite_recon.cc +++ b/rtengine/hilite_recon.cc @@ -1176,27 +1176,27 @@ void RawImageSource::HLRecovery_inpaint(float** red, float** green, float** blue {2.0f, 3.0f, 0.001f} }; - const float rad1 = vals[blur][0]; - const float rad2 = vals[blur][1]; + const float radius1 = vals[blur][0]; + const float radius2 = vals[blur][1]; const float th = vals[blur][2]; - guidedFilter(guide, mask, mask, rad1, th, true, 1); + guidedFilter(guide, mask, mask, radius1, th, true, 1); if (plistener) { progress += 0.03; plistener->setProgress(progress); } if (blur > 0) { //no use of 2nd guidedFilter if Blur = 0 (slider to 1)..speed-up and very small differences. - guidedFilter(guide, rbuf, rbuf, rad2, 0.01f * 65535.f, true, 1); + guidedFilter(guide, rbuf, rbuf, radius2, 0.01f * 65535.f, true, 1); if (plistener) { progress += 0.03; plistener->setProgress(progress); } - guidedFilter(guide, gbuf, gbuf, rad2, 0.01f * 65535.f, true, 1); + guidedFilter(guide, gbuf, gbuf, radius2, 0.01f * 65535.f, true, 1); if (plistener) { progress += 0.03; plistener->setProgress(progress); } - guidedFilter(guide, bbuf, bbuf, rad2, 0.01f * 65535.f, true, 1); + guidedFilter(guide, bbuf, bbuf, radius2, 0.01f * 65535.f, true, 1); if (plistener) { progress += 0.03; plistener->setProgress(progress); diff --git a/rtengine/histmatching.cc b/rtengine/histmatching.cc index 350dbbfab..4624aa08f 100644 --- a/rtengine/histmatching.cc +++ b/rtengine/histmatching.cc @@ -229,7 +229,7 @@ void mappingToCurve(const std::vector &mapping, std::vector &curve) } // namespace -void RawImageSource::getAutoMatchedToneCurve(const ColorManagementParams &cp, StandardObserver observer, std::vector &outCurve) +void RawImageSource::getAutoMatchedToneCurve(const ColorManagementParams &cp, const procparams::RAWParams &rawParams, StandardObserver observer, std::vector &outCurve) { BENCHFUN @@ -277,10 +277,9 @@ void RawImageSource::getAutoMatchedToneCurve(const ColorManagementParams &cp, St std::unique_ptr source; { - RawMetaDataLocation rml; eSensorType sensor_type; int w = 0, h = 0; - std::unique_ptr thumb(Thumbnail::loadQuickFromRaw(getFileName(), rml, sensor_type, w, h, 1, false, true, true)); + const std::unique_ptr thumb(Thumbnail::loadQuickFromRaw(getFileName(), sensor_type, w, h, 1, false, true, true)); if (!thumb) { if (settings->verbose) { std::cout << "histogram matching: no thumbnail found, generating a neutral curve" << std::endl; @@ -309,11 +308,10 @@ void RawImageSource::getAutoMatchedToneCurve(const ColorManagementParams &cp, St std::unique_ptr target; { - RawMetaDataLocation rml; eSensorType sensor_type; double scale; int w = fw / skip, h = fh / skip; - std::unique_ptr thumb(Thumbnail::loadFromRaw(getFileName(), rml, sensor_type, w, h, 1, false, observer, false, true)); + const std::unique_ptr thumb(Thumbnail::loadFromRaw(getFileName(), sensor_type, w, h, 1, false, observer, false, &rawParams, true)); if (!thumb) { if (settings->verbose) { std::cout << "histogram matching: raw decoding failed, generating a neutral curve" << std::endl; diff --git a/rtengine/iccmatrices.h b/rtengine/iccmatrices.h index 5b9883421..be685b676 100644 --- a/rtengine/iccmatrices.h +++ b/rtengine/iccmatrices.h @@ -90,6 +90,19 @@ constexpr double ACESp0_xyz[3][3] = { {0.00845768, -0.01403193, 1.21893277} }; +constexpr double xyz_jdcmax[3][3] = {//prim red 0.734702 0.265302 gr 0.021908 0.930288 bl 0.120593 0.001583 + {0.8394088, 0.0163780, 0.1084133}, + {0.3031122, 0.6954651, 0.0014227}, + {-0.000048, 0.0357376, 0.7891671} +}; + +constexpr double jdcmax_xyz[3][3] = { + {1.1984508, -0.0197646, -0.1646037}, + {-0.5223824, 1.4466349, 0.0691553}, + {0.0236634, -0.0655113, 1.2640260} +}; + + constexpr double xyz_ACESp1[3][3] = { {0.689697, 0.149944, 0.124559}, {0.284448, 0.671758 , 0.043794}, diff --git a/rtengine/iccstore.cc b/rtengine/iccstore.cc index 06d5a4b0c..8ba5fb4af 100644 --- a/rtengine/iccstore.cc +++ b/rtengine/iccstore.cc @@ -24,7 +24,7 @@ #include #include -#ifdef WIN32 +#ifdef _WIN32 #include #else #include @@ -196,9 +196,9 @@ cmsHPROFILE createXYZProfile() return rtengine::ICCStore::createFromMatrix(mat, false, "XYZ"); } -const double(*wprofiles[])[3] = {xyz_sRGB, xyz_adobe, xyz_prophoto, xyz_widegamut, xyz_bruce, xyz_beta, xyz_best, xyz_rec2020, xyz_ACESp0, xyz_ACESp1};// -const double(*iwprofiles[])[3] = {sRGB_xyz, adobe_xyz, prophoto_xyz, widegamut_xyz, bruce_xyz, beta_xyz, best_xyz, rec2020_xyz, ACESp0_xyz, ACESp1_xyz};// -const char* wpnames[] = {"sRGB", "Adobe RGB", "ProPhoto", "WideGamut", "BruceRGB", "Beta RGB", "BestRGB", "Rec2020", "ACESp0", "ACESp1"};// +const double(*wprofiles[])[3] = {xyz_sRGB, xyz_adobe, xyz_prophoto, xyz_widegamut, xyz_jdcmax, xyz_beta, xyz_best, xyz_rec2020, xyz_ACESp0, xyz_ACESp1, xyz_bruce};// +const double(*iwprofiles[])[3] = {sRGB_xyz, adobe_xyz, prophoto_xyz, widegamut_xyz, jdcmax_xyz, beta_xyz, best_xyz, rec2020_xyz, ACESp0_xyz, ACESp1_xyz, bruce_xyz};// +const char* wpnames[] = {"sRGB", "Adobe RGB", "ProPhoto", "WideGamut", "JDCmax", "Beta RGB", "BestRGB", "Rec2020", "ACESp0", "ACESp1", "BruceRGB"};// //default = gamma inside profile //BT709 g=2.22 s=4.5 sRGB g=2.4 s=12.92310 //linear g=1.0 diff --git a/rtengine/iimage.h b/rtengine/iimage.h index cdb7dd6eb..426b0c4c0 100644 --- a/rtengine/iimage.h +++ b/rtengine/iimage.h @@ -111,7 +111,7 @@ public: { rm = gm = bm = 1.0; } - virtual 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, const procparams::ToneCurveParams &hrp) + virtual void getAutoWBMultipliersitc(bool extra, double &tempref, double &greenref, double &tempitc, double &greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, 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, const procparams::ToneCurveParams &hrp) { rm = gm = bm = 1.0; } @@ -1858,7 +1858,7 @@ class IImage : virtual public ImageDimensions public: virtual ~IImage() {} - /** @brief Returns a mutex that can is useful in many situations. No image operations shuold be performed without locking this mutex. + /** @brief Returns a mutex that can is useful in many situations. No image operations should be performed without locking this mutex. * @return The mutex */ virtual MyMutex& getMutex () = 0; virtual cmsHPROFILE getProfile () const = 0; diff --git a/rtengine/imagedata.cc b/rtengine/imagedata.cc index fb2fcaf3a..735519d99 100644 --- a/rtengine/imagedata.cc +++ b/rtengine/imagedata.cc @@ -17,60 +17,30 @@ * along with RawTherapee. If not, see . */ #include +#include +#include +#include #include #include - #include - #include - #include #include "imagedata.h" #include "imagesource.h" -#include "iptcpairs.h" -#include "procparams.h" +#include "metadata.h" #include "rt_math.h" #include "utils.h" -#include "../rtexif/rtexif.h" #pragma GCC diagnostic warning "-Wextra" #define PRINT_HDR_PS_DETECTION 0 using namespace rtengine; -extern "C" IptcData *iptc_data_new_from_jpeg_file(FILE* infile); - namespace { -Glib::ustring to_utf8(const std::string& str) -{ - try { - return Glib::locale_to_utf8(str); - } catch (Glib::Error&) { - return Glib::convert_with_fallback(str, "UTF-8", "ISO-8859-1", "?"); - } -} - -template -T getFromFrame( - const std::vector>& frames, - std::size_t frame, - const std::function& function, - T defval = {} -) -{ - if (frame < frames.size()) { - return function(*frames[frame]); - } - if (!frames.empty()) { - return function(*frames[0]); - } - return defval; -} - const std::string& validateUft8(const std::string& str, const std::string& on_error = "???") { if (Glib::ustring(str).validate()) { @@ -80,16 +50,35 @@ const std::string& validateUft8(const std::string& str, const std::string& on_er return on_error; } +template +auto to_long(const Iterator &iter, Integer n = Integer{0}) -> decltype( +#if EXIV2_TEST_VERSION(0,28,0) + iter->toInt64() +) { + return iter->toInt64(n); +#else + iter->toLong() +) { + return iter->toLong(n); +#endif } -FramesMetaData* FramesMetaData::fromFile(const Glib::ustring& fname, std::unique_ptr rml, bool firstFrameOnly) +} + +namespace rtengine { + +extern const Settings *settings; + +} // namespace rtengine + +FramesMetaData* FramesMetaData::fromFile(const Glib::ustring& fname) { - return new FramesData(fname, std::move(rml), firstFrameOnly); + return new FramesData(fname); } static struct tm timeFromTS(const time_t ts) { -#if !defined(WIN32) +#if !defined(_WIN32) struct tm tm; return *gmtime_r(&ts, &tm); #else @@ -97,11 +86,12 @@ static struct tm timeFromTS(const time_t ts) #endif } -FrameData::FrameData(rtexif::TagDirectory* frameRootDir_, rtexif::TagDirectory* rootDir, rtexif::TagDirectory* firstRootDir, time_t ts) : - frameRootDir(frameRootDir_), - iptc(nullptr), - time(timeFromTS(ts)), - timeStamp(ts), +FramesData::FramesData(const Glib::ustring &fname, time_t ts) : + ok_(false), + fname_(fname), + dcrawFrameCount(0), + time{timeFromTS(ts)}, + timeStamp{ts}, iso_speed(0), aperture(0.), focal_len(0.), @@ -116,11 +106,14 @@ FrameData::FrameData(rtexif::TagDirectory* frameRootDir_, rtexif::TagDirectory* lens("Unknown"), sampleFormat(IIOSF_UNKNOWN), isPixelShift(false), - isHDR(false) + isHDR(false), + w_(-1), + h_(-1) { - if (!frameRootDir) { - return; - } + GStatBuf statbuf = {}; + g_stat(fname.c_str(), &statbuf); + modTimeStamp = statbuf.st_mtime; + modTime = timeFromTS(modTimeStamp); make.clear(); model.clear(); @@ -128,1137 +121,698 @@ FrameData::FrameData(rtexif::TagDirectory* frameRootDir_, rtexif::TagDirectory* orientation.clear(); lens.clear(); - rtexif::TagDirectory* newFrameRootDir = frameRootDir; + try { + Exiv2Metadata meta(fname); + meta.load(); + const auto& exif = meta.exifData(); + ok_ = true; - rtexif::Tag* tag = newFrameRootDir->findTag("Make"); - if (!tag) { - newFrameRootDir = rootDir; - tag = newFrameRootDir->findTag("Make"); + // taken and adapted from darktable (src/common/exif.cc) +/* + This file is part of darktable, + copyright (c) 2009--2013 johannes hanika. + copyright (c) 2011 henrik andersson. + copyright (c) 2012-2017 tobias ellinghaus. - if (!tag) { - // For some raw files (like Canon's CR2 files), the metadata are contained in the first root directory - newFrameRootDir = firstRootDir; - tag = newFrameRootDir->findTag("Make"); + darktable 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. + + darktable 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 darktable. If not, see . + */ + + Exiv2::ExifData::const_iterator pos; + + const auto find_exif_tag = + [&exif, &pos](const std::string &name) -> bool + { + try { + pos = exif.findKey(Exiv2::ExifKey(name)); + return pos != exif.end() && pos->size(); + } catch (std::exception &e) { + if (settings->verbose) { + std::cerr << "Exiv2 WARNING -- error finding tag " << name << ": " << e.what() << std::endl; + } + return false; + } + }; + + const auto find_tag = + [&exif, &pos](decltype(Exiv2::make) func) -> bool + { + pos = func(exif); + return pos != exif.end() && pos->size(); + }; + + // List of tag names taken from exiv2's printSummary() in actions.cpp + + if (find_tag(Exiv2::make)) { + make = validateUft8(pos->print(&exif)); } - } - if (tag) { - make = validateUft8(tag->valueToString()); + if (find_tag(Exiv2::model)) { + model = validateUft8(pos->print(&exif)); + } - // Same dcraw treatment - for (const auto& corp : { - "Canon", - "NIKON", - "EPSON", - "KODAK", - "Kodak", - "OLYMPUS", - "PENTAX", - "RICOH", - "MINOLTA", - "Minolta", - "Konica", - "CASIO", - "Sinar", - "Phase One", - "SAMSUNG", - "Mamiya", - "MOTOROLA", - "Leaf", - "Panasonic" - }) { - if (make.find(corp) != std::string::npos) { // Simplify company names - make = corp; - break; + if (make.size() > 0) { + for (const auto& corp : { + "Canon", + "NIKON", + "EPSON", + "KODAK", + "Kodak", + "OLYMPUS", + "PENTAX", + "RICOH", + "MINOLTA", + "Minolta", + "Konica", + "CASIO", + "Sinar", + "Phase One", + "SAMSUNG", + "Mamiya", + "MOTOROLA", + "Leaf", + "Panasonic" + }) { + if (make.find(corp) != std::string::npos) { // Simplify company names + make = corp; + break; + } } } - make.erase(make.find_last_not_of(' ') + 1); - } - - tag = newFrameRootDir->findTagUpward("Model"); - - if (tag) { - model = validateUft8(tag->valueToString()); - } - - if (!model.empty()) { - std::string::size_type i = 0; - - if ( - make.find("KODAK") != std::string::npos - && ( - (i = model.find(" DIGITAL CAMERA")) != std::string::npos - || (i = model.find(" Digital Camera")) != std::string::npos - || (i = model.find("FILE VERSION")) != std::string::npos - ) - ) { - model.resize(i); + std::string::size_type nonspace_pos = make.find_last_not_of(' '); + if (nonspace_pos != std::string::npos && nonspace_pos + 1 < make.size()) { + make.erase(nonspace_pos + 1); + } + nonspace_pos = model.find_last_not_of(' '); + if (nonspace_pos != std::string::npos && nonspace_pos + 1 < model.size()) { + model.erase(nonspace_pos + 1); } - model.erase(model.find_last_not_of(' ') + 1); + if (!make.empty() && model.find(make + ' ') == 0) { + model.erase(0, make.size() + 1); + } - if (!strncasecmp(model.c_str(), make.c_str(), make.size())) { - if (model.size() >= make.size() && model[make.size()] == ' ') { - model.erase(0, make.size() + 1); + if (find_tag(Exiv2::exposureTime)) { + shutter = pos->toFloat(); + } + + if (find_tag(Exiv2::fNumber)) { + aperture = pos->toFloat(); + } + + // Read ISO speed - Nikon happens to return a pair for Lo and Hi modes + if (find_tag(Exiv2::isoSpeed)) { + // If standard exif iso tag, use the old way of interpreting the return value to be more regression-save + if (pos->key() == "Exif.Photo.ISOSpeedRatings") { + const long isofield = pos->count() > 1 ? 1 : 0; + iso_speed = pos->toFloat(isofield); + } else { + iso_speed = std::atof(pos->print().c_str()); + } + } + // Some newer cameras support iso settings that exceed the 16 bit of exif's ISOSpeedRatings + if (iso_speed == 65535 || iso_speed == 0) { + if (find_exif_tag("Exif.PentaxDng.ISO") || find_exif_tag("Exif.Pentax.ISO")) { + iso_speed = std::atof(pos->print().c_str()); + } + else if ( + ( + make == "SONY" + || make == "Canon" + ) + && find_exif_tag("Exif.Photo.RecommendedExposureIndex") + ) { + iso_speed = pos->toFloat(); } } - if (model.find("Digital Camera ") != std::string::npos) { - model.erase(0, 15); - } - } else { - model = "Unknown"; - } - - if (model == "Unknown") { - tag = newFrameRootDir->findTag("UniqueCameraModel"); - if (tag) { - model = validateUft8(tag->valueToString()); - } - } - - tag = newFrameRootDir->findTagUpward("Orientation"); - - if (tag) { - orientation = validateUft8(tag->valueToString()); - } - - // Look for Rating metadata in the following order: - // 1. EXIF - // 2. XMP - // 3. pp3 sidecar file - tag = newFrameRootDir->findTagUpward("Rating"); - if (tag && tag->toInt() != 0) { - rating = tag->toInt(); - } - char sXMPRating[64]; - if (newFrameRootDir->getXMPTagValue("xmp:Rating", sXMPRating)) { - // Guard against out-of-range values (<0, >5) - rating = rtengine::max(0, rtengine::min(5, atoi(sXMPRating))); - // Currently, Rating=-1 is not supported. A value of -1 should mean - // "Rejected" according to the specification. Maybe in the future, Rating=-1 - // sets InTrash=true? - } - - tag = newFrameRootDir->findTagUpward("MakerNote"); - rtexif::TagDirectory* mnote = nullptr; - - if (tag) { - mnote = tag->getDirectory(); - } - - rtexif::TagDirectory* exif = nullptr; - tag = newFrameRootDir->findTagUpward("Exif"); - - if (tag) { - exif = tag->getDirectory(); - } - - if (exif) { - - // standard exif tags - if ((tag = exif->getTag("ShutterSpeedValue"))) { - shutter = tag->toDouble(); - } - - if ((tag = exif->getTag("ExposureTime"))) { - shutter = tag->toDouble(); - } - - if ((tag = exif->getTag("ApertureValue"))) { - aperture = tag->toDouble(); - } - - if ((tag = exif->getTag("FNumber"))) { - aperture = tag->toDouble(); - } - - if ((tag = exif->getTag("ExposureBiasValue"))) { - expcomp = tag->toDouble(); - } - - if ((tag = exif->getTag("FocalLength"))) { - focal_len = tag->toDouble(); - } - - if ((tag = exif->getTag("FocalLengthIn35mmFilm"))) { - focal_len35mm = tag->toDouble(); - } - - // Focus distance from EXIF or XMP. MakerNote ones are scattered and partly encrypted - int num = -3, denom = -3; - - // First try, official EXIF. Set by Adobe on some DNGs - tag = exif->getTag("SubjectDistance"); - - if (tag) { - tag->toRational(num, denom); + if (find_tag(Exiv2::serialNumber)) { + serial = validateUft8(pos->toString()); } else { - // Second try, XMP data - char sXMPVal[64]; + const std::vector serial_number_tags{ + "Exif.Photo.BodySerialNumber", + "Exif.Canon.SerialNumber", + "Exif.Fujifilm.SerialNumber", + "Exif.Nikon3.SerialNumber", + "Exif.Nikon3.SerialNO", + "Exif.Olympus.SerialNumber2", + "Exif.OlympusEq.SerialNumber", + "Exif.Pentax.SerialNumber", + "Exif.PentaxDng.SerialNumber", + "Exif.Sigma.SerialNumber", + "Exif.Canon.InternalSerialNumber", + "Exif.OlympusEq.InternalSerialNumber", + "Exif.Panasonic.InternalSerialNumber", + }; + if (serial_number_tags.cend() != std::find_if(serial_number_tags.cbegin(), serial_number_tags.cend(), find_exif_tag)) { + serial = validateUft8(pos->toString()); + } else if (find_exif_tag("Exif.Minolta.WBInfoA100") || find_exif_tag("Exif.SonyMinolta.WBInfoA100")) { + const long index = 18908; + const int length = 12; + if (pos->count() >= index + length) { + for (int i = 0; i < length; ++i) { + serial += static_cast(to_long(pos, index + i)); + } + serial = validateUft8(serial); + } + } else if (find_exif_tag("Exif.Pentax.CameraInfo") || find_exif_tag("Exif.PentaxDng.CameraInfo")) { + const long index = 4; + if (pos->count() >= index) { + serial = validateUft8(pos->toString(index)); + } + } + // TODO: Serial number from tags not supported by Exiv2. + } - if (newFrameRootDir->getXMPTagValue("aux:ApproximateFocusDistance", sXMPVal)) { - sscanf(sXMPVal, "%d/%d", &num, &denom); + if (find_tag(Exiv2::focalLength)) { + // This works around a bug in exiv2 the developers refuse to fix + // For details see http://dev.exiv2.org/issues/1083 + if (pos->key() == "Exif.Canon.FocalLength" && pos->count() == 4) { + focal_len = pos->toFloat(1); + } else { + focal_len = pos->toFloat(); } } - if (num != -3) { - if ((denom == 1 && num >= 10000) || num < 0 || denom < 0) { - focus_dist = 10000; // infinity - } else if (denom > 0) { - focus_dist = (float)num / denom; + if (find_exif_tag("Exif.Photo.FocalLengthIn35mmFilm")) { + focal_len35mm = pos->toFloat(); + } + + if (find_tag(Exiv2::subjectDistance)) { + focus_dist = (0.01 * std::pow(10, pos->toFloat() / 40)); + } + + if (find_tag(Exiv2::orientation)) { + static const std::vector ormap = { + "Unknown", + "Horizontal (normal)", + "Mirror horizontal", + "Rotate 180", + "Mirror vertical", + "Mirror horizontal and rotate 270 CW", + "Rotate 90 CW", + "Mirror horizontal and rotate 90 CW", + "Rotate 270 CW", + "Unknown" + }; + auto idx = to_long(pos); + if (idx >= 0 && idx < long(ormap.size())) { + orientation = ormap[idx]; } + //orientation = pos->print(&exif); } - if ((tag = exif->getTag("ISOSpeedRatings"))) { - iso_speed = tag->toDouble(); - } - - if ((tag = exif->findTag("DateTimeOriginal", true))) { - if (sscanf((const char*)tag->getValue(), "%d:%d:%d %d:%d:%d", &time.tm_year, &time.tm_mon, &time.tm_mday, &time.tm_hour, &time.tm_min, &time.tm_sec) == 6) { - time.tm_year -= 1900; - time.tm_mon -= 1; - time.tm_isdst = -1; - timeStamp = mktime(&time); - } - } - - tag = exif->findTag("SerialNumber"); - - if (!tag) { - tag = exif->findTag("InternalSerialNumber"); - } - - if (tag) { - serial = validateUft8(tag->valueToString()); - } - - // guess lens... - lens = "Unknown"; - - // Sometimes (e.g. DNG) EXIF already contains lens data - - if (!make.compare(0, 8, "FUJIFILM")) { - if (exif->getTag("LensModel")) { - lens = validateUft8(exif->getTag("LensModel")->valueToString()); + if (!make.compare(0, 5, "NIKON")) { + if (find_exif_tag("Exif.NikonLd4.LensID")) { + if (!to_long(pos)) { // No data, look in LensIDNumber. + const auto p = pos; + if (!find_exif_tag("Exif.NikonLd4.LensIDNumber")) { + pos = p; // Tag not found, so reset pos. + } + } + lens = pos->print(&exif); + if (lens == std::to_string(to_long(pos))) { // Not known to Exiv2. + lens.clear(); + } else { + lens = validateUft8(lens); + } } } else if (!make.compare(0, 4, "SONY")) { - if (iso_speed == 65535 || iso_speed == 0) { - rtexif::Tag* isoTag = exif->getTag("RecommendedExposureIndex"); - - if (isoTag) { - iso_speed = isoTag->toDouble(); + // ExifTool prefers LensType2 over LensType (called + // Exif.Sony2.LensID by Exiv2). Exiv2 doesn't support LensType2 yet, + // so we let Exiv2 try it's best. For non ILCE/NEX cameras which + // likely don't have LensType2, we use Exif.Sony2.LensID because + // Exif.Photo.LensModel may be incorrect (see + // https://discuss.pixls.us/t/call-for-testing-rawtherapee-metadata-handling-with-exiv2-includes-cr3-support/36240/36). + if ( + // Camera model is neither a ILCE, ILME, nor NEX. + (!find_exif_tag("Exif.Image.Model") || + (pos->toString().compare(0, 4, "ILCE") && pos->toString().compare(0, 4, "ILME") && pos->toString().compare(0, 3, "NEX"))) && + // LensID exists. 0xFFFF could be one of many lenses. + find_exif_tag("Exif.Sony2.LensID") && to_long(pos) && to_long(pos) != 0xFFFF) { + lens = pos->print(&exif); + if (lens == std::to_string(to_long(pos))) { // Not known to Exiv2. + lens.clear(); + } else { + lens = validateUft8(lens); } } } - - if (lens == "Unknown") { - const auto lens_from_make_and_model = - [this, exif]() -> bool + if (!lens.empty()) { + // Already found the lens name. + } else if (find_tag(Exiv2::lensName)) { + lens = validateUft8(pos->print(&exif)); + auto p = pos; + if (find_exif_tag("Exif.CanonFi.RFLensType") && find_exif_tag("Exif.Canon.LensModel")) { + lens = validateUft8(pos->print(&exif)); + } else if (p->count() == 1 && lens == std::to_string(to_long(p))) { + if (find_exif_tag("Exif.Canon.LensModel")) { + lens = validateUft8(pos->print(&exif)); + } else if (find_exif_tag("Exif.Photo.LensModel")) { + lens = validateUft8(p->print(&exif)); + } + } + } else if (find_exif_tag("Exif.Photo.LensSpecification") && pos->count() == 4) { + const auto round = + [](float f) -> float { - if (!exif) { - return false; - } - - const rtexif::Tag* const lens_model = exif->getTag(0xA434); - - if (lens_model) { - const rtexif::Tag* const lens_make = exif->getTag(0xA433); - const std::string make = - lens_make - ? validateUft8(lens_make->valueToString()) - : std::string(); - const std::string model = validateUft8(lens_model->valueToString()); - - if (!model.empty()) { - lens = make; - - if (!lens.empty()) { - lens += ' '; - } - - lens += model; - - return true; - } - } - - return false; + return int(f * 10.f + 0.5f) / 10.f; }; + float fl_lo = round(pos->toFloat(0)); + float fl_hi = round(pos->toFloat(1)); + float fn_lo = round(pos->toFloat(2)); + float fn_hi = round(pos->toFloat(3)); + std::ostringstream buf; + buf << fl_lo; + if (fl_lo < fl_hi) { + buf << "-" << fl_hi; + } + buf << "mm F" << fn_lo; + if (fn_lo < fn_hi) { + buf << "-" << fn_hi; + } + lens = validateUft8(buf.str()); + } + if (lens.empty() || lens.find_first_not_of('-') == std::string::npos) { + lens = "Unknown"; + } - if (mnote) { + std::string datetime_taken; + if (find_exif_tag("Exif.Image.DateTimeOriginal")) { + datetime_taken = pos->print(&exif); + } + else if (find_exif_tag("Exif.Photo.DateTimeOriginal")) { + datetime_taken = pos->print(&exif); + } + else if (find_exif_tag("Exif.Photo.DateTimeDigitized")) { + datetime_taken = pos->print(&exif); + } else if (find_exif_tag("Exif.Image.DateTime")) { + datetime_taken = validateUft8(pos->print(&exif)); + } + if (sscanf(datetime_taken.c_str(), "%d:%d:%d %d:%d:%d", &time.tm_year, &time.tm_mon, &time.tm_mday, &time.tm_hour, &time.tm_min, &time.tm_sec) == 6) { + time.tm_year -= 1900; + time.tm_mon -= 1; + time.tm_isdst = -1; + timeStamp = mktime(&time); + } - if (!make.compare(0, 5, "NIKON")) { - // ISO at max value supported, check manufacturer specific - if (iso_speed == 65535 || iso_speed == 0) { - rtexif::Tag* isoTag = mnote->getTagP("ISOInfo/ISO"); + if (find_exif_tag("Exif.Image.ExposureBiasValue")) { + expcomp = pos->toFloat(); + } else if (find_exif_tag("Exif.Photo.ExposureBiasValue")) { + expcomp = pos->toFloat(); + } - if (isoTag) { - iso_speed = isoTag->toInt(); - } - } - - bool lensOk = false; - - if (mnote->getTag("LensData")) { - std::string ldata = validateUft8(mnote->getTag("LensData")->valueToString()); - size_t pos; - - if (ldata.size() > 10 && (pos = ldata.find("Lens = ")) != Glib::ustring::npos) { - lens = ldata.substr(pos + 7); - - if (lens.compare(0, 7, "Unknown")) { - lensOk = true; - } else { - size_t pos = lens.find("$FL$"); // is there a placeholder for focallength? - - if (pos != Glib::ustring::npos) { // then fill in focallength - lens = lens.replace(pos, 4, validateUft8(exif->getTag("FocalLength")->valueToString())); - - if (mnote->getTag("LensType")) { - const std::string ltype = validateUft8(mnote->getTag("LensType")->valueToString()); - - if (ltype.find("MF = Yes") != Glib::ustring::npos) { // check, whether it's a MF lens, should be always - lens = lens.replace(0, 7, "MF"); - } - - lensOk = true; - } - } - } - // If MakeNotes are vague, fall back to Exif LensMake and LensModel if set - // https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html#LensType - if (lens == "Manual Lens No CPU") { - lens_from_make_and_model(); - } - } - } - - if (!lensOk && mnote->getTag("Lens")) { - const std::string ldata = validateUft8(mnote->getTag("Lens")->valueToString()); - size_t i = 0, j = 0; - double n[4] = {0.0}; - - for (int m = 0; m < 4; m++) { - while (i < ldata.size() && ldata[i] != '/') { - i++; - } - - int nom = atoi(ldata.substr(j, i).c_str()); - j = i + 1; - i++; - - while (i < ldata.size() && ldata[i] != ',') { - i++; - } - - int den = atoi(ldata.substr(j, i).c_str()); - j = i + 2; - i += 2; - n[m] = (double) nom / std::max(den, 1); - } - - std::ostringstream str; - - if (n[0] == n[1]) { - str << "Unknown " << n[0] << "mm F/" << n[2]; - } else if (n[2] == n[3]) { - str << "Unknown " << n[0] << "-" << n[1] << "mm F/" << n[2]; - } else { - str << "Unknown " << n[0] << "-" << n[1] << "mm F/" << n[2] << "-" << n[3]; - } - - lens = str.str(); - - // Look whether it's MF or AF - if (mnote->getTag("LensType")) { - const std::string ltype = validateUft8(mnote->getTag("LensType")->valueToString()); - - if (ltype.find("MF = Yes") != Glib::ustring::npos) { // check, whether it's a MF lens - lens = lens.replace(0, 7, "MF"); // replace 'Unknwon' with 'MF' - } else { - lens = lens.replace(0, 7, "AF"); // replace 'Unknwon' with 'AF' - } - } - } - } else if (!make.compare(0, 5, "Canon")) { - // ISO at max value supported, check manufacturer specific - if (iso_speed == 65535 || iso_speed == 0) { - rtexif::Tag* baseIsoTag = mnote->getTagP("CanonShotInfo/BaseISO"); - - if (baseIsoTag) { - iso_speed = baseIsoTag->toInt(); - } - } - - int found = false; - // canon EXIF have a string for lens model - rtexif::Tag *lt = mnote->getTag("LensType"); - - if (lt) { - if (lt->toInt()) { - const std::string ldata = validateUft8(lt->valueToString()); - - if (ldata.size() > 1) { - found = true; - lens = "Canon " + ldata; - } - } else { - found = lens_from_make_and_model(); - } - } - - const std::string::size_type first_space_pos = lens.find(' '); - const std::string::size_type remaining_size = - first_space_pos != std::string::npos - ? lens.size() - first_space_pos - : 0; - - if( !found || remaining_size < 7U ) { - lt = mnote->findTag("LensID"); - - if (lt) { - const std::string ldata = validateUft8(lt->valueToString()); - - if (ldata.size() > 1) { - lens = ldata; - } - } - } - } else if (!make.compare (0, 6, "PENTAX") || (!make.compare (0, 5, "RICOH") && !model.compare (0, 6, "PENTAX"))) { - // ISO at max value supported, check manufacturer specific - if (iso_speed == 65535 || iso_speed == 0) { - const rtexif::Tag* const baseIsoTag = mnote->getTag("ISO"); - - if (baseIsoTag) { - const std::string isoData = baseIsoTag->valueToString(); - - if (isoData.size() > 1) { - iso_speed = std::stoi(isoData); - } - } - } - - if (mnote->getTag("LensType")) { - lens = validateUft8(mnote->getTag("LensType")->valueToString()); - // If MakeNotes are vague, fall back to Exif LensMake and LensModel if set - // https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Pentax.html#LensType - if (lens == "M-42 or No Lens" || lens == "K or M Lens" || lens == "A Series Lens" || lens == "Sigma") { - lens_from_make_and_model(); - } - } else { - lens_from_make_and_model(); - } - - // Try to get the FocalLength from the LensInfo structure, where length below 10mm will be correctly set - rtexif::Tag* flt = mnote->getTagP("LensInfo/FocalLength"); - - if (flt) { - // Don't replace Exif focal_len if Makernotes focal_len is 0 - if (flt->toDouble() > 0) { - focal_len = flt->toDouble(); - } - } else if ((flt = mnote->getTagP ("FocalLength"))) { - focal_len = mnote->getTag("FocalLength")->toDouble (); - } - - if (mnote->getTag("FocalLengthIn35mmFilm")) { - focal_len35mm = mnote->getTag("FocalLengthIn35mmFilm")->toDouble(); - } - } else if (!make.compare (0, 4, "SONY") || !make.compare (0, 6, "KONICA")) { - if (mnote->getTag ("LensID")) { - lens = validateUft8(mnote->getTag("LensID")->valueToString()); - if (!lens.compare (0, 7, "Unknown")) { - lens_from_make_and_model(); - } - } - } else if (!make.compare(0, 7, "OLYMPUS")) { - if (mnote->getTag("Equipment")) { - rtexif::TagDirectory* eq = mnote->getTag("Equipment")->getDirectory(); - - if (eq->getTag("LensType")) { - lens = validateUft8(eq->getTag("LensType")->valueToString()); - } - } - if (lens == "Unknown") { - lens_from_make_and_model(); - } - } else if (!make.compare (0, 9, "Panasonic")) { - if (mnote->getTag ("LensType")) { - const std::string panalens = validateUft8(mnote->getTag("LensType")->valueToString()); - - if (panalens.find("LUMIX") != Glib::ustring::npos) { - lens = "Panasonic " + panalens; - } else { - lens = panalens; - } - } - } - } else if (exif->getTag("DNGLensInfo")) { - lens = validateUft8(exif->getTag("DNGLensInfo")->valueToString()); - } else if (!lens_from_make_and_model() && exif->getTag ("LensInfo")) { - lens = validateUft8(exif->getTag("LensInfo")->valueToString()); + if (find_exif_tag("Exif.Image.Rating")) { + rating = to_long(pos); + } else { + auto it = meta.xmpData().findKey(Exiv2::XmpKey("Xmp.xmp.Rating")); + if (it != meta.xmpData().end() && it->size()) { + rating = to_long(it); } } - } - rtexif::Tag* t = newFrameRootDir->getTag(0x83BB); + // try getting some metadata from ImageDescription + if (!make.compare(0, 5, "KODAK") && !getISOSpeed() && !getFNumber() && !getFocalLen() && !getShutterSpeed() && + find_exif_tag("Exif.Image.ImageDescription")) { + std::string s = pos->toString(); + std::string line; + std::smatch m; + const auto d = + [&m]() -> double { + std::string s = m[1]; + return atof(s.c_str()); + }; + while (true) { + auto p = s.find('\r'); + if (p == std::string::npos) { + break; + } + auto line = s.substr(0, p); + s = s.substr(p+1); - if (t) { - iptc = iptc_data_new_from_data((unsigned char*)t->getValue(), (unsigned)t->getValueSize()); - } - - - // ----------------------- Special file type detection (HDR, PixelShift) ------------------------ - - - uint16 bitspersample = 0, samplesperpixel = 0, sampleformat = 0, photometric = 0, compression = 0; - const rtexif::Tag* const bps = frameRootDir->findTag("BitsPerSample"); - const rtexif::Tag* const spp = frameRootDir->findTag("SamplesPerPixel"); - const rtexif::Tag* const sf = frameRootDir->findTag("SampleFormat"); - const rtexif::Tag* const pi = frameRootDir->findTag("PhotometricInterpretation"); - const rtexif::Tag* const c = frameRootDir->findTag("Compression"); - - if (mnote && (!make.compare(0, 6, "PENTAX") || (!make.compare(0, 5, "RICOH") && !model.compare(0, 6, "PENTAX")))) { - const rtexif::Tag* const hdr = mnote->findTag("HDR"); - - if (hdr) { - if (hdr->toInt() > 0) { - isHDR = true; -#if PRINT_HDR_PS_DETECTION - printf("HDR detected ! -> \"HDR\" tag found\n"); -#endif + if (std::regex_match(line, m, std::regex("ISO: +([0-9]+) *"))) { + iso_speed = d(); + } else if (std::regex_match(line, m, std::regex("Aperture: +F([0-9.]+) *"))) { + aperture = d(); + } else if (std::regex_match(line, m, std::regex("Shutter: +([0-9.]+) *"))) { + shutter = d(); + if (shutter) { + shutter = 1.0/shutter; + } + } else if (std::regex_match(line, m, std::regex("Lens \\(mm\\): +([0-9.]+) *"))) { + focal_len = d(); + } else if (std::regex_match(line, m, std::regex("Exp Comp: +([0-9.]+) *"))) { + expcomp = d(); + } } - } else { - const rtexif::Tag* const dm = mnote->findTag("DriveMode"); + } - if (dm) { - char buffer[60]; - dm->toString(buffer, 3); - buffer[3] = 0; + meta.getDimensions(w_, h_); - if (!strcmp(buffer, "HDR")) { + // ----------------------- + // Special file type detection (HDR, PixelShift) + // ------------------------ + uint16 bitspersample = 0, samplesperpixel = 0, sampleformat = 0, photometric = 0, compression = 0; + const auto bps = exif.findKey(Exiv2::ExifKey("Exif.Image.BitsPerSample")); + const auto spp = exif.findKey(Exiv2::ExifKey("Exif.Image.SamplesPerPixel")); + const auto sf = exif.findKey(Exiv2::ExifKey("Exif.Image.SampleFormat")); + const auto pi = exif.findKey(Exiv2::ExifKey("Exif.Image.PhotometricInterpretation")); + const auto c = exif.findKey(Exiv2::ExifKey("Exif.Image.Compression")); + + if ( + !make.compare(0, 6, "PENTAX") + || ( + !make.compare(0, 5, "RICOH") + && !model.compare (0, 6, "PENTAX") + ) + ) { + if (find_exif_tag("Exif.Pentax.DriveMode")) { + std::string buf = pos->toString(3); + if (buf == "HDR") { isHDR = true; #if PRINT_HDR_PS_DETECTION printf("HDR detected ! -> DriveMode = \"HDR\"\n"); #endif } } - } - if (!isHDR) { - const rtexif::Tag* const q = mnote->findTag("Quality"); - if (q && (q->toInt() == 7 || q->toInt() == 8)) { + if ( + !isHDR + && ( + find_exif_tag("Exif.Pentax.Quality") + || find_exif_tag("Exif.PentaxDng.Quality") + ) + && ( + to_long(pos) == 7 + || to_long(pos) == 8 + ) + ) { isPixelShift = true; #if PRINT_HDR_PS_DETECTION printf("PixelShift detected ! -> \"Quality\" = 7\n"); #endif } } - } - sampleFormat = IIOSF_UNKNOWN; - - if (!sf) - /* - * WARNING: This is a dirty hack! - * We assume that files which doesn't contain the TIFFTAG_SAMPLEFORMAT tag - * (which is the case with uncompressed TIFFs produced by RT!) are RGB files, - * but that may be not true. --- Hombre - */ - { - sampleformat = SAMPLEFORMAT_UINT; - } else { - sampleformat = sf->toInt(); - } - - if ( - !bps - || !spp - || !pi - ) { - return; - } - - bitspersample = bps->toInt(); - samplesperpixel = spp->toInt(); - - photometric = pi->toInt(); - - if (photometric == PHOTOMETRIC_LOGLUV) { - if (!c) { - compression = COMPRESSION_NONE; - } else { - compression = c->toInt(); - } - } - - if (photometric == PHOTOMETRIC_RGB || photometric == PHOTOMETRIC_MINISBLACK) { - if (sampleformat == SAMPLEFORMAT_INT || sampleformat == SAMPLEFORMAT_UINT) { - if (bitspersample == 8) { - sampleFormat = IIOSF_UNSIGNED_CHAR; - } else if (bitspersample <= 16) { - sampleFormat = IIOSF_UNSIGNED_SHORT; - } - } else if (sampleformat == SAMPLEFORMAT_IEEEFP) { - if (bitspersample==16) { - sampleFormat = IIOSF_FLOAT16; - isHDR = true; -#if PRINT_HDR_PS_DETECTION - printf("HDR detected ! -> sampleFormat = %d (16-bit)\n", sampleFormat); -#endif - } - else if (bitspersample == 24) { - sampleFormat = IIOSF_FLOAT24; - isHDR = true; -#if PRINT_HDR_PS_DETECTION - printf("HDR detected ! -> sampleFormat = %d (24-bit)\n", sampleFormat); -#endif - } - else if (bitspersample == 32) { - sampleFormat = IIOSF_FLOAT32; - isHDR = true; -#if PRINT_HDR_PS_DETECTION - printf("HDR detected ! -> sampleFormat = %d (32-bit)\n", sampleFormat); -#endif - } - } - } else if (photometric == PHOTOMETRIC_CFA) { - if (sampleformat == SAMPLEFORMAT_IEEEFP) { - if (bitspersample == 16) { - sampleFormat = IIOSF_FLOAT16; - isHDR = true; -#if PRINT_HDR_PS_DETECTION - printf("HDR detected ! -> sampleFormat = %d (16-bit)\n", sampleFormat); -#endif - } - else if (bitspersample == 24) { - sampleFormat = IIOSF_FLOAT24; - isHDR = true; -#if PRINT_HDR_PS_DETECTION - printf("HDR detected ! -> sampleFormat = %d (24-bit)\n", sampleFormat); -#endif - } - else if (bitspersample == 32) { - sampleFormat = IIOSF_FLOAT32; - isHDR = true; -#if PRINT_HDR_PS_DETECTION - printf("HDR detected ! -> sampleFormat = %d (32-bit)\n", sampleFormat); -#endif - } - } else if (sampleformat == SAMPLEFORMAT_INT || sampleformat == SAMPLEFORMAT_UINT) { - if (bitspersample == 8) { // shouldn't occur... - sampleFormat = IIOSF_UNSIGNED_CHAR; - } else if (bitspersample <= 16) { - sampleFormat = IIOSF_UNSIGNED_SHORT; - } - } - } else if (photometric == 34892 || photometric == 32892 /* Linear RAW (see DNG spec ; 32892 seem to be a flaw from Sony's ARQ files) */) { - if (sampleformat == SAMPLEFORMAT_IEEEFP) { - sampleFormat = IIOSF_FLOAT32; - isHDR = true; -#if PRINT_HDR_PS_DETECTION - printf("HDR detected ! -> sampleFormat = %d\n", sampleFormat); -#endif - } else if (sampleformat == SAMPLEFORMAT_INT || sampleformat == SAMPLEFORMAT_UINT) { - if (bitspersample == 8) { // shouldn't occur... - sampleFormat = IIOSF_UNSIGNED_CHAR; - } else if (bitspersample <= 16) { - sampleFormat = IIOSF_UNSIGNED_SHORT; - - if (mnote && (!make.compare(0, 4, "SONY")) && bitspersample >= 12 && samplesperpixel == 4) { + if (make == "SONY") { + if (find_exif_tag("Exif.SubImage1.BitsPerSample") && to_long(pos) == 14) { + if (find_exif_tag("Exif.SubImage1.SamplesPerPixel") && to_long(pos) == 4 && + find_exif_tag("Exif.SubImage1.PhotometricInterpretation") && to_long(pos) == 32892 && + find_exif_tag("Exif.SubImage1.Compression") && to_long(pos) == 1) { isPixelShift = true; + } + } else if (bps != exif.end() && to_long(bps) == 14 && + spp != exif.end() && to_long(spp) == 4 && + c != exif.end() && to_long(c) == 1 && + find_exif_tag("Exif.Image.Software") && + pos->toString() == "make_arq") { + isPixelShift = true; + } + } else if (make == "FUJIFILM") { + if (bps != exif.end() && to_long(bps) == 16 && + spp != exif.end() && to_long(spp) == 4 && + c != exif.end() && to_long(c) == 1 && + find_exif_tag("Exif.Image.Software") && + pos->toString() == "make_arq") { + isPixelShift = true; + } + } + + sampleFormat = IIOSF_UNKNOWN; + + if (sf == exif.end()) + /* + * WARNING: This is a dirty hack! + * We assume that files which doesn't contain the TIFFTAG_SAMPLEFORMAT tag + * (which is the case with uncompressed TIFFs produced by RT!) are RGB files, + * but that may be not true. --- Hombre + */ + { + sampleformat = SAMPLEFORMAT_UINT; + } else { + sampleformat = to_long(sf); + } + + if (bps == exif.end() || spp == exif.end() || pi == exif.end()) { + return; + } + + bitspersample = to_long(bps); + samplesperpixel = to_long(spp); + + photometric = to_long(pi); + if (photometric == PHOTOMETRIC_LOGLUV) { + if (c == exif.end()) { + compression = COMPRESSION_NONE; + } else { + compression = to_long(c); + } + } + + if (photometric == PHOTOMETRIC_RGB || photometric == PHOTOMETRIC_MINISBLACK) { + if (sampleformat == SAMPLEFORMAT_INT || sampleformat == SAMPLEFORMAT_UINT) { + if (bitspersample == 8) { + sampleFormat = IIOSF_UNSIGNED_CHAR; + } else if (bitspersample <= 16) { + sampleFormat = IIOSF_UNSIGNED_SHORT; + } + } else if (sampleformat == SAMPLEFORMAT_IEEEFP) { + if (bitspersample==16) { + sampleFormat = IIOSF_FLOAT16; + isHDR = true; #if PRINT_HDR_PS_DETECTION - printf("PixelShift detected ! -> \"Make\" = SONY, bitsPerPixel > 8, samplesPerPixel == 4\n"); + printf("HDR detected ! -> sampleFormat = %d (16-bit)\n", sampleFormat); +#endif + } + else if (bitspersample == 24) { + sampleFormat = IIOSF_FLOAT24; + isHDR = true; +#if PRINT_HDR_PS_DETECTION + printf("HDR detected ! -> sampleFormat = %d (24-bit)\n", sampleFormat); +#endif + } + else if (bitspersample == 32) { + sampleFormat = IIOSF_FLOAT32; + isHDR = true; +#if PRINT_HDR_PS_DETECTION + printf("HDR detected ! -> sampleFormat = %d (32-bit)\n", sampleFormat); #endif } } - } - } else if (photometric == PHOTOMETRIC_LOGLUV) { - if (compression == COMPRESSION_SGILOG24) { - sampleFormat = IIOSF_LOGLUV24; - isHDR = true; + } else if (photometric == PHOTOMETRIC_CFA) { + if (sampleformat == SAMPLEFORMAT_IEEEFP) { + if (bitspersample == 16) { + sampleFormat = IIOSF_FLOAT16; + isHDR = true; #if PRINT_HDR_PS_DETECTION - printf("HDR detected ! -> sampleFormat = %d\n", sampleFormat); + printf("HDR detected ! -> sampleFormat = %d (16-bit)\n", sampleFormat); #endif - } else if (compression == COMPRESSION_SGILOG) { - sampleFormat = IIOSF_LOGLUV32; - isHDR = true; + } + else if (bitspersample == 24) { + sampleFormat = IIOSF_FLOAT24; + isHDR = true; #if PRINT_HDR_PS_DETECTION - printf("HDR detected ! -> sampleFormat = %d\n", sampleFormat); + printf("HDR detected ! -> sampleFormat = %d (24-bit)\n", sampleFormat); #endif + } + else if (bitspersample == 32) { + sampleFormat = IIOSF_FLOAT32; + isHDR = true; +#if PRINT_HDR_PS_DETECTION + printf("HDR detected ! -> sampleFormat = %d (32-bit)\n", sampleFormat); +#endif + } + } else if (sampleformat == SAMPLEFORMAT_INT || sampleformat == SAMPLEFORMAT_UINT) { + if (bitspersample == 8) { // shouldn't occur... + sampleFormat = IIOSF_UNSIGNED_CHAR; + } else if (bitspersample <= 16) { + sampleFormat = IIOSF_UNSIGNED_SHORT; + } + } + } else if (photometric == 34892 || photometric == 32892 /* Linear RAW (see DNG spec ; 32892 seem to be a flaw from Sony's ARQ files) */) { + if (sampleformat == SAMPLEFORMAT_IEEEFP) { + sampleFormat = IIOSF_FLOAT32; + isHDR = true; +#if PRINT_HDR_PS_DETECTION + printf("HDR detected ! -> sampleFormat = %d\n", sampleFormat); +#endif + } else if (sampleformat == SAMPLEFORMAT_INT || sampleformat == SAMPLEFORMAT_UINT) { + if (bitspersample == 8) { // shouldn't occur... + sampleFormat = IIOSF_UNSIGNED_CHAR; + } else if (bitspersample <= 16) { + sampleFormat = IIOSF_UNSIGNED_SHORT; + if (find_exif_tag("Exif.Photo.MakerNote") && (!make.compare (0, 4, "SONY")) && bitspersample >= 12 && samplesperpixel == 4) { + isPixelShift = true; +#if PRINT_HDR_PS_DETECTION + printf("PixelShift detected ! -> \"Make\" = SONY, bitsPerPixel > 8, samplesPerPixel == 4\n"); +#endif + } + } + } + } else if (photometric == PHOTOMETRIC_LOGLUV) { + if (compression == COMPRESSION_SGILOG24) { + sampleFormat = IIOSF_LOGLUV24; + isHDR = true; +#if PRINT_HDR_PS_DETECTION + printf("HDR detected ! -> sampleFormat = %d\n", sampleFormat); +#endif + } else if (compression == COMPRESSION_SGILOG) { + sampleFormat = IIOSF_LOGLUV32; + isHDR = true; +#if PRINT_HDR_PS_DETECTION + printf("HDR detected ! -> sampleFormat = %d\n", sampleFormat); +#endif + } } - } -} - -FrameData::~FrameData() -{ - - if (iptc) { - iptc_data_free(iptc); - } -} - -procparams::IPTCPairs FrameData::getIPTCData() const -{ - return getIPTCData(iptc); -} - -procparams::IPTCPairs FrameData::getIPTCData(IptcData* iptc_) -{ - - procparams::IPTCPairs iptcc; - - if (!iptc_) { - return iptcc; - } - - unsigned char buffer[2100]; - - for (int i = 0; i < 16; i++) { - IptcDataSet* ds = iptc_data_get_next_dataset(iptc_, nullptr, IPTC_RECORD_APP_2, strTags[i].tag); - - if (ds) { - iptc_dataset_get_data(ds, buffer, 2100); - std::vector icValues; - icValues.push_back(to_utf8((char*)buffer)); - - iptcc[strTags[i].field] = icValues; - iptc_dataset_unref(ds); + } catch (const std::exception& e) { + if (settings->verbose) { + std::cerr << "EXIV2 ERROR: " << e.what() << std::endl; } + ok_ = false; } - - IptcDataSet* ds = nullptr; - std::vector keywords; - - while ((ds = iptc_data_get_next_dataset(iptc_, ds, IPTC_RECORD_APP_2, IPTC_TAG_KEYWORDS))) { - iptc_dataset_get_data(ds, buffer, 2100); - keywords.push_back(to_utf8((char*)buffer)); - } - - iptcc["Keywords"] = keywords; - ds = nullptr; - std::vector suppCategories; - - while ((ds = iptc_data_get_next_dataset(iptc_, ds, IPTC_RECORD_APP_2, IPTC_TAG_SUPPL_CATEGORY))) { - iptc_dataset_get_data(ds, buffer, 2100); - suppCategories.push_back(to_utf8((char*)buffer)); - iptc_dataset_unref(ds); - } - - iptcc["SupplementalCategories"] = suppCategories; - return iptcc; } - -bool FrameData::getPixelShift() const +bool FramesData::getPixelShift() const { return isPixelShift; } -bool FrameData::getHDR() const + +bool FramesData::getHDR() const { return isHDR; } -std::string FrameData::getImageType () const + +std::string FramesData::getImageType() const { return isPixelShift ? "PS" : isHDR ? "HDR" : "STD"; } -IIOSampleFormat FrameData::getSampleFormat() const + +IIOSampleFormat FramesData::getSampleFormat() const { return sampleFormat; } -rtexif::TagDirectory* FrameData::getExifData() const + +bool FramesData::hasExif() const { - return frameRootDir; + return ok_; } -bool FrameData::hasExif() const -{ - return frameRootDir && frameRootDir->getCount(); -} -bool FrameData::hasIPTC() const -{ - return iptc; -} -tm FrameData::getDateTime() const + +tm FramesData::getDateTime() const { return time; } -time_t FrameData::getDateTimeAsTS() const + +time_t FramesData::getDateTimeAsTS() const { return timeStamp; } -int FrameData::getISOSpeed() const + +int FramesData::getISOSpeed() const { return iso_speed; } -double FrameData::getFNumber() const + +double FramesData::getFNumber() const { return aperture; } -double FrameData::getFocalLen() const + +double FramesData::getFocalLen() const { return focal_len; } -double FrameData::getFocalLen35mm() const + +double FramesData::getFocalLen35mm() const { return focal_len35mm; } -float FrameData::getFocusDist() const + +float FramesData::getFocusDist() const { return focus_dist; } -double FrameData::getShutterSpeed() const + + +double FramesData::getShutterSpeed() const { return shutter; } -double FrameData::getExpComp() const + + +double FramesData::getExpComp() const { return expcomp; } -std::string FrameData::getMake() const + + +std::string FramesData::getMake() const { return make; } -std::string FrameData::getModel() const + + +std::string FramesData::getModel() const { return model; } -std::string FrameData::getLens() const + + +std::string FramesData::getLens() const { return lens; } -std::string FrameData::getSerialNumber() const + + +std::string FramesData::getSerialNumber() const { return serial; } -std::string FrameData::getOrientation() const + + +std::string FramesData::getOrientation() const { return orientation; } -int FrameData::getRating () const -{ - return rating; -} - - void FramesData::setDCRawFrameCount(unsigned int frameCount) { dcrawFrameCount = frameCount; } -unsigned int FramesData::getRootCount() const -{ - return roots.size(); -} - unsigned int FramesData::getFrameCount() const { - return dcrawFrameCount ? dcrawFrameCount : frames.size(); + return std::max(1U, dcrawFrameCount); } -bool FramesData::getPixelShift () const -{ - // So far only Pentax and Sony provide multi-frame Pixel Shift files. - // Only the first frame contains the Pixel Shift tag - // If more brand have to be supported, this rule may need - // to evolve - return frames.empty() ? false : frames.at(0)->getPixelShift (); -} -bool FramesData::getHDR(unsigned int frame) const +Glib::ustring FramesData::getFileName() const { - // So far only Pentax provides multi-frame HDR file. - // Only the first frame contains the HDR tag - // If more brand have to be supported, this rule may need - // to evolve - - return frames.empty() || frame >= frames.size() ? false : frames.at(0)->getHDR(); + return fname_; } -std::string FramesData::getImageType (unsigned int frame) const + +int FramesData::getRating() const { - return frames.empty() || frame >= frames.size() ? "STD" : frames.at(0)->getImageType(); -} - -IIOSampleFormat FramesData::getSampleFormat(unsigned int frame) const -{ - return frames.empty() || frame >= frames.size() ? IIOSF_UNKNOWN : frames.at(frame)->getSampleFormat(); -} - -rtexif::TagDirectory* FramesData::getFrameExifData(unsigned int frame) const -{ - return frames.empty() || frame >= frames.size() ? nullptr : frames.at(frame)->getExifData(); -} - -rtexif::TagDirectory* FramesData::getBestExifData(ImageSource *imgSource, procparams::RAWParams *rawParams) const -{ - rtexif::TagDirectory *td = nullptr; - - if (frames.empty()) { - return nullptr; - } - - if (imgSource && rawParams) { - eSensorType sensorType = imgSource->getSensorType(); - unsigned int imgNum = 0; - - if (sensorType == ST_BAYER) { - imgNum = rtengine::LIM(rawParams->bayersensor.imageNum, 0, frames.size() - 1); - /* - // might exist someday ? - } else if (sensorType == ST_FUJI_XTRANS) { - imgNum = rtengine::LIM(rawParams->xtranssensor.imageNum, 0, frames.size() - 1); - } else if (sensorType == ST_NONE && !imgSource->isRAW()) { - // standard image multiframe support should come here (when implemented in GUI) - */ - } - - td = getFrameExifData(imgNum); - rtexif::Tag* makeTag; - - if (td && (makeTag = td->findTag("Make", true))) { - td = makeTag->getParent(); - } else { - td = getRootExifData(0); - } - } - - return td; -} - -rtexif::TagDirectory* FramesData::getRootExifData(unsigned int root) const -{ - return roots.empty() || root >= roots.size() ? nullptr : roots.at(root); -} - -procparams::IPTCPairs FramesData::getIPTCData(unsigned int frame) const -{ - if (frame < frames.size() && frames.at(frame)->hasIPTC()) { - return frames.at(frame)->getIPTCData(); - } else { - if (iptc) { - return FrameData::getIPTCData(iptc); - } else { - procparams::IPTCPairs emptyPairs; - return emptyPairs; - } - } -} - -bool FramesData::hasExif(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.hasExif(); - } - ); -} - -bool FramesData::hasIPTC(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.hasIPTC(); - } - ); -} - -tm FramesData::getDateTime(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getDateTime(); - }, - modTime - ); -} - -time_t FramesData::getDateTimeAsTS(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getDateTimeAsTS(); - }, - modTimeStamp - ); -} - -int FramesData::getISOSpeed(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getISOSpeed(); - } - ); -} - -double FramesData::getFNumber(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getFNumber(); - } - ); -} - -double FramesData::getFocalLen(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getFocalLen(); - } - ); -} - -double FramesData::getFocalLen35mm(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getFocalLen35mm(); - } - ); -} - -float FramesData::getFocusDist(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getFocusDist(); - } - ); -} - -double FramesData::getShutterSpeed(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getShutterSpeed(); - } - ); -} - -double FramesData::getExpComp(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getExpComp(); - } - ); -} - -std::string FramesData::getMake(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getMake(); - } - ); -} - -std::string FramesData::getModel(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getModel(); - } - ); -} - -std::string FramesData::getLens(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getLens(); - } - ); -} - -std::string FramesData::getSerialNumber(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getSerialNumber(); - } - ); -} - -std::string FramesData::getOrientation(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getOrientation(); - } - ); -} - -int FramesData::getRating(unsigned int frame) const -{ - return getFromFrame( - frames, - frame, - [](const FrameData& frame_data) - { - return frame_data.getRating(); - } - ); + return rating; } //------inherited functions--------------// std::string FramesMetaData::apertureToString(double aperture) { - + // TODO: Replace sprintf() char buffer[256]; snprintf(buffer, sizeof(buffer), "%0.1f", aperture); return buffer; @@ -1266,11 +820,12 @@ std::string FramesMetaData::apertureToString(double aperture) std::string FramesMetaData::shutterToString(double shutter) { - char buffer[256]; if (shutter > 0.0 && shutter <= 0.5) { snprintf(buffer, sizeof(buffer), "1/%0.0f", 1.0 / shutter); + } else if (int(shutter) == shutter) { + snprintf(buffer, sizeof(buffer), "%d", int(shutter)); } else { snprintf(buffer, sizeof(buffer), "%0.1f", shutter); } @@ -1298,181 +853,79 @@ std::string FramesMetaData::expcompToString(double expcomp, bool maskZeroexpcomp double FramesMetaData::shutterFromString(std::string s) { - - size_t i = s.find_first_of('/'); + const std::string::size_type i = s.find_first_of('/'); if (i == std::string::npos) { - return atof(s.c_str()); + return std::atof(s.c_str()); } else { - return atof(s.substr(0, i).c_str()) / atof(s.substr(i + 1).c_str()); + const double denominator = std::atof(s.substr(i + 1).c_str()); + return + denominator + ? std::atof(s.substr(0, i).c_str()) / denominator + : 0.0; } } double FramesMetaData::apertureFromString(std::string s) { - return atof(s.c_str()); + return std::atof(s.c_str()); } -extern "C" { -#include -#include +namespace { - struct _IptcDataPrivate { - unsigned int ref_count; - - IptcLog *log; - IptcMem *mem; - }; - - IptcData * - iptc_data_new_from_jpeg_file(FILE *infile) - { - IptcData *d; - unsigned char * buf; - int buf_len = 256 * 256; - int len, offset; - unsigned int iptc_len; - - if (!infile) { - return nullptr; - } - - d = iptc_data_new(); - - if (!d) { - return nullptr; - } - - buf = (unsigned char*)iptc_mem_alloc(d->priv->mem, buf_len); - - if (!buf) { - iptc_data_unref(d); - return nullptr; - } - - len = iptc_jpeg_read_ps3(infile, buf, buf_len); - - if (len <= 0) { - goto failure; - } - - offset = iptc_jpeg_ps3_find_iptc(buf, len, &iptc_len); - - if (offset <= 0) { - goto failure; - } - - iptc_data_load(d, buf + offset, iptc_len); - - iptc_mem_free(d->priv->mem, buf); - return d; - -failure: - iptc_mem_free(d->priv->mem, buf); - iptc_data_unref(d); - return nullptr; - } - -} - -FramesData::FramesData(const Glib::ustring& fname, std::unique_ptr rml, bool firstFrameOnly) : - iptc(nullptr), dcrawFrameCount(0) +template +void set_exif(Exiv2::ExifData &exif, const std::string &key, T val) { - GStatBuf statbuf = {}; - g_stat(fname.c_str(), &statbuf); - modTimeStamp = statbuf.st_mtime; - modTime = timeFromTS(modTimeStamp); - - if (rml && (rml->exifBase >= 0 || rml->ciffBase >= 0)) { - FILE* f = g_fopen(fname.c_str(), "rb"); - - if (f) { - rtexif::ExifManager exifManager(f, std::move(rml), firstFrameOnly); - if (exifManager.f && exifManager.rml) { - if (exifManager.rml->exifBase >= 0) { - exifManager.parseRaw (); - } else if (exifManager.rml->ciffBase >= 0) { - exifManager.parseCIFF (); - } - } - - // copying roots - roots = exifManager.roots; - - // creating FrameData - for (auto currFrame : exifManager.frames) { - frames.push_back(std::unique_ptr(new FrameData(currFrame, currFrame->getRoot(), roots.at(0), modTimeStamp))); - } - - for (auto currRoot : roots) { - rtexif::Tag* t = currRoot->getTag(0x83BB); - - if (t && !iptc) { - iptc = iptc_data_new_from_data ((unsigned char*)t->getValue (), (unsigned)t->getValueSize ()); - break; - } - } - - - fclose(f); - } - } else if (hasJpegExtension(fname)) { - FILE* f = g_fopen(fname.c_str(), "rb"); - - if (f) { - rtexif::ExifManager exifManager(f, std::move(rml), true); - - if (exifManager.f) { - exifManager.parseJPEG(); - roots = exifManager.roots; - - for (auto currFrame : exifManager.frames) { - frames.push_back(std::unique_ptr(new FrameData(currFrame, currFrame->getRoot(), roots.at(0), modTimeStamp))); - } - - rewind(exifManager.f); // Not sure this is necessary - iptc = iptc_data_new_from_jpeg_file(exifManager.f); - } - - fclose(f); - } - } else if (hasTiffExtension(fname)) { - FILE* f = g_fopen(fname.c_str(), "rb"); - - if (f) { - rtexif::ExifManager exifManager(f, std::move(rml), firstFrameOnly); - - exifManager.parseTIFF(); - roots = exifManager.roots; - - // creating FrameData - for (auto currFrame : exifManager.frames) { - frames.push_back(std::unique_ptr(new FrameData(currFrame, currFrame->getRoot(), roots.at(0), modTimeStamp))); - } - - for (auto currRoot : roots) { - rtexif::Tag* t = currRoot->getTag(0x83BB); - - if (t && !iptc) { - iptc = iptc_data_new_from_data((unsigned char*)t->getValue(), (unsigned)t->getValueSize()); - break; - } - } - - fclose(f); + try { + exif[key] = val; + } catch (std::exception &exc) { + if (settings->verbose) { + std::cout << "Exif -- error setting " << key << " to " << val << ": " << exc.what() << std::endl; } } } -FramesData::~FramesData() +} // namespace + +void FramesData::fillBasicTags(Exiv2::ExifData &exif) const { - for (auto currRoot : roots) { - delete currRoot; + if (!hasExif()) { + return; } - - if (iptc) { - iptc_data_free(iptc); + set_exif(exif, "Exif.Photo.ISOSpeedRatings", getISOSpeed()); + set_exif(exif, "Exif.Photo.FNumber", Exiv2::URationalValue(Exiv2::URational(round(getFNumber() * 10), 10))); + auto s = shutterToString(getShutterSpeed()); + auto p = s.find('.'); + if (p != std::string::npos) { + assert(p == s.length()-2); + s = s.substr(0, p) + s.substr(p+1) + "/10"; + } else if (s.find('/') == std::string::npos) { + s += "/1"; } + set_exif(exif, "Exif.Photo.ExposureTime", s); + set_exif(exif, "Exif.Photo.FocalLength", Exiv2::URationalValue(Exiv2::URational(getFocalLen() * 10, 10))); + set_exif(exif, "Exif.Photo.ExposureBiasValue", Exiv2::RationalValue(Exiv2::Rational(round(getExpComp() * 100), 100))); + set_exif(exif, "Exif.Image.Make", getMake()); + set_exif(exif, "Exif.Image.Model", getModel()); + set_exif(exif, "Exif.Photo.LensModel", getLens()); + char buf[256]; + auto t = getDateTime(); + strftime(buf, 256, "%Y:%m:%d %H:%M:%S", &t); + set_exif(exif, "Exif.Photo.DateTimeOriginal", buf); +} + + +void FramesData::getDimensions(int &w, int &h) const +{ + w = w_; + h = h_; +} + + +void FramesData::setDimensions(int w, int h) +{ + w_ = w; + h_ = h; } diff --git a/rtengine/imagedata.h b/rtengine/imagedata.h index 752fafab3..08f55bd62 100644 --- a/rtengine/imagedata.h +++ b/rtengine/imagedata.h @@ -21,12 +21,9 @@ #include #include #include -#include - - -#include #include "imageio.h" +#include "metadata.h" namespace Glib { @@ -35,22 +32,16 @@ class ustring; } -namespace rtexif -{ - -class TagDirectory; -} - namespace rtengine { -class FrameData final +class FramesData final : + public FramesMetaData { - -protected: - rtexif::TagDirectory* frameRootDir; - IptcData* iptc; - +private: + bool ok_; + Glib::ustring fname_; + unsigned int dcrawFrameCount; struct tm time; time_t timeStamp; int iso_speed; @@ -64,87 +55,44 @@ protected: int rating; std::string lens; IIOSampleFormat sampleFormat; - - // each frame has the knowledge of "being an" - // or "being part of an" HDR or PS image - bool isPixelShift; - bool isHDR; - -public: - - FrameData (rtexif::TagDirectory* frameRootDir, rtexif::TagDirectory* rootDir, rtexif::TagDirectory* firstRootDir, time_t ts = 0); - virtual ~FrameData (); - - bool getPixelShift () const; - bool getHDR () const; - std::string getImageType () const; - IIOSampleFormat getSampleFormat () const; - rtexif::TagDirectory* getExifData () const; - procparams::IPTCPairs getIPTCData () const; - static procparams::IPTCPairs getIPTCData (IptcData* iptc_); - bool hasExif () const; - bool hasIPTC () const; - tm getDateTime () const; - time_t getDateTimeAsTS () const; - int getISOSpeed () const; - double getFNumber () const; - double getFocalLen () const; - double getFocalLen35mm () const; - float getFocusDist () const; - double getShutterSpeed () const; - double getExpComp () const; - std::string getMake () const; - std::string getModel () const; - std::string getLens () const; - std::string getSerialNumber () const; - std::string getOrientation () const; - int getRating () const; -}; - -class FramesData final : public FramesMetaData { -private: - // frame's root IFD, can be a file root IFD or a SUB-IFD - std::vector> frames; - // root IFD in the file - std::vector roots; - IptcData* iptc; - unsigned int dcrawFrameCount; struct tm modTime; time_t modTimeStamp; + bool isPixelShift; + bool isHDR; + int w_; + int h_; public: - explicit FramesData (const Glib::ustring& fname, std::unique_ptr rml = nullptr, bool firstFrameOnly = false); - ~FramesData () override; + explicit FramesData(const Glib::ustring& fname, time_t ts = 0); - void setDCRawFrameCount (unsigned int frameCount); - unsigned int getRootCount () const override; - unsigned int getFrameCount () const override; - bool getPixelShift () const override; - bool getHDR (unsigned int frame = 0) const override; - std::string getImageType (unsigned int frame) const override; - IIOSampleFormat getSampleFormat (unsigned int frame = 0) const override; - rtexif::TagDirectory* getFrameExifData (unsigned int frame = 0) const override; - rtexif::TagDirectory* getRootExifData (unsigned int root = 0) const override; - rtexif::TagDirectory* getBestExifData (ImageSource *imgSource, procparams::RAWParams *rawParams) const override; - procparams::IPTCPairs getIPTCData (unsigned int frame = 0) const override; - bool hasExif (unsigned int frame = 0) const override; - bool hasIPTC (unsigned int frame = 0) const override; - tm getDateTime (unsigned int frame = 0) const override; - time_t getDateTimeAsTS (unsigned int frame = 0) const override; - int getISOSpeed (unsigned int frame = 0) const override; - double getFNumber (unsigned int frame = 0) const override; - double getFocalLen (unsigned int frame = 0) const override; - double getFocalLen35mm (unsigned int frame = 0) const override; - float getFocusDist (unsigned int frame = 0) const override; - double getShutterSpeed (unsigned int frame = 0) const override; - double getExpComp (unsigned int frame = 0) const override; - std::string getMake (unsigned int frame = 0) const override; - std::string getModel (unsigned int frame = 0) const override; - std::string getLens (unsigned int frame = 0) const override; - std::string getSerialNumber (unsigned int frame = 0) const; - std::string getOrientation (unsigned int frame = 0) const override; - int getRating (unsigned int frame = 0) const override; + void setDCRawFrameCount(unsigned int frameCount); + unsigned int getFrameCount() const override; + bool getPixelShift() const override; + bool getHDR() const override; + std::string getImageType() const override; + IIOSampleFormat getSampleFormat() const override; + bool hasExif() const override; + tm getDateTime() const override; + time_t getDateTimeAsTS() const override; + int getISOSpeed() const override; + double getFNumber() const override; + double getFocalLen() const override; + double getFocalLen35mm() const override; + float getFocusDist() const override; + double getShutterSpeed() const override; + double getExpComp() const override; + std::string getMake() const override; + std::string getModel() const override; + std::string getLens() const override; + std::string getSerialNumber() const; + std::string getOrientation() const override; + Glib::ustring getFileName() const override; + int getRating() const override; + void getDimensions(int &w, int &h) const override; + + void fillBasicTags(Exiv2::ExifData &exif) const; + + void setDimensions(int w, int h); }; - } diff --git a/rtengine/imageio.cc b/rtengine/imageio.cc index 31c97aeb8..ead825378 100644 --- a/rtengine/imageio.cc +++ b/rtengine/imageio.cc @@ -19,6 +19,7 @@ */ #include #include +#include #include #include #include @@ -26,12 +27,11 @@ #include #include -#include #include #include #include -#ifdef WIN32 +#ifdef _WIN32 #include #else #include @@ -39,23 +39,24 @@ #include "color.h" #include "iccjpeg.h" +#include "imagedata.h" #include "imageio.h" -#include "iptcpairs.h" #include "jpeg.h" #include "procparams.h" #include "rt_math.h" +#include "settings.h" #include "utils.h" #include "../rtgui/options.h" #include "../rtgui/version.h" -#include "../rtexif/rtexif.h" - using namespace std; using namespace rtengine; using namespace rtengine::procparams; +namespace rtengine { extern const Settings *settings; } + namespace { @@ -63,7 +64,7 @@ namespace FILE* g_fopen_withBinaryAndLock(const Glib::ustring& fname) { -#ifdef WIN32 +#ifdef _WIN32 // Use native function to disallow sharing, i.e. lock the file for exclusive access. // This is important to e.g. prevent Windows Explorer from crashing RT due to concurrently scanning an image file. @@ -85,126 +86,37 @@ FILE* g_fopen_withBinaryAndLock(const Glib::ustring& fname) return f; } +template +auto to_long(const Iterator &iter, Integer n = Integer{0}) -> decltype( +#if EXIV2_TEST_VERSION(0,28,0) + iter->toInt64() +) { + return iter->toInt64(n); +#else + iter->toLong() +) { + return iter->toLong(n); +#endif } -Glib::ustring ImageIO::errorMsg[6] = {"Success", "Cannot read file.", "Invalid header.", "Error while reading header.", "File reading error", "Image format not supported."}; - -// For only copying the raw input data -void ImageIO::setMetadata (const rtexif::TagDirectory* eroot) -{ - if (exifRoot != nullptr) { - delete exifRoot; - exifRoot = nullptr; - } - - if (eroot) { - rtexif::TagDirectory* td = eroot->clone (nullptr); - - // make IPTC and XMP pass through - td->keepTag(0x83bb); // IPTC - td->keepTag(0x02bc); // XMP - - exifRoot = td; - } } -// For merging with RT specific data -void ImageIO::setMetadata (const rtexif::TagDirectory* eroot, const rtengine::procparams::ExifPairs& exif, const rtengine::procparams::IPTCPairs& iptcc) +void ImageIO::setMetadata(Exiv2Metadata info) { - - // store exif info - exifChange->clear(); - *exifChange = exif; - - if (exifRoot != nullptr) { - delete exifRoot; - exifRoot = nullptr; - } - - if (eroot) { - exifRoot = eroot->clone (nullptr); - } - - if (iptc != nullptr) { - iptc_data_free (iptc); - iptc = nullptr; - } - - // build iptc structures for libiptcdata - if (iptcc.empty()) { - return; - } - - iptc = iptc_data_new (); - - const unsigned char utf8Esc[] = {0x1B, '%', 'G'}; - IptcDataSet * ds = iptc_dataset_new (); - iptc_dataset_set_tag (ds, IPTC_RECORD_OBJECT_ENV, IPTC_TAG_CHARACTER_SET); - iptc_dataset_set_data (ds, utf8Esc, 3, IPTC_DONT_VALIDATE); - iptc_data_add_dataset (iptc, ds); - iptc_dataset_unref (ds); - - for (rtengine::procparams::IPTCPairs::const_iterator i = iptcc.begin(); i != iptcc.end(); ++i) { - if (i->first == "Keywords" && !(i->second.empty())) { - for (unsigned int j = 0; j < i->second.size(); j++) { - IptcDataSet * ds = iptc_dataset_new (); - iptc_dataset_set_tag (ds, IPTC_RECORD_APP_2, IPTC_TAG_KEYWORDS); - iptc_dataset_set_data (ds, (const unsigned char*)i->second.at(j).c_str(), min(static_cast(64), i->second.at(j).bytes()), IPTC_DONT_VALIDATE); - iptc_data_add_dataset (iptc, ds); - iptc_dataset_unref (ds); - } - - continue; - } else if (i->first == "SupplementalCategories" && !(i->second.empty())) { - for (unsigned int j = 0; j < i->second.size(); j++) { - IptcDataSet * ds = iptc_dataset_new (); - iptc_dataset_set_tag (ds, IPTC_RECORD_APP_2, IPTC_TAG_SUPPL_CATEGORY); - iptc_dataset_set_data (ds, (const unsigned char*)i->second.at(j).c_str(), min(static_cast(32), i->second.at(j).bytes()), IPTC_DONT_VALIDATE); - iptc_data_add_dataset (iptc, ds); - iptc_dataset_unref (ds); - } - - continue; - } - - for (int j = 0; j < 16; j++) - if (i->first == strTags[j].field && !(i->second.empty())) { - IptcDataSet * ds = iptc_dataset_new (); - iptc_dataset_set_tag (ds, IPTC_RECORD_APP_2, strTags[j].tag); - iptc_dataset_set_data (ds, (const unsigned char*)i->second.at(0).c_str(), min(strTags[j].size, i->second.at(0).bytes()), IPTC_DONT_VALIDATE); - iptc_data_add_dataset (iptc, ds); - iptc_dataset_unref (ds); - } - } - - iptc_data_sort (iptc); + metadataInfo = std::move(info); } -void ImageIO::setOutputProfile (const char* pdata, int plen) +void ImageIO::setOutputProfile(const std::string& pdata) { - - delete [] profileData; - - if (pdata) { - profileData = new char [plen]; - memcpy (profileData, pdata, plen); - } else { - profileData = nullptr; - } - - profileLength = plen; + profileData = pdata; } ImageIO::ImageIO() : pl(nullptr), embProfile(nullptr), - profileData(nullptr), profileLength(0), loadedProfileData(nullptr), loadedProfileLength(0), - exifChange(new procparams::ExifPairs), - iptc(nullptr), - exifRoot(nullptr), sampleFormat(IIOSF_UNKNOWN), sampleArrangement(IIOSA_UNKNOWN) { @@ -218,8 +130,6 @@ ImageIO::~ImageIO () } deleteLoadedProfileData(); - delete exifRoot; - delete [] profileData; } void png_read_data(png_struct_def *png_ptr, unsigned char *data, size_t length); @@ -472,7 +382,7 @@ void my_error_exit (j_common_ptr cinfo) (*cinfo->err->output_message) (cinfo); /* Return control to the setjmp point */ -#if defined( WIN32 ) && defined( __x86_64__ ) && !defined(__clang__) +#if defined( _WIN32 ) && defined( __x86_64__ ) && !defined(__clang__) __builtin_longjmp(myerr->setjmp_buffer, 1); #else longjmp(myerr->setjmp_buffer, 1); @@ -496,7 +406,7 @@ int ImageIO::loadJPEGFromMemory (const char* buffer, int bufsize) jerr.pub.error_exit = my_error_exit; /* Establish the setjmp return context for my_error_exit to use. */ -#if defined( WIN32 ) && defined( __x86_64__ ) && !defined(__clang__) +#if defined( _WIN32 ) && defined( __x86_64__ ) && !defined(__clang__) if (__builtin_setjmp(jerr.setjmp_buffer)) { #else @@ -582,7 +492,7 @@ int ImageIO::loadJPEG (const Glib::ustring &fname) my_jpeg_stdio_src (&cinfo, file); -#if defined( WIN32 ) && defined( __x86_64__ ) && !defined(__clang__) +#if defined( _WIN32 ) && defined( __x86_64__ ) && !defined(__clang__) if ( __builtin_setjmp((reinterpret_cast(cinfo.src))->error_jmp_buf) == 0 ) { #else if ( setjmp((reinterpret_cast(cinfo.src))->error_jmp_buf) == 0 ) { @@ -658,7 +568,7 @@ int ImageIO::loadJPEG (const Glib::ustring &fname) int ImageIO::getTIFFSampleFormat (const Glib::ustring &fname, IIOSampleFormat &sFormat, IIOSampleArrangement &sArrangement) { -#ifdef WIN32 +#ifdef _WIN32 wchar_t *wfilename = (wchar_t*)g_utf8_to_utf16 (fname.c_str(), -1, NULL, NULL, NULL); TIFF* in = TIFFOpenW (wfilename, "r"); g_free (wfilename); @@ -771,7 +681,7 @@ int ImageIO::loadTIFF (const Glib::ustring &fname) lock.release(); } -#ifdef WIN32 +#ifdef _WIN32 wchar_t *wfilename = (wchar_t*)g_utf8_to_utf16 (fname.c_str(), -1, NULL, NULL, NULL); TIFF* in = TIFFOpenW (wfilename, "r"); g_free (wfilename); @@ -935,76 +845,6 @@ int ImageIO::loadPPMFromMemory(const char* buffer, int width, int height, bool s } -namespace { - -// Taken from Darktable -- src/imageio/format/png.c -// -/* Write EXIF data to PNG file. - * Code copied from DigiKam's libs/dimg/loaders/pngloader.cpp. - * The EXIF embedding is defined by ImageMagicK. - * It is documented in the ExifTool page: - * http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/PNG.html - * - * ..and in turn copied from ufraw. thanks to udi and colleagues - * for making useful code much more readable and discoverable ;) - */ - -void PNGwriteRawProfile(png_struct *ping, png_info *ping_info, const char *profile_type, guint8 *profile_data, png_uint_32 length) -{ - png_textp text; - long i; - guint8 *sp; - png_charp dp; - png_uint_32 allocated_length, description_length; - - const guint8 hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; - text = static_cast(png_malloc(ping, sizeof(png_text))); - description_length = strlen(profile_type); - allocated_length = length * 2 + (length >> 5) + 20 + description_length; - - text[0].text = static_cast(png_malloc(ping, allocated_length)); - text[0].key = static_cast(png_malloc(ping, 80)); - text[0].key[0] = '\0'; - - g_strlcat(text[0].key, "Raw profile type ", 80); - g_strlcat(text[0].key, profile_type, 80); - - sp = profile_data; - dp = text[0].text; - *dp++ = '\n'; - - g_strlcpy(dp, profile_type, allocated_length); - - dp += description_length; - *dp++ = '\n'; - *dp = '\0'; - - g_snprintf(dp, allocated_length - strlen(text[0].text), "%8lu ", static_cast(length)); - - dp += 8; - - for(i = 0; i < long(length); i++) - { - if(i % 36 == 0) *dp++ = '\n'; - - *(dp++) = hex[((*sp >> 4) & 0x0f)]; - *(dp++) = hex[((*sp++) & 0x0f)]; - } - - *dp++ = '\n'; - *dp = '\0'; - text[0].text_length = (dp - text[0].text); - text[0].compression = -1; - - if(text[0].text_length <= allocated_length) png_set_text(ping, ping_info, text, 1); - - png_free(ping, text[0].text); - png_free(ping, text[0].key); - png_free(ping, text); -} - -} // namespace - int ImageIO::savePNG (const Glib::ustring &fname, int bps) const { if (getWidth() < 1 || getHeight() < 1) { @@ -1067,39 +907,15 @@ int ImageIO::savePNG (const Glib::ustring &fname, int bps) const png_set_IHDR(png, info, width, height, bps, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_BASE); - if (profileData) { + if (!profileData.empty()) { #if PNG_LIBPNG_VER < 10500 - png_charp profdata = reinterpret_cast(profileData); + png_const_charp profdata = reinterpret_cast(profileData.data()); #else - png_bytep profdata = reinterpret_cast(profileData); + png_const_bytep profdata = reinterpret_cast(profileData.data()); #endif - png_set_iCCP(png, info, const_cast("icc"), 0, profdata, profileLength); + png_set_iCCP(png, info, "icc", 0, profdata, profileData.size()); } - { - // buffer for the exif and iptc - unsigned int bufferSize; - unsigned char* buffer = nullptr; // buffer will be allocated in createTIFFHeader - unsigned char* iptcdata = nullptr; - unsigned int iptclen = 0; - - if (iptc && iptc_data_save (iptc, &iptcdata, &iptclen) && iptcdata) { - iptc_data_free_buf (iptc, iptcdata); - iptcdata = nullptr; - } - - int size = rtexif::ExifManager::createPNGMarker(exifRoot, *exifChange, width, height, bps, (char*)iptcdata, iptclen, buffer, bufferSize); - - if (iptcdata) { - iptc_data_free_buf (iptc, iptcdata); - } - if (buffer && size) { - PNGwriteRawProfile(png, info, "exif", buffer, size); - delete[] buffer; - } - } - - int rowlen = width * 3 * bps / 8; unsigned char *row = new unsigned char [rowlen]; @@ -1133,6 +949,11 @@ int ImageIO::savePNG (const Glib::ustring &fname, int bps) const delete [] row; fclose (file); + if (!saveMetadata(fname)) { + g_remove(fname.c_str()); + return IMIO_CANNOTWRITEFILE; + } + if (pl) { pl->setProgressStr ("PROGRESSBAR_READY"); pl->setProgress (1.0); @@ -1167,7 +988,7 @@ int ImageIO::saveJPEG (const Glib::ustring &fname, int quality, int subSamp) con jerr.pub.error_exit = my_error_exit; /* Establish the setjmp return context for my_error_exit to use. */ -#if defined( WIN32 ) && defined( __x86_64__ ) && !defined(__clang__) +#if defined( _WIN32 ) && defined( __x86_64__ ) && !defined(__clang__) if (__builtin_setjmp(jerr.setjmp_buffer)) { #else @@ -1232,61 +1053,9 @@ int ImageIO::saveJPEG (const Glib::ustring &fname, int quality, int subSamp) con jpeg_start_compress(&cinfo, TRUE); - // buffer for exif marker - unsigned char* exifBuffer = nullptr; - unsigned int exifBufferSize = 0; - - // assemble and write exif marker - if (exifRoot) { - rtexif::ExifManager::createJPEGMarker (exifRoot, *exifChange, cinfo.image_width, cinfo.image_height, exifBuffer, exifBufferSize); - - if (exifBufferSize > 0 && exifBufferSize < 65530) { - jpeg_write_marker(&cinfo, JPEG_APP0 + 1, exifBuffer, exifBufferSize); - } - - } - - if (exifBuffer != nullptr) { - delete [] exifBuffer; - } - - // buffer for iptc marker - unsigned char* iptcBuffer = new unsigned char[65535]; - - // assemble and write iptc marker - if (iptc) { - unsigned char* iptcdata; - unsigned int iptcSize; - bool error = false; - - if (iptc_data_save (iptc, &iptcdata, &iptcSize)) { - if (iptcdata) { - iptc_data_free_buf (iptc, iptcdata); - } - - error = true; - } - - int bytes = 0; - - if (!error && (bytes = iptc_jpeg_ps3_save_iptc (nullptr, 0, iptcdata, iptcSize, iptcBuffer, 65532)) < 0) { - error = true; - } - - if (iptcdata) { - iptc_data_free_buf (iptc, iptcdata); - } - - if (!error) { - jpeg_write_marker(&cinfo, JPEG_APP0 + 13, iptcBuffer, bytes); - } - } - - delete [] iptcBuffer; - // write icc profile to the output - if (profileData) { - write_icc_profile (&cinfo, (JOCTET*)profileData, profileLength); + if (!profileData.empty()) { + write_icc_profile (&cinfo, reinterpret_cast(profileData.data()), profileData.size()); } // write image data @@ -1294,7 +1063,7 @@ int ImageIO::saveJPEG (const Glib::ustring &fname, int quality, int subSamp) con unsigned char *row = new unsigned char [rowlen]; /* To avoid memory leaks we establish a new setjmp return context for my_error_exit to use. */ -#if defined( WIN32 ) && defined( __x86_64__ ) && !defined(__clang__) +#if defined( _WIN32 ) && defined( __x86_64__ ) && !defined(__clang__) if (__builtin_setjmp(jerr.setjmp_buffer)) { #else @@ -1335,6 +1104,11 @@ int ImageIO::saveJPEG (const Glib::ustring &fname, int quality, int subSamp) con fclose (file); + if (!saveMetadata(fname)) { + g_remove(fname.c_str()); + return IMIO_CANNOTWRITEFILE; + } + if (pl) { pl->setProgressStr ("PROGRESSBAR_READY"); pl->setProgress (1.0); @@ -1343,6 +1117,7 @@ int ImageIO::saveJPEG (const Glib::ustring &fname, int quality, int subSamp) con return IMIO_SUCCESS; } + int ImageIO::saveTIFF ( const Glib::ustring &fname, int bps, @@ -1368,27 +1143,18 @@ int ImageIO::saveTIFF ( std::string mode = "w"; - // little hack to get libTiff to use proper byte order (see TIFFClienOpen()): - if (exifRoot) { - if (exifRoot->getOrder() == rtexif::INTEL) { - mode += 'l'; - } else { - mode += 'b'; - } - } - if (big) { mode += '8'; } -#ifdef WIN32 +#ifdef _WIN32 FILE *file = g_fopen_withBinaryAndLock (fname); int fileno = _fileno(file); int osfileno = _get_osfhandle(fileno); TIFF* out = TIFFFdOpen (osfileno, fname.c_str(), mode.c_str()); #else TIFF* out = TIFFOpen(fname.c_str(), mode.c_str()); - int fileno = TIFFFileno (out); + // int fileno = TIFFFileno (out); #endif if (!out) { @@ -1400,109 +1166,7 @@ int ImageIO::saveTIFF ( pl->setProgress (0.0); } - bool applyExifPatch = false; - - if (exifRoot && !big) { - rtexif::TagDirectory* cl = (const_cast (exifRoot))->clone (nullptr); - - // ------------------ remove some unknown top level tags which produce warnings when opening a tiff (might be useless) ----------------- - - rtexif::Tag *removeTag = cl->getTag (0x9003); - - if (removeTag) { - removeTag->setKeep (false); - } - - removeTag = cl->getTag (0x9211); - - if (removeTag) { - removeTag->setKeep (false); - } - - // ------------------ Apply list of change ----------------- - - for (auto currExifChange : *exifChange) { - cl->applyChange (currExifChange.first, currExifChange.second); - } - - rtexif::Tag *tag = cl->getTag (TIFFTAG_EXIFIFD); - - if (tag && tag->isDirectory()) { - rtexif::TagDirectory *exif = tag->getDirectory(); - - if (exif) { - int exif_size = exif->calculateSize(); - // TIFFOpen writes out the header and sets file pointer at position 8 - const uint64_t file_offset = 8; // must be 64-bit, because TIFFTAG_EXIFIFD is - unsigned char *buffer = new unsigned char[exif_size + file_offset]; - - exif->write (file_offset, buffer); - - write (fileno, buffer + file_offset, exif_size); - - delete [] buffer; - // let libtiff know that scanlines or any other following stuff should go - // at a different offset: - TIFFSetWriteOffset (out, exif_size + file_offset); - TIFFSetField (out, TIFFTAG_EXIFIFD, file_offset); - applyExifPatch = true; - } - } - - //TODO Even though we are saving EXIF IFD - MakerNote still comes out screwed. - - if ((tag = cl->getTag (TIFFTAG_MODEL)) != nullptr) { - TIFFSetField (out, TIFFTAG_MODEL, tag->getValue()); - } - - if ((tag = cl->getTag (TIFFTAG_MAKE)) != nullptr) { - TIFFSetField (out, TIFFTAG_MAKE, tag->getValue()); - } - - if ((tag = cl->getTag (TIFFTAG_DATETIME)) != nullptr) { - TIFFSetField (out, TIFFTAG_DATETIME, tag->getValue()); - } - - if ((tag = cl->getTag (TIFFTAG_ARTIST)) != nullptr) { - TIFFSetField (out, TIFFTAG_ARTIST, tag->getValue()); - } - - if ((tag = cl->getTag (TIFFTAG_COPYRIGHT)) != nullptr) { - TIFFSetField (out, TIFFTAG_COPYRIGHT, tag->getValue()); - } - - delete cl; - } - - unsigned char* iptcdata = nullptr; - unsigned int iptclen = 0; - - if (iptc && iptc_data_save (iptc, &iptcdata, &iptclen)) { - if (iptcdata) { - iptc_data_free_buf (iptc, iptcdata); - iptcdata = nullptr; - } - } - -#if __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ - bool needsReverse = exifRoot && exifRoot->getOrder() == rtexif::MOTOROLA; -#else - bool needsReverse = exifRoot && exifRoot->getOrder() == rtexif::INTEL; -#endif - - if (iptcdata) { - rtexif::Tag iptcTag(nullptr, rtexif::lookupAttrib (rtexif::ifdAttribs, "IPTCData")); - iptcTag.initLongArray((char*)iptcdata, iptclen); - if (needsReverse) { - unsigned char *ptr = iptcTag.getValue(); - for (int a = 0; a < iptcTag.getCount(); ++a, ptr += 4) { - std::swap(ptr[0], ptr[3]); - std::swap(ptr[1], ptr[2]); - } - } - TIFFSetField (out, TIFFTAG_RICHTIFFIPTC, iptcTag.getCount(), (long*)iptcTag.getValue()); - iptc_data_free_buf (iptc, iptcdata); - } + bool needsReverse = false; TIFFSetField (out, TIFFTAG_SOFTWARE, "RawTherapee " RTVERSION); TIFFSetField (out, TIFFTAG_IMAGEWIDTH, width); @@ -1516,24 +1180,36 @@ int ImageIO::saveTIFF ( TIFFSetField (out, TIFFTAG_COMPRESSION, uncompressed ? COMPRESSION_NONE : COMPRESSION_ADOBE_DEFLATE); TIFFSetField (out, TIFFTAG_SAMPLEFORMAT, (bps == 16 || bps == 32) && isFloat ? SAMPLEFORMAT_IEEEFP : SAMPLEFORMAT_UINT); - [out]() - { - const std::vector default_tags = rtexif::ExifManager::getDefaultTIFFTags(nullptr); - - TIFFSetField (out, TIFFTAG_XRESOLUTION, default_tags[2]->toDouble()); - TIFFSetField (out, TIFFTAG_YRESOLUTION, default_tags[3]->toDouble()); - TIFFSetField (out, TIFFTAG_RESOLUTIONUNIT, default_tags[4]->toInt()); - - for (auto default_tag : default_tags) { - delete default_tag; + // somehow Exiv2 (tested with 0.27.3) doesn't seem to be able to update + // XResolution and YResolution, so we do it ourselves here.... + constexpr float default_resolution = 300.f; + float x_res = default_resolution; + float y_res = default_resolution; + int res_unit = RESUNIT_INCH; + if (!metadataInfo.filename().empty()) { + auto exif = metadataInfo.getOutputExifData(); + auto it = exif.findKey(Exiv2::ExifKey("Exif.Image.XResolution")); + if (it != exif.end()) { + x_res = it->toFloat(); } - }(); + it = exif.findKey(Exiv2::ExifKey("Exif.Image.YResolution")); + if (it != exif.end()) { + y_res = it->toFloat(); + } + it = exif.findKey(Exiv2::ExifKey("Exif.Image.ResolutionUnit")); + if (it != exif.end()) { + res_unit = to_long(it); + } + } + TIFFSetField(out, TIFFTAG_XRESOLUTION, x_res); + TIFFSetField(out, TIFFTAG_YRESOLUTION, y_res); + TIFFSetField(out, TIFFTAG_RESOLUTIONUNIT, res_unit); if (!uncompressed) { TIFFSetField (out, TIFFTAG_PREDICTOR, (bps == 16 || bps == 32) && isFloat ? PREDICTOR_FLOATINGPOINT : PREDICTOR_HORIZONTAL); } - if (profileData) { - TIFFSetField (out, TIFFTAG_ICCPROFILE, profileLength, profileData); + if (!profileData.empty()) { + TIFFSetField (out, TIFFTAG_ICCPROFILE, profileData.size(), profileData.data()); } for (int row = 0; row < height; row++) { @@ -1568,43 +1244,15 @@ int ImageIO::saveTIFF ( writeOk = false; } - /************************************************************************************************************ - * - * Hombre: This is a dirty hack to update the Exif tag data type to 0x0004 so that Windows can understand it. - * libtiff will set this data type to 0x000d and doesn't provide any mechanism to update it before - * dumping to the file. - * - */ - if (applyExifPatch) { - unsigned char b[10]; - uint16 tagCount = 0; - lseek(fileno, 4, SEEK_SET); - read(fileno, b, 4); - uint32 ifd0Offset = rtexif::sget4(b, exifRoot->getOrder()); - lseek(fileno, ifd0Offset, SEEK_SET); - read(fileno, b, 2); - tagCount = rtexif::sget2(b, exifRoot->getOrder()); - for (size_t i = 0; i < tagCount ; ++i) { - uint16 tagID = 0; - read(fileno, b, 2); - tagID = rtexif::sget2(b, exifRoot->getOrder()); - if (tagID == 0x8769) { - rtexif::sset2(4, b, exifRoot->getOrder()); - write(fileno, b, 2); - break; - } else { - read(fileno, b, 10); - } - } - } - /************************************************************************************************************/ - - TIFFClose (out); -#ifdef WIN32 +#ifdef _WIN32 fclose (file); #endif + if (!saveMetadata(fname)) { + writeOk = false; + } + if (pl) { pl->setProgressStr ("PROGRESSBAR_READY"); pl->setProgress (1.0); @@ -1731,3 +1379,57 @@ void ImageIO::deleteLoadedProfileData( ) loadedProfileData = nullptr; } + +bool ImageIO::saveMetadata(const Glib::ustring &fname) const +{ + if (metadataInfo.filename().empty()) { + return true; + } + + bool has_meta = true; + try { + metadataInfo.load(); + } catch (const std::exception& exc) { + if (settings->verbose) { + std::cout << "EXIF LOAD ERROR: " << exc.what() << std::endl; + } + has_meta = false; + } + + if (has_meta) { + try { + metadataInfo.saveToImage(fname, false); + // auto src = open_exiv2(metadataInfo.filename()); + // auto dst = open_exiv2(fname); + // src->readMetadata(); + // dst->setMetadata(*src); + // dst->exifData()["Exif.Image.Software"] = "RawTherapee " RTVERSION; + // for (const auto& p : metadataInfo.exif()) { + // try { + // dst->exifData()[p.first] = p.second; + // } catch (const Exiv2::AnyError& exc) { + // } + // } + // for (const auto& p : metadataInfo.iptc()) { + // try { + // auto& v = p.second; + // if (!v.empty()) { + // dst->iptcData()[p.first] = v[0]; + // for (size_t j = 1; j < v.size(); ++j) { + // Exiv2::Iptcdatum d(Exiv2::IptcKey(p.first)); + // d.setValue(v[j]); + // dst->iptcData().add(d); + // } + // } + // } catch (const Exiv2::AnyError& exc) { + // } + // } + // dst->writeMetadata(); + } catch (const std::exception& exc) { + std::cout << "EXIF ERROR: " << exc.what() << std::endl; + //return false; + } + } + + return true; +} diff --git a/rtengine/imageio.h b/rtengine/imageio.h index e900feccd..813bfcc61 100644 --- a/rtengine/imageio.h +++ b/rtengine/imageio.h @@ -19,14 +19,12 @@ #pragma once #include - #include -#include - #include "iimage.h" #include "imagedimensions.h" #include "imageformat.h" +#include "metadata.h" #include "rtengine.h" enum { @@ -40,50 +38,40 @@ enum { IMIO_CANNOTWRITEFILE }; -namespace rtexif -{ - -class TagDirectory; - -} - namespace rtengine { -class ColorTemp; -class ProgressListener; -class Imagefloat; - namespace procparams { class ExifPairs; +class IPTCPairs; } +class ColorTemp; +class ProgressListener; +class Imagefloat; + class ImageIO : virtual public ImageDatas { protected: ProgressListener* pl; cmsHPROFILE embProfile; - char* profileData; + std::string profileData; int profileLength; char* loadedProfileData; int loadedProfileLength; - const std::unique_ptr exifChange; - IptcData* iptc; - const rtexif::TagDirectory* exifRoot; MyMutex imutex; IIOSampleFormat sampleFormat; IIOSampleArrangement sampleArrangement; + Exiv2Metadata metadataInfo; private: void deleteLoadedProfileData( ); public: - static Glib::ustring errorMsg[6]; - ImageIO(); ~ImageIO() override; @@ -124,9 +112,10 @@ public: cmsHPROFILE getEmbeddedProfile () const; void getEmbeddedProfileData (int& length, unsigned char*& pdata) const; - void setMetadata (const rtexif::TagDirectory* eroot); - void setMetadata (const rtexif::TagDirectory* eroot, const rtengine::procparams::ExifPairs& exif, const rtengine::procparams::IPTCPairs& iptcc); - void setOutputProfile (const char* pdata, int plen); + void setMetadata(Exiv2Metadata info); + void setOutputProfile(const std::string& pdata); + + bool saveMetadata(const Glib::ustring &fname) const; MyMutex& mutex (); }; diff --git a/rtengine/imagesource.h b/rtengine/imagesource.h index 1f4c2179a..95fd77d21 100644 --- a/rtengine/imagesource.h +++ b/rtengine/imagesource.h @@ -109,7 +109,7 @@ public: virtual void getWBMults (const ColorTemp &ctemp, const procparams::RAWParams &raw, std::array& scale_mul, float &autoGainComp, float &rm, float &gm, float &bm) const = 0; // use right after demosaicing image, add coarse transformation and put the result in the provided Imagefloat* - virtual void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hlp, const procparams::RAWParams &raw, int opposed) = 0; + virtual void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hlp, const procparams::RAWParams &raw) = 0; virtual eSensorType getSensorType () const = 0; virtual bool isMono () const = 0; // true is ready to provide the AutoWB, i.e. when the image has been demosaiced for RawImageSource @@ -117,10 +117,10 @@ public: virtual void convertColorSpace (Imagefloat* image, const procparams::ColorManagementParams &cmp, const ColorTemp &wb) = 0; // DIRTY HACK: this method is derived in rawimagesource and strimagesource, but (...,RAWParams raw) will be used ONLY for raw images virtual void getAutoWBMultipliers (double &rm, double &gm, double &bm) = 0; - virtual 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, const procparams::ToneCurveParams &hrp) = 0; + virtual void getAutoWBMultipliersitc(bool extra, double &tempref, double &greenref, double &tempitc, double & greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, 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, const procparams::ToneCurveParams &hrp) = 0; virtual ColorTemp getWB () const = 0; virtual ColorTemp getSpotWB (std::vector &red, std::vector &green, std::vector &blue, int tran, double equal, StandardObserver observer) = 0; - virtual void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &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, const procparams::ToneCurveParams &hrp) = 0; + virtual void WBauto(bool extra, double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, 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, const procparams::ToneCurveParams &hrp) = 0; virtual void getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, const procparams::WBParams & wbpar) = 0; virtual double getDefGain () const @@ -167,11 +167,11 @@ public: } // for RAW files, compute a tone curve using histogram matching on the embedded thumbnail - virtual void getAutoMatchedToneCurve(const procparams::ColorManagementParams &cp, StandardObserver observer, std::vector &outCurve) + virtual void getAutoMatchedToneCurve(const procparams::ColorManagementParams &cp, const procparams::RAWParams &rawParams, StandardObserver observer, std::vector &outCurve) { outCurve = { 0.0 }; } - + double getDirPyrDenoiseExpComp () const { return dirpyrdenoiseExpComp; diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 3a3529131..ef8dc8dbf 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -1,6 +1,6 @@ /* * This file is part of RawTherapee. - * + * * Copyright (c) 2004-2010 Gabor Horvath * * RawTherapee is free software: you can redistribute it and/or modify @@ -33,6 +33,7 @@ #include "image8.h" #include "imagefloat.h" #include "improcfun.h" +#include "metadata.h" #include "labimage.h" #include "lcp.h" #include "procparams.h" @@ -305,9 +306,11 @@ void ImProcCoordinator::backupParams() if (!params) { return; } + if (!paramsBackup) { paramsBackup.reset(new ProcParams()); } + *paramsBackup = *params; } @@ -316,6 +319,7 @@ void ImProcCoordinator::restoreParams() if (!paramsBackup || !params) { return; } + *params = *paramsBackup; } @@ -330,11 +334,10 @@ DetailedCrop* ImProcCoordinator::createCrop(::EditDataProvider *editDataProvider void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) { // TODO Locallab printf - MyMutex::MyLock processingLock(mProcessing); bool highDetailNeeded = options.prevdemo == PD_Sidecar ? true : (todo & M_HIGHQUAL); - // printf("metwb=%s \n", params->wb.method.c_str()); + // printf("metwb=%s \n", params->wb.method.c_str()); // Check if any detail crops need high detail. If not, take a fast path short cut if (!highDetailNeeded) { @@ -357,7 +360,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) ColorManagementParams cmp = params->icm; LCurveParams lcur = params->labCurve; bool spotsDone = false; - + if (!highDetailNeeded) { // if below 100% magnification, take a fast path if (rp.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::NONE) && rp.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)) { @@ -404,17 +407,23 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) Color HLR alters rgb output of demosaic, so re-demosaic is needed when Color HLR is being turned off; if HLR is enabled and changing method *from* Color to any other method OR HLR gets disabled when Color method was selected + If white balance changed with inpaint opposed, because inpaint opposed depends on the white balance */ // If high detail (=100%) is newly selected, do a demosaic update, since the last was just with FAST if (imageTypeListener) { imageTypeListener->imageTypeChanged(imgsrc->isRAW(), imgsrc->getSensorType() == ST_BAYER, imgsrc->getSensorType() == ST_FUJI_XTRANS, imgsrc->isMono(), imgsrc->isGainMapSupported()); } - bool iscolor = (params->toneCurve.method == "Color");// || params->toneCurve.method == "Coloropp"); + + bool iscolor = (params->toneCurve.method == "Color" || params->toneCurve.method == "Coloropp"); + if ((todo & M_WB) && params->toneCurve.hrenabled && params->toneCurve.method == "Coloropp") { + todo |= DEMOSAIC; + } + if ((todo & M_RAW) || (!highDetailRawComputed && highDetailNeeded) - // || (params->toneCurve.hrenabled && params->toneCurve.method != "Color" && imgsrc->isRGBSourceModified()) - // || (!params->toneCurve.hrenabled && params->toneCurve.method == "Color" && imgsrc->isRGBSourceModified())) { + // || (params->toneCurve.hrenabled && params->toneCurve.method != "Color" && imgsrc->isRGBSourceModified()) + // || (!params->toneCurve.hrenabled && params->toneCurve.method == "Color" && imgsrc->isRGBSourceModified())) { || (params->toneCurve.hrenabled && !iscolor && imgsrc->isRGBSourceModified()) || (!params->toneCurve.hrenabled && iscolor && imgsrc->isRGBSourceModified())) { @@ -469,8 +478,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if ((todo & M_RAW) || (!highDetailRawComputed && highDetailNeeded) - // || (params->toneCurve.hrenabled && params->toneCurve.method != "Color" && imgsrc->isRGBSourceModified()) - // || (!params->toneCurve.hrenabled && params->toneCurve.method == "Color" && imgsrc->isRGBSourceModified())) { + // || (params->toneCurve.hrenabled && params->toneCurve.method != "Color" && imgsrc->isRGBSourceModified()) + // || (!params->toneCurve.hrenabled && params->toneCurve.method == "Color" && imgsrc->isRGBSourceModified())) { || (params->toneCurve.hrenabled && !iscolor && imgsrc->isRGBSourceModified()) || (!params->toneCurve.hrenabled && iscolor && imgsrc->isRGBSourceModified())) { if (highDetailNeeded) { @@ -510,12 +519,14 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } const bool autowb = (params->wb.method == "autold" || params->wb.method == "autitcgreen"); + if (settings->verbose) { printf("automethod=%s \n", params->wb.method.c_str()); } + if (todo & (M_INIT | M_LINDENOISE | M_HDR)) { MyMutex::MyLock initLock(minit); // Also used in crop window - // imgsrc->HLRecovery_Global(params->toneCurve); // this handles Color HLRecovery + //imgsrc->HLRecovery_Global(params->toneCurve); // this handles Color HLRecovery if (settings->verbose) { @@ -523,7 +534,22 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } currWB = ColorTemp(params->wb.temperature, params->wb.green, params->wb.equal, params->wb.method, params->wb.observer); + + int dread = 0; + int bia = 1; float studgood = 1000.f; + int nocam = 0; + int kcam = 0; + float minchrom = 1000.f; + float delta = 0.f; + int kmin = 20; + float minhist = 1000000000.f; + float maxhist = -1000.f; + double tempitc = 5000.f; + double greenitc = 1.; + float temp0 = 5000.f; + bool extra = false; + bool forcewbgrey = false; if (!params->wb.enabled) { currWB = ColorTemp(); @@ -531,29 +557,223 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) currWB = imgsrc->getWB(); lastAwbauto = ""; //reinitialize auto } else if (autowb) { - if (params->wb.method == "autitcgreen" || lastAwbEqual != params->wb.equal || lastAwbObserver != params->wb.observer || lastAwbTempBias != params->wb.tempBias || lastAwbauto != params->wb.method) { - double rm, gm, bm; - double tempitc = 5000.f; - double greenitc = 1.; + float tem = 5000.f; + float gre = 1.f; + double tempref0bias = 5000.; + tempitc = 5000.f; + bool autowb1 = true; + double green_thres = 0.8; + + if (params->wb.method == "autitcgreen") { + currWBitc = imgsrc->getWB(); - double tempref = currWBitc.getTemp() * (1. + params->wb.tempBias); + double greenref = currWBitc.getGreen(); - if (settings->verbose && params->wb.method == "autitcgreen") { - printf("tempref=%f greref=%f\n", tempref, greenref); + double tempref0bias0 = currWBitc.getTemp(); + + if (greenref > green_thres && params->wb.itcwb_prim == "srgb") { + forcewbgrey = true; } - imgsrc->getAutoWBMultipliersitc(tempref, greenref, tempitc, greenitc, studgood, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params->wb, params->icm, params->raw, params->toneCurve); + if (!forcewbgrey && (tempref0bias0 < 3300.f) && (greenref < 1.13f && greenref > 0.88f)) { //seems good with temp and green...To fixe...limits 1.13 and 0.88 + if (settings->verbose) { + printf("Keep camera settings temp=%f green=%f\n", tempref0bias0, greenref); + } + + autowb1 = true; + kcam = 1; + } + + if (autowb1) { + //alternative to camera if camera settings out, using autowb grey to find new ref, then mixed with camera + // kcam = 0; + params->wb.method = "autold"; + double rm, gm, bm; + tempitc = 5000.f; + greenitc = 1.; + currWBitc = imgsrc->getWB(); + tempref0bias = currWBitc.getTemp(); + double greenref = currWBitc.getGreen(); + bool pargref = true; + bool pargre = true; + + if ((greenref > 1.5f || tempref0bias < 3300.f || tempref0bias > 7700.f || forcewbgrey) && kcam != 1 && !params->wb.itcwb_sampling) { //probably camera out to adjust... + imgsrc->getAutoWBMultipliersitc(extra, tempref0bias, greenref, tempitc, greenitc, temp0, delta, bia, dread, kcam, nocam, studgood, minchrom, kmin, minhist, maxhist, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params->wb, params->icm, params->raw, params->toneCurve); + imgsrc->wbMul2Camera(rm, gm, bm); + imgsrc->wbCamera2Mul(rm, gm, bm); + ColorTemp ct(rm, gm, bm, 1.0, currWB.getObserver()); + tem = ct.getTemp(); + gre = ct.getGreen(); + + if (gre > 1.3f) { + pargre = false; + } + + if (greenref > 1.3f) { + pargref = false; + } + + double deltemp = tem - tempref0bias; + + if (gre > 1.5f && !forcewbgrey) { //probable wrong value + tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value + gre = 0.5f + 0.5f * LIM(gre, 0.9f, 1.1f);//empirical formula in case system out + } else { + if (!forcewbgrey) { + gre = 0.2f + 0.8f * LIM(gre, 0.85f, 1.15f); + tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value + nocam = 0; + } else {//set temp and green to init itcwb algorithm + double grepro = LIM(greenref, green_thres, 1.15); + gre = 0.5f * grepro + 0.5f * LIM(gre, 0.9f, 1.1f);//empirical green between green camera and autowb grey + + if (abs(deltemp) < 400.) { //arbitraries thresholds to refine + tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value between camera and auto grey + + if (deltemp > 0.) { + nocam = 1; + } else { + nocam = 2; + } + } else if (abs(deltemp) < 900.) { //other arbitrary threshold + tem = 0.4 * tem + 0.6 * tempref0bias;//find a mixed value between camera and auto grey + + if (deltemp > 0.) { + nocam = 3; + } else { + nocam = 4; + } + } else if (abs(deltemp) < 1500. && tempref0bias < 4500.f) { + if ((pargre && pargref) || (!pargre && !pargref)) { + tem = 0.45 * tem + 0.55 * tempref0bias;//find a mixed value between camera and auto grey + } + + if (pargre && !pargref) { + tem = 0.7 * tem + 0.3 * tempref0bias;//find a mixed value between camera and auto grey + } + + if (!pargre && pargref) { + tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value between camera and auto grey + } + + nocam = 5; + } else if (abs(deltemp) < 1500. && tempref0bias >= 4500.f) { + if ((pargre && pargref) || (!pargre && !pargref)) { + tem = 0.45 * tem + 0.55 * tempref0bias;//find a mixed value between camera and auto grey + } + + if (pargre && !pargref) { + tem = 0.7 * tem + 0.3 * tempref0bias;//find a mixed value between camera and auto grey + } + + if (!pargre && pargref) { + tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value between camera and auto grey + } + + nocam = 6; + } else if (abs(deltemp) >= 1500. && tempref0bias < 5500.f) { + if (tem >= 4500.f) { + if ((pargre && pargref) || (!pargre && !pargref)) { + tem = 0.7 * tem + 0.3 * tempref0bias;//find a mixed value between camera and auto grey + } + + if (pargre && !pargref) { + tem = 0.8 * tem + 0.2 * tempref0bias;//find a mixed value between camera and auto grey + } + + if (!pargre && pargref) { + tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value between camera and auto grey + } + + nocam = 7; + } else { + tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value between camera and auto grey + nocam = 8; + } + } else if (abs(deltemp) >= 1500. && tempref0bias >= 5500.f) { + if (tem >= 10000.f) { + tem = 0.99 * tem + 0.01 * tempref0bias;//find a mixed value between camera and auto grey + nocam = 9; + } else { + if ((pargre && pargref) || (!pargre && !pargref)) { + tem = 0.45 * tem + 0.55 * tempref0bias;//find a mixed value between camera and auto grey + } + + if (pargre && !pargref) { + tem = 0.7 * tem + 0.3 * tempref0bias;//find a mixed value between camera and auto grey + } + + if (!pargre && pargref) { + tem = 0.3 * tem + 0.7 * tempref0bias;//find a mixed value between camera and auto grey + } + + nocam = 10; + } + } else { + tem = 0.4 * tem + 0.6 * tempref0bias; + nocam = 11; + } + } + } + + tempitc = tem ; + + extra = true; + + if (settings->verbose) { + printf("Using new references AWB grey or mixed Enable Extra - temgrey=%f gregrey=%f tempitc=%f nocam=%i\n", (double) tem, (double) gre, (double) tempitc, nocam); + } + } + } + + params->wb.method = "autitcgreen"; + + } + float greenitc_low = 1.f; + float tempitc_low = 5000.f; + if (params->wb.method == "autitcgreen" || lastAwbEqual != params->wb.equal || lastAwbObserver != params->wb.observer || lastAwbTempBias != params->wb.tempBias || lastAwbauto != params->wb.method) { + double rm, gm, bm; + greenitc = 1.; + currWBitc = imgsrc->getWB(); + currWBitc = currWBitc.convertObserver(params->wb.observer);//change the temp/green couple with the same multipliers + + double tempref = currWBitc.getTemp() * (1. + params->wb.tempBias); + double greenref = currWBitc.getGreen(); + greenitc = greenref; + + if ((greenref > 1.5f || tempref0bias < 3300.f || tempref0bias > 7700.f || forcewbgrey) && autowb1 && kcam != 1 && !params->wb.itcwb_sampling) { //probably camera out to adjust = greenref ? tempref0bias ? + tempref = tem * (1. + params->wb.tempBias); + greenref = gre; + } else { + + } + + if(params->wb.itcwb_sampling) { + greenitc_low = greenref; + tempitc_low = tempref; + } + + if (settings->verbose && params->wb.method == "autitcgreen") { + printf("tempref=%f greref=%f tempitc=%f greenitc=%f\n", tempref, greenref, tempitc, greenitc); + } + + imgsrc->getAutoWBMultipliersitc(extra, tempref, greenref, tempitc, greenitc, temp0, delta, bia, dread, kcam, nocam, studgood, minchrom, kmin, minhist, maxhist, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params->wb, params->icm, params->raw, params->toneCurve); if (params->wb.method == "autitcgreen") { params->wb.temperature = tempitc; params->wb.green = greenitc; - currWB = ColorTemp(params->wb.temperature, params->wb.green, 1., params->wb.method, params->wb.observer); - //printf("tempitc=%f greitc=%f\n", tempitc, greenitc); + if(params->wb.itcwb_sampling) { + params->wb.temperature = tempitc_low; + params->wb.green = greenitc_low; + } + currWB = ColorTemp(params->wb.temperature, params->wb.green, 1., params->wb.method, params->wb.observer); currWB.getMultipliers(rm, gm, bm); + autoWB.update(rm, gm, bm, params->wb.equal, params->wb.observer, params->wb.tempBias); } if (rm != -1.) { + double bias = params->wb.tempBias; if (params->wb.method == "autitcgreen") { @@ -572,30 +792,54 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) lastAwbauto = ""; autoWB.useDefaults(params->wb.equal, params->wb.observer); } - - } currWB = autoWB; } + double rw = 1.; double gw = 1.; double bw = 1.; - if (params->wb.enabled) { currWB = currWB.convertObserver(params->wb.observer); params->wb.temperature = static_cast(currWB.getTemp()); params->wb.green = currWB.getGreen(); + currWB.getMultipliers(rw, gw, bw); imgsrc->wbMul2Camera(rw, gw, bw); - // printf("ra=%f ga=%f ba=%f\n", rw, gw, bw); + // params->wb.itcwb_sampling = false; + /* + printf("ra=%f ga=%f ba=%f\n", rw, gw, bw); + //recalculate temp and green with wb multipliers. + imgsrc->wbCamera2Mul(rw, gw, bw); + ColorTemp ct(rw, gw, bw, 1.0, currWB.getObserver()); + //allows to calculate temp and green with multipliers in case of we want in GUI + float tem = ct.getTemp(); + float gre = ct.getGreen(); + printf("tem=%f gre=%f \n", (double) tem, (double) gre); + */ } + int met = 0; + if (awbListener) { if (params->wb.method == "autitcgreen") { - awbListener->WBChanged(params->wb.temperature, params->wb.green, rw, gw, bw, studgood); + if (params->wb.itcwb_sampling) { + dread = 1; + studgood = 1.f; + awbListener->WBChanged(met, params->wb.temperature, params->wb.green, rw, gw, bw, 0, 1, 0, dread, studgood, 0, 0, 0, 0); + + } else { + minchrom = LIM(minchrom, 0.f, 0.9f); + delta = LIM(delta, 0.f, 0.9f); + minhist = std::max(minhist, 100.f); + maxhist = std::max(maxhist, 1000.f); + kmin = std::max(kmin, 18); + dread = LIM(dread, 10, 239); + awbListener->WBChanged(met, params->wb.temperature, params->wb.green, rw, gw, bw, temp0, delta, bia, dread, studgood, minchrom, kmin, minhist, maxhist); + } } else { - awbListener->WBChanged(params->wb.temperature, params->wb.green, rw, gw, bw, -1.f); + awbListener->WBChanged(met, params->wb.temperature, params->wb.green, rw, gw, bw, -1.f, -1.f, 1, 1, -1.f, -1.f, 1, -1.f, -1.f); } } @@ -632,8 +876,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) PreviewProps pp(0, 0, fw, fh, scale); // Tells to the ImProcFunctions' tools what is the preview scale, which may lead to some simplifications ipf.setScale(scale); - int inpaintopposed = 1;//force getimage to use inpaint-opposed if enable, only once - imgsrc->getImage(currWB, tr, orig_prev, pp, params->toneCurve, params->raw, inpaintopposed); + imgsrc->getImage(currWB, tr, orig_prev, pp, params->toneCurve, params->raw); if ((todo & M_SPOT) && params->spot.enabled && !params->spot.entries.empty()) { spotsDone = true; @@ -725,10 +968,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } } } + if (spotprev) { spotprev->copyData(orig_prev); } - + if ((todo & M_HDR) && (params->fattal.enabled || params->dehaze.enabled)) { if (fattal_11_dcrop_cache) { delete fattal_11_dcrop_cache; @@ -762,12 +1006,12 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } for (int sp = 0; sp < (int)params->locallab.spots.size(); sp++) { - if(params->locallab.spots.at(sp).expsharp && params->dirpyrequalizer.cbdlMethod == "bef") { - if(params->locallab.spots.at(sp).shardamping < 1) { - params->locallab.spots.at(sp).shardamping = 1; - } - } - } + if (params->locallab.spots.at(sp).expsharp && params->dirpyrequalizer.cbdlMethod == "bef") { + if (params->locallab.spots.at(sp).shardamping < 1) { + params->locallab.spots.at(sp).shardamping = 1; + } + } + } if ((todo & (M_TRANSFORM | M_RGBCURVE)) && params->dirpyrequalizer.cbdlMethod == "bef" && params->dirpyrequalizer.enabled && !params->colorappearance.enabled) { const int W = oprevi->getWidth(); @@ -793,7 +1037,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if (params->toneCurve.histmatching) { if (!params->toneCurve.fromHistMatching) { - imgsrc->getAutoMatchedToneCurve(params->icm, params->wb.observer, params->toneCurve.curve); + imgsrc->getAutoMatchedToneCurve(params->icm, params->raw, params->wb.observer, params->toneCurve.curve); } if (params->toneCurve.autoexp) { @@ -852,7 +1096,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) centx = new float[sizespot]; float *centy = nullptr; centy = new float[sizespot]; - + for (int sp = 0; sp < sizespot; sp++) { log[sp] = params->locallab.spots.at(sp).explog; cie[sp] = params->locallab.spots.at(sp).expcie; @@ -900,7 +1144,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } ipf.getAutoLogloc(sp, imgsrc, sourceg, blackev, whiteev, Autogr, sourceab, fw, fh, xsta, xend, ysta, yend, SCALE); - // printf("sp=%i sg=%f sab=%f\n", sp, sourceg[sp], sourceab[sp]); + // printf("sp=%i sg=%f sab=%f\n", sp, sourceg[sp], sourceab[sp]); params->locallab.spots.at(sp).blackEv = blackev[sp]; params->locallab.spots.at(sp).whiteEv = whiteev[sp]; params->locallab.spots.at(sp).blackEvjz = blackev[sp]; @@ -910,6 +1154,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) params->locallab.spots.at(sp).sourceGraycie = sourceg[sp]; params->locallab.spots.at(sp).sourceabscie = sourceab[sp]; float jz1 = defSpot.jz100; + if (locallListener) { locallListener->logencodChanged(blackev[sp], whiteev[sp], sourceg[sp], sourceab[sp], targetg[sp], autocomput[sp], autocie[sp], jz1); } @@ -938,7 +1183,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if ((todo & (M_AUTOEXP | M_RGBCURVE | M_CROP)) && params->locallab.enabled && !params->locallab.spots.empty()) { - + ipf.rgb2lab(*oprevi, *oprevl, params->icm.workingProfile); nprevl->CopyFrom(oprevl); @@ -1010,6 +1255,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if (params->locallab.spots.at(sp).equilret && params->locallab.spots.at(sp).expreti) { savenormreti.reset(new LabImage(*oprevl, true)); } + // Set local curves of current spot to LUT locRETgainCurve.Set(params->locallab.spots.at(sp).localTgaincurve); locRETtransCurve.Set(params->locallab.spots.at(sp).localTtranscurve); @@ -1053,7 +1299,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) const bool llmascieutili = locllmascieCurve.Set(params->locallab.spots.at(sp).LLmaskciecurve); const bool lcmascieutili = locccmascieCurve.Set(params->locallab.spots.at(sp).CCmaskciecurve); const bool lhmascieutili = lochhmascieCurve.Set(params->locallab.spots.at(sp).HHmaskciecurve); - + const bool lcmas_utili = locccmas_Curve.Set(params->locallab.spots.at(sp).CCmask_curve); const bool llmas_utili = locllmas_Curve.Set(params->locallab.spots.at(sp).LLmask_curve); const bool lhmas_utili = lochhmas_Curve.Set(params->locallab.spots.at(sp).HHmask_curve); @@ -1130,10 +1376,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) float yend = 1.f; float xsta = 0.f; float xend = 1.f; + if (istm || isreti) { locx = params->locallab.spots.at(sp).loc.at(0) / 2000.0; locy = params->locallab.spots.at(sp).loc.at(2) / 2000.0; - locxl= params->locallab.spots.at(sp).loc.at(1) / 2000.0; + locxl = params->locallab.spots.at(sp).loc.at(1) / 2000.0; locyt = params->locallab.spots.at(sp).loc.at(3) / 2000.0; centx = params->locallab.spots.at(sp).centerX / 2000.0 + 0.5; centy = params->locallab.spots.at(sp).centerY / 2000.0 + 0.5; @@ -1141,20 +1388,22 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) yend = std::min(static_cast(centy + locy), 1.f); xsta = std::max(static_cast(centx - locxl), 0.f); xend = std::min(static_cast(centx + locx), 1.f); - // printf("xsta=%f xend=%f ysta=%f yend=%f \n", xsta, xend, ysta, yend); + // printf("xsta=%f xend=%f ysta=%f yend=%f \n", xsta, xend, ysta, yend); } + int ww = nprevl->W; int hh = nprevl->H; int xxs = xsta * ww; int xxe = xend * ww; int yys = ysta * hh; int yye = yend * hh; - + if (istm) { //calculate mean and sigma on full image for RT-spot use by normalize_mean_dt - ipf.mean_sig (nprevl->L, meantme, stdtme, xxs, xxe, yys, yye); + ipf.mean_sig(nprevl->L, meantme, stdtme, xxs, xxe, yys, yye); } + if (isreti) { //calculate mean and sigma on full image for RT-spot use by normalize_mean_dt - ipf.mean_sig (nprevl->L, meanretie, stdretie,xxs, xxe, yys, yye) ; + ipf.mean_sig(nprevl->L, meanretie, stdretie, xxs, xxe, yys, yye) ; } double huerblu = huerefblurs[sp] = huerefblu; @@ -1172,7 +1421,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) huerefp[sp] = huer; chromarefp[sp] = chromar; lumarefp[sp] = lumar; - + CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lumar, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, avg, sca); @@ -1204,7 +1453,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) float highresi = 0.f; float nresi = 0.f; - float highresi46 =0.f; + float highresi46 = 0.f; float nresi46 = 0.f; float Lhighresi = 0.f; float Lnresi = 0.f; @@ -1244,7 +1493,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) locccmasblCurve, lcmasblutili, locllmasblCurve, llmasblutili, lochhmasblCurve, lhmasblutili, locccmaslcCurve, lcmaslcutili, locllmaslcCurve, llmaslcutili, lochhmaslcCurve, lhmaslcutili, locccmaslogCurve, lcmaslogutili, locllmaslogCurve, llmaslogutili, lochhmaslogCurve, lhmaslogutili, - + locccmas_Curve, lcmas_utili, locllmas_Curve, llmas_utili, lochhmas_Curve, lhmas_utili, locccmascieCurve, lcmascieutili, locllmascieCurve, llmascieutili, lochhmascieCurve, lhmascieutili, @@ -1269,12 +1518,13 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) fabrefp[sp] = fab; + if (istm) { //calculate mean and sigma on full image for use by normalize_mean_dt float meanf = 0.f; float stdf = 0.f; - ipf.mean_sig (savenormtm->L, meanf, stdf, xxs, xxe, yys, yye); - - //using 2 unused variables noiselumc and softradiustm + ipf.mean_sig(savenormtm->L, meanf, stdf, xxs, xxe, yys, yye); + + //using 2 unused variables noiselumc and softradiustm params->locallab.spots.at(sp).noiselumc = (int) meanf; params->locallab.spots.at(sp).softradiustm = stdf ; } @@ -1282,8 +1532,8 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) if (isreti) { //calculate mean and sigma on full image for use by normalize_mean_dt float meanf = 0.f; float stdf = 0.f; - ipf.mean_sig (savenormreti->L, meanf, stdf,xxs, xxe, yys, yye ); - //using 2 unused variables sensihs and sensiv + ipf.mean_sig(savenormreti->L, meanf, stdf, xxs, xxe, yys, yye); + //using 2 unused variables sensihs and sensiv params->locallab.spots.at(sp).sensihs = (int) meanf; params->locallab.spots.at(sp).sensiv = (int) stdf; } @@ -1305,12 +1555,14 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) retiMinMax.Tmin = Tmin; retiMinMax.Tmax = Tmax; locallretiminmax.push_back(retiMinMax); + // Recalculate references after if (params->locallab.spots.at(sp).spotMethod == "exc") { ipf.calc_ref(sp, reserv.get(), reserv.get(), 0, 0, pW, pH, scale, huerefblu, chromarefblu, lumarefblu, huer, chromar, lumar, sobeler, avg, locwavCurveden, locwavdenutili); } else { ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, chromarefblu, lumarefblu, huer, chromar, lumar, sobeler, avg, locwavCurveden, locwavdenutili); } + // Update Locallab reference values according to recurs parameter if (params->locallab.spots.at(sp).recurs) { /* @@ -1327,19 +1579,21 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) chromarefp[sp] = chromar; lumarefp[sp] = lumar; fabrefp[sp] = fab; - + } - // spotref.fab = fab; - // locallref.at(sp).fab = fab; - // locallref.push_back(spotref); - if (locallListener) { - // locallListener->refChanged(locallref, params->locallab.selspot); - locallListener->refChanged2(huerefp, chromarefp, lumarefp, fabrefp, params->locallab.selspot); - locallListener->minmaxChanged(locallretiminmax, params->locallab.selspot); - } + // spotref.fab = fab; + // locallref.at(sp).fab = fab; + + // locallref.push_back(spotref); + if (locallListener) { + // locallListener->refChanged(locallref, params->locallab.selspot); + locallListener->refChanged2(huerefp, chromarefp, lumarefp, fabrefp, params->locallab.selspot); + locallListener->minmaxChanged(locallretiminmax, params->locallab.selspot); + } } + delete [] huerefp; delete [] chromarefp; delete [] lumarefp; @@ -1355,9 +1609,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) //************************************************************* // end locallab //************************************************************* - + } - + if ((todo & M_RGBCURVE) || (todo & M_CROP)) { //complexCurve also calculated pre-curves histogram depending on crop CurveFactory::complexCurve(params->toneCurve.expcomp, params->toneCurve.black / 65535.0, @@ -1522,16 +1776,18 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) nprevl->CopyFrom(oprevl); histCCurve.clear(); histLCurve.clear(); + if (params->colorToning.enabled && params->colorToning.method == "LabGrid") { - ipf.colorToningLabGrid(nprevl, 0, nprevl->W, 0, nprevl->H, false); + ipf.colorToningLabGrid(nprevl, 0, nprevl->W, 0, nprevl->H, false); } - ipf.shadowsHighlights(nprevl, params->sh.enabled, params->sh.lab,params->sh.highlights ,params->sh.shadows, params->sh.radius, scale, params->sh.htonalwidth, params->sh.stonalwidth); + ipf.shadowsHighlights(nprevl, params->sh.enabled, params->sh.lab, params->sh.highlights, params->sh.shadows, params->sh.radius, scale, params->sh.htonalwidth, params->sh.stonalwidth); if (params->localContrast.enabled) { - // Alberto's local contrast + // Alberto's local contrast ipf.localContrast(nprevl, nprevl->L, params->localContrast, false, scale); } + ipf.chromiLuminanceCurve(nullptr, pW, nprevl, nprevl, chroma_acurve, chroma_bcurve, satcurve, lhskcurve, clcurve, lumacurve, utili, autili, butili, ccutili, cclutili, clcutili, histCCurve, histLCurve); ipf.vibrance(nprevl, params->vibrance, params->toneCurve.hrenabled, params->icm.workingProfile); ipf.labColorCorrectionRegions(nprevl); @@ -1560,11 +1816,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) bool proedge = WaveParams.expedge; bool profin = WaveParams.expfinal; bool proton = WaveParams.exptoning; - bool pronois = WaveParams.expnoise; + bool pronois = WaveParams.expnoise; if (WaveParams.showmask) { - // WaveParams.showmask = false; - // WaveParams.expclari = true; + // WaveParams.showmask = false; + // WaveParams.expclari = true; } if (WaveParams.softrad > 0.f) { @@ -1584,7 +1840,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) WaveParams.expedge = false; WaveParams.expfinal = false; WaveParams.exptoning = false; - WaveParams.expnoise = false; + WaveParams.expnoise = false; } ipf.ip_wavelet(nprevl, nprevl, kall, WaveParams, wavCLVCurve, wavdenoise, wavdenoiseh, wavblcurve, waOpacityCurveRG, waOpacityCurveSH, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, scale); @@ -1597,7 +1853,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) WaveParams.expfinal = profin; WaveParams.exptoning = proton; WaveParams.expnoise = pronois; - + if (WaveParams.softrad > 0.f) { array2D ble(pW, pH); @@ -1627,7 +1883,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) tmpImage->b(ir, jr) = Z; ble[ir][jr] = Y / 32768.f; } - + double epsilmax = 0.0001; double epsilmin = 0.00001; double aepsil = (epsilmax - epsilmin) / 100.f; @@ -1653,11 +1909,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) Color::XYZ2Lab(X, Y, Z, L, a, b); nprevl->L[ir][jr] = L; } - - delete tmpImage; + + delete tmpImage; } - + } if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { @@ -1666,7 +1922,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) float mL0; float mC0; float background = 0.f; - int show = 0; + int show = 0; @@ -1686,15 +1942,17 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) background = 0.f; show = 0; } - float indic = 1.f; - if (WaveParams.showmask){ - mL0 = mC0 = -1.f; - indic = -1.f; - mL = fabs(mL); - mC = fabs(mC); - show = 1; - } + float indic = 1.f; + + if (WaveParams.showmask) { + mL0 = mC0 = -1.f; + indic = -1.f; + mL = fabs(mL); + mC = fabs(mC); + show = 1; + } + #ifdef _OPENMP #pragma omp parallel for #endif @@ -1708,43 +1966,43 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) delete unshar; unshar = NULL; - - -/* - if (WaveParams.softrad > 0.f) { - array2D ble(pW, pH); - array2D guid(pW, pH); -#ifdef _OPENMP - #pragma omp parallel for -#endif - for (int ir = 0; ir < pH; ir++) - for (int jr = 0; jr < pW; jr++) { - ble[ir][jr] = (nprevl->L[ir][jr] - provradius->L[ir][jr]) / 32768.f; - guid[ir][jr] = provradius->L[ir][jr] / 32768.f; - } - double epsilmax = 0.001; - double epsilmin = 0.0001; - double aepsil = (epsilmax - epsilmin) / 90.f; - double bepsil = epsilmax - 100.f * aepsil; - double epsil = aepsil * WaveParams.softrad + bepsil; - float blur = 10.f / scale * (0.001f + 0.8f * WaveParams.softrad); - // rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); - rtengine::guidedFilter(guid, ble, ble, blur, epsil, false); + /* + if (WaveParams.softrad > 0.f) { + array2D ble(pW, pH); + array2D guid(pW, pH); + #ifdef _OPENMP + #pragma omp parallel for + #endif + + for (int ir = 0; ir < pH; ir++) + for (int jr = 0; jr < pW; jr++) { + ble[ir][jr] = (nprevl->L[ir][jr] - provradius->L[ir][jr]) / 32768.f; + guid[ir][jr] = provradius->L[ir][jr] / 32768.f; + } + double epsilmax = 0.001; + double epsilmin = 0.0001; + double aepsil = (epsilmax - epsilmin) / 90.f; + double bepsil = epsilmax - 100.f * aepsil; + double epsil = aepsil * WaveParams.softrad + bepsil; + + float blur = 10.f / scale * (0.001f + 0.8f * WaveParams.softrad); + // rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiTh); + rtengine::guidedFilter(guid, ble, ble, blur, epsil, false); -#ifdef _OPENMP - #pragma omp parallel for -#endif + #ifdef _OPENMP + #pragma omp parallel for + #endif - for (int ir = 0; ir < pH; ir++) - for (int jr = 0; jr < pW; jr++) { - nprevl->L[ir][jr] = provradius->L[ir][jr] + 32768.f * ble[ir][jr]; - } - } -*/ + for (int ir = 0; ir < pH; ir++) + for (int jr = 0; jr < pW; jr++) { + nprevl->L[ir][jr] = provradius->L[ir][jr] + 32768.f * ble[ir][jr]; + } + } + */ if (WaveParams.softrad > 0.f) { delete provradius; @@ -1754,7 +2012,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } - + } ipf.softLight(nprevl, params->softlight); @@ -1764,6 +2022,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) const int GH = nprevl->H; std::unique_ptr provis; const float pres = 0.01f * params->icm.preser; + if (pres > 0.f && params->icm.wprim != ColorManagementParams::Primaries::DEFAULT) { provis.reset(new LabImage(GW, GH)); provis->CopyFrom(nprevl); @@ -1786,24 +2045,27 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) ipf.workingtrc(tmpImage1.get(), tmpImage1.get(), GW, GH, 5, prof, gamtone, slotone, illum, prim, dummy, false, true, true); ipf.rgb2lab(*tmpImage1, *nprevl, params->icm.workingProfile); + //nprevl and provis if (provis) { ipf.preserv(nprevl, provis.get(), GW, GH); } + if (params->icm.fbw) { #ifdef _OPENMP #pragma omp parallel for #endif + for (int x = 0; x < GH; x++) for (int y = 0; y < GW; y++) { nprevl->a[x][y] = 0.f; nprevl->b[x][y] = 0.f; } } - + tmpImage1.reset(); - if (prim == 12) {//pass red gre blue xy in function of area dats Ciexy + if (prim == 13) {//pass red gre blue xy in function of area dats Ciexy float redgraphx = params->icm.labgridcieALow; float redgraphy = params->icm.labgridcieBLow; float blugraphx = params->icm.labgridcieAHigh; @@ -1825,7 +2087,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) greyy = rtengine::LIM(greyy, 0.5f, 1.f); if (primListener) { - primListener->primChanged (redxx, redyy, bluxx, bluyy, grexx, greyy); + primListener->primChanged(redxx, redyy, bluxx, bluyy, grexx, greyy); } } else {//all other cases - pass Cie xy to update graph Ciexy float r_x = params->icm.redx; @@ -1839,57 +2101,66 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) float wy = 0.33f; switch (illum) { - case 1://D41 - wx = 0.37798f; - wy = 0.38123f; - break; - case 2://D50 - wx = 0.3457f; - wy = 0.3585f; - break; - case 3://D55 - wx = 0.3324f; - wy = 0.3474f; - break; - case 4://D60 - wx = 0.3217f; - wy = 0.3377f; - break; - case 5://D65 - wx = 0.3127f; - wy = 0.3290f; - break; - case 6://D80 - wx = 0.2937f; - wy = 0.3092f; - break; - case 7://D120 - wx = 0.2697f; - wy = 0.2808f; - break; - case 8://stdA - wx = 0.4476f; - wy = 0.4074f; - break; - case 9://2000K - wx = 0.5266f; - wy = 0.4133f; - break; - case 10://1500K - wx = 0.5857f; - wy = 0.3932f; - break; + case 1://D41 + wx = 0.37798f; + wy = 0.38123f; + break; + + case 2://D50 + wx = 0.3457f; + wy = 0.3585f; + break; + + case 3://D55 + wx = 0.3324f; + wy = 0.3474f; + break; + + case 4://D60 + wx = 0.3217f; + wy = 0.3377f; + break; + + case 5://D65 + wx = 0.3127f; + wy = 0.3290f; + break; + + case 6://D80 + wx = 0.2937f; + wy = 0.3092f; + break; + + case 7://D120 + wx = 0.2697f; + wy = 0.2808f; + break; + + case 8://stdA + wx = 0.4476f; + wy = 0.4074f; + break; + + case 9://2000K + wx = 0.5266f; + wy = 0.4133f; + break; + + case 10://1500K + wx = 0.5857f; + wy = 0.3932f; + break; } if (primListener) { - primListener->iprimChanged (r_x, r_y, b_x, b_y, g_x, g_y, wx, wy); + primListener->iprimChanged(r_x, r_y, b_x, b_y, g_x, g_y, wx, wy); } } } if (params->colorappearance.enabled) { // L histo and Chroma histo for ciecam - // histogram well be for Lab (Lch) values, because very difficult to do with J,Q, M, s, C + // histogram will be for Lab (Lch) values, because very difficult to do with J,Q, M, s, C int x1, y1, x2, y2; params->crop.mapToResized(pW, pH, scale, x1, x2, y1, y2); lhist16CAM.clear(); @@ -1910,20 +2181,10 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) customColCurve1, customColCurve2, customColCurve3, 1); const FramesMetaData* metaData = imgsrc->getMetaData(); - int imgNum = 0; - - if (imgsrc->isRAW()) { - if (imgsrc->getSensorType() == ST_BAYER) { - imgNum = rtengine::LIM(params->raw.bayersensor.imageNum, 0, metaData->getFrameCount() - 1); - } else if (imgsrc->getSensorType() == ST_FUJI_XTRANS) { - //imgNum = rtengine::LIM(params->raw.xtranssensor.imageNum, 0, metaData->getFrameCount() - 1); - } - } - - float fnum = metaData->getFNumber(imgNum); // F number - float fiso = metaData->getISOSpeed(imgNum) ; // ISO - float fspeed = metaData->getShutterSpeed(imgNum) ; // Speed - double fcomp = metaData->getExpComp(imgNum); // Compensation +/- + float fnum = metaData->getFNumber(); // F number + float fiso = metaData->getISOSpeed() ; // ISO + float fspeed = metaData->getShutterSpeed() ; // Speed + double fcomp = metaData->getExpComp(); // Compensation +/- double adap; if (fnum < 0.3f || fiso < 5.f || fspeed < 0.00001f) { //if no exif data or wrong @@ -1936,9 +2197,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) adap = pow(2.0, E_V - 3.0); // cd / m2 // end calculation adaptation scene luminosity } - if(params->colorappearance.catmethod == "symg") {//force abolute luminance scenescene to 400 in symmetric - adap = 400.; - } + + if (params->colorappearance.catmethod == "symg") { //force abolute luminance scenescene to 400 in symmetric + adap = 400.; + } + float d, dj, yb; bool execsharp = false; @@ -1960,13 +2223,15 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) CAMBrightCurveQ.dirty = true; ipf.ciecam_02float(ncie, float (adap), pW, 2, nprevl, params.get(), customColCurve1, customColCurve2, customColCurve3, histLCAM, histCCAM, CAMBrightCurveJ, CAMBrightCurveQ, CAMMean, 0, scale, execsharp, d, dj, yb, 1); - //call listener + + //call listener if ((params->colorappearance.autodegree || params->colorappearance.autodegreeout) && acListener && params->colorappearance.enabled) { - if(params->colorappearance.catmethod == "symg") {//force chromatic adaptation to 90 in symmetric - d = 0.9; - dj = 0.9; - } - acListener->autoCamChanged(100.* (double)d, 100.* (double)dj); + if (params->colorappearance.catmethod == "symg") { //force chromatic adaptation to 90 in symmetric + d = 0.9; + dj = 0.9; + } + + acListener->autoCamChanged(100.* (double)d, 100.* (double)dj); } if (params->colorappearance.autoadapscen && acListener && params->colorappearance.enabled) { @@ -1974,47 +2239,50 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } if (params->colorappearance.autoybscen && acListener && params->colorappearance.enabled) { - if(params->colorappearance.catmethod == "symg") {//force yb scene to 18 in symmetric - yb = 18; - } + if (params->colorappearance.catmethod == "symg") { //force yb scene to 18 in symmetric + yb = 18; + } acListener->ybCamChanged((int) yb); //real value Yb scene } - double tempsym = 5003.; - int wmodel = 0;//wmodel allows - arbitrary - choice of illuminant and temp with choice - if (params->colorappearance.wbmodel == "RawT") { - wmodel = 0; - } else if (params->colorappearance.wbmodel == "RawTCAT02") { - wmodel = 1; - } else if (params->colorappearance.wbmodel == "free") { - wmodel = 2;//force white balance in symmetric - } - - if(params->colorappearance.catmethod == "symg" && wmodel == 2) { - tempsym = params->wb.temperature;//force white balance in symmetric - } else { - if (params->colorappearance.illum == "iA") {//otherwise force illuminant source - tempsym = 2856.; - } else if (params->colorappearance.illum == "i41") { - tempsym = 4100.; - } else if (params->colorappearance.illum == "i50") { - tempsym = 5003.; - } else if (params->colorappearance.illum == "i55") { - tempsym = 5503.; - } else if (params->colorappearance.illum == "i60") { - tempsym = 6000. ; - } else if (params->colorappearance.illum == "i65") { - tempsym = 6504.; - } else if (params->colorappearance.illum == "i75") { - tempsym = 7504.; - } else if (params->colorappearance.illum == "ifree") { - tempsym = params->wb.temperature;//force white balance in symmetric - } - } - if (params->colorappearance.enabled && params->colorappearance.autotempout) { - acListener->wbCamChanged(tempsym, 1.f); //real temp and tint = 1. + + double tempsym = 5003.; + int wmodel = 0;//wmodel allows - arbitrary - choice of illuminant and temp with choice + + if (params->colorappearance.wbmodel == "RawT") { + wmodel = 0; + } else if (params->colorappearance.wbmodel == "RawTCAT02") { + wmodel = 1; + } else if (params->colorappearance.wbmodel == "free") { + wmodel = 2;//force white balance in symmetric } - + + if (params->colorappearance.catmethod == "symg" && wmodel == 2) { + tempsym = params->wb.temperature;//force white balance in symmetric + } else { + if (params->colorappearance.illum == "iA") {//otherwise force illuminant source + tempsym = 2856.; + } else if (params->colorappearance.illum == "i41") { + tempsym = 4100.; + } else if (params->colorappearance.illum == "i50") { + tempsym = 5003.; + } else if (params->colorappearance.illum == "i55") { + tempsym = 5503.; + } else if (params->colorappearance.illum == "i60") { + tempsym = 6000. ; + } else if (params->colorappearance.illum == "i65") { + tempsym = 6504.; + } else if (params->colorappearance.illum == "i75") { + tempsym = 7504.; + } else if (params->colorappearance.illum == "ifree") { + tempsym = params->wb.temperature;//force white balance in symmetric + } + } + + if (params->colorappearance.enabled && params->colorappearance.autotempout) { + acListener->wbCamChanged(tempsym, 1.f); //real temp and tint = 1. + } + } else { // CIECAM is disabled, we free up its image buffer to save some space if (ncie) { @@ -2033,7 +2301,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } } - // if (todo & (M_AUTOEXP | M_RGBCURVE)) { + // if (todo & (M_AUTOEXP | M_RGBCURVE)) { // Update the monitor color transform if necessary if ((todo & M_MONITOR) || (lastOutputProfile != params->icm.outputProfile) || lastOutputIntent != params->icm.outputIntent || lastOutputBPC != params->icm.outputBPC) { @@ -2083,19 +2351,24 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } hist_lrgb_dirty = vectorscope_hc_dirty = vectorscope_hs_dirty = waveform_dirty = true; + if (hListener) { if (hListener->updateHistogram()) { updateLRGBHistograms(); } + if (hListener->updateVectorscopeHC()) { updateVectorscopeHC(); } + if (hListener->updateVectorscopeHS()) { updateVectorscopeHS(); } + if (hListener->updateWaveform()) { updateWaveforms(); } + notifyHistogramChanged(); } } @@ -2106,14 +2379,14 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } } -void ImProcCoordinator::setTweakOperator (TweakOperator *tOperator) +void ImProcCoordinator::setTweakOperator(TweakOperator *tOperator) { if (tOperator) { tweakOperator = tOperator; } } -void ImProcCoordinator::unsetTweakOperator (TweakOperator *tOperator) +void ImProcCoordinator::unsetTweakOperator(TweakOperator *tOperator) { if (tOperator && tOperator == tweakOperator) { tweakOperator = nullptr; @@ -2127,6 +2400,7 @@ void ImProcCoordinator::freeAll() if (spotprev && spotprev != oprevi) { delete spotprev; } + spotprev = nullptr; if (orig_prev != oprevi) { @@ -2161,7 +2435,7 @@ void ImProcCoordinator::freeAll() allocated = false; } -void ImProcCoordinator::allocCache (Imagefloat* &imgfloat) +void ImProcCoordinator::allocCache(Imagefloat* &imgfloat) { if (imgfloat == nullptr) { imgfloat = new Imagefloat(pW, pH); @@ -2188,8 +2462,8 @@ void ImProcCoordinator::setScale(int prevscale) do { prevscale--; - PreviewProps pp (0, 0, fw, fh, prevscale); - imgsrc->getSize (pp, nW, nH); + PreviewProps pp(0, 0, fw, fh, prevscale); + imgsrc->getSize(pp, nW, nH); } while (nH < 400 && prevscale > 1 && (nW * nH < 1000000)); // actually hardcoded values, perhaps a better choice is possible if (nW != pW || nH != pH) { @@ -2348,15 +2622,18 @@ bool ImProcCoordinator::updateVectorscopeHC() #ifdef _OPENMP #pragma omp for nowait #endif + for (int i = y1; i < y2; ++i) { for (int j = x1, ofs_lab = (i - y1) * (x2 - x1); j < x2; ++j, ++ofs_lab) { const int col = norm_factor * a[ofs_lab] + size / 2 + 0.5f; const int row = norm_factor * b[ofs_lab] + size / 2 + 0.5f; + if (col >= 0 && col < size && row >= 0 && row < size) { vectorscopeThr[row][col]++; } } } + #ifdef _OPENMP #pragma omp critical #endif @@ -2391,8 +2668,10 @@ bool ImProcCoordinator::updateVectorscopeHS() #ifdef _OPENMP #pragma omp for nowait #endif + for (int i = y1; i < y2; ++i) { int ofs = (i * pW + x1) * 3; + for (int j = x1; j < x2; ++j) { const float red = 257.f * workimg->data[ofs++]; const float green = 257.f * workimg->data[ofs++]; @@ -2402,11 +2681,13 @@ bool ImProcCoordinator::updateVectorscopeHS() const auto sincosval = xsincosf(2.f * RT_PI_F * h); const int col = s * sincosval.y * (size / 2) + size / 2; const int row = s * sincosval.x * (size / 2) + size / 2; + if (col >= 0 && col < size && row >= 0 && row < size) { vectorscopeThr[row][col]++; } } } + #ifdef _OPENMP #pragma omp critical #endif @@ -2454,6 +2735,7 @@ bool ImProcCoordinator::updateWaveforms() waveformLuma.fill(0); constexpr float luma_factor = 255.f / 32768.f; + for (int i = y1; i < y2; i++) { int ofs = (i * pW + x1) * 3; float* L_row = nprevl->L[i] + x1; @@ -2479,13 +2761,24 @@ bool ImProcCoordinator::getAutoWB(double& temp, double& green, double equal, Sta // Issue 2500 MyMutex::MyLock lock(minit); // Also used in crop window double rm, gm, bm; params->wb.method = "autold";//same result as before multiple Auto WB - - // imgsrc->getAutoWBMultipliers(rm, gm, bm); + + // imgsrc->getAutoWBMultipliers(rm, gm, bm); double tempitc = 5000.; double greenitc = 1.; + int dread = 0; + int bia = 0; + float temp0 = 5000.f; float studgood = 1000.f; + int nocam = 0; + int kcam = 0; + float minchrom = 1000.f; + float delta = 0.f; + int kmin = 20; + float minhist = 10000000.f; + float maxhist = -1000.f; double tempref, greenref; - imgsrc->getAutoWBMultipliersitc(tempref, greenref, tempitc, greenitc, studgood, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params->wb, params->icm, params->raw, params->toneCurve); + bool extra = false; + imgsrc->getAutoWBMultipliersitc(extra, tempref, greenref, tempitc, greenitc, temp0, delta, bia, dread, kcam, nocam, studgood, minchrom, kmin, minhist, maxhist, 0, 0, fh, fw, 0, 0, fh, fw, rm, gm, bm, params->wb, params->icm, params->raw, params->toneCurve); if (rm != -1) { autoWB.update(rm, gm, bm, equal, observer, tempBias); @@ -2677,7 +2970,7 @@ void ImProcCoordinator::saveInputICCReference(const Glib::ustring& fname, bool a currWB = ColorTemp(); // = no white balance } - imgsrc->getImage(currWB, tr, im, pp, ppar.toneCurve, ppar.raw, 0); + imgsrc->getImage(currWB, tr, im, pp, ppar.toneCurve, ppar.raw); ImProcFunctions ipf(&ppar, true); if (ipf.needsTransform(fW, fH, imgsrc->getRotateDegree(), imgsrc->getMetaData())) { @@ -2733,7 +3026,7 @@ void ImProcCoordinator::saveInputICCReference(const Glib::ustring& fname, bool a im = tempImage; } - im->setMetadata(imgsrc->getMetaData()->getRootExifData()); + im->setMetadata(Exiv2Metadata(imgsrc->getFileName(), false)); im->saveTIFF(fname, 16, false, true); delete im; @@ -2804,6 +3097,7 @@ void ImProcCoordinator::process() || params->rgbCurves != nextParams->rgbCurves || params->colorToning != nextParams->colorToning || params->vibrance != nextParams->vibrance + // || params->wb != nextParams->wb //isPanningRelatedChange(nextParams->wb) || params->wb.isPanningRelatedChange(nextParams->wb) || params->colorappearance != nextParams->colorappearance || params->epd != nextParams->epd @@ -2853,7 +3147,7 @@ void ImProcCoordinator::process() paramsUpdateMutex.unlock(); // M_VOID means no update, and is a bit higher that the rest - if (change & (M_VOID - 1)) { + if (change & (~M_VOID)) { updatePreviewImage(change, panningRelatedChange); } @@ -2919,7 +3213,9 @@ void ImProcCoordinator::requestUpdateWaveform() if (!hListener) { return; } + bool updated = updateWaveforms(); + if (updated) { notifyHistogramChanged(); } @@ -2930,7 +3226,9 @@ void ImProcCoordinator::requestUpdateHistogram() if (!hListener) { return; } + bool updated = updateLRGBHistograms(); + if (updated) { notifyHistogramChanged(); } @@ -2941,6 +3239,7 @@ void ImProcCoordinator::requestUpdateHistogramRaw() if (!hListener) { return; } + // Don't need to actually update histogram because it is always // up-to-date. if (hist_raw_dirty) { @@ -2954,7 +3253,9 @@ void ImProcCoordinator::requestUpdateVectorscopeHC() if (!hListener) { return; } + bool updated = updateVectorscopeHC(); + if (updated) { notifyHistogramChanged(); } @@ -2965,7 +3266,9 @@ void ImProcCoordinator::requestUpdateVectorscopeHS() if (!hListener) { return; } + bool updated = updateVectorscopeHS(); + if (updated) { notifyHistogramChanged(); } diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index 50c14ef9e..7e4e3bb06 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -74,6 +74,7 @@ protected: ImageSource* imgsrc; ColorTemp currWB; + ColorTemp currWBcust; ColorTemp autoWB; ColorTemp currWBloc; ColorTemp autoWBloc; diff --git a/rtengine/improcfun.cc b/rtengine/improcfun.cc index 8a0e699d6..2e02a352c 100644 --- a/rtengine/improcfun.cc +++ b/rtengine/improcfun.cc @@ -5634,18 +5634,18 @@ void ImProcFunctions::getAutoExp(const LUTu &histogram, int histcompr, double cl double ImProcFunctions::getAutoDistor(const Glib::ustring &fname, int thumb_size) { if (!fname.empty()) { - rtengine::RawMetaDataLocation ri; + // TODO: std::unique_ptr<> to the rescue int w_raw = -1, h_raw = thumb_size; int w_thumb = -1, h_thumb = thumb_size; eSensorType sensorType = rtengine::ST_NONE; - Thumbnail* thumb = rtengine::Thumbnail::loadQuickFromRaw(fname, ri, sensorType, w_thumb, h_thumb, 1, FALSE); + Thumbnail* thumb = rtengine::Thumbnail::loadQuickFromRaw(fname, sensorType, w_thumb, h_thumb, 1, FALSE); if (!thumb) { return 0.0; } - Thumbnail* raw = rtengine::Thumbnail::loadFromRaw(fname, ri, sensorType, w_raw, h_raw, 1, 1.0, ColorTemp::DEFAULT_OBSERVER, FALSE); + Thumbnail* raw = rtengine::Thumbnail::loadFromRaw(fname, sensorType, w_raw, h_raw, 1, 1.0, ColorTemp::DEFAULT_OBSERVER, FALSE, nullptr); if (!raw) { delete thumb; diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 2c36a0d31..ea11e40bd 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -440,7 +440,7 @@ enum class BlurType { void Sigma(const float* HH_Coeffs, int datalen, float averagePlus, float averageNeg, float &sigmaPlus, float &sigmaNeg, int numThreads); void calckoe(const float* WavCoeffs_LL, float gradw, float tloww, float *koeLi, int level, int W_L, int H_L, float edd, float &maxkoeLi, float **tmC, bool multiThread = false); - void Median_Denoise(float **src, float **dst, int width, int height, Median medianType, int iterations, int numThreads, float **buffer = nullptr); + static void Median_Denoise(float **src, float **dst, int width, int height, Median medianType, int iterations, int numThreads, float **buffer = nullptr); void Median_Denoise(float **src, float **dst, float upperBound, int width, int height, Median medianType, int iterations, int numThreads, float **buffer = nullptr); void RGB_denoise(int kall, Imagefloat * src, Imagefloat * dst, Imagefloat * calclum, float * ch_M, float *max_r, float *max_b, bool isRAW, const procparams::DirPyrDenoiseParams & dnparams, const double expcomp, const NoiseCurve & noiseLCurve, const NoiseCurve & noiseCCurve, float &nresi, float &highresi); void RGB_denoise_infoGamCurve(const procparams::DirPyrDenoiseParams & dnparams, const bool isRAW, LUTf &gamcurve, float &gam, float &gamthresh, float &gamslope); diff --git a/rtengine/init.cc b/rtengine/init.cc index 0c1bd4f6b..04faa98a8 100644 --- a/rtengine/init.cc +++ b/rtengine/init.cc @@ -34,6 +34,7 @@ #include "profilestore.h" #include "../rtgui/threadutils.h" #include "rtlensfun.h" +#include "metadata.h" #include "procparams.h" namespace rtengine @@ -114,6 +115,8 @@ int init (const Settings* s, const Glib::ustring& baseDir, const Glib::ustring& } Color::init (); + Exiv2Metadata::init(); + delete lcmsMutex; lcmsMutex = new MyMutex; fftwMutex = new MyMutex; @@ -122,6 +125,7 @@ int init (const Settings* s, const Glib::ustring& baseDir, const Glib::ustring& void cleanup () { + Exiv2Metadata::cleanup(); ProcParams::cleanup (); Color::cleanup (); RawImageSource::cleanup (); diff --git a/rtengine/iplab2rgb.cc b/rtengine/iplab2rgb.cc index dd02b8f0f..7620068a4 100644 --- a/rtengine/iplab2rgb.cc +++ b/rtengine/iplab2rgb.cc @@ -434,7 +434,7 @@ void ImProcFunctions::workingtrc(const Imagefloat* src, Imagefloat* dst, int cw, } }; - if (profile == "sRGB" || profile == "Adobe RGB" || profile == "ProPhoto" || profile == "WideGamut" || profile == "BruceRGB" || profile == "Beta RGB" || profile == "BestRGB" || profile == "Rec2020" || profile == "ACESp0" || profile == "ACESp1") { + if (profile == "sRGB" || profile == "Adobe RGB" || profile == "ProPhoto" || profile == "WideGamut" || profile == "BruceRGB" || profile == "Beta RGB" || profile == "BestRGB" || profile == "Rec2020" || profile == "ACESp0" || profile == "ACESp1" || profile == "JDCmax") { if (settings->verbose) { printf("Profile=%s\n", profile.c_str()); } @@ -509,7 +509,7 @@ void ImProcFunctions::workingtrc(const Imagefloat* src, Imagefloat* dst, int cw, float greyy = params->icm.grey; float epsil = 0.0001f; - if (prim == 12) {//convert datas area to xy + if (prim == 13) {//convert datas area to xy float redgraphx = params->icm.labgridcieALow; float redgraphy = params->icm.labgridcieBLow; float blugraphx = params->icm.labgridcieAHigh; @@ -597,6 +597,12 @@ void ImProcFunctions::workingtrc(const Imagefloat* src, Imagefloat* dst, int cw, } case ColorManagementParams::Primaries::ACES_P0: { + profile = "ACESp0"; + break; + } + + case ColorManagementParams::Primaries::JDC_MAX: { + profile = "JDCmax"; break; } @@ -754,6 +760,17 @@ void ImProcFunctions::workingtrc(const Imagefloat* src, Imagefloat* dst, int cw, Wx = 0.952646075; Wz = 1.008825184; + } else if (profile == "JDCmax") { + p[0] = 0.734702; // JDC max primaries + p[1] = 0.265302; + p[2] = 0.021908; + p[3] = 0.930288; + p[4] = 0.120593; + p[5] = 0.001583; + illum = toUnderlying(ColorManagementParams::Illuminant::D50); + Wx = 0.964295676; + Wz = 0.825104603; + } else if (profile == "ACESp1") { p[0] = 0.713; // ACES P1 primaries p[1] = 0.293; diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 6db6b7627..75bb03267 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -2130,7 +2130,7 @@ void ImProcFunctions::getAutoLogloc(int sp, ImageSource *imgsrc, float *sourceg, Imagefloat img(int(fw / SCALE + 0.5), int(fh / SCALE + 0.5)); const ProcParams neutral; - imgsrc->getImage(imgsrc->getWB(), TR_NONE, &img, pp, params->toneCurve, neutral.raw, 0); + imgsrc->getImage(imgsrc->getWB(), TR_NONE, &img, pp, params->toneCurve, neutral.raw); imgsrc->convertColorSpace(&img, params->icm, imgsrc->getWB()); float minVal = RT_INFINITY; float maxVal = -RT_INFINITY; @@ -2237,20 +2237,11 @@ void ImProcFunctions::getAutoLogloc(int sp, ImageSource *imgsrc, float *sourceg, //calculate La - Absolute luminance shooting const FramesMetaData* metaData = imgsrc->getMetaData(); - int imgNum = 0; - - if (imgsrc->isRAW()) { - if (imgsrc->getSensorType() == ST_BAYER) { - imgNum = rtengine::LIM(params->raw.bayersensor.imageNum, 0, metaData->getFrameCount() - 1); - } else if (imgsrc->getSensorType() == ST_FUJI_XTRANS) { - //imgNum = rtengine::LIM(params->raw.xtranssensor.imageNum, 0, metaData->getFrameCount() - 1); - } - } - float fnum = metaData->getFNumber(imgNum); // F number - float fiso = metaData->getISOSpeed(imgNum) ; // ISO - float fspeed = metaData->getShutterSpeed(imgNum) ; // Speed - double fcomp = metaData->getExpComp(imgNum); // Compensation +/- + float fnum = metaData->getFNumber(); // F number + float fiso = metaData->getISOSpeed() ; // ISO + float fspeed = metaData->getShutterSpeed() ; // Speed + double fcomp = metaData->getExpComp(); // Compensation +/- double adap; if (fnum < 0.3f || fiso < 5.f || fspeed < 0.00001f) { //if no exif data or wrong @@ -5342,6 +5333,7 @@ void ImProcFunctions::blendstruc(int bfw, int bfh, LabImage* bufcolorig, float r static void blendmask(const local_params& lp, int xstart, int ystart, int cx, int cy, int bfw, int bfh, LabImage* bufexporig, LabImage* original, LabImage* bufmaskor, LabImage* originalmas, float bl, float blab, int inv) { + bl /= 10.f; #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif @@ -18658,7 +18650,7 @@ void ImProcFunctions::Lab_Local( const float rad = params->locallab.spots.at(sp).radmask; const float gamma = params->locallab.spots.at(sp).gammask; const float slope = params->locallab.spots.at(sp).slopmask; - float blendm = params->locallab.spots.at(sp).blendmask; + float blendm = 0.1 * params->locallab.spots.at(sp).blendmask; float blendmab = params->locallab.spots.at(sp).blendmaskab; if (lp.showmask_met == 2) { blendm = 0.f;//normalize behavior mask with others no action of blend diff --git a/rtengine/iptcpairs.h b/rtengine/iptcpairs.h deleted file mode 100644 index af45d7d38..000000000 --- a/rtengine/iptcpairs.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * 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 RawTherapee. If not, see . - */ -#pragma once - -struct IptcPair { - IptcTag tag; - size_t size; - Glib::ustring field; -}; - -const IptcPair strTags[] = { - {IPTC_TAG_CAPTION, 2000, "Caption"}, - {IPTC_TAG_WRITER_EDITOR, 32, "CaptionWriter"}, - {IPTC_TAG_HEADLINE, 256, "Headline"}, - {IPTC_TAG_SPECIAL_INSTRUCTIONS, 256, "Instructions"}, - {IPTC_TAG_CATEGORY, 3, "Category"}, - {IPTC_TAG_BYLINE, 32, "Creator"}, - {IPTC_TAG_BYLINE_TITLE, 32, "CreatorJobTitle"}, - {IPTC_TAG_CREDIT, 32, "Credit"}, - {IPTC_TAG_SOURCE, 32, "Source"}, - {IPTC_TAG_COPYRIGHT_NOTICE, 128, "Copyright"}, - {IPTC_TAG_CITY, 32, "City"}, - {IPTC_TAG_STATE, 32, "Province"}, - {IPTC_TAG_COUNTRY_NAME, 64, "Country"}, - {IPTC_TAG_OBJECT_NAME, 64, "Title"}, - {IPTC_TAG_ORIG_TRANS_REF, 32, "TransReference"}, - {IPTC_TAG_DATE_CREATED, 8, "DateCreated"} -}; diff --git a/rtengine/ipwavelet.cc b/rtengine/ipwavelet.cc index 18ee72b80..e5e90a77f 100644 --- a/rtengine/ipwavelet.cc +++ b/rtengine/ipwavelet.cc @@ -2270,7 +2270,7 @@ void ImProcFunctions::Aver(const float* RESTRICT DataList, int datalen, float &a int countP = 0, countN = 0; double averaP = 0.0, averaN = 0.0; // use double precision for large summations - constexpr float thres = 32.7f;//different fom zero to take into account only data large enough 32.7 = 0.1 in range 0..100 very low value + constexpr float thres = 32.7f;//different from zero to take into account only data large enough 32.7 = 0.1 in range 0..100 very low value max = 0.f; min = RT_INFINITY_F; #ifdef _OPENMP @@ -2322,7 +2322,7 @@ void ImProcFunctions::Sigma(const float* RESTRICT DataList, int datalen, float a { int countP = 0, countN = 0; double variP = 0.0, variN = 0.0; // use double precision for large summations - float thres = 32.7f;//different fom zero to take into account only data large enough 32.7 = 0.1 in range 0..100 + float thres = 32.7f;//different from zero to take into account only data large enough 32.7 = 0.1 in range 0..100 #ifdef _OPENMP #pragma omp parallel for reduction(+:variP,variN,countP,countN) num_threads(numThreads) if (numThreads>1) diff --git a/rtengine/jdatasrc.cc b/rtengine/jdatasrc.cc index f9256899d..fa13b9dd1 100644 --- a/rtengine/jdatasrc.cc +++ b/rtengine/jdatasrc.cc @@ -240,7 +240,7 @@ my_error_exit (j_common_ptr cinfo) j_decompress_ptr dinfo = (j_decompress_ptr)cinfo; // longjmp (((rt_jpeg_error_mgr*)(dinfo->src))->error_jmp_buf, 1); -#if defined( WIN32 ) && defined( __x86_64__ ) && !defined(__clang__) +#if defined( _WIN32 ) && defined( __x86_64__ ) && !defined(__clang__) __builtin_longjmp ((reinterpret_cast(dinfo->src)) ->error_jmp_buf, 1); #else longjmp ((reinterpret_cast(dinfo->src)) ->error_jmp_buf, 1); @@ -248,7 +248,7 @@ my_error_exit (j_common_ptr cinfo) } -#ifdef WIN32 +#ifdef _WIN32 #define JVERSION "6b 27-Mar-1998" #define JCOPYRIGHT_SHORT "(C) 1998, Thomas G. Lane" #define JMESSAGE(code,string) string , diff --git a/rtengine/lcp.cc b/rtengine/lcp.cc index 7fd22d1f8..7507bbb11 100644 --- a/rtengine/lcp.cc +++ b/rtengine/lcp.cc @@ -25,7 +25,7 @@ #include #include -#ifdef WIN32 +#ifdef _WIN32 #include #endif @@ -906,7 +906,7 @@ Glib::ustring rtengine::LCPStore::getDefaultCommonDirectory() const { Glib::ustring dir; -#ifdef WIN32 +#ifdef _WIN32 WCHAR pathW[MAX_PATH] = {0}; if (SHGetSpecialFolderPathW(NULL, pathW, CSIDL_COMMON_APPDATA, false)) { diff --git a/rtengine/metadata.cc b/rtengine/metadata.cc new file mode 100644 index 000000000..0a55c1424 --- /dev/null +++ b/rtengine/metadata.cc @@ -0,0 +1,624 @@ +/* -*- C++ -*- + * + * This file is part of RawTherapee. + * + * Copyright (c) 2019 Alberto Griggio + * + * 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 RawTherapee. If not, see . + */ + +#include +#include +#include +#include +#include + +#include "metadata.h" +#include "settings.h" +#include "imagedata.h" +#include "../rtgui/version.h" +#include "../rtgui/pathutils.h" + + +#if EXIV2_TEST_VERSION(0,28,0) +using Exiv2Error = Exiv2::Error; +#else +using Exiv2Error = Exiv2::AnyError; +#endif + + +namespace rtengine { + +extern const Settings *settings; + +std::unique_ptr Exiv2Metadata::cache_(nullptr); + +namespace { + +class Error: public Exiv2Error { +public: + Error(const std::string &msg): +#if EXIV2_TEST_VERSION(0,28,0) + Exiv2Error(Exiv2::ErrorCode::kerGeneralError), +#endif + msg_(msg) {} + const char *what() const throw() { return msg_.c_str(); } + int code() const throw() { return 0; } + +private: + std::string msg_; +}; + + +constexpr size_t IMAGE_CACHE_SIZE = 200; + +std::unique_ptr open_exiv2(const Glib::ustring& fname, + bool check_exif) +{ +#ifdef EXV_UNICODE_PATH + glong ws_size = 0; + gunichar2* const ws = g_utf8_to_utf16(fname.c_str(), -1, nullptr, &ws_size, nullptr); + std::wstring wfname; + wfname.reserve(ws_size); + for (glong i = 0; i < ws_size; ++i) { + wfname.push_back(ws[i]); + } + g_free(ws); + auto image = Exiv2::ImageFactory::open(wfname); +#else + auto image = Exiv2::ImageFactory::open(Glib::filename_from_utf8(fname)); +#endif + image->readMetadata(); + if (!image->good() || (check_exif && image->exifData().empty())) { +#if EXIV2_TEST_VERSION(0,27,0) + auto error_code = Exiv2::ErrorCode::kerErrorMessage; +#else + auto error_code = 1; +#endif + throw Exiv2::Error(error_code, "exiv2: invalid image"); + } + std::unique_ptr ret(image.release()); + return ret; +} + + +template +void clear_metadata_key(Data &data, const Key &key) +{ + while (true) { + auto it = data.findKey(key); + if (it == data.end()) { + break; + } else { + data.erase(it); + } + } +} + +template +auto to_long(const Iterator &iter, Integer n = Integer{0}) -> decltype( +#if EXIV2_TEST_VERSION(0,28,0) + iter->toInt64() +) { + return iter->toInt64(n); +#else + iter->toLong() +) { + return iter->toLong(n); +#endif +} + +} // namespace + + +Exiv2Metadata::Exiv2Metadata(): + src_(""), + merge_xmp_(false), + image_(nullptr), + exif_(new rtengine::procparams::ExifPairs), + iptc_(new rtengine::procparams::IPTCPairs) +{ +} + + +Exiv2Metadata::Exiv2Metadata(const Glib::ustring &path): + src_(path), + merge_xmp_(settings->metadata_xmp_sync != Settings::MetadataXmpSync::NONE), + image_(nullptr), + exif_(new rtengine::procparams::ExifPairs), + iptc_(new rtengine::procparams::IPTCPairs) +{ +} + + +Exiv2Metadata::Exiv2Metadata(const Glib::ustring &path, bool merge_xmp_sidecar): + src_(path), + merge_xmp_(merge_xmp_sidecar), + image_(nullptr), + exif_(new rtengine::procparams::ExifPairs), + iptc_(new rtengine::procparams::IPTCPairs) +{ +} + + +void Exiv2Metadata::load() const +{ + if (!src_.empty() && !image_.get() && Glib::file_test(src_.c_str(), Glib::FILE_TEST_EXISTS)) { + CacheVal val; + auto finfo = Gio::File::create_for_path(src_)->query_info(G_FILE_ATTRIBUTE_TIME_MODIFIED); + Glib::TimeVal xmp_mtime(0, 0); + if (merge_xmp_) { + auto xmpname = xmpSidecarPath(src_); + if (Glib::file_test(xmpname.c_str(), Glib::FILE_TEST_EXISTS)) { + xmp_mtime = Gio::File::create_for_path(xmpname)->query_info(G_FILE_ATTRIBUTE_TIME_MODIFIED)->modification_time(); + } + } + + if (cache_ && cache_->get(src_, val) && val.image_mtime >= finfo->modification_time() && val.use_xmp == merge_xmp_ && val.xmp_mtime >= xmp_mtime) { + image_ = val.image; + } else { + auto img = open_exiv2(src_, true); + image_.reset(img.release()); + if (merge_xmp_) { + do_merge_xmp(image_.get(), false); + } + if (cache_) { + val.image = image_; + val.image_mtime = finfo->modification_time(); + val.xmp_mtime = xmp_mtime; + val.use_xmp = merge_xmp_; + cache_->set(src_, val); + } + } + } +} + +Exiv2::ExifData& Exiv2Metadata::exifData() +{ + return image_.get() ? image_->exifData() : exif_data_; +} + +const Exiv2::ExifData& Exiv2Metadata::exifData() const +{ + return const_cast(this)->exifData(); +} + +Exiv2::IptcData& Exiv2Metadata::iptcData() +{ + return image_.get() ? image_->iptcData() : iptc_data_; +} + +const Exiv2::IptcData& Exiv2Metadata::iptcData() const +{ + return const_cast(this)->iptcData(); +} + +Exiv2::XmpData& Exiv2Metadata::xmpData() +{ + return image_.get() ? image_->xmpData() : xmp_data_; +} + +const Exiv2::XmpData& Exiv2Metadata::xmpData() const +{ + return const_cast(this)->xmpData(); +} + +const Glib::ustring& Exiv2Metadata::filename() const +{ + return src_; +} + +const rtengine::procparams::ExifPairs& Exiv2Metadata::exif() const +{ + return *exif_; +} + +const rtengine::procparams::IPTCPairs& Exiv2Metadata::iptc() const +{ + return *iptc_; +} + +void Exiv2Metadata::setExif(const rtengine::procparams::ExifPairs &exif) +{ + *exif_ = exif; +} + +void Exiv2Metadata::setIptc(const rtengine::procparams::IPTCPairs &iptc) +{ + *iptc_ = iptc; +} + +void Exiv2Metadata::do_merge_xmp(Exiv2::Image *dst, bool keep_all) const +{ + try { + auto xmp = getXmpSidecar(src_); + Exiv2::ExifData exif; + Exiv2::IptcData iptc; + Exiv2::copyXmpToIptc(xmp, iptc); + Exiv2::moveXmpToExif(xmp, exif); + std::unordered_map> seen; + + if (!keep_all) { + remove_unwanted(exif); + } + + for (auto &datum : exif) { + dst->exifData()[datum.key()] = datum; + } + for (auto &datum : iptc) { + auto &s = seen[datum.key()]; + if (s.empty()) { + clear_metadata_key(dst->iptcData(), Exiv2::IptcKey(datum.key())); + dst->iptcData()[datum.key()] = datum; + s.insert(datum.toString()); + } else if (s.insert(datum.toString()).second) { + dst->iptcData().add(datum); + } + } + seen.clear(); + for (auto &datum : xmp) { + auto &s = seen[datum.key()]; + if (s.empty()) { + clear_metadata_key(dst->xmpData(), Exiv2::XmpKey(datum.key())); + dst->xmpData()[datum.key()] = datum; + s.insert(datum.toString()); + } else if (s.insert(datum.toString()).second) { + dst->xmpData().add(datum); + } + } + } catch (std::exception &exc) { + if (settings->verbose) { + std::cerr << "Error loading metadata from XMP sidecar: " + << exc.what() << std::endl; + } + } +} + + +void Exiv2Metadata::saveToImage(const Glib::ustring &path, bool preserve_all_tags) const +{ + auto dst = open_exiv2(path, false); + if (image_.get()) { + dst->setIptcData(image_->iptcData()); + dst->setXmpData(image_->xmpData()); + if (merge_xmp_) { + do_merge_xmp(dst.get(), preserve_all_tags); + } + auto srcexif = image_->exifData(); + if (!preserve_all_tags) { + remove_unwanted(srcexif); + } + //dst->setExifData(srcexif); + for (auto &tag : srcexif) { + if (tag.count() > 0) { + dst->exifData()[tag.key()] = tag; + } + } + } else { + dst->setExifData(exif_data_); + dst->setIptcData(iptc_data_); + dst->setXmpData(xmp_data_); + } + + dst->exifData()["Exif.Image.Software"] = "RawTherapee " RTVERSION; + import_exif_pairs(dst->exifData()); + import_iptc_pairs(dst->iptcData()); + bool xmp_tried = false; + bool iptc_tried = false; + for (int i = 0; i < 3; ++i) { + try { + dst->writeMetadata(); + return; + } catch (Exiv2::Error &exc) { + if (exc.code() == Exiv2::ErrorCode::kerTooLargeJpegSegment) { + std::string msg = exc.what(); + if (msg.find("XMP") != std::string::npos && + !dst->xmpData().empty()) { + dst->xmpData().clear(); + if (!xmp_tried && merge_xmp_) { + do_merge_xmp(dst.get(), preserve_all_tags); + xmp_tried = true; + } + } else if (msg.find("IPTC") != std::string::npos && + !dst->iptcData().empty()) { + dst->iptcData().clear(); + if (!iptc_tried) { + import_iptc_pairs(dst->iptcData()); + iptc_tried = true; + } + } + } else { + throw exc; + } + } + } +} + + +void Exiv2Metadata::remove_unwanted(Exiv2::ExifData &dst) const +{ + Exiv2::ExifThumb thumb(dst); + thumb.erase(); + + static const std::set badtags = { + "Exif.Image.Orientation", + "Exif.Image2.JPEGInterchangeFormat", + "Exif.Image2.JPEGInterchangeFormatLength", + "Exif.Image.NewSubfileType", + "Exif.Image.SubfileType", + "Exif.Image.ImageWidth", + "Exif.Image.ImageLength", + "Exif.Image.BitsPerSample", + "Exif.Image.Compression", + "Exif.Image.PhotometricInterpretation", + "Exif.Image.Thresholding", + "Exif.Image.CellWidth", + "Exif.Image.CellLength", + "Exif.Image.FillOrder", + "Exif.Image.StripOffsets", + "Exif.Image.Orientation", + "Exif.Image.SamplesPerPixel", + "Exif.Image.RowsPerStrip", + "Exif.Image.StripByteCounts", + "Exif.Image.XResolution", + "Exif.Image.YResolution", + "Exif.Image.PlanarConfiguration", + "Exif.Image.GrayResponseUnit", + "Exif.Image.GrayResponseCurve", + "Exif.Image.T4Options", + "Exif.Image.T6Options", + "Exif.Image.ResolutionUnit", + "Exif.Image.PageNumber", + "Exif.Image.Predictor", + "Exif.Image.TileWidth", + "Exif.Image.TileLength", + "Exif.Image.TileOffsets", + "Exif.Image.TileByteCounts", + "Exif.Image.SubIFDs", + "Exif.Image.ExtraSamples", + "Exif.Image.SampleFormat", + "Exif.Image.SMinSampleValue", + "Exif.Image.SMaxSampleValue", + "Exif.Image.Indexed", + "Exif.Image.JPEGTables", + "Exif.Image.OPIProxy", + "Exif.Image.JPEGProc", + "Exif.Image.JPEGInterchangeFormat", + "Exif.Image.JPEGInterchangeFormatLength", + "Exif.Image.JPEGRestartInterval", + "Exif.Image.JPEGLosslessPredictors", + "Exif.Image.JPEGPointTransforms", + "Exif.Image.JPEGQTables", + "Exif.Image.JPEGDCTables", + "Exif.Image.JPEGACTables", + "Exif.Image.TIFFEPStandardID", + "Exif.Image.DNGVersion", + "Exif.Image.DNGBackwardVersion", + "Exif.Image.DNGPrivateData", + "Exif.Image.OriginalRawFileData", + "Exif.Image.SubTileBlockSize", + "Exif.Image.RowInterleaveFactor", + "Exif.Photo.ComponentsConfiguration", + "Exif.Photo.CompressedBitsPerPixel" + }; + + static const std::vector badpatterns = { + "Exif.SubImage" + }; + + if (exif_keys_ && !src_.empty()) { + try { + FramesData fd(src_); + fd.fillBasicTags(dst); + } catch (std::exception &exc) { + std::cout << "Error reading metadata from " << src_ + << std::endl; + } + } + + for (auto it = dst.begin(); it != dst.end(); ) { + int relevant = exif_keys_ ? (exif_keys_->find(it->key()) != exif_keys_->end() ? 1 : 0) : -1; + if (badtags.find(it->key()) != badtags.end() && relevant != 1) { + it = dst.erase(it); + } else if (relevant == 0) { + it = dst.erase(it); + } else { + bool found = false; + for (auto &p : badpatterns) { + if (it->key().find(p) == 0) { + it = dst.erase(it); + found = true; + break; + } + } + if (!found) { + ++it; + } + } + } +} + + +void Exiv2Metadata::import_exif_pairs(Exiv2::ExifData &out) const +{ + for (auto &p : *exif_) { + try { + out[p.first] = p.second; + } catch (std::exception &exc) { + if (settings->verbose) { + std::cout << "Error setting " << p.first << " to " << p.second + << ": " << exc.what() << std::endl; + } + } + } +} + + +void Exiv2Metadata::import_iptc_pairs(Exiv2::IptcData &out) const +{ + for (auto &p : *iptc_) { + try { + auto &v = p.second; + if (v.size() >= 1) { + clear_metadata_key(out, Exiv2::IptcKey(p.first)); + Exiv2::Iptcdatum d(Exiv2::IptcKey(p.first)); + d.setValue(v[0]); + out[p.first] = d; + for (size_t j = 1; j < v.size(); ++j) { + d.setValue(v[j]); + out.add(d); + } + } + } catch (std::exception &exc) { + if (settings->verbose) { + std::cout << "Error setting " << p.first + << ": " << exc.what() << std::endl; + } + } + } +} + + +void Exiv2Metadata::saveToXmp(const Glib::ustring &path) const +{ + Exiv2::XmpData xmp; + Exiv2::copyExifToXmp(exifData(), xmp); + Exiv2::copyIptcToXmp(iptcData(), xmp); + for (auto &datum : xmpData()) { + xmp[datum.key()] = datum; + } + Exiv2::ExifData exif; + Exiv2::IptcData iptc; + import_exif_pairs(exif); + import_iptc_pairs(iptc); + Exiv2::copyExifToXmp(exif, xmp); + Exiv2::copyIptcToXmp(iptc, xmp); + + std::string data; + bool err = false; + if (Exiv2::XmpParser::encode(data, xmp, Exiv2::XmpParser::omitPacketWrapper|Exiv2::XmpParser::useCompactFormat) != 0) { + err = true; + } else { + FILE *out = g_fopen(path.c_str(), "wb"); + if (!out || fputs(data.c_str(), out) == EOF) { + err = true; + } + if (out) { + fclose(out); + } + } + + if (err) { + throw Error("error saving XMP sidecar " + path); + } +} + + +void Exiv2Metadata::setExifKeys(const std::vector *keys) +{ + exif_keys_.reset(); + if (keys) { + exif_keys_ = std::make_shared>(); + exif_keys_->insert(keys->begin(), keys->end()); + } +} + + +void Exiv2Metadata::getDimensions(int &w, int &h) const +{ + if (image_) { + if (dynamic_cast(image_.get())) { + auto &exif = image_->exifData(); + auto itw = exif.findKey(Exiv2::ExifKey("Exif.Image.ImageWidth")); + auto ith = exif.findKey(Exiv2::ExifKey("Exif.Image.ImageLength")); + if (itw != exif.end() && ith != exif.end()) { + w = to_long(itw); + h = to_long(ith); + } else { + w = h = -1; + } + } else { + w = image_->pixelWidth(); + h = image_->pixelHeight(); + } + } else { + w = h = -1; + } +} + + +Glib::ustring Exiv2Metadata::xmpSidecarPath(const Glib::ustring &path) +{ + Glib::ustring fn = path; + if (settings->xmp_sidecar_style == Settings::XmpSidecarStyle::STD) { + fn = removeExtension(fn); + } + return fn + ".xmp"; +} + + +Exiv2::XmpData Exiv2Metadata::getXmpSidecar(const Glib::ustring &path) +{ + Exiv2::XmpData ret; + auto fname = xmpSidecarPath(path); + if (Glib::file_test(fname, Glib::FILE_TEST_EXISTS)) { + auto image = open_exiv2(fname, false); + ret = image->xmpData(); + } + return ret; +} + + +void Exiv2Metadata::init() +{ + cache_.reset(new ImageCache(IMAGE_CACHE_SIZE)); + Exiv2::XmpParser::initialize(); +#ifdef EXV_ENABLE_BMFF + Exiv2::enableBMFF(true); +#endif +} + + +void Exiv2Metadata::cleanup() +{ + Exiv2::XmpParser::terminate(); +} + + +Exiv2::ExifData Exiv2Metadata::getOutputExifData() const +{ + Exiv2::ExifData exif = exifData(); + try { + auto xmp = getXmpSidecar(src_); + Exiv2::moveXmpToExif(xmp, exif); + } catch (std::exception &exc) { + if (settings->verbose) { + std::cerr << "Error loading metadata from XMP sidecar: " + << exc.what() << std::endl; + } + } + remove_unwanted(exif); + import_exif_pairs(exif); + for (auto it = exif.begin(); it != exif.end(); ) { + if (it->count() > 0) { + ++it; + } else { + it = exif.erase(it); + } + } + return exif; +} + + +} // namespace rtengine diff --git a/rtengine/metadata.h b/rtengine/metadata.h new file mode 100644 index 000000000..7424b2720 --- /dev/null +++ b/rtengine/metadata.h @@ -0,0 +1,100 @@ +/* -*- C++ -*- + * + * This file is part of RawTherapee. + * + * Copyright (c) 2019 Alberto Griggio + * + * 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 RawTherapee. If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include "procparams.h" +#include "cache.h" + +namespace rtengine { + +class Exiv2Metadata final +{ +public: + Exiv2Metadata(); + explicit Exiv2Metadata(const Glib::ustring& path); + Exiv2Metadata(const Glib::ustring& path, bool merge_xmp_sidecar); + + void load() const; + + Exiv2::ExifData& exifData(); + const Exiv2::ExifData& exifData() const; + + Exiv2::IptcData& iptcData(); + const Exiv2::IptcData& iptcData() const; + + Exiv2::XmpData& xmpData(); + const Exiv2::XmpData& xmpData() const; + + const Glib::ustring& filename() const; + const rtengine::procparams::ExifPairs& exif() const; + const rtengine::procparams::IPTCPairs& iptc() const; + void setExif(const rtengine::procparams::ExifPairs& exif); + void setIptc(const rtengine::procparams::IPTCPairs& iptc); + + void saveToImage(const Glib::ustring& path, bool preserve_all_tags) const; + void saveToXmp(const Glib::ustring& path) const; + + void setExifKeys(const std::vector *keys); + + void getDimensions(int &w, int &h) const; + + Exiv2::ExifData getOutputExifData() const; + + static Glib::ustring xmpSidecarPath(const Glib::ustring& path); + static Exiv2::XmpData getXmpSidecar(const Glib::ustring& path); + + static void init(); + static void cleanup(); + +private: + void do_merge_xmp(Exiv2::Image* dst, bool keep_all) const; + void import_exif_pairs(Exiv2::ExifData& out) const; + void import_iptc_pairs(Exiv2::IptcData& out) const; + void remove_unwanted(Exiv2::ExifData& dst) const; + + Glib::ustring src_; + bool merge_xmp_; + mutable std::shared_ptr image_; + std::unique_ptr exif_; + std::unique_ptr iptc_; + Exiv2::ExifData exif_data_; + Exiv2::IptcData iptc_data_; + Exiv2::XmpData xmp_data_; + + std::shared_ptr> exif_keys_; + + struct CacheVal { + std::shared_ptr image; + Glib::TimeVal image_mtime; + Glib::TimeVal xmp_mtime; + bool use_xmp; + CacheVal(): image(nullptr), image_mtime(), xmp_mtime(), use_xmp(false) {} + }; + //typedef std::pair, Glib::TimeVal> CacheVal; + typedef Cache ImageCache; + static std::unique_ptr cache_; +}; + +} // namespace rtengine diff --git a/rtengine/myfile.cc b/rtengine/myfile.cc index 2321d18bb..20814b4ed 100644 --- a/rtengine/myfile.cc +++ b/rtengine/myfile.cc @@ -22,7 +22,7 @@ // get mmap() sorted out #ifdef MYFILE_MMAP -#ifdef WIN32 +#ifdef _WIN32 #include #include @@ -59,13 +59,13 @@ int munmap(void *start, size_t length) #pragma GCC diagnostic pop #endif -#else // WIN32 +#else // _WIN32 #include #include #include -#endif // WIN32 +#endif // _WIN32 #endif // MYFILE_MMAP #ifdef MYFILE_MMAP @@ -74,7 +74,7 @@ rtengine::IMFILE* rtengine::fopen (const char* fname) { int fd; -#ifdef WIN32 +#ifdef _WIN32 fd = -1; // First convert UTF8 to UTF16, then use Windows function to open the file and convert back to file descriptor. diff --git a/rtengine/mytime.h b/rtengine/mytime.h index 787fefcc3..3684d23a9 100644 --- a/rtengine/mytime.h +++ b/rtengine/mytime.h @@ -18,7 +18,7 @@ */ #pragma once -#ifdef WIN32 +#ifdef _WIN32 #include #elif defined __APPLE__ #include @@ -30,7 +30,7 @@ class MyTime { public: -#ifndef WIN32 +#ifndef _WIN32 timespec t; #else LONGLONG t; @@ -47,7 +47,7 @@ public: void set () { -#ifdef WIN32 +#ifdef _WIN32 LARGE_INTEGER ulf; QueryPerformanceCounter(&ulf); t = ulf.QuadPart; @@ -63,7 +63,7 @@ public: int etime (const MyTime &a) const { -#ifndef WIN32 +#ifndef _WIN32 return (t.tv_sec - a.t.tv_sec) * 1000000 + (t.tv_nsec - a.t.tv_nsec) / 1000; #else return (t - a.t) * 1000 / (baseFrequency / 1000); diff --git a/rtengine/perspectivecorrection.cc b/rtengine/perspectivecorrection.cc index f4428faf2..7a56ef5a8 100644 --- a/rtengine/perspectivecorrection.cc +++ b/rtengine/perspectivecorrection.cc @@ -297,7 +297,7 @@ PerspectiveCorrection::Params PerspectiveCorrection::autocompute(ImageSource *sr neutral.raw.bayersensor.method = RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::FAST); neutral.raw.xtranssensor.method = RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FAST); neutral.icm.outputProfile = ColorManagementParams::NoICMString; - src->getImage(src->getWB(), tr, img.get(), pp, neutral.toneCurve, neutral.raw, 0); + src->getImage(src->getWB(), tr, img.get(), pp, neutral.toneCurve, neutral.raw); src->convertColorSpace(img.get(), pparams->icm, src->getWB()); neutral.commonTrans.autofill = false; // Ensures crop factor is correct. diff --git a/rtengine/previewimage.cc b/rtengine/previewimage.cc index afaf0cbca..b7e6ad9f8 100644 --- a/rtengine/previewimage.cc +++ b/rtengine/previewimage.cc @@ -61,9 +61,8 @@ PreviewImage::PreviewImage (const Glib::ustring &fname, const Glib::ustring &ext data = tpp->getImage8Data(); } } else { - rtengine::RawMetaDataLocation ri; eSensorType sensorType = rtengine::ST_NONE; - tpp = rtengine::Thumbnail::loadQuickFromRaw (fname, ri, sensorType, width, height, 1, true, true); + tpp = rtengine::Thumbnail::loadQuickFromRaw (fname, sensorType, width, height, 1, true, true); if (tpp) { data = tpp->getImage8Data(); @@ -121,7 +120,7 @@ PreviewImage::PreviewImage (const Glib::ustring &fname, const Glib::ustring &ext double contrastThresholdDummy = 0.0; rawImage.demosaic(params.raw, false, contrastThresholdDummy); Imagefloat image(fw, fh); - rawImage.getImage (wb, TR_NONE, &image, pp, params.toneCurve, params.raw, 0); + rawImage.getImage (wb, TR_NONE, &image, pp, params.toneCurve, params.raw); rtengine::Image8 output(fw, fh); rawImage.convertColorSpace(&image, params.icm, wb); #ifdef _OPENMP diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 85c09a50a..4648f9487 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -17,7 +17,7 @@ * along with RawTherapee. If not, see . */ -#include +#include #include @@ -67,7 +67,7 @@ Glib::ustring expandRelativePath(const Glib::ustring &procparams_fname, const Gl Glib::ustring expandRelativePath2(const Glib::ustring &procparams_fname, const Glib::ustring &procparams_fname2, const Glib::ustring &prefix, Glib::ustring embedded_fname) { - #if defined (WIN32) + #if defined (_WIN32) // if this is Windows, replace any "/" in the filename with "\\" size_t pos = embedded_fname.find("/"); while (pos != string::npos) { @@ -75,7 +75,7 @@ Glib::ustring expandRelativePath2(const Glib::ustring &procparams_fname, const G pos = embedded_fname.find("/", pos); } #endif - #if !defined (WIN32) + #if !defined (_WIN32) // if this is not Windows, replace any "\\" in the filename with "/" size_t pos = embedded_fname.find("\\"); while (pos != string::npos) { @@ -232,12 +232,22 @@ void getFromKeyfile( } } +void getFromKeyfile( + const Glib::KeyFile& keyfile, + const Glib::ustring& group_name, + const Glib::ustring& key, + std::vector& value +) +{ + auto tmpval = keyfile.get_string_list(group_name, key); + value.assign(tmpval.begin(), tmpval.end()); +} + template bool assignFromKeyfile( const Glib::KeyFile& keyfile, const Glib::ustring& group_name, const Glib::ustring& key, - bool has_params_edited, T& value, bool& params_edited_value ) @@ -245,9 +255,7 @@ bool assignFromKeyfile( if (keyfile.has_key(group_name, key)) { getFromKeyfile(keyfile, group_name, key, value); - if (has_params_edited) { - params_edited_value = true; - } + params_edited_value = true; return true; } @@ -260,7 +268,6 @@ bool assignFromKeyfile( const Glib::KeyFile& keyfile, const Glib::ustring& group_name, const Glib::ustring& key, - bool has_params_edited, const std::map& mapping, T& value, bool& params_edited_value @@ -278,9 +285,7 @@ bool assignFromKeyfile( return false; } - if (has_params_edited) { - params_edited_value = true; - } + params_edited_value = true; return true; } @@ -360,6 +365,17 @@ void putToKeyfile( keyfile.set_double_list(group_name, key, list); } +void putToKeyfile( + const Glib::ustring& group_name, + const Glib::ustring& key, + const std::vector& value, + Glib::KeyFile& keyfile +) +{ + const Glib::ArrayHandle list = value; + keyfile.set_string_list(group_name, key, list); +} + void putToKeyfile( const Glib::ustring& group_name, const Glib::ustring& key, @@ -411,7 +427,8 @@ bool saveToKeyfile( return false; } -} + +} // namespace namespace rtengine { @@ -1387,16 +1404,12 @@ WBParams::WBParams() : equal(1.0), tempBias(0.0), observer(ColorTemp::DEFAULT_OBSERVER), - itcwb_thres(34), - itcwb_precis(3), - itcwb_size(3), - itcwb_delta(2), - itcwb_fgreen(5), - itcwb_rgreen(1), - itcwb_nopurple(true), - itcwb_sorted(false), - itcwb_forceextra(false), - itcwb_sampling(false) + itcwb_green(0.),//slider + itcwb_rgreen(1),//keep for settings + itcwb_nopurple(false),//keep for settings + itcwb_alg(false),//checkbox + itcwb_prim("beta"),//combobox + itcwb_sampling(false)//keep for 5.9 and for settings { } @@ -1408,7 +1421,7 @@ bool WBParams::isPanningRelatedChange(const WBParams& other) const enabled == other.enabled && ( ( - method == "Camera" + method == "Camera" && other.method == "Camera" ) || ( @@ -1418,6 +1431,10 @@ bool WBParams::isPanningRelatedChange(const WBParams& other) const && equal == other.equal && tempBias == other.tempBias && observer == other.observer + && itcwb_green == other.itcwb_green + && itcwb_prim == other.itcwb_prim + && itcwb_alg == other.itcwb_alg + ) ) ); @@ -1433,15 +1450,11 @@ bool WBParams::operator ==(const WBParams& other) const && equal == other.equal && tempBias == other.tempBias && observer == other.observer - && itcwb_thres == other.itcwb_thres - && itcwb_precis == other.itcwb_precis - && itcwb_size == other.itcwb_size - && itcwb_delta == other.itcwb_delta - && itcwb_fgreen == other.itcwb_fgreen + && itcwb_green == other.itcwb_green && itcwb_rgreen == other.itcwb_rgreen && itcwb_nopurple == other.itcwb_nopurple - && itcwb_sorted == other.itcwb_sorted - && itcwb_forceextra == other.itcwb_forceextra + && itcwb_alg == other.itcwb_alg + && itcwb_prim == other.itcwb_prim && itcwb_sampling == other.itcwb_sampling; } @@ -2495,25 +2508,25 @@ WaveletParams::WaveletParams() : }, blcurve{ static_cast(FCT_MinMaxCPoints), - 0.0, - 0.0, - 0.0, - 0.35, - 0.5, - 0., + 0.0, + 0.0, + 0.0, + 0.35, + 0.5, + 0., 0.35, 0.35, 1.0, 0.0, 0.35, 0.35 -/* +/* 0.0, - 0.35, - 0.35, - 1.0, - 0.0, - 0.35, + 0.35, + 0.35, + 1.0, + 0.0, + 0.35, 0.35 */ }, @@ -5806,21 +5819,6 @@ Glib::ustring RAWParams::getFlatFieldBlurTypeString(FlatFieldBlurType type) } -MetaDataParams::MetaDataParams(): - mode(MetaDataParams::TUNNEL) -{ -} - -bool MetaDataParams::operator==(const MetaDataParams &other) const -{ - return mode == other.mode; -} - -bool MetaDataParams::operator!=(const MetaDataParams &other) const -{ - return !(*this == other); -} - FilmNegativeParams::FilmNegativeParams() : enabled(false), redRatio(1.36), @@ -5873,6 +5871,96 @@ bool FilmNegativeParams::operator !=(const FilmNegativeParams& other) const return !(*this == other); } + +namespace { + +const std::map exif_keys = { + {"Copyright", "Exif.Image.Copyright"}, + {"Artist", "Exif.Image.Artist"}, + {"ImageDescription", "Exif.Image.ImageDescription"}, + {"Exif.UserComment", "Exif.Photo.UserComment"}, + {"ISOSpeed", "Exif.Photo.ISOSpeedRatings"}, + {"FNumber", "Exif.Photo.FNumber"}, + {"ShutterSpeed", "Exif.Photo.ExposureTime"}, + {"FocalLength", "Exif.Photo.FocalLength"}, + {"ExpComp", "Exif.Photo.ExposureBiasValue"}, + {"Flash", "Exif.Photo.Flash"}, + {"Make", "Exif.Image.Make"}, + {"Model", "Exif.Image.Model"}, + {"Lens", "Exif.Photo.LensModel"}, + {"DateTime", "Exif.Photo.DateTimeOriginal"}, + {"XResolution", "Exif.Image.XResolution"}, + {"YResolution", "Exif.Image.YResolution"} +}; + +const std::map iptc_keys = { + {"Title", "Iptc.Application2.ObjectName"}, + {"Category", "Iptc.Application2.Category"}, + {"SupplementalCategories", "Iptc.Application2.SuppCategory"}, + {"Keywords", "Iptc.Application2.Keywords"}, + {"Instructions", "Iptc.Application2.SpecialInstructions"}, + {"DateCreated", "Iptc.Application2.DateCreated"}, + {"Creator", "Iptc.Application2.Byline"}, + {"CreatorJobTitle", "Iptc.Application2.BylineTitle"}, + {"City", "Iptc.Application2.City"}, + {"Province", "Iptc.Application2.ProvinceState"}, + {"Country", "Iptc.Application2.CountryName"}, + {"TransReference", "Iptc.Application2.TransmissionReference"}, + {"Headline", "Iptc.Application2.Headline"}, + {"Credit", "Iptc.Application2.Credit"}, + {"Source", "Iptc.Application2.Source"}, + {"Copyright", "Iptc.Application2.Copyright"}, + {"Caption", "Iptc.Application2.Caption"}, + {"CaptionWriter", "Iptc.Application2.Writer"} +}; + +} // namespace + + +std::vector MetaDataParams::basicExifKeys = { + "Exif.Image.Copyright", + "Exif.Image.Artist", + "Exif.Image.ImageDescription", + "Exif.Photo.UserComment", + "Exif.Image.Make", + "Exif.Image.Model", + "Exif.Photo.LensModel", + "Exif.Photo.FNumber", + "Exif.Photo.ExposureTime", + "Exif.Photo.FocalLength", + "Exif.Photo.ISOSpeedRatings", + "Exif.Photo.ExposureBiasValue", + "Exif.Photo.Flash", + "Exif.Photo.DateTimeOriginal", + "Exif.Image.XResolution", + "Exif.Image.YResolution" +}; + + +MetaDataParams::MetaDataParams(): + mode(MetaDataParams::EDIT), + exifKeys{}, + exif{}, + iptc{} +{ + exifKeys = basicExifKeys; +} + + +bool MetaDataParams::operator==(const MetaDataParams &other) const +{ + return mode == other.mode + && exifKeys == other.exifKeys + && exif == other.exif + && iptc == other.iptc; +} + +bool MetaDataParams::operator!=(const MetaDataParams &other) const +{ + return !(*this == other); +} + + ProcParams::ProcParams() { setDefaults(); @@ -5973,8 +6061,8 @@ void ProcParams::setDefaults() raw = {}; metadata = {}; - exif.clear(); - iptc.clear(); + //exif.clear(); + //iptc.clear(); // -1 means that there's no pp3 data with rank yet. In this case, the // embedded Rating metadata should take precedence. -1 should never be @@ -6001,7 +6089,9 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo keyFile.set_string("Version", "AppVersion", RTVERSION); keyFile.set_integer("Version", "Version", PPVERSION); - saveToKeyfile(!pedited || pedited->general.rank, "General", "Rank", rank, keyFile); + if (rank >= 0) { + saveToKeyfile(!pedited || pedited->general.rank, "General", "Rank", rank, keyFile); + } saveToKeyfile(!pedited || pedited->general.colorlabel, "General", "ColorLabel", colorlabel, keyFile); saveToKeyfile(!pedited || pedited->general.intrash, "General", "InTrash", inTrash, keyFile); @@ -6218,15 +6308,11 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->wb.equal, "White Balance", "Equal", wb.equal, keyFile); saveToKeyfile(!pedited || pedited->wb.tempBias, "White Balance", "TemperatureBias", wb.tempBias, keyFile); saveToKeyfile(!pedited || pedited->wb.observer, "White Balance", "StandardObserver", Glib::ustring(wb.observer == StandardObserver::TWO_DEGREES ? "TWO_DEGREES" : "TEN_DEGREES"), keyFile); - saveToKeyfile(!pedited || pedited->wb.itcwb_thres, "White Balance", "Itcwb_thres", wb.itcwb_thres, keyFile); - saveToKeyfile(!pedited || pedited->wb.itcwb_precis, "White Balance", "Itcwb_precis", wb.itcwb_precis, keyFile); - saveToKeyfile(!pedited || pedited->wb.itcwb_size, "White Balance", "Itcwb_size", wb.itcwb_size, keyFile); - saveToKeyfile(!pedited || pedited->wb.itcwb_delta, "White Balance", "Itcwb_delta", wb.itcwb_delta, keyFile); - saveToKeyfile(!pedited || pedited->wb.itcwb_fgreen, "White Balance", "Itcwb_findgreen", wb.itcwb_fgreen, keyFile); + saveToKeyfile(!pedited || pedited->wb.itcwb_green, "White Balance", "Itcwb_green", wb.itcwb_green, keyFile); saveToKeyfile(!pedited || pedited->wb.itcwb_rgreen, "White Balance", "Itcwb_rangegreen", wb.itcwb_rgreen, keyFile); saveToKeyfile(!pedited || pedited->wb.itcwb_nopurple, "White Balance", "Itcwb_nopurple", wb.itcwb_nopurple, keyFile); - saveToKeyfile(!pedited || pedited->wb.itcwb_sorted, "White Balance", "Itcwb_sorted", wb.itcwb_sorted, keyFile); - saveToKeyfile(!pedited || pedited->wb.itcwb_forceextra, "White Balance", "Itcwb_forceextra", wb.itcwb_forceextra, keyFile); + saveToKeyfile(!pedited || pedited->wb.itcwb_alg, "White Balance", "Itcwb_alg", wb.itcwb_alg, keyFile); + saveToKeyfile(!pedited || pedited->wb.itcwb_prim, "White Balance", "Itcwb_prim", wb.itcwb_prim, keyFile); saveToKeyfile(!pedited || pedited->wb.itcwb_sampling, "White Balance", "Itcwb_sampling", wb.itcwb_sampling, keyFile); // Colorappearance @@ -6304,9 +6390,9 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo // Dehaze saveToKeyfile(!pedited || pedited->dehaze.enabled, "Dehaze", "Enabled", dehaze.enabled, keyFile); - saveToKeyfile(!pedited || pedited->dehaze.strength, "Dehaze", "Strength", dehaze.strength, keyFile); - saveToKeyfile(!pedited || pedited->dehaze.showDepthMap, "Dehaze", "ShowDepthMap", dehaze.showDepthMap, keyFile); - saveToKeyfile(!pedited || pedited->dehaze.depth, "Dehaze", "Depth", dehaze.depth, keyFile); + saveToKeyfile(!pedited || pedited->dehaze.strength, "Dehaze", "Strength", dehaze.strength, keyFile); + saveToKeyfile(!pedited || pedited->dehaze.showDepthMap, "Dehaze", "ShowDepthMap", dehaze.showDepthMap, keyFile); + saveToKeyfile(!pedited || pedited->dehaze.depth, "Dehaze", "Depth", dehaze.depth, keyFile); saveToKeyfile(!pedited || pedited->dehaze.depth, "Dehaze", "Saturation", dehaze.saturation, keyFile); // Directional pyramid denoising @@ -7296,6 +7382,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo {ColorManagementParams::Primaries::ACES_P1, "aces"}, {ColorManagementParams::Primaries::WIDE_GAMUT, "wid"}, {ColorManagementParams::Primaries::ACES_P0, "ac0"}, + {ColorManagementParams::Primaries::JDC_MAX, "jdcmax"}, {ColorManagementParams::Primaries::BRUCE_RGB, "bru"}, {ColorManagementParams::Primaries::BETA_RGB, "bet"}, {ColorManagementParams::Primaries::BEST_RGB, "bst"}, @@ -7677,6 +7764,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo // MetaData saveToKeyfile(!pedited || pedited->metadata.mode, "MetaData", "Mode", metadata.mode, keyFile); + saveToKeyfile(!pedited || pedited->metadata.exifKeys, "MetaData", "ExifKeys", metadata.exifKeys, keyFile); // Film negative saveToKeyfile(!pedited || pedited->filmNegative.enabled, "Film Negative", "Enabled", filmNegative.enabled, keyFile); @@ -7690,7 +7778,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->filmNegative.refInput, "Film Negative", "GreenBase", filmNegative.refInput.g, keyFile); saveToKeyfile(!pedited || pedited->filmNegative.refInput, "Film Negative", "BlueBase", filmNegative.refInput.b, keyFile); } - + saveToKeyfile(!pedited || pedited->filmNegative.colorSpace, "Film Negative", "ColorSpace", toUnderlying(filmNegative.colorSpace), keyFile); saveToKeyfile(!pedited || pedited->filmNegative.refInput, "Film Negative", "RefInput", filmNegative.refInput, keyFile); saveToKeyfile(!pedited || pedited->filmNegative.refOutput, "Film Negative", "RefOutput", filmNegative.refOutput, keyFile); @@ -7704,16 +7792,30 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo // EXIF change list if (!pedited || pedited->exif) { - for (ExifPairs::const_iterator i = exif.begin(); i != exif.end(); ++i) { - keyFile.set_string("Exif", i->first, i->second); + std::map m; + for (auto &p : exif_keys) { + m[p.second] = p.first; + } + for (auto &p : metadata.exif) { + auto it = m.find(p.first); + if (it != m.end()) { + keyFile.set_string("Exif", it->second, p.second); + } } } // IPTC change list if (!pedited || pedited->iptc) { - for (IPTCPairs::const_iterator i = iptc.begin(); i != iptc.end(); ++i) { - Glib::ArrayHandle values = i->second; - keyFile.set_string_list("IPTC", i->first, values); + std::map m; + for (auto &p : iptc_keys) { + m[p.second] = p.first; + } + for (auto &p : metadata.iptc) { + auto it = m.find(p.first); + if (it != m.end()) { + Glib::ArrayHandle values = p.second; + keyFile.set_string_list("IPTC", it->second, values); + } } } @@ -7749,8 +7851,14 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) Glib::KeyFile keyFile; try { + std::unique_ptr dummy_pedited; + if (pedited) { pedited->set(false); + } else { + dummy_pedited.reset(new ParamsEdited()); + + pedited = dummy_pedited.get(); } if (!Glib::file_test(fname, Glib::FILE_TEST_EXISTS) || @@ -7772,27 +7880,27 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } if (keyFile.has_group("General")) { - assignFromKeyfile(keyFile, "General", "Rank", pedited, rank, pedited->general.rank); - assignFromKeyfile(keyFile, "General", "ColorLabel", pedited, colorlabel, pedited->general.colorlabel); - assignFromKeyfile(keyFile, "General", "InTrash", pedited, inTrash, pedited->general.intrash); + assignFromKeyfile(keyFile, "General", "Rank", rank, pedited->general.rank); + assignFromKeyfile(keyFile, "General", "ColorLabel", colorlabel, pedited->general.colorlabel); + assignFromKeyfile(keyFile, "General", "InTrash", inTrash, pedited->general.intrash); } if (keyFile.has_group("Exposure")) { if (ppVersion < PPVERSION_AEXP) { toneCurve.autoexp = false; // prevent execution of autoexp when opening file created with earlier versions of autoexp algorithm } else { - assignFromKeyfile(keyFile, "Exposure", "Auto", pedited, toneCurve.autoexp, pedited->toneCurve.autoexp); + assignFromKeyfile(keyFile, "Exposure", "Auto", toneCurve.autoexp, pedited->toneCurve.autoexp); } - assignFromKeyfile(keyFile, "Exposure", "Clip", pedited, toneCurve.clip, pedited->toneCurve.clip); - assignFromKeyfile(keyFile, "Exposure", "Compensation", pedited, toneCurve.expcomp, pedited->toneCurve.expcomp); - assignFromKeyfile(keyFile, "Exposure", "Brightness", pedited, toneCurve.brightness, pedited->toneCurve.brightness); - assignFromKeyfile(keyFile, "Exposure", "Contrast", pedited, toneCurve.contrast, pedited->toneCurve.contrast); - assignFromKeyfile(keyFile, "Exposure", "Saturation", pedited, toneCurve.saturation, pedited->toneCurve.saturation); - assignFromKeyfile(keyFile, "Exposure", "Black", pedited, toneCurve.black, pedited->toneCurve.black); - assignFromKeyfile(keyFile, "Exposure", "HighlightCompr", pedited, toneCurve.hlcompr, pedited->toneCurve.hlcompr); - assignFromKeyfile(keyFile, "Exposure", "HighlightComprThreshold", pedited, toneCurve.hlcomprthresh, pedited->toneCurve.hlcomprthresh); - assignFromKeyfile(keyFile, "Exposure", "ShadowCompr", pedited, toneCurve.shcompr, pedited->toneCurve.shcompr); + assignFromKeyfile(keyFile, "Exposure", "Clip", toneCurve.clip, pedited->toneCurve.clip); + assignFromKeyfile(keyFile, "Exposure", "Compensation", toneCurve.expcomp, pedited->toneCurve.expcomp); + assignFromKeyfile(keyFile, "Exposure", "Brightness", toneCurve.brightness, pedited->toneCurve.brightness); + assignFromKeyfile(keyFile, "Exposure", "Contrast", toneCurve.contrast, pedited->toneCurve.contrast); + assignFromKeyfile(keyFile, "Exposure", "Saturation", toneCurve.saturation, pedited->toneCurve.saturation); + assignFromKeyfile(keyFile, "Exposure", "Black", toneCurve.black, pedited->toneCurve.black); + assignFromKeyfile(keyFile, "Exposure", "HighlightCompr", toneCurve.hlcompr, pedited->toneCurve.hlcompr); + assignFromKeyfile(keyFile, "Exposure", "HighlightComprThreshold", toneCurve.hlcomprthresh, pedited->toneCurve.hlcomprthresh); + assignFromKeyfile(keyFile, "Exposure", "ShadowCompr", toneCurve.shcompr, pedited->toneCurve.shcompr); if (toneCurve.shcompr > 100) { toneCurve.shcompr = 100; // older pp3 files can have values above 100. @@ -7807,36 +7915,36 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) {"Perceptual", ToneCurveMode::PERCEPTUAL} }; - assignFromKeyfile(keyFile, "Exposure", "CurveMode", pedited, tc_mapping, toneCurve.curveMode, pedited->toneCurve.curveMode); - assignFromKeyfile(keyFile, "Exposure", "CurveMode2", pedited, tc_mapping, toneCurve.curveMode2, pedited->toneCurve.curveMode2); + assignFromKeyfile(keyFile, "Exposure", "CurveMode", tc_mapping, toneCurve.curveMode, pedited->toneCurve.curveMode); + assignFromKeyfile(keyFile, "Exposure", "CurveMode2", tc_mapping, toneCurve.curveMode2, pedited->toneCurve.curveMode2); if (ppVersion > 200) { - assignFromKeyfile(keyFile, "Exposure", "Curve", pedited, toneCurve.curve, pedited->toneCurve.curve); - assignFromKeyfile(keyFile, "Exposure", "Curve2", pedited, toneCurve.curve2, pedited->toneCurve.curve2); + assignFromKeyfile(keyFile, "Exposure", "Curve", toneCurve.curve, pedited->toneCurve.curve); + assignFromKeyfile(keyFile, "Exposure", "Curve2", toneCurve.curve2, pedited->toneCurve.curve2); } - assignFromKeyfile(keyFile, "Exposure", "HistogramMatching", pedited, toneCurve.histmatching, pedited->toneCurve.histmatching); + assignFromKeyfile(keyFile, "Exposure", "HistogramMatching", toneCurve.histmatching, pedited->toneCurve.histmatching); if (ppVersion < 340) { toneCurve.fromHistMatching = false; if (pedited) { pedited->toneCurve.fromHistMatching = true; } } else { - assignFromKeyfile(keyFile, "Exposure", "CurveFromHistogramMatching", pedited, toneCurve.fromHistMatching, pedited->toneCurve.fromHistMatching); + assignFromKeyfile(keyFile, "Exposure", "CurveFromHistogramMatching", toneCurve.fromHistMatching, pedited->toneCurve.fromHistMatching); } - assignFromKeyfile(keyFile, "Exposure", "ClampOOG", pedited, toneCurve.clampOOG, pedited->toneCurve.clampOOG); + assignFromKeyfile(keyFile, "Exposure", "ClampOOG", toneCurve.clampOOG, pedited->toneCurve.clampOOG); } if (keyFile.has_group("HLRecovery")) { - assignFromKeyfile(keyFile, "HLRecovery", "Enabled", pedited, toneCurve.hrenabled, pedited->toneCurve.hrenabled); - assignFromKeyfile(keyFile, "HLRecovery", "Method", pedited, toneCurve.method, pedited->toneCurve.method); - assignFromKeyfile(keyFile, "HLRecovery", "Hlbl", pedited, toneCurve.hlbl, pedited->toneCurve.hlbl); - assignFromKeyfile(keyFile, "HLRecovery", "Hlth", pedited, toneCurve.hlth, pedited->toneCurve.hlth); + assignFromKeyfile(keyFile, "HLRecovery", "Enabled", toneCurve.hrenabled, pedited->toneCurve.hrenabled); + assignFromKeyfile(keyFile, "HLRecovery", "Method", toneCurve.method, pedited->toneCurve.method); + assignFromKeyfile(keyFile, "HLRecovery", "Hlbl", toneCurve.hlbl, pedited->toneCurve.hlbl); + assignFromKeyfile(keyFile, "HLRecovery", "Hlth", toneCurve.hlth, pedited->toneCurve.hlth); } if (keyFile.has_group("Channel Mixer")) { if (ppVersion >= 329) { - assignFromKeyfile(keyFile, "Channel Mixer", "Enabled", pedited, chmixer.enabled, pedited->chmixer.enabled); + assignFromKeyfile(keyFile, "Channel Mixer", "Enabled", chmixer.enabled, pedited->chmixer.enabled); } else { chmixer.enabled = true; @@ -7872,33 +7980,32 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } if (keyFile.has_group("Black & White")) { - assignFromKeyfile(keyFile, "Black & White", "Enabled", pedited, blackwhite.enabled, pedited->blackwhite.enabled); - assignFromKeyfile(keyFile, "Black & White", "Method", pedited, blackwhite.method, pedited->blackwhite.method); - assignFromKeyfile(keyFile, "Black & White", "Auto", pedited, blackwhite.autoc, pedited->blackwhite.autoc); - assignFromKeyfile(keyFile, "Black & White", "ComplementaryColors", pedited, blackwhite.enabledcc, pedited->blackwhite.enabledcc); - assignFromKeyfile(keyFile, "Black & White", "MixerRed", pedited, blackwhite.mixerRed, pedited->blackwhite.mixerRed); - assignFromKeyfile(keyFile, "Black & White", "MixerOrange", pedited, blackwhite.mixerOrange, pedited->blackwhite.mixerOrange); - assignFromKeyfile(keyFile, "Black & White", "MixerYellow", pedited, blackwhite.mixerYellow, pedited->blackwhite.mixerYellow); - assignFromKeyfile(keyFile, "Black & White", "MixerGreen", pedited, blackwhite.mixerGreen, pedited->blackwhite.mixerGreen); - assignFromKeyfile(keyFile, "Black & White", "MixerCyan", pedited, blackwhite.mixerCyan, pedited->blackwhite.mixerCyan); - assignFromKeyfile(keyFile, "Black & White", "MixerBlue", pedited, blackwhite.mixerBlue, pedited->blackwhite.mixerBlue); - assignFromKeyfile(keyFile, "Black & White", "MixerMagenta", pedited, blackwhite.mixerMagenta, pedited->blackwhite.mixerMagenta); - assignFromKeyfile(keyFile, "Black & White", "MixerPurple", pedited, blackwhite.mixerPurple, pedited->blackwhite.mixerPurple); - assignFromKeyfile(keyFile, "Black & White", "GammaRed", pedited, blackwhite.gammaRed, pedited->blackwhite.gammaRed); - assignFromKeyfile(keyFile, "Black & White", "GammaGreen", pedited, blackwhite.gammaGreen, pedited->blackwhite.gammaGreen); - assignFromKeyfile(keyFile, "Black & White", "GammaBlue", pedited, blackwhite.gammaBlue, pedited->blackwhite.gammaBlue); - assignFromKeyfile(keyFile, "Black & White", "Filter", pedited, blackwhite.filter, pedited->blackwhite.filter); - assignFromKeyfile(keyFile, "Black & White", "Setting", pedited, blackwhite.setting, pedited->blackwhite.setting); - assignFromKeyfile(keyFile, "Black & White", "LuminanceCurve", pedited, blackwhite.luminanceCurve, pedited->blackwhite.luminanceCurve); + assignFromKeyfile(keyFile, "Black & White", "Enabled", blackwhite.enabled, pedited->blackwhite.enabled); + assignFromKeyfile(keyFile, "Black & White", "Method", blackwhite.method, pedited->blackwhite.method); + assignFromKeyfile(keyFile, "Black & White", "Auto", blackwhite.autoc, pedited->blackwhite.autoc); + assignFromKeyfile(keyFile, "Black & White", "ComplementaryColors", blackwhite.enabledcc, pedited->blackwhite.enabledcc); + assignFromKeyfile(keyFile, "Black & White", "MixerRed", blackwhite.mixerRed, pedited->blackwhite.mixerRed); + assignFromKeyfile(keyFile, "Black & White", "MixerOrange", blackwhite.mixerOrange, pedited->blackwhite.mixerOrange); + assignFromKeyfile(keyFile, "Black & White", "MixerYellow", blackwhite.mixerYellow, pedited->blackwhite.mixerYellow); + assignFromKeyfile(keyFile, "Black & White", "MixerGreen", blackwhite.mixerGreen, pedited->blackwhite.mixerGreen); + assignFromKeyfile(keyFile, "Black & White", "MixerCyan", blackwhite.mixerCyan, pedited->blackwhite.mixerCyan); + assignFromKeyfile(keyFile, "Black & White", "MixerBlue", blackwhite.mixerBlue, pedited->blackwhite.mixerBlue); + assignFromKeyfile(keyFile, "Black & White", "MixerMagenta", blackwhite.mixerMagenta, pedited->blackwhite.mixerMagenta); + assignFromKeyfile(keyFile, "Black & White", "MixerPurple", blackwhite.mixerPurple, pedited->blackwhite.mixerPurple); + assignFromKeyfile(keyFile, "Black & White", "GammaRed", blackwhite.gammaRed, pedited->blackwhite.gammaRed); + assignFromKeyfile(keyFile, "Black & White", "GammaGreen", blackwhite.gammaGreen, pedited->blackwhite.gammaGreen); + assignFromKeyfile(keyFile, "Black & White", "GammaBlue", blackwhite.gammaBlue, pedited->blackwhite.gammaBlue); + assignFromKeyfile(keyFile, "Black & White", "Filter", blackwhite.filter, pedited->blackwhite.filter); + assignFromKeyfile(keyFile, "Black & White", "Setting", blackwhite.setting, pedited->blackwhite.setting); + assignFromKeyfile(keyFile, "Black & White", "LuminanceCurve", blackwhite.luminanceCurve, pedited->blackwhite.luminanceCurve); - assignFromKeyfile(keyFile, "Black & White", "BeforeCurve", pedited, blackwhite.beforeCurve, pedited->blackwhite.beforeCurve); + assignFromKeyfile(keyFile, "Black & White", "BeforeCurve", blackwhite.beforeCurve, pedited->blackwhite.beforeCurve); - assignFromKeyfile(keyFile, "Black & White", "Algorithm", pedited, blackwhite.algo, pedited->blackwhite.algo); + assignFromKeyfile(keyFile, "Black & White", "Algorithm", blackwhite.algo, pedited->blackwhite.algo); assignFromKeyfile( keyFile, "Black & White", "BeforeCurveMode", - pedited, { {"Standard", BlackWhiteParams::TcMode::STD_BW}, {"FilmLike", BlackWhiteParams::TcMode::FILMLIKE_BW}, @@ -7909,12 +8016,11 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) pedited->blackwhite.beforeCurveMode ); - assignFromKeyfile(keyFile, "Black & White", "AfterCurve", pedited, blackwhite.afterCurve, pedited->blackwhite.afterCurve); + assignFromKeyfile(keyFile, "Black & White", "AfterCurve", blackwhite.afterCurve, pedited->blackwhite.afterCurve); assignFromKeyfile( keyFile, "Black & White", "AfterCurveMode", - pedited, { {"Standard", BlackWhiteParams::TcMode::STD_BW}, {"WeightedStd", BlackWhiteParams::TcMode::WEIGHTEDSTD_BW} @@ -7925,10 +8031,10 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } if (keyFile.has_group("Retinex")) { - assignFromKeyfile(keyFile, "Retinex", "Median", pedited, retinex.medianmap, pedited->retinex.medianmap); + assignFromKeyfile(keyFile, "Retinex", "Median", retinex.medianmap, pedited->retinex.medianmap); if (keyFile.has_key("Retinex", "complexMethod")) { - assignFromKeyfile(keyFile, "Retinex", "complexMethod", pedited, retinex.complexmethod, pedited->retinex.complexmethod); + assignFromKeyfile(keyFile, "Retinex", "complexMethod", retinex.complexmethod, pedited->retinex.complexmethod); } else if (retinex.enabled) { retinex.complexmethod = "expert"; if (pedited) { @@ -7936,57 +8042,57 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "Retinex", "RetinexMethod", pedited, retinex.retinexMethod, pedited->retinex.retinexMethod); - assignFromKeyfile(keyFile, "Retinex", "mapMethod", pedited, retinex.mapMethod, pedited->retinex.mapMethod); - assignFromKeyfile(keyFile, "Retinex", "viewMethod", pedited, retinex.viewMethod, pedited->retinex.viewMethod); + assignFromKeyfile(keyFile, "Retinex", "RetinexMethod", retinex.retinexMethod, pedited->retinex.retinexMethod); + assignFromKeyfile(keyFile, "Retinex", "mapMethod", retinex.mapMethod, pedited->retinex.mapMethod); + assignFromKeyfile(keyFile, "Retinex", "viewMethod", retinex.viewMethod, pedited->retinex.viewMethod); - assignFromKeyfile(keyFile, "Retinex", "Retinexcolorspace", pedited, retinex.retinexcolorspace, pedited->retinex.retinexcolorspace); - assignFromKeyfile(keyFile, "Retinex", "Gammaretinex", pedited, retinex.gammaretinex, pedited->retinex.gammaretinex); - assignFromKeyfile(keyFile, "Retinex", "Enabled", pedited, retinex.enabled, pedited->retinex.enabled); - assignFromKeyfile(keyFile, "Retinex", "Neigh", pedited, retinex.neigh, pedited->retinex.neigh); - assignFromKeyfile(keyFile, "Retinex", "Str", pedited, retinex.str, pedited->retinex.str); - assignFromKeyfile(keyFile, "Retinex", "Scal", pedited, retinex.scal, pedited->retinex.scal); - assignFromKeyfile(keyFile, "Retinex", "Iter", pedited, retinex.iter, pedited->retinex.iter); - assignFromKeyfile(keyFile, "Retinex", "Grad", pedited, retinex.grad, pedited->retinex.grad); - assignFromKeyfile(keyFile, "Retinex", "Grads", pedited, retinex.grads, pedited->retinex.grads); - assignFromKeyfile(keyFile, "Retinex", "Gam", pedited, retinex.gam, pedited->retinex.gam); - assignFromKeyfile(keyFile, "Retinex", "Slope", pedited, retinex.slope, pedited->retinex.slope); - assignFromKeyfile(keyFile, "Retinex", "Offs", pedited, retinex.offs, pedited->retinex.offs); - assignFromKeyfile(keyFile, "Retinex", "Vart", pedited, retinex.vart, pedited->retinex.vart); - assignFromKeyfile(keyFile, "Retinex", "Limd", pedited, retinex.limd, pedited->retinex.limd); - assignFromKeyfile(keyFile, "Retinex", "highl", pedited, retinex.highl, pedited->retinex.highl); - assignFromKeyfile(keyFile, "Retinex", "skal", pedited, retinex.skal, pedited->retinex.skal); - assignFromKeyfile(keyFile, "Retinex", "CDCurve", pedited, retinex.cdcurve, pedited->retinex.cdcurve); + assignFromKeyfile(keyFile, "Retinex", "Retinexcolorspace", retinex.retinexcolorspace, pedited->retinex.retinexcolorspace); + assignFromKeyfile(keyFile, "Retinex", "Gammaretinex", retinex.gammaretinex, pedited->retinex.gammaretinex); + assignFromKeyfile(keyFile, "Retinex", "Enabled", retinex.enabled, pedited->retinex.enabled); + assignFromKeyfile(keyFile, "Retinex", "Neigh", retinex.neigh, pedited->retinex.neigh); + assignFromKeyfile(keyFile, "Retinex", "Str", retinex.str, pedited->retinex.str); + assignFromKeyfile(keyFile, "Retinex", "Scal", retinex.scal, pedited->retinex.scal); + assignFromKeyfile(keyFile, "Retinex", "Iter", retinex.iter, pedited->retinex.iter); + assignFromKeyfile(keyFile, "Retinex", "Grad", retinex.grad, pedited->retinex.grad); + assignFromKeyfile(keyFile, "Retinex", "Grads", retinex.grads, pedited->retinex.grads); + assignFromKeyfile(keyFile, "Retinex", "Gam", retinex.gam, pedited->retinex.gam); + assignFromKeyfile(keyFile, "Retinex", "Slope", retinex.slope, pedited->retinex.slope); + assignFromKeyfile(keyFile, "Retinex", "Offs", retinex.offs, pedited->retinex.offs); + assignFromKeyfile(keyFile, "Retinex", "Vart", retinex.vart, pedited->retinex.vart); + assignFromKeyfile(keyFile, "Retinex", "Limd", retinex.limd, pedited->retinex.limd); + assignFromKeyfile(keyFile, "Retinex", "highl", retinex.highl, pedited->retinex.highl); + assignFromKeyfile(keyFile, "Retinex", "skal", retinex.skal, pedited->retinex.skal); + assignFromKeyfile(keyFile, "Retinex", "CDCurve", retinex.cdcurve, pedited->retinex.cdcurve); - assignFromKeyfile(keyFile, "Retinex", "MAPCurve", pedited, retinex.mapcurve, pedited->retinex.mapcurve); + assignFromKeyfile(keyFile, "Retinex", "MAPCurve", retinex.mapcurve, pedited->retinex.mapcurve); - assignFromKeyfile(keyFile, "Retinex", "CDHCurve", pedited, retinex.cdHcurve, pedited->retinex.cdHcurve); + assignFromKeyfile(keyFile, "Retinex", "CDHCurve", retinex.cdHcurve, pedited->retinex.cdHcurve); - assignFromKeyfile(keyFile, "Retinex", "LHCurve", pedited, retinex.lhcurve, pedited->retinex.lhcurve); + assignFromKeyfile(keyFile, "Retinex", "LHCurve", retinex.lhcurve, pedited->retinex.lhcurve); - assignFromKeyfile(keyFile, "Retinex", "Highlights", pedited, retinex.highlights, pedited->retinex.highlights); - assignFromKeyfile(keyFile, "Retinex", "HighlightTonalWidth", pedited, retinex.htonalwidth, pedited->retinex.htonalwidth); - assignFromKeyfile(keyFile, "Retinex", "Shadows", pedited, retinex.shadows, pedited->retinex.shadows); - assignFromKeyfile(keyFile, "Retinex", "ShadowTonalWidth", pedited, retinex.stonalwidth, pedited->retinex.stonalwidth); + assignFromKeyfile(keyFile, "Retinex", "Highlights", retinex.highlights, pedited->retinex.highlights); + assignFromKeyfile(keyFile, "Retinex", "HighlightTonalWidth", retinex.htonalwidth, pedited->retinex.htonalwidth); + assignFromKeyfile(keyFile, "Retinex", "Shadows", retinex.shadows, pedited->retinex.shadows); + assignFromKeyfile(keyFile, "Retinex", "ShadowTonalWidth", retinex.stonalwidth, pedited->retinex.stonalwidth); - assignFromKeyfile(keyFile, "Retinex", "Radius", pedited, retinex.radius, pedited->retinex.radius); + assignFromKeyfile(keyFile, "Retinex", "Radius", retinex.radius, pedited->retinex.radius); - assignFromKeyfile(keyFile, "Retinex", "TransmissionCurve", pedited, retinex.transmissionCurve, pedited->retinex.transmissionCurve); + assignFromKeyfile(keyFile, "Retinex", "TransmissionCurve", retinex.transmissionCurve, pedited->retinex.transmissionCurve); - assignFromKeyfile(keyFile, "Retinex", "GainTransmissionCurve", pedited, retinex.gaintransmissionCurve, pedited->retinex.gaintransmissionCurve); + assignFromKeyfile(keyFile, "Retinex", "GainTransmissionCurve", retinex.gaintransmissionCurve, pedited->retinex.gaintransmissionCurve); } if (keyFile.has_group("Local Contrast")) { - assignFromKeyfile(keyFile, "Local Contrast", "Enabled", pedited, localContrast.enabled, pedited->localContrast.enabled); - assignFromKeyfile(keyFile, "Local Contrast", "Radius", pedited, localContrast.radius, pedited->localContrast.radius); - assignFromKeyfile(keyFile, "Local Contrast", "Amount", pedited, localContrast.amount, pedited->localContrast.amount); - assignFromKeyfile(keyFile, "Local Contrast", "Darkness", pedited, localContrast.darkness, pedited->localContrast.darkness); - assignFromKeyfile(keyFile, "Local Contrast", "Lightness", pedited, localContrast.lightness, pedited->localContrast.lightness); + assignFromKeyfile(keyFile, "Local Contrast", "Enabled", localContrast.enabled, pedited->localContrast.enabled); + assignFromKeyfile(keyFile, "Local Contrast", "Radius", localContrast.radius, pedited->localContrast.radius); + assignFromKeyfile(keyFile, "Local Contrast", "Amount", localContrast.amount, pedited->localContrast.amount); + assignFromKeyfile(keyFile, "Local Contrast", "Darkness", localContrast.darkness, pedited->localContrast.darkness); + assignFromKeyfile(keyFile, "Local Contrast", "Lightness", localContrast.lightness, pedited->localContrast.lightness); } if (keyFile.has_group("Luminance Curve")) { if (ppVersion >= 329) { - assignFromKeyfile(keyFile, "Luminance Curve", "Enabled", pedited, labCurve.enabled, pedited->labCurve.enabled); + assignFromKeyfile(keyFile, "Luminance Curve", "Enabled", labCurve.enabled, pedited->labCurve.enabled); } else { labCurve.enabled = true; @@ -7995,15 +8101,15 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "Luminance Curve", "Brightness", pedited, labCurve.brightness, pedited->labCurve.brightness); - assignFromKeyfile(keyFile, "Luminance Curve", "Contrast", pedited, labCurve.contrast, pedited->labCurve.contrast); + assignFromKeyfile(keyFile, "Luminance Curve", "Brightness", labCurve.brightness, pedited->labCurve.brightness); + assignFromKeyfile(keyFile, "Luminance Curve", "Contrast", labCurve.contrast, pedited->labCurve.contrast); if (ppVersion < 303) { // transform Saturation into Chromaticity // if Saturation == 0, should we set BWToning on? - assignFromKeyfile(keyFile, "Luminance Curve", "Saturation", pedited, labCurve.chromaticity, pedited->labCurve.chromaticity); + assignFromKeyfile(keyFile, "Luminance Curve", "Saturation", labCurve.chromaticity, pedited->labCurve.chromaticity); // transform AvoidColorClipping into AvoidColorShift -// assignFromKeyfile(keyFile, "Luminance Curve", "AvoidColorClipping", pedited, labCurve.avoidcolorshift, pedited->labCurve.avoidcolorshift); +// assignFromKeyfile(keyFile, "Luminance Curve", "AvoidColorClipping", labCurve.avoidcolorshift, pedited->labCurve.avoidcolorshift); } else { if (keyFile.has_key("Luminance Curve", "Chromaticity")) { labCurve.chromaticity = keyFile.get_integer("Luminance Curve", "Chromaticity"); @@ -8017,10 +8123,10 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "Luminance Curve", "RedAndSkinTonesProtection", pedited, labCurve.rstprotection, pedited->labCurve.rstprotection); + assignFromKeyfile(keyFile, "Luminance Curve", "RedAndSkinTonesProtection", labCurve.rstprotection, pedited->labCurve.rstprotection); } - assignFromKeyfile(keyFile, "Luminance Curve", "LCredsk", pedited, labCurve.lcredsk, pedited->labCurve.lcredsk); + assignFromKeyfile(keyFile, "Luminance Curve", "LCredsk", labCurve.lcredsk, pedited->labCurve.lcredsk); if (ppVersion < 314) { // Backward compatibility: If BWtoning is true, Chromaticity has to be set to -100, which will produce the same effect @@ -8036,17 +8142,17 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "Luminance Curve", "LCurve", pedited, labCurve.lcurve, pedited->labCurve.lcurve); - assignFromKeyfile(keyFile, "Luminance Curve", "aCurve", pedited, labCurve.acurve, pedited->labCurve.acurve); - assignFromKeyfile(keyFile, "Luminance Curve", "bCurve", pedited, labCurve.bcurve, pedited->labCurve.bcurve); - assignFromKeyfile(keyFile, "Luminance Curve", "ccCurve", pedited, labCurve.cccurve, pedited->labCurve.cccurve); - assignFromKeyfile(keyFile, "Luminance Curve", "chCurve", pedited, labCurve.chcurve, pedited->labCurve.chcurve); - assignFromKeyfile(keyFile, "Luminance Curve", "lhCurve", pedited, labCurve.lhcurve, pedited->labCurve.lhcurve); - assignFromKeyfile(keyFile, "Luminance Curve", "hhCurve", pedited, labCurve.hhcurve, pedited->labCurve.hhcurve); - assignFromKeyfile(keyFile, "Luminance Curve", "LcCurve", pedited, labCurve.lccurve, pedited->labCurve.lccurve); - assignFromKeyfile(keyFile, "Luminance Curve", "ClCurve", pedited, labCurve.clcurve, pedited->labCurve.clcurve); + assignFromKeyfile(keyFile, "Luminance Curve", "LCurve", labCurve.lcurve, pedited->labCurve.lcurve); + assignFromKeyfile(keyFile, "Luminance Curve", "aCurve", labCurve.acurve, pedited->labCurve.acurve); + assignFromKeyfile(keyFile, "Luminance Curve", "bCurve", labCurve.bcurve, pedited->labCurve.bcurve); + assignFromKeyfile(keyFile, "Luminance Curve", "ccCurve", labCurve.cccurve, pedited->labCurve.cccurve); + assignFromKeyfile(keyFile, "Luminance Curve", "chCurve", labCurve.chcurve, pedited->labCurve.chcurve); + assignFromKeyfile(keyFile, "Luminance Curve", "lhCurve", labCurve.lhcurve, pedited->labCurve.lhcurve); + assignFromKeyfile(keyFile, "Luminance Curve", "hhCurve", labCurve.hhcurve, pedited->labCurve.hhcurve); + assignFromKeyfile(keyFile, "Luminance Curve", "LcCurve", labCurve.lccurve, pedited->labCurve.lccurve); + assignFromKeyfile(keyFile, "Luminance Curve", "ClCurve", labCurve.clcurve, pedited->labCurve.clcurve); if (keyFile.has_key("Luminance Curve", "Gamutmunse")) { - assignFromKeyfile(keyFile, "Luminance Curve", "Gamutmunse", pedited, labCurve.gamutmunselmethod, pedited->labCurve.gamutmunselmethod); + assignFromKeyfile(keyFile, "Luminance Curve", "Gamutmunse", labCurve.gamutmunselmethod, pedited->labCurve.gamutmunselmethod); } else { if (ppVersion < 303) { if (keyFile.has_key("Luminance Curve", "AvoidColorClipping")) { @@ -8067,10 +8173,10 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } if (keyFile.has_group("Sharpening")) { - assignFromKeyfile(keyFile, "Sharpening", "Enabled", pedited, sharpening.enabled, pedited->sharpening.enabled); + assignFromKeyfile(keyFile, "Sharpening", "Enabled", sharpening.enabled, pedited->sharpening.enabled); if (ppVersion >= 334) { - assignFromKeyfile(keyFile, "Sharpening", "Contrast", pedited, sharpening.contrast, pedited->sharpening.contrast); + assignFromKeyfile(keyFile, "Sharpening", "Contrast", sharpening.contrast, pedited->sharpening.contrast); } else { sharpening.contrast = 0; @@ -8079,9 +8185,9 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "Sharpening", "Radius", pedited, sharpening.radius, pedited->sharpening.radius); - assignFromKeyfile(keyFile, "Sharpening", "BlurRadius", pedited, sharpening.blurradius, pedited->sharpening.blurradius); - assignFromKeyfile(keyFile, "Sharpening", "Amount", pedited, sharpening.amount, pedited->sharpening.amount); + assignFromKeyfile(keyFile, "Sharpening", "Radius", sharpening.radius, pedited->sharpening.radius); + assignFromKeyfile(keyFile, "Sharpening", "BlurRadius", sharpening.blurradius, pedited->sharpening.blurradius); + assignFromKeyfile(keyFile, "Sharpening", "Amount", sharpening.amount, pedited->sharpening.amount); if (keyFile.has_key("Sharpening", "Threshold")) { if (ppVersion < 302) { @@ -8100,32 +8206,32 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "Sharpening", "OnlyEdges", pedited, sharpening.edgesonly, pedited->sharpening.edgesonly); - assignFromKeyfile(keyFile, "Sharpening", "EdgedetectionRadius", pedited, sharpening.edges_radius, pedited->sharpening.edges_radius); - assignFromKeyfile(keyFile, "Sharpening", "EdgeTolerance", pedited, sharpening.edges_tolerance, pedited->sharpening.edges_tolerance); - assignFromKeyfile(keyFile, "Sharpening", "HalocontrolEnabled", pedited, sharpening.halocontrol, pedited->sharpening.halocontrol); - assignFromKeyfile(keyFile, "Sharpening", "HalocontrolAmount", pedited, sharpening.halocontrol_amount, pedited->sharpening.halocontrol_amount); - assignFromKeyfile(keyFile, "Sharpening", "Method", pedited, sharpening.method, pedited->sharpening.method); - assignFromKeyfile(keyFile, "Sharpening", "DeconvRadius", pedited, sharpening.deconvradius, pedited->sharpening.deconvradius); - assignFromKeyfile(keyFile, "Sharpening", "DeconvAmount", pedited, sharpening.deconvamount, pedited->sharpening.deconvamount); - assignFromKeyfile(keyFile, "Sharpening", "DeconvDamping", pedited, sharpening.deconvdamping, pedited->sharpening.deconvdamping); - assignFromKeyfile(keyFile, "Sharpening", "DeconvIterations", pedited, sharpening.deconviter, pedited->sharpening.deconviter); + assignFromKeyfile(keyFile, "Sharpening", "OnlyEdges", sharpening.edgesonly, pedited->sharpening.edgesonly); + assignFromKeyfile(keyFile, "Sharpening", "EdgedetectionRadius", sharpening.edges_radius, pedited->sharpening.edges_radius); + assignFromKeyfile(keyFile, "Sharpening", "EdgeTolerance", sharpening.edges_tolerance, pedited->sharpening.edges_tolerance); + assignFromKeyfile(keyFile, "Sharpening", "HalocontrolEnabled", sharpening.halocontrol, pedited->sharpening.halocontrol); + assignFromKeyfile(keyFile, "Sharpening", "HalocontrolAmount", sharpening.halocontrol_amount, pedited->sharpening.halocontrol_amount); + assignFromKeyfile(keyFile, "Sharpening", "Method", sharpening.method, pedited->sharpening.method); + assignFromKeyfile(keyFile, "Sharpening", "DeconvRadius", sharpening.deconvradius, pedited->sharpening.deconvradius); + assignFromKeyfile(keyFile, "Sharpening", "DeconvAmount", sharpening.deconvamount, pedited->sharpening.deconvamount); + assignFromKeyfile(keyFile, "Sharpening", "DeconvDamping", sharpening.deconvdamping, pedited->sharpening.deconvdamping); + assignFromKeyfile(keyFile, "Sharpening", "DeconvIterations", sharpening.deconviter, pedited->sharpening.deconviter); } if (keyFile.has_group("SharpenEdge")) { - assignFromKeyfile(keyFile, "SharpenEdge", "Enabled", pedited, sharpenEdge.enabled, pedited->sharpenEdge.enabled); - assignFromKeyfile(keyFile, "SharpenEdge", "Passes", pedited, sharpenEdge.passes, pedited->sharpenEdge.passes); - assignFromKeyfile(keyFile, "SharpenEdge", "Strength", pedited, sharpenEdge.amount, pedited->sharpenEdge.amount); - assignFromKeyfile(keyFile, "SharpenEdge", "ThreeChannels", pedited, sharpenEdge.threechannels, pedited->sharpenEdge.threechannels); + assignFromKeyfile(keyFile, "SharpenEdge", "Enabled", sharpenEdge.enabled, pedited->sharpenEdge.enabled); + assignFromKeyfile(keyFile, "SharpenEdge", "Passes", sharpenEdge.passes, pedited->sharpenEdge.passes); + assignFromKeyfile(keyFile, "SharpenEdge", "Strength", sharpenEdge.amount, pedited->sharpenEdge.amount); + assignFromKeyfile(keyFile, "SharpenEdge", "ThreeChannels", sharpenEdge.threechannels, pedited->sharpenEdge.threechannels); } if (keyFile.has_group("SharpenMicro")) { - assignFromKeyfile(keyFile, "SharpenMicro", "Enabled", pedited, sharpenMicro.enabled, pedited->sharpenMicro.enabled); - assignFromKeyfile(keyFile, "SharpenMicro", "Matrix", pedited, sharpenMicro.matrix, pedited->sharpenMicro.matrix); - assignFromKeyfile(keyFile, "SharpenMicro", "Strength", pedited, sharpenMicro.amount, pedited->sharpenMicro.amount); + assignFromKeyfile(keyFile, "SharpenMicro", "Enabled", sharpenMicro.enabled, pedited->sharpenMicro.enabled); + assignFromKeyfile(keyFile, "SharpenMicro", "Matrix", sharpenMicro.matrix, pedited->sharpenMicro.matrix); + assignFromKeyfile(keyFile, "SharpenMicro", "Strength", sharpenMicro.amount, pedited->sharpenMicro.amount); if (ppVersion >= 334) { - assignFromKeyfile(keyFile, "SharpenMicro", "Contrast", pedited, sharpenMicro.contrast, pedited->sharpenMicro.contrast); + assignFromKeyfile(keyFile, "SharpenMicro", "Contrast", sharpenMicro.contrast, pedited->sharpenMicro.contrast); } else { sharpenMicro.contrast = 0; @@ -8134,18 +8240,18 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } if (ppVersion >= 346) { - assignFromKeyfile(keyFile, "SharpenMicro", "Uniformity", pedited, sharpenMicro.uniformity, pedited->sharpenMicro.uniformity); + assignFromKeyfile(keyFile, "SharpenMicro", "Uniformity", sharpenMicro.uniformity, pedited->sharpenMicro.uniformity); } else { double temp = 50.0; - assignFromKeyfile(keyFile, "SharpenMicro", "Uniformity", pedited, temp, pedited->sharpenMicro.uniformity); + assignFromKeyfile(keyFile, "SharpenMicro", "Uniformity", temp, pedited->sharpenMicro.uniformity); sharpenMicro.uniformity = temp / 10; } } if (keyFile.has_group("Vibrance")) { - assignFromKeyfile(keyFile, "Vibrance", "Enabled", pedited, vibrance.enabled, pedited->vibrance.enabled); - assignFromKeyfile(keyFile, "Vibrance", "Pastels", pedited, vibrance.pastels, pedited->vibrance.pastels); - assignFromKeyfile(keyFile, "Vibrance", "Saturated", pedited, vibrance.saturated, pedited->vibrance.saturated); + assignFromKeyfile(keyFile, "Vibrance", "Enabled", vibrance.enabled, pedited->vibrance.enabled); + assignFromKeyfile(keyFile, "Vibrance", "Pastels", vibrance.pastels, pedited->vibrance.pastels); + assignFromKeyfile(keyFile, "Vibrance", "Saturated", vibrance.saturated, pedited->vibrance.saturated); if (keyFile.has_key("Vibrance", "PSThreshold")) { if (ppVersion < 302) { @@ -8164,10 +8270,10 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "Vibrance", "ProtectSkins", pedited, vibrance.protectskins, pedited->vibrance.protectskins); - assignFromKeyfile(keyFile, "Vibrance", "AvoidColorShift", pedited, vibrance.avoidcolorshift, pedited->vibrance.avoidcolorshift); - assignFromKeyfile(keyFile, "Vibrance", "PastSatTog", pedited, vibrance.pastsattog, pedited->vibrance.pastsattog); - assignFromKeyfile(keyFile, "Vibrance", "SkinTonesCurve", pedited, vibrance.skintonescurve, pedited->vibrance.skintonescurve); + assignFromKeyfile(keyFile, "Vibrance", "ProtectSkins", vibrance.protectskins, pedited->vibrance.protectskins); + assignFromKeyfile(keyFile, "Vibrance", "AvoidColorShift", vibrance.avoidcolorshift, pedited->vibrance.avoidcolorshift); + assignFromKeyfile(keyFile, "Vibrance", "PastSatTog", vibrance.pastsattog, pedited->vibrance.pastsattog); + assignFromKeyfile(keyFile, "Vibrance", "SkinTonesCurve", vibrance.skintonescurve, pedited->vibrance.skintonescurve); } if (ppVersion <= 346) { // 5.8 and earlier. wb.observer = StandardObserver::TWO_DEGREES; @@ -8181,43 +8287,39 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } if (keyFile.has_group("White Balance")) { - assignFromKeyfile(keyFile, "White Balance", "Enabled", pedited, wb.enabled, pedited->wb.enabled); - assignFromKeyfile(keyFile, "White Balance", "Setting", pedited, wb.method, pedited->wb.method); + assignFromKeyfile(keyFile, "White Balance", "Enabled", wb.enabled, pedited->wb.enabled); + assignFromKeyfile(keyFile, "White Balance", "Setting", wb.method, pedited->wb.method); if (wb.method == "Auto") { wb.method = "autold"; } - assignFromKeyfile(keyFile, "White Balance", "Temperature", pedited, wb.temperature, pedited->wb.temperature); - assignFromKeyfile(keyFile, "White Balance", "Green", pedited, wb.green, pedited->wb.green); - assignFromKeyfile(keyFile, "White Balance", "Equal", pedited, wb.equal, pedited->wb.equal); - assignFromKeyfile(keyFile, "White Balance", "TemperatureBias", pedited, wb.tempBias, pedited->wb.tempBias); + assignFromKeyfile(keyFile, "White Balance", "Temperature", wb.temperature, pedited->wb.temperature); + assignFromKeyfile(keyFile, "White Balance", "Green", wb.green, pedited->wb.green); + assignFromKeyfile(keyFile, "White Balance", "Equal", wb.equal, pedited->wb.equal); + assignFromKeyfile(keyFile, "White Balance", "TemperatureBias", wb.tempBias, pedited->wb.tempBias); Glib::ustring standard_observer; - assignFromKeyfile(keyFile, "White Balance", "StandardObserver", pedited, standard_observer, pedited->wb.observer); + assignFromKeyfile(keyFile, "White Balance", "StandardObserver", standard_observer, pedited->wb.observer); if (standard_observer == "TEN_DEGREES") { wb.observer = StandardObserver::TEN_DEGREES; } else if (standard_observer == "TWO_DEGREES") { wb.observer = StandardObserver::TWO_DEGREES; } - assignFromKeyfile(keyFile, "White Balance", "Itcwb_thres", pedited, wb.itcwb_thres, pedited->wb.itcwb_thres); - assignFromKeyfile(keyFile, "White Balance", "Itcwb_precis", pedited, wb.itcwb_precis, pedited->wb.itcwb_precis); - assignFromKeyfile(keyFile, "White Balance", "Itcwb_size", pedited, wb.itcwb_size, pedited->wb.itcwb_size); - assignFromKeyfile(keyFile, "White Balance", "Itcwb_delta", pedited, wb.itcwb_delta, pedited->wb.itcwb_delta); - assignFromKeyfile(keyFile, "White Balance", "Itcwb_findgreen", pedited, wb.itcwb_fgreen, pedited->wb.itcwb_fgreen); - assignFromKeyfile(keyFile, "White Balance", "Itcwb_rangegreen", pedited, wb.itcwb_rgreen, pedited->wb.itcwb_rgreen); - assignFromKeyfile(keyFile, "White Balance", "Itcwb_nopurple", pedited, wb.itcwb_nopurple, pedited->wb.itcwb_nopurple); - assignFromKeyfile(keyFile, "White Balance", "Itcwb_sorted", pedited, wb.itcwb_sorted, pedited->wb.itcwb_sorted); - assignFromKeyfile(keyFile, "White Balance", "Itcwb_forceextra", pedited, wb.itcwb_forceextra, pedited->wb.itcwb_forceextra); + assignFromKeyfile(keyFile, "White Balance", "Itcwb_green", wb.itcwb_green, pedited->wb.itcwb_green); + assignFromKeyfile(keyFile, "White Balance", "Itcwb_rangegreen", wb.itcwb_rgreen, pedited->wb.itcwb_rgreen); + assignFromKeyfile(keyFile, "White Balance", "Itcwb_nopurple", wb.itcwb_nopurple, pedited->wb.itcwb_nopurple); + assignFromKeyfile(keyFile, "White Balance", "Itcwb_alg", wb.itcwb_alg, pedited->wb.itcwb_alg); + assignFromKeyfile(keyFile, "White Balance", "Itcwb_prim", wb.itcwb_prim, pedited->wb.itcwb_prim); if (ppVersion <= 349) { // 5.9 and earlier. wb.itcwb_sampling = true; if (pedited) { pedited->wb.itcwb_sampling = true; } } - assignFromKeyfile(keyFile, "White Balance", "Itcwb_sampling", pedited, wb.itcwb_sampling, pedited->wb.itcwb_sampling); + assignFromKeyfile(keyFile, "White Balance", "Itcwb_sampling", wb.itcwb_sampling, pedited->wb.itcwb_sampling); } if (keyFile.has_group("Defringing")) { - assignFromKeyfile(keyFile, "Defringing", "Enabled", pedited, defringe.enabled, pedited->defringe.enabled); - assignFromKeyfile(keyFile, "Defringing", "Radius", pedited, defringe.radius, pedited->defringe.radius); + assignFromKeyfile(keyFile, "Defringing", "Enabled", defringe.enabled, pedited->defringe.enabled); + assignFromKeyfile(keyFile, "Defringing", "Radius", defringe.radius, pedited->defringe.radius); if (keyFile.has_key("Defringing", "Threshold")) { defringe.threshold = (float)keyFile.get_integer("Defringing", "Threshold"); @@ -8231,79 +8333,78 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) defringe.threshold = sqrt(defringe.threshold * 33.f / 5.f); } - assignFromKeyfile(keyFile, "Defringing", "HueCurve", pedited, defringe.huecurve, pedited->defringe.huecurve); + assignFromKeyfile(keyFile, "Defringing", "HueCurve", defringe.huecurve, pedited->defringe.huecurve); } if (keyFile.has_group("Color appearance")) { - assignFromKeyfile(keyFile, "Color appearance", "Enabled", pedited, colorappearance.enabled, pedited->colorappearance.enabled); - assignFromKeyfile(keyFile, "Color appearance", "Degree", pedited, colorappearance.degree, pedited->colorappearance.degree); - assignFromKeyfile(keyFile, "Color appearance", "AutoDegree", pedited, colorappearance.autodegree, pedited->colorappearance.autodegree); - assignFromKeyfile(keyFile, "Color appearance", "Degreeout", pedited, colorappearance.degreeout, pedited->colorappearance.degreeout); + assignFromKeyfile(keyFile, "Color appearance", "Enabled", colorappearance.enabled, pedited->colorappearance.enabled); + assignFromKeyfile(keyFile, "Color appearance", "Degree", colorappearance.degree, pedited->colorappearance.degree); + assignFromKeyfile(keyFile, "Color appearance", "AutoDegree", colorappearance.autodegree, pedited->colorappearance.autodegree); + assignFromKeyfile(keyFile, "Color appearance", "Degreeout", colorappearance.degreeout, pedited->colorappearance.degreeout); - assignFromKeyfile(keyFile, "Color appearance", "AutoDegreeout", pedited, colorappearance.autodegreeout, pedited->colorappearance.autodegreeout); + assignFromKeyfile(keyFile, "Color appearance", "AutoDegreeout", colorappearance.autodegreeout, pedited->colorappearance.autodegreeout); if (keyFile.has_key("Color appearance", "complex")) { - assignFromKeyfile(keyFile, "Color appearance", "complex", pedited, colorappearance.complexmethod, pedited->colorappearance.complexmethod); + assignFromKeyfile(keyFile, "Color appearance", "complex", colorappearance.complexmethod, pedited->colorappearance.complexmethod); } else if (colorappearance.enabled) { colorappearance.complexmethod = "expert"; if (pedited) { pedited->colorappearance.complexmethod = true; } } - + if (keyFile.has_key("Color appearance", "ModelCat")) { - assignFromKeyfile(keyFile, "Color appearance", "ModelCat", pedited, colorappearance.modelmethod, pedited->colorappearance.modelmethod); + assignFromKeyfile(keyFile, "Color appearance", "ModelCat", colorappearance.modelmethod, pedited->colorappearance.modelmethod); } else if (colorappearance.enabled) { colorappearance.modelmethod = "02"; if (pedited) { pedited->colorappearance.modelmethod = true; } } - assignFromKeyfile(keyFile, "Color appearance", "CatCat", pedited, colorappearance.catmethod, pedited->colorappearance.catmethod); - - assignFromKeyfile(keyFile, "Color appearance", "Surround", pedited, colorappearance.surround, pedited->colorappearance.surround); - assignFromKeyfile(keyFile, "Color appearance", "Surrsrc", pedited, colorappearance.surrsrc, pedited->colorappearance.surrsrc); - assignFromKeyfile(keyFile, "Color appearance", "AdaptLum", pedited, colorappearance.adaplum, pedited->colorappearance.adaplum); - assignFromKeyfile(keyFile, "Color appearance", "Badpixsl", pedited, colorappearance.badpixsl, pedited->colorappearance.badpixsl); - assignFromKeyfile(keyFile, "Color appearance", "Model", pedited, colorappearance.wbmodel, pedited->colorappearance.wbmodel); - assignFromKeyfile(keyFile, "Color appearance", "Illum", pedited, colorappearance.illum, pedited->colorappearance.illum); - assignFromKeyfile(keyFile, "Color appearance", "Algorithm", pedited, colorappearance.algo, pedited->colorappearance.algo); - assignFromKeyfile(keyFile, "Color appearance", "J-Light", pedited, colorappearance.jlight, pedited->colorappearance.jlight); - assignFromKeyfile(keyFile, "Color appearance", "Q-Bright", pedited, colorappearance.qbright, pedited->colorappearance.qbright); - assignFromKeyfile(keyFile, "Color appearance", "C-Chroma", pedited, colorappearance.chroma, pedited->colorappearance.chroma); - assignFromKeyfile(keyFile, "Color appearance", "S-Chroma", pedited, colorappearance.schroma, pedited->colorappearance.schroma); - assignFromKeyfile(keyFile, "Color appearance", "M-Chroma", pedited, colorappearance.mchroma, pedited->colorappearance.mchroma); - assignFromKeyfile(keyFile, "Color appearance", "RSTProtection", pedited, colorappearance.rstprotection, pedited->colorappearance.rstprotection); - assignFromKeyfile(keyFile, "Color appearance", "J-Contrast", pedited, colorappearance.contrast, pedited->colorappearance.contrast); - assignFromKeyfile(keyFile, "Color appearance", "Q-Contrast", pedited, colorappearance.qcontrast, pedited->colorappearance.qcontrast); - assignFromKeyfile(keyFile, "Color appearance", "H-Hue", pedited, colorappearance.colorh, pedited->colorappearance.colorh); - assignFromKeyfile(keyFile, "Color appearance", "AdaptScene", pedited, colorappearance.adapscen, pedited->colorappearance.adapscen); - assignFromKeyfile(keyFile, "Color appearance", "AutoAdapscen", pedited, colorappearance.autoadapscen, pedited->colorappearance.autoadapscen); - assignFromKeyfile(keyFile, "Color appearance", "YbScene", pedited, colorappearance.ybscen, pedited->colorappearance.ybscen); - assignFromKeyfile(keyFile, "Color appearance", "Autoybscen", pedited, colorappearance.autoybscen, pedited->colorappearance.autoybscen); - assignFromKeyfile(keyFile, "Color appearance", "SurrSource", pedited, colorappearance.surrsource, pedited->colorappearance.surrsource); - assignFromKeyfile(keyFile, "Color appearance", "Gamut", pedited, colorappearance.gamut, pedited->colorappearance.gamut); - assignFromKeyfile(keyFile, "Color appearance", "Tempout", pedited, colorappearance.tempout, pedited->colorappearance.tempout); - assignFromKeyfile(keyFile, "Color appearance", "Autotempout", pedited, colorappearance.autotempout, pedited->colorappearance.autotempout); - assignFromKeyfile(keyFile, "Color appearance", "Greenout", pedited, colorappearance.greenout, pedited->colorappearance.greenout); - assignFromKeyfile(keyFile, "Color appearance", "Tempsc", pedited, colorappearance.tempsc, pedited->colorappearance.tempsc); - assignFromKeyfile(keyFile, "Color appearance", "Greensc", pedited, colorappearance.greensc, pedited->colorappearance.greensc); - assignFromKeyfile(keyFile, "Color appearance", "Ybout", pedited, colorappearance.ybout, pedited->colorappearance.ybout); - assignFromKeyfile(keyFile, "Color appearance", "Datacie", pedited, colorappearance.datacie, pedited->colorappearance.datacie); - assignFromKeyfile(keyFile, "Color appearance", "Tonecie", pedited, colorappearance.tonecie, pedited->colorappearance.tonecie); + assignFromKeyfile(keyFile, "Color appearance", "CatCat", colorappearance.catmethod, pedited->colorappearance.catmethod); + + assignFromKeyfile(keyFile, "Color appearance", "Surround", colorappearance.surround, pedited->colorappearance.surround); + assignFromKeyfile(keyFile, "Color appearance", "Surrsrc", colorappearance.surrsrc, pedited->colorappearance.surrsrc); + assignFromKeyfile(keyFile, "Color appearance", "AdaptLum", colorappearance.adaplum, pedited->colorappearance.adaplum); + assignFromKeyfile(keyFile, "Color appearance", "Badpixsl", colorappearance.badpixsl, pedited->colorappearance.badpixsl); + assignFromKeyfile(keyFile, "Color appearance", "Model", colorappearance.wbmodel, pedited->colorappearance.wbmodel); + assignFromKeyfile(keyFile, "Color appearance", "Illum", colorappearance.illum, pedited->colorappearance.illum); + assignFromKeyfile(keyFile, "Color appearance", "Algorithm", colorappearance.algo, pedited->colorappearance.algo); + assignFromKeyfile(keyFile, "Color appearance", "J-Light", colorappearance.jlight, pedited->colorappearance.jlight); + assignFromKeyfile(keyFile, "Color appearance", "Q-Bright", colorappearance.qbright, pedited->colorappearance.qbright); + assignFromKeyfile(keyFile, "Color appearance", "C-Chroma", colorappearance.chroma, pedited->colorappearance.chroma); + assignFromKeyfile(keyFile, "Color appearance", "S-Chroma", colorappearance.schroma, pedited->colorappearance.schroma); + assignFromKeyfile(keyFile, "Color appearance", "M-Chroma", colorappearance.mchroma, pedited->colorappearance.mchroma); + assignFromKeyfile(keyFile, "Color appearance", "RSTProtection", colorappearance.rstprotection, pedited->colorappearance.rstprotection); + assignFromKeyfile(keyFile, "Color appearance", "J-Contrast", colorappearance.contrast, pedited->colorappearance.contrast); + assignFromKeyfile(keyFile, "Color appearance", "Q-Contrast", colorappearance.qcontrast, pedited->colorappearance.qcontrast); + assignFromKeyfile(keyFile, "Color appearance", "H-Hue", colorappearance.colorh, pedited->colorappearance.colorh); + assignFromKeyfile(keyFile, "Color appearance", "AdaptScene", colorappearance.adapscen, pedited->colorappearance.adapscen); + assignFromKeyfile(keyFile, "Color appearance", "AutoAdapscen", colorappearance.autoadapscen, pedited->colorappearance.autoadapscen); + assignFromKeyfile(keyFile, "Color appearance", "YbScene", colorappearance.ybscen, pedited->colorappearance.ybscen); + assignFromKeyfile(keyFile, "Color appearance", "Autoybscen", colorappearance.autoybscen, pedited->colorappearance.autoybscen); + assignFromKeyfile(keyFile, "Color appearance", "SurrSource", colorappearance.surrsource, pedited->colorappearance.surrsource); + assignFromKeyfile(keyFile, "Color appearance", "Gamut", colorappearance.gamut, pedited->colorappearance.gamut); + assignFromKeyfile(keyFile, "Color appearance", "Tempout", colorappearance.tempout, pedited->colorappearance.tempout); + assignFromKeyfile(keyFile, "Color appearance", "Autotempout", colorappearance.autotempout, pedited->colorappearance.autotempout); + assignFromKeyfile(keyFile, "Color appearance", "Greenout", colorappearance.greenout, pedited->colorappearance.greenout); + assignFromKeyfile(keyFile, "Color appearance", "Tempsc", colorappearance.tempsc, pedited->colorappearance.tempsc); + assignFromKeyfile(keyFile, "Color appearance", "Greensc", colorappearance.greensc, pedited->colorappearance.greensc); + assignFromKeyfile(keyFile, "Color appearance", "Ybout", colorappearance.ybout, pedited->colorappearance.ybout); + assignFromKeyfile(keyFile, "Color appearance", "Datacie", colorappearance.datacie, pedited->colorappearance.datacie); + assignFromKeyfile(keyFile, "Color appearance", "Tonecie", colorappearance.tonecie, pedited->colorappearance.tonecie); const std::map tc_mapping = { {"Lightness", ColorAppearanceParams::TcMode::LIGHT}, {"Brightness", ColorAppearanceParams::TcMode::BRIGHT} }; - assignFromKeyfile(keyFile, "Color appearance", "CurveMode", pedited, tc_mapping, colorappearance.curveMode, pedited->colorappearance.curveMode); - assignFromKeyfile(keyFile, "Color appearance", "CurveMode2", pedited, tc_mapping, colorappearance.curveMode2, pedited->colorappearance.curveMode2); + assignFromKeyfile(keyFile, "Color appearance", "CurveMode", tc_mapping, colorappearance.curveMode, pedited->colorappearance.curveMode); + assignFromKeyfile(keyFile, "Color appearance", "CurveMode2", tc_mapping, colorappearance.curveMode2, pedited->colorappearance.curveMode2); assignFromKeyfile( keyFile, "Color appearance", "CurveMode3", - pedited, { {"Chroma", ColorAppearanceParams::CtcMode::CHROMA}, {"Saturation", ColorAppearanceParams::CtcMode::SATUR}, @@ -8314,79 +8415,79 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) ); if (ppVersion > 200) { - assignFromKeyfile(keyFile, "Color appearance", "Curve", pedited, colorappearance.curve, pedited->colorappearance.curve); - assignFromKeyfile(keyFile, "Color appearance", "Curve2", pedited, colorappearance.curve2, pedited->colorappearance.curve2); - assignFromKeyfile(keyFile, "Color appearance", "Curve3", pedited, colorappearance.curve3, pedited->colorappearance.curve3); + assignFromKeyfile(keyFile, "Color appearance", "Curve", colorappearance.curve, pedited->colorappearance.curve); + assignFromKeyfile(keyFile, "Color appearance", "Curve2", colorappearance.curve2, pedited->colorappearance.curve2); + assignFromKeyfile(keyFile, "Color appearance", "Curve3", colorappearance.curve3, pedited->colorappearance.curve3); } } if (keyFile.has_group("Impulse Denoising")) { - assignFromKeyfile(keyFile, "Impulse Denoising", "Enabled", pedited, impulseDenoise.enabled, pedited->impulseDenoise.enabled); - assignFromKeyfile(keyFile, "Impulse Denoising", "Threshold", pedited, impulseDenoise.thresh, pedited->impulseDenoise.thresh); + assignFromKeyfile(keyFile, "Impulse Denoising", "Enabled", impulseDenoise.enabled, pedited->impulseDenoise.enabled); + assignFromKeyfile(keyFile, "Impulse Denoising", "Threshold", impulseDenoise.thresh, pedited->impulseDenoise.thresh); } if (keyFile.has_group("Directional Pyramid Denoising")) { //TODO: No longer an accurate description for FT denoise - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Enabled", pedited, dirpyrDenoise.enabled, pedited->dirpyrDenoise.enabled); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Enhance", pedited, dirpyrDenoise.enhance, pedited->dirpyrDenoise.enhance); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Median", pedited, dirpyrDenoise.median, pedited->dirpyrDenoise.median); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Luma", pedited, dirpyrDenoise.luma, pedited->dirpyrDenoise.luma); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Ldetail", pedited, dirpyrDenoise.Ldetail, pedited->dirpyrDenoise.Ldetail); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Chroma", pedited, dirpyrDenoise.chroma, pedited->dirpyrDenoise.chroma); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Method", pedited, dirpyrDenoise.dmethod, pedited->dirpyrDenoise.dmethod); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "LMethod", pedited, dirpyrDenoise.Lmethod, pedited->dirpyrDenoise.Lmethod); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "CMethod", pedited, dirpyrDenoise.Cmethod, pedited->dirpyrDenoise.Cmethod); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Enabled", dirpyrDenoise.enabled, pedited->dirpyrDenoise.enabled); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Enhance", dirpyrDenoise.enhance, pedited->dirpyrDenoise.enhance); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Median", dirpyrDenoise.median, pedited->dirpyrDenoise.median); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Luma", dirpyrDenoise.luma, pedited->dirpyrDenoise.luma); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Ldetail", dirpyrDenoise.Ldetail, pedited->dirpyrDenoise.Ldetail); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Chroma", dirpyrDenoise.chroma, pedited->dirpyrDenoise.chroma); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Method", dirpyrDenoise.dmethod, pedited->dirpyrDenoise.dmethod); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "LMethod", dirpyrDenoise.Lmethod, pedited->dirpyrDenoise.Lmethod); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "CMethod", dirpyrDenoise.Cmethod, pedited->dirpyrDenoise.Cmethod); if (dirpyrDenoise.Cmethod == "PRE") { dirpyrDenoise.Cmethod = "MAN"; // Never load 'auto chroma preview mode' from pp3 } - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "C2Method", pedited, dirpyrDenoise.C2method, pedited->dirpyrDenoise.C2method); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "C2Method", dirpyrDenoise.C2method, pedited->dirpyrDenoise.C2method); if (dirpyrDenoise.C2method == "PREV") { dirpyrDenoise.C2method = "MANU"; } - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "SMethod", pedited, dirpyrDenoise.smethod, pedited->dirpyrDenoise.smethod); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "MedMethod", pedited, dirpyrDenoise.medmethod, pedited->dirpyrDenoise.medmethod); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "MethodMed", pedited, dirpyrDenoise.methodmed, pedited->dirpyrDenoise.methodmed); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "RGBMethod", pedited, dirpyrDenoise.rgbmethod, pedited->dirpyrDenoise.rgbmethod); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "LCurve", pedited, dirpyrDenoise.lcurve, pedited->dirpyrDenoise.lcurve); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "SMethod", dirpyrDenoise.smethod, pedited->dirpyrDenoise.smethod); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "MedMethod", dirpyrDenoise.medmethod, pedited->dirpyrDenoise.medmethod); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "MethodMed", dirpyrDenoise.methodmed, pedited->dirpyrDenoise.methodmed); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "RGBMethod", dirpyrDenoise.rgbmethod, pedited->dirpyrDenoise.rgbmethod); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "LCurve", dirpyrDenoise.lcurve, pedited->dirpyrDenoise.lcurve); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "CCCurve", pedited, dirpyrDenoise.cccurve, pedited->dirpyrDenoise.cccurve); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "CCCurve", dirpyrDenoise.cccurve, pedited->dirpyrDenoise.cccurve); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Redchro", pedited, dirpyrDenoise.redchro, pedited->dirpyrDenoise.redchro); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Bluechro", pedited, dirpyrDenoise.bluechro, pedited->dirpyrDenoise.bluechro); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "AutoGain", pedited, dirpyrDenoise.autoGain, pedited->dirpyrDenoise.gain); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Gamma", pedited, dirpyrDenoise.gamma, pedited->dirpyrDenoise.gamma); - assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Passes", pedited, dirpyrDenoise.passes, pedited->dirpyrDenoise.passes); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Redchro", dirpyrDenoise.redchro, pedited->dirpyrDenoise.redchro); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Bluechro", dirpyrDenoise.bluechro, pedited->dirpyrDenoise.bluechro); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "AutoGain", dirpyrDenoise.autoGain, pedited->dirpyrDenoise.gain); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Gamma", dirpyrDenoise.gamma, pedited->dirpyrDenoise.gamma); + assignFromKeyfile(keyFile, "Directional Pyramid Denoising", "Passes", dirpyrDenoise.passes, pedited->dirpyrDenoise.passes); } if (keyFile.has_group("EPD")) { - assignFromKeyfile(keyFile, "EPD", "Enabled", pedited, epd.enabled, pedited->epd.enabled); - assignFromKeyfile(keyFile, "EPD", "Strength", pedited, epd.strength, pedited->epd.strength); - assignFromKeyfile(keyFile, "EPD", "Gamma", pedited, epd.gamma, pedited->epd.gamma); - assignFromKeyfile(keyFile, "EPD", "EdgeStopping", pedited, epd.edgeStopping, pedited->epd.edgeStopping); - assignFromKeyfile(keyFile, "EPD", "Scale", pedited, epd.scale, pedited->epd.scale); - assignFromKeyfile(keyFile, "EPD", "ReweightingIterates", pedited, epd.reweightingIterates, pedited->epd.reweightingIterates); + assignFromKeyfile(keyFile, "EPD", "Enabled", epd.enabled, pedited->epd.enabled); + assignFromKeyfile(keyFile, "EPD", "Strength", epd.strength, pedited->epd.strength); + assignFromKeyfile(keyFile, "EPD", "Gamma", epd.gamma, pedited->epd.gamma); + assignFromKeyfile(keyFile, "EPD", "EdgeStopping", epd.edgeStopping, pedited->epd.edgeStopping); + assignFromKeyfile(keyFile, "EPD", "Scale", epd.scale, pedited->epd.scale); + assignFromKeyfile(keyFile, "EPD", "ReweightingIterates", epd.reweightingIterates, pedited->epd.reweightingIterates); } if (keyFile.has_group("FattalToneMapping")) { - assignFromKeyfile(keyFile, "FattalToneMapping", "Enabled", pedited, fattal.enabled, pedited->fattal.enabled); - assignFromKeyfile(keyFile, "FattalToneMapping", "Threshold", pedited, fattal.threshold, pedited->fattal.threshold); - assignFromKeyfile(keyFile, "FattalToneMapping", "Amount", pedited, fattal.amount, pedited->fattal.amount); - assignFromKeyfile(keyFile, "FattalToneMapping", "Anchor", pedited, fattal.anchor, pedited->fattal.anchor); + assignFromKeyfile(keyFile, "FattalToneMapping", "Enabled", fattal.enabled, pedited->fattal.enabled); + assignFromKeyfile(keyFile, "FattalToneMapping", "Threshold", fattal.threshold, pedited->fattal.threshold); + assignFromKeyfile(keyFile, "FattalToneMapping", "Amount", fattal.amount, pedited->fattal.amount); + assignFromKeyfile(keyFile, "FattalToneMapping", "Anchor", fattal.anchor, pedited->fattal.anchor); } if (keyFile.has_group("Shadows & Highlights") && ppVersion >= 333) { - assignFromKeyfile(keyFile, "Shadows & Highlights", "Enabled", pedited, sh.enabled, pedited->sh.enabled); - assignFromKeyfile(keyFile, "Shadows & Highlights", "Highlights", pedited, sh.highlights, pedited->sh.highlights); - assignFromKeyfile(keyFile, "Shadows & Highlights", "HighlightTonalWidth", pedited, sh.htonalwidth, pedited->sh.htonalwidth); - assignFromKeyfile(keyFile, "Shadows & Highlights", "Shadows", pedited, sh.shadows, pedited->sh.shadows); - assignFromKeyfile(keyFile, "Shadows & Highlights", "ShadowTonalWidth", pedited, sh.stonalwidth, pedited->sh.stonalwidth); - assignFromKeyfile(keyFile, "Shadows & Highlights", "Radius", pedited, sh.radius, pedited->sh.radius); + assignFromKeyfile(keyFile, "Shadows & Highlights", "Enabled", sh.enabled, pedited->sh.enabled); + assignFromKeyfile(keyFile, "Shadows & Highlights", "Highlights", sh.highlights, pedited->sh.highlights); + assignFromKeyfile(keyFile, "Shadows & Highlights", "HighlightTonalWidth", sh.htonalwidth, pedited->sh.htonalwidth); + assignFromKeyfile(keyFile, "Shadows & Highlights", "Shadows", sh.shadows, pedited->sh.shadows); + assignFromKeyfile(keyFile, "Shadows & Highlights", "ShadowTonalWidth", sh.stonalwidth, pedited->sh.stonalwidth); + assignFromKeyfile(keyFile, "Shadows & Highlights", "Radius", sh.radius, pedited->sh.radius); if (ppVersion >= 344) { - assignFromKeyfile(keyFile, "Shadows & Highlights", "Lab", pedited, sh.lab, pedited->sh.lab); + assignFromKeyfile(keyFile, "Shadows & Highlights", "Lab", sh.lab, pedited->sh.lab); } else { sh.lab = true; } @@ -8414,18 +8515,18 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } if (keyFile.has_group("ToneEqualizer")) { - assignFromKeyfile(keyFile, "ToneEqualizer", "Enabled", pedited, toneEqualizer.enabled, pedited->toneEqualizer.enabled); + assignFromKeyfile(keyFile, "ToneEqualizer", "Enabled", toneEqualizer.enabled, pedited->toneEqualizer.enabled); for (size_t i = 0; i < toneEqualizer.bands.size(); ++i) { - assignFromKeyfile(keyFile, "ToneEqualizer", "Band" + std::to_string(i), pedited, toneEqualizer.bands[i], pedited->toneEqualizer.bands[i]); + assignFromKeyfile(keyFile, "ToneEqualizer", "Band" + std::to_string(i), toneEqualizer.bands[i], pedited->toneEqualizer.bands[i]); } - assignFromKeyfile(keyFile, "ToneEqualizer", "Regularization", pedited, toneEqualizer.regularization, pedited->toneEqualizer.regularization); - assignFromKeyfile(keyFile, "ToneEqualizer", "Pivot", pedited, toneEqualizer.pivot, pedited->toneEqualizer.pivot); + assignFromKeyfile(keyFile, "ToneEqualizer", "Regularization", toneEqualizer.regularization, pedited->toneEqualizer.regularization); + assignFromKeyfile(keyFile, "ToneEqualizer", "Pivot", toneEqualizer.pivot, pedited->toneEqualizer.pivot); } if (keyFile.has_group("Crop")) { - assignFromKeyfile(keyFile, "Crop", "Enabled", pedited, crop.enabled, pedited->crop.enabled); - assignFromKeyfile(keyFile, "Crop", "X", pedited, crop.x, pedited->crop.x); - assignFromKeyfile(keyFile, "Crop", "Y", pedited, crop.y, pedited->crop.y); + assignFromKeyfile(keyFile, "Crop", "Enabled", crop.enabled, pedited->crop.enabled); + assignFromKeyfile(keyFile, "Crop", "X", crop.x, pedited->crop.x); + assignFromKeyfile(keyFile, "Crop", "Y", crop.y, pedited->crop.y); if (keyFile.has_key("Crop", "W")) { crop.w = std::max(keyFile.get_integer("Crop", "W"), 1); @@ -8443,9 +8544,9 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "Crop", "FixedRatio", pedited, crop.fixratio, pedited->crop.fixratio); + assignFromKeyfile(keyFile, "Crop", "FixedRatio", crop.fixratio, pedited->crop.fixratio); - if (assignFromKeyfile(keyFile, "Crop", "Ratio", pedited, crop.ratio, pedited->crop.ratio)) { + if (assignFromKeyfile(keyFile, "Crop", "Ratio", crop.ratio, pedited->crop.ratio)) { //backwards compatibility for crop.ratio if (crop.ratio == "DIN") { crop.ratio = "1.414 - DIN EN ISO 216"; @@ -8460,12 +8561,11 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "Crop", "Orientation", pedited, crop.orientation, pedited->crop.orientation); + assignFromKeyfile(keyFile, "Crop", "Orientation", crop.orientation, pedited->crop.orientation); assignFromKeyfile( keyFile, "Crop", "Guide", - pedited, { {"None", CropParams::Guide::NONE}, {"Frame", CropParams::Guide::FRAME}, @@ -8484,26 +8584,26 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } if (keyFile.has_group("Coarse Transformation")) { - assignFromKeyfile(keyFile, "Coarse Transformation", "Rotate", pedited, coarse.rotate, pedited->coarse.rotate); - assignFromKeyfile(keyFile, "Coarse Transformation", "HorizontalFlip", pedited, coarse.hflip, pedited->coarse.hflip); - assignFromKeyfile(keyFile, "Coarse Transformation", "VerticalFlip", pedited, coarse.vflip, pedited->coarse.vflip); + assignFromKeyfile(keyFile, "Coarse Transformation", "Rotate", coarse.rotate, pedited->coarse.rotate); + assignFromKeyfile(keyFile, "Coarse Transformation", "HorizontalFlip", coarse.hflip, pedited->coarse.hflip); + assignFromKeyfile(keyFile, "Coarse Transformation", "VerticalFlip", coarse.vflip, pedited->coarse.vflip); } if (keyFile.has_group("Rotation")) { - assignFromKeyfile(keyFile, "Rotation", "Degree", pedited, rotate.degree, pedited->rotate.degree); + assignFromKeyfile(keyFile, "Rotation", "Degree", rotate.degree, pedited->rotate.degree); } if (keyFile.has_group("Common Properties for Transformations")) { if (keyFile.has_key("Common Properties for Transformations", "Method")) { - assignFromKeyfile(keyFile, "Common Properties for Transformations", "Method", pedited, commonTrans.method, pedited->commonTrans.method); + assignFromKeyfile(keyFile, "Common Properties for Transformations", "Method", commonTrans.method, pedited->commonTrans.method); } else { commonTrans.method = "lin"; } - assignFromKeyfile(keyFile, "Common Properties for Transformations", "AutoFill", pedited, commonTrans.autofill, pedited->commonTrans.autofill); + assignFromKeyfile(keyFile, "Common Properties for Transformations", "AutoFill", commonTrans.autofill, pedited->commonTrans.autofill); } if (keyFile.has_group("Distortion")) { - assignFromKeyfile(keyFile, "Distortion", "Amount", pedited, distortion.amount, pedited->distortion.amount); + assignFromKeyfile(keyFile, "Distortion", "Amount", distortion.amount, pedited->distortion.amount); } if (keyFile.has_group("LensProfile")) { @@ -8527,9 +8627,9 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "LensProfile", "UseDistortion", pedited, lensProf.useDist, pedited->lensProf.useDist); - assignFromKeyfile(keyFile, "LensProfile", "UseVignette", pedited, lensProf.useVign, pedited->lensProf.useVign); - assignFromKeyfile(keyFile, "LensProfile", "UseCA", pedited, lensProf.useCA, pedited->lensProf.useCA); + assignFromKeyfile(keyFile, "LensProfile", "UseDistortion", lensProf.useDist, pedited->lensProf.useDist); + assignFromKeyfile(keyFile, "LensProfile", "UseVignette", lensProf.useVign, pedited->lensProf.useVign); + assignFromKeyfile(keyFile, "LensProfile", "UseCA", lensProf.useCA, pedited->lensProf.useCA); if (keyFile.has_key("LensProfile", "LFCameraMake")) { lensProf.lfCameraMake = keyFile.get_string("LensProfile", "LFCameraMake"); @@ -8557,21 +8657,21 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } if (keyFile.has_group("Perspective")) { - assignFromKeyfile(keyFile, "Perspective", "Method", pedited, perspective.method, pedited->perspective.method); - assignFromKeyfile(keyFile, "Perspective", "Horizontal", pedited, perspective.horizontal, pedited->perspective.horizontal); - assignFromKeyfile(keyFile, "Perspective", "Vertical", pedited, perspective.vertical, pedited->perspective.vertical); - assignFromKeyfile(keyFile, "Perspective", "CameraShiftHorizontal", pedited, perspective.camera_shift_horiz, pedited->perspective.camera_shift_horiz); - assignFromKeyfile(keyFile, "Perspective", "CameraShiftVertical", pedited, perspective.camera_shift_vert, pedited->perspective.camera_shift_vert); - assignFromKeyfile(keyFile, "Perspective", "CameraPitch", pedited, perspective.camera_pitch, pedited->perspective.camera_pitch); - assignFromKeyfile(keyFile, "Perspective", "CameraRoll", pedited, perspective.camera_roll, pedited->perspective.camera_roll); - assignFromKeyfile(keyFile, "Perspective", "CameraCropFactor", pedited, perspective.camera_crop_factor, pedited->perspective.camera_crop_factor); - assignFromKeyfile(keyFile, "Perspective", "CameraFocalLength", pedited, perspective.camera_focal_length, pedited->perspective.camera_focal_length); - assignFromKeyfile(keyFile, "Perspective", "CameraYaw", pedited, perspective.camera_yaw, pedited->perspective.camera_yaw); - assignFromKeyfile(keyFile, "Perspective", "ProjectionPitch", pedited, perspective.projection_pitch, pedited->perspective.projection_pitch); - assignFromKeyfile(keyFile, "Perspective", "ProjectionRotate", pedited, perspective.projection_rotate, pedited->perspective.projection_rotate); - assignFromKeyfile(keyFile, "Perspective", "ProjectionShiftHorizontal", pedited, perspective.projection_shift_horiz, pedited->perspective.projection_shift_horiz); - assignFromKeyfile(keyFile, "Perspective", "ProjectionShiftVertical", pedited, perspective.projection_shift_vert, pedited->perspective.projection_shift_vert); - assignFromKeyfile(keyFile, "Perspective", "ProjectionYaw", pedited, perspective.projection_yaw, pedited->perspective.projection_yaw); + assignFromKeyfile(keyFile, "Perspective", "Method", perspective.method, pedited->perspective.method); + assignFromKeyfile(keyFile, "Perspective", "Horizontal", perspective.horizontal, pedited->perspective.horizontal); + assignFromKeyfile(keyFile, "Perspective", "Vertical", perspective.vertical, pedited->perspective.vertical); + assignFromKeyfile(keyFile, "Perspective", "CameraShiftHorizontal", perspective.camera_shift_horiz, pedited->perspective.camera_shift_horiz); + assignFromKeyfile(keyFile, "Perspective", "CameraShiftVertical", perspective.camera_shift_vert, pedited->perspective.camera_shift_vert); + assignFromKeyfile(keyFile, "Perspective", "CameraPitch", perspective.camera_pitch, pedited->perspective.camera_pitch); + assignFromKeyfile(keyFile, "Perspective", "CameraRoll", perspective.camera_roll, pedited->perspective.camera_roll); + assignFromKeyfile(keyFile, "Perspective", "CameraCropFactor", perspective.camera_crop_factor, pedited->perspective.camera_crop_factor); + assignFromKeyfile(keyFile, "Perspective", "CameraFocalLength", perspective.camera_focal_length, pedited->perspective.camera_focal_length); + assignFromKeyfile(keyFile, "Perspective", "CameraYaw", perspective.camera_yaw, pedited->perspective.camera_yaw); + assignFromKeyfile(keyFile, "Perspective", "ProjectionPitch", perspective.projection_pitch, pedited->perspective.projection_pitch); + assignFromKeyfile(keyFile, "Perspective", "ProjectionRotate", perspective.projection_rotate, pedited->perspective.projection_rotate); + assignFromKeyfile(keyFile, "Perspective", "ProjectionShiftHorizontal", perspective.projection_shift_horiz, pedited->perspective.projection_shift_horiz); + assignFromKeyfile(keyFile, "Perspective", "ProjectionShiftVertical", perspective.projection_shift_vert, pedited->perspective.projection_shift_vert); + assignFromKeyfile(keyFile, "Perspective", "ProjectionYaw", perspective.projection_yaw, pedited->perspective.projection_yaw); if (keyFile.has_key("Perspective", "ControlLineValues") && keyFile.has_key("Perspective", "ControlLineTypes")) { perspective.control_line_values = keyFile.get_integer_list("Perspective", "ControlLineValues"); perspective.control_line_types = keyFile.get_integer_list("Perspective", "ControlLineTypes"); @@ -8582,23 +8682,23 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } if (keyFile.has_group("Gradient")) { - assignFromKeyfile(keyFile, "Gradient", "Enabled", pedited, gradient.enabled, pedited->gradient.enabled); - assignFromKeyfile(keyFile, "Gradient", "Degree", pedited, gradient.degree, pedited->gradient.degree); - assignFromKeyfile(keyFile, "Gradient", "Feather", pedited, gradient.feather, pedited->gradient.feather); - assignFromKeyfile(keyFile, "Gradient", "Strength", pedited, gradient.strength, pedited->gradient.strength); - assignFromKeyfile(keyFile, "Gradient", "CenterX", pedited, gradient.centerX, pedited->gradient.centerX); - assignFromKeyfile(keyFile, "Gradient", "CenterY", pedited, gradient.centerY, pedited->gradient.centerY); + assignFromKeyfile(keyFile, "Gradient", "Enabled", gradient.enabled, pedited->gradient.enabled); + assignFromKeyfile(keyFile, "Gradient", "Degree", gradient.degree, pedited->gradient.degree); + assignFromKeyfile(keyFile, "Gradient", "Feather", gradient.feather, pedited->gradient.feather); + assignFromKeyfile(keyFile, "Gradient", "Strength", gradient.strength, pedited->gradient.strength); + assignFromKeyfile(keyFile, "Gradient", "CenterX", gradient.centerX, pedited->gradient.centerX); + assignFromKeyfile(keyFile, "Gradient", "CenterY", gradient.centerY, pedited->gradient.centerY); } if (keyFile.has_group("Locallab")) { - assignFromKeyfile(keyFile, "Locallab", "Enabled", pedited, locallab.enabled, pedited->locallab.enabled); - assignFromKeyfile(keyFile, "Locallab", "Selspot", pedited, locallab.selspot, pedited->locallab.selspot); + assignFromKeyfile(keyFile, "Locallab", "Enabled", locallab.enabled, pedited->locallab.enabled); + assignFromKeyfile(keyFile, "Locallab", "Selspot", locallab.selspot, pedited->locallab.selspot); Glib::ustring ppName; bool peName; int i = 0; - while (assignFromKeyfile(keyFile, "Locallab", "Name_" + std::to_string(i), pedited, ppName, peName)) { + while (assignFromKeyfile(keyFile, "Locallab", "Name_" + std::to_string(i), ppName, peName)) { const std::string index_str = std::to_string(i); // Create new LocallabSpot and LocallabParamsEdited @@ -8608,17 +8708,17 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) spotEdited.name = peName; // Control spot settings - assignFromKeyfile(keyFile, "Locallab", "Isvisible_" + index_str, pedited, spot.isvisible, spotEdited.isvisible); - assignFromKeyfile(keyFile, "Locallab", "PrevMethod_" + index_str, pedited, spot.prevMethod, spotEdited.prevMethod); - assignFromKeyfile(keyFile, "Locallab", "Shape_" + index_str, pedited, spot.shape, spotEdited.shape); - assignFromKeyfile(keyFile, "Locallab", "SpotMethod_" + index_str, pedited, spot.spotMethod, spotEdited.spotMethod); - assignFromKeyfile(keyFile, "Locallab", "wavMethod_" + index_str, pedited, spot.wavMethod, spotEdited.wavMethod); - assignFromKeyfile(keyFile, "Locallab", "SensiExclu_" + index_str, pedited, spot.sensiexclu, spotEdited.sensiexclu); - assignFromKeyfile(keyFile, "Locallab", "StructExclu_" + index_str, pedited, spot.structexclu, spotEdited.structexclu); - assignFromKeyfile(keyFile, "Locallab", "Struc_" + index_str, pedited, spot.struc, spotEdited.struc); - assignFromKeyfile(keyFile, "Locallab", "ShapeMethod_" + index_str, pedited, spot.shapeMethod, spotEdited.shapeMethod); + assignFromKeyfile(keyFile, "Locallab", "Isvisible_" + index_str, spot.isvisible, spotEdited.isvisible); + assignFromKeyfile(keyFile, "Locallab", "PrevMethod_" + index_str, spot.prevMethod, spotEdited.prevMethod); + assignFromKeyfile(keyFile, "Locallab", "Shape_" + index_str, spot.shape, spotEdited.shape); + assignFromKeyfile(keyFile, "Locallab", "SpotMethod_" + index_str, spot.spotMethod, spotEdited.spotMethod); + assignFromKeyfile(keyFile, "Locallab", "wavMethod_" + index_str, spot.wavMethod, spotEdited.wavMethod); + assignFromKeyfile(keyFile, "Locallab", "SensiExclu_" + index_str, spot.sensiexclu, spotEdited.sensiexclu); + assignFromKeyfile(keyFile, "Locallab", "StructExclu_" + index_str, spot.structexclu, spotEdited.structexclu); + assignFromKeyfile(keyFile, "Locallab", "Struc_" + index_str, spot.struc, spotEdited.struc); + assignFromKeyfile(keyFile, "Locallab", "ShapeMethod_" + index_str, spot.shapeMethod, spotEdited.shapeMethod); if (keyFile.has_key("Locallab", "AvoidgamutMethod_" + index_str)) { - assignFromKeyfile(keyFile, "Locallab", "AvoidgamutMethod_" + index_str, pedited, spot.avoidgamutMethod, spotEdited.avoidgamutMethod); + assignFromKeyfile(keyFile, "Locallab", "AvoidgamutMethod_" + index_str, spot.avoidgamutMethod, spotEdited.avoidgamutMethod); } else if (keyFile.has_key("Locallab", "Avoid_" + index_str)) { const bool avoid = keyFile.get_boolean("Locallab", "Avoid_" + index_str); const bool munsell = keyFile.has_key("Locallab", "Avoidmun_" + index_str) && keyFile.get_boolean("Locallab", "Avoidmun_" + index_str); @@ -8627,103 +8727,103 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) spotEdited.avoidgamutMethod = true; } } - assignFromKeyfile(keyFile, "Locallab", "Loc_" + index_str, pedited, spot.loc, spotEdited.loc); - assignFromKeyfile(keyFile, "Locallab", "CenterX_" + index_str, pedited, spot.centerX, spotEdited.centerX); - assignFromKeyfile(keyFile, "Locallab", "CenterY_" + index_str, pedited, spot.centerY, spotEdited.centerY); - assignFromKeyfile(keyFile, "Locallab", "Circrad_" + index_str, pedited, spot.circrad, spotEdited.circrad); - assignFromKeyfile(keyFile, "Locallab", "QualityMethod_" + index_str, pedited, spot.qualityMethod, spotEdited.qualityMethod); - assignFromKeyfile(keyFile, "Locallab", "ComplexMethod_" + index_str, pedited, spot.complexMethod, spotEdited.complexMethod); - assignFromKeyfile(keyFile, "Locallab", "Transit_" + index_str, pedited, spot.transit, spotEdited.transit); - assignFromKeyfile(keyFile, "Locallab", "Feather_" + index_str, pedited, spot.feather, spotEdited.feather); - assignFromKeyfile(keyFile, "Locallab", "Thresh_" + index_str, pedited, spot.thresh, spotEdited.thresh); - assignFromKeyfile(keyFile, "Locallab", "Iter_" + index_str, pedited, spot.iter, spotEdited.iter); - assignFromKeyfile(keyFile, "Locallab", "Balan_" + index_str, pedited, spot.balan, spotEdited.balan); - assignFromKeyfile(keyFile, "Locallab", "Balanh_" + index_str, pedited, spot.balanh, spotEdited.balanh); - assignFromKeyfile(keyFile, "Locallab", "Colorde_" + index_str, pedited, spot.colorde, spotEdited.colorde); - assignFromKeyfile(keyFile, "Locallab", "Colorscope_" + index_str, pedited, spot.colorscope, spotEdited.colorscope); - assignFromKeyfile(keyFile, "Locallab", "Avoidrad_" + index_str, pedited, spot.avoidrad, spotEdited.avoidrad); - assignFromKeyfile(keyFile, "Locallab", "Transitweak_" + index_str, pedited, spot.transitweak, spotEdited.transitweak); - assignFromKeyfile(keyFile, "Locallab", "Transitgrad_" + index_str, pedited, spot.transitgrad, spotEdited.transitgrad); - assignFromKeyfile(keyFile, "Locallab", "Hishow_" + index_str, pedited, spot.hishow, spotEdited.hishow); - assignFromKeyfile(keyFile, "Locallab", "Activ_" + index_str, pedited, spot.activ, spotEdited.activ); - assignFromKeyfile(keyFile, "Locallab", "Blwh_" + index_str, pedited, spot.blwh, spotEdited.blwh); - assignFromKeyfile(keyFile, "Locallab", "Recurs_" + index_str, pedited, spot.recurs, spotEdited.recurs); - assignFromKeyfile(keyFile, "Locallab", "Laplac_" + index_str, pedited, spot.laplac, spotEdited.laplac); - assignFromKeyfile(keyFile, "Locallab", "Deltae_" + index_str, pedited, spot.deltae, spotEdited.deltae); - assignFromKeyfile(keyFile, "Locallab", "Shortc_" + index_str, pedited, spot.shortc, spotEdited.shortc); - assignFromKeyfile(keyFile, "Locallab", "Savrest_" + index_str, pedited, spot.savrest, spotEdited.savrest); - assignFromKeyfile(keyFile, "Locallab", "Scopemask_" + index_str, pedited, spot.scopemask, spotEdited.scopemask); - assignFromKeyfile(keyFile, "Locallab", "Denoichmask_" + index_str, pedited, spot.denoichmask, spotEdited.denoichmask); - assignFromKeyfile(keyFile, "Locallab", "Lumask_" + index_str, pedited, spot.lumask, spotEdited.lumask); + assignFromKeyfile(keyFile, "Locallab", "Loc_" + index_str, spot.loc, spotEdited.loc); + assignFromKeyfile(keyFile, "Locallab", "CenterX_" + index_str, spot.centerX, spotEdited.centerX); + assignFromKeyfile(keyFile, "Locallab", "CenterY_" + index_str, spot.centerY, spotEdited.centerY); + assignFromKeyfile(keyFile, "Locallab", "Circrad_" + index_str, spot.circrad, spotEdited.circrad); + assignFromKeyfile(keyFile, "Locallab", "QualityMethod_" + index_str, spot.qualityMethod, spotEdited.qualityMethod); + assignFromKeyfile(keyFile, "Locallab", "ComplexMethod_" + index_str, spot.complexMethod, spotEdited.complexMethod); + assignFromKeyfile(keyFile, "Locallab", "Transit_" + index_str, spot.transit, spotEdited.transit); + assignFromKeyfile(keyFile, "Locallab", "Feather_" + index_str, spot.feather, spotEdited.feather); + assignFromKeyfile(keyFile, "Locallab", "Thresh_" + index_str, spot.thresh, spotEdited.thresh); + assignFromKeyfile(keyFile, "Locallab", "Iter_" + index_str, spot.iter, spotEdited.iter); + assignFromKeyfile(keyFile, "Locallab", "Balan_" + index_str, spot.balan, spotEdited.balan); + assignFromKeyfile(keyFile, "Locallab", "Balanh_" + index_str, spot.balanh, spotEdited.balanh); + assignFromKeyfile(keyFile, "Locallab", "Colorde_" + index_str, spot.colorde, spotEdited.colorde); + assignFromKeyfile(keyFile, "Locallab", "Colorscope_" + index_str, spot.colorscope, spotEdited.colorscope); + assignFromKeyfile(keyFile, "Locallab", "Avoidrad_" + index_str, spot.avoidrad, spotEdited.avoidrad); + assignFromKeyfile(keyFile, "Locallab", "Transitweak_" + index_str, spot.transitweak, spotEdited.transitweak); + assignFromKeyfile(keyFile, "Locallab", "Transitgrad_" + index_str, spot.transitgrad, spotEdited.transitgrad); + assignFromKeyfile(keyFile, "Locallab", "Hishow_" + index_str, spot.hishow, spotEdited.hishow); + assignFromKeyfile(keyFile, "Locallab", "Activ_" + index_str, spot.activ, spotEdited.activ); + assignFromKeyfile(keyFile, "Locallab", "Blwh_" + index_str, spot.blwh, spotEdited.blwh); + assignFromKeyfile(keyFile, "Locallab", "Recurs_" + index_str, spot.recurs, spotEdited.recurs); + assignFromKeyfile(keyFile, "Locallab", "Laplac_" + index_str, spot.laplac, spotEdited.laplac); + assignFromKeyfile(keyFile, "Locallab", "Deltae_" + index_str, spot.deltae, spotEdited.deltae); + assignFromKeyfile(keyFile, "Locallab", "Shortc_" + index_str, spot.shortc, spotEdited.shortc); + assignFromKeyfile(keyFile, "Locallab", "Savrest_" + index_str, spot.savrest, spotEdited.savrest); + assignFromKeyfile(keyFile, "Locallab", "Scopemask_" + index_str, spot.scopemask, spotEdited.scopemask); + assignFromKeyfile(keyFile, "Locallab", "Denoichmask_" + index_str, spot.denoichmask, spotEdited.denoichmask); + assignFromKeyfile(keyFile, "Locallab", "Lumask_" + index_str, spot.lumask, spotEdited.lumask); // Color & Light - spot.visicolor = assignFromKeyfile(keyFile, "Locallab", "Expcolor_" + index_str, pedited, spot.expcolor, spotEdited.expcolor); + spot.visicolor = assignFromKeyfile(keyFile, "Locallab", "Expcolor_" + index_str, spot.expcolor, spotEdited.expcolor); if (spot.visicolor) { spotEdited.visicolor = true; } - assignFromKeyfile(keyFile, "Locallab", "Complexcolor_" + index_str, pedited, spot.complexcolor, spotEdited.complexcolor); - assignFromKeyfile(keyFile, "Locallab", "Curvactiv_" + index_str, pedited, spot.curvactiv, spotEdited.curvactiv); - assignFromKeyfile(keyFile, "Locallab", "Lightness_" + index_str, pedited, spot.lightness, spotEdited.lightness); - assignFromKeyfile(keyFile, "Locallab", "Reparcol_" + index_str, pedited, spot.reparcol, spotEdited.reparcol); - assignFromKeyfile(keyFile, "Locallab", "Gamc_" + index_str, pedited, spot.gamc, spotEdited.gamc); - assignFromKeyfile(keyFile, "Locallab", "Contrast_" + index_str, pedited, spot.contrast, spotEdited.contrast); - assignFromKeyfile(keyFile, "Locallab", "Chroma_" + index_str, pedited, spot.chroma, spotEdited.chroma); - assignFromKeyfile(keyFile, "Locallab", "labgridALow_" + index_str, pedited, spot.labgridALow, spotEdited.labgridALow); - assignFromKeyfile(keyFile, "Locallab", "labgridBLow_" + index_str, pedited, spot.labgridBLow, spotEdited.labgridBLow); - assignFromKeyfile(keyFile, "Locallab", "labgridAHigh_" + index_str, pedited, spot.labgridAHigh, spotEdited.labgridAHigh); - assignFromKeyfile(keyFile, "Locallab", "labgridBHigh_" + index_str, pedited, spot.labgridBHigh, spotEdited.labgridBHigh); - assignFromKeyfile(keyFile, "Locallab", "labgridALowmerg_" + index_str, pedited, spot.labgridALowmerg, spotEdited.labgridALowmerg); - assignFromKeyfile(keyFile, "Locallab", "labgridBLowmerg_" + index_str, pedited, spot.labgridBLowmerg, spotEdited.labgridBLowmerg); - assignFromKeyfile(keyFile, "Locallab", "labgridAHighmerg_" + index_str, pedited, spot.labgridAHighmerg, spotEdited.labgridAHighmerg); - assignFromKeyfile(keyFile, "Locallab", "labgridBHighmerg_" + index_str, pedited, spot.labgridBHighmerg, spotEdited.labgridBHighmerg); - assignFromKeyfile(keyFile, "Locallab", "Strengthgrid_" + index_str, pedited, spot.strengthgrid, spotEdited.strengthgrid); - assignFromKeyfile(keyFile, "Locallab", "Sensi_" + index_str, pedited, spot.sensi, spotEdited.sensi); - assignFromKeyfile(keyFile, "Locallab", "Structcol_" + index_str, pedited, spot.structcol, spotEdited.structcol); - assignFromKeyfile(keyFile, "Locallab", "Strcol_" + index_str, pedited, spot.strcol, spotEdited.strcol); - assignFromKeyfile(keyFile, "Locallab", "Strcolab_" + index_str, pedited, spot.strcolab, spotEdited.strcolab); - assignFromKeyfile(keyFile, "Locallab", "Strcolh_" + index_str, pedited, spot.strcolh, spotEdited.strcolh); - assignFromKeyfile(keyFile, "Locallab", "Angcol_" + index_str, pedited, spot.angcol, spotEdited.angcol); - assignFromKeyfile(keyFile, "Locallab", "Blurcolde_" + index_str, pedited, spot.blurcolde, spotEdited.blurcolde); - assignFromKeyfile(keyFile, "Locallab", "Blurcol_" + index_str, pedited, spot.blurcol, spotEdited.blurcol); - assignFromKeyfile(keyFile, "Locallab", "Contcol_" + index_str, pedited, spot.contcol, spotEdited.contcol); - assignFromKeyfile(keyFile, "Locallab", "Blendmaskcol_" + index_str, pedited, spot.blendmaskcol, spotEdited.blendmaskcol); - assignFromKeyfile(keyFile, "Locallab", "Radmaskcol_" + index_str, pedited, spot.radmaskcol, spotEdited.radmaskcol); - assignFromKeyfile(keyFile, "Locallab", "Chromaskcol_" + index_str, pedited, spot.chromaskcol, spotEdited.chromaskcol); - assignFromKeyfile(keyFile, "Locallab", "Gammaskcol_" + index_str, pedited, spot.gammaskcol, spotEdited.gammaskcol); - assignFromKeyfile(keyFile, "Locallab", "Slomaskcol_" + index_str, pedited, spot.slomaskcol, spotEdited.slomaskcol); - assignFromKeyfile(keyFile, "Locallab", "shadmaskcol_" + index_str, pedited, spot.shadmaskcol, spotEdited.shadmaskcol); - assignFromKeyfile(keyFile, "Locallab", "strumaskcol_" + index_str, pedited, spot.strumaskcol, spotEdited.strumaskcol); - assignFromKeyfile(keyFile, "Locallab", "Lapmaskcol_" + index_str, pedited, spot.lapmaskcol, spotEdited.lapmaskcol); - assignFromKeyfile(keyFile, "Locallab", "QualityCurveMethod_" + index_str, pedited, spot.qualitycurveMethod, spotEdited.qualitycurveMethod); - assignFromKeyfile(keyFile, "Locallab", "gridMethod_" + index_str, pedited, spot.gridMethod, spotEdited.gridMethod); - assignFromKeyfile(keyFile, "Locallab", "Merg_Method_" + index_str, pedited, spot.merMethod, spotEdited.merMethod); - assignFromKeyfile(keyFile, "Locallab", "ToneMethod_" + index_str, pedited, spot.toneMethod, spotEdited.toneMethod); - assignFromKeyfile(keyFile, "Locallab", "mergecolMethod_" + index_str, pedited, spot.mergecolMethod, spotEdited.mergecolMethod); - assignFromKeyfile(keyFile, "Locallab", "LLCurve_" + index_str, pedited, spot.llcurve, spotEdited.llcurve); - assignFromKeyfile(keyFile, "Locallab", "LCCurve_" + index_str, pedited, spot.lccurve, spotEdited.lccurve); - assignFromKeyfile(keyFile, "Locallab", "CCCurve_" + index_str, pedited, spot.cccurve, spotEdited.cccurve); - assignFromKeyfile(keyFile, "Locallab", "CLCurve_" + index_str, pedited, spot.clcurve, spotEdited.clcurve); - assignFromKeyfile(keyFile, "Locallab", "RGBCurve_" + index_str, pedited, spot.rgbcurve, spotEdited.rgbcurve); - assignFromKeyfile(keyFile, "Locallab", "LHCurve_" + index_str, pedited, spot.LHcurve, spotEdited.LHcurve); - assignFromKeyfile(keyFile, "Locallab", "HHCurve_" + index_str, pedited, spot.HHcurve, spotEdited.HHcurve); - assignFromKeyfile(keyFile, "Locallab", "CHCurve_" + index_str, pedited, spot.CHcurve, spotEdited.CHcurve); - assignFromKeyfile(keyFile, "Locallab", "Invers_" + index_str, pedited, spot.invers, spotEdited.invers); - assignFromKeyfile(keyFile, "Locallab", "Special_" + index_str, pedited, spot.special, spotEdited.special); - assignFromKeyfile(keyFile, "Locallab", "Toolcol_" + index_str, pedited, spot.toolcol, spotEdited.toolcol); - assignFromKeyfile(keyFile, "Locallab", "EnaColorMask_" + index_str, pedited, spot.enaColorMask, spotEdited.enaColorMask); - assignFromKeyfile(keyFile, "Locallab", "FftColorMask_" + index_str, pedited, spot.fftColorMask, spotEdited.fftColorMask); - assignFromKeyfile(keyFile, "Locallab", "CCmaskCurve_" + index_str, pedited, spot.CCmaskcurve, spotEdited.CCmaskcurve); - assignFromKeyfile(keyFile, "Locallab", "LLmaskCurve_" + index_str, pedited, spot.LLmaskcurve, spotEdited.LLmaskcurve); - assignFromKeyfile(keyFile, "Locallab", "HHmaskCurve_" + index_str, pedited, spot.HHmaskcurve, spotEdited.HHmaskcurve); - assignFromKeyfile(keyFile, "Locallab", "HHhmaskCurve_" + index_str, pedited, spot.HHhmaskcurve, spotEdited.HHhmaskcurve); - assignFromKeyfile(keyFile, "Locallab", "Softradiuscol_" + index_str, pedited, spot.softradiuscol, spotEdited.softradiuscol); - assignFromKeyfile(keyFile, "Locallab", "Opacol_" + index_str, pedited, spot.opacol, spotEdited.opacol); - assignFromKeyfile(keyFile, "Locallab", "Mercol_" + index_str, pedited, spot.mercol, spotEdited.mercol); - assignFromKeyfile(keyFile, "Locallab", "Merlucol_" + index_str, pedited, spot.merlucol, spotEdited.merlucol); - assignFromKeyfile(keyFile, "Locallab", "Conthrcol_" + index_str, pedited, spot.conthrcol, spotEdited.conthrcol); - assignFromKeyfile(keyFile, "Locallab", "LmaskCurve_" + index_str, pedited, spot.Lmaskcurve, spotEdited.Lmaskcurve); - assignFromKeyfile(keyFile, "Locallab", "LLmaskcolCurvewav_" + index_str, pedited, spot.LLmaskcolcurvewav, spotEdited.LLmaskcolcurvewav); + assignFromKeyfile(keyFile, "Locallab", "Complexcolor_" + index_str, spot.complexcolor, spotEdited.complexcolor); + assignFromKeyfile(keyFile, "Locallab", "Curvactiv_" + index_str, spot.curvactiv, spotEdited.curvactiv); + assignFromKeyfile(keyFile, "Locallab", "Lightness_" + index_str, spot.lightness, spotEdited.lightness); + assignFromKeyfile(keyFile, "Locallab", "Reparcol_" + index_str, spot.reparcol, spotEdited.reparcol); + assignFromKeyfile(keyFile, "Locallab", "Gamc_" + index_str, spot.gamc, spotEdited.gamc); + assignFromKeyfile(keyFile, "Locallab", "Contrast_" + index_str, spot.contrast, spotEdited.contrast); + assignFromKeyfile(keyFile, "Locallab", "Chroma_" + index_str, spot.chroma, spotEdited.chroma); + assignFromKeyfile(keyFile, "Locallab", "labgridALow_" + index_str, spot.labgridALow, spotEdited.labgridALow); + assignFromKeyfile(keyFile, "Locallab", "labgridBLow_" + index_str, spot.labgridBLow, spotEdited.labgridBLow); + assignFromKeyfile(keyFile, "Locallab", "labgridAHigh_" + index_str, spot.labgridAHigh, spotEdited.labgridAHigh); + assignFromKeyfile(keyFile, "Locallab", "labgridBHigh_" + index_str, spot.labgridBHigh, spotEdited.labgridBHigh); + assignFromKeyfile(keyFile, "Locallab", "labgridALowmerg_" + index_str, spot.labgridALowmerg, spotEdited.labgridALowmerg); + assignFromKeyfile(keyFile, "Locallab", "labgridBLowmerg_" + index_str, spot.labgridBLowmerg, spotEdited.labgridBLowmerg); + assignFromKeyfile(keyFile, "Locallab", "labgridAHighmerg_" + index_str, spot.labgridAHighmerg, spotEdited.labgridAHighmerg); + assignFromKeyfile(keyFile, "Locallab", "labgridBHighmerg_" + index_str, spot.labgridBHighmerg, spotEdited.labgridBHighmerg); + assignFromKeyfile(keyFile, "Locallab", "Strengthgrid_" + index_str, spot.strengthgrid, spotEdited.strengthgrid); + assignFromKeyfile(keyFile, "Locallab", "Sensi_" + index_str, spot.sensi, spotEdited.sensi); + assignFromKeyfile(keyFile, "Locallab", "Structcol_" + index_str, spot.structcol, spotEdited.structcol); + assignFromKeyfile(keyFile, "Locallab", "Strcol_" + index_str, spot.strcol, spotEdited.strcol); + assignFromKeyfile(keyFile, "Locallab", "Strcolab_" + index_str, spot.strcolab, spotEdited.strcolab); + assignFromKeyfile(keyFile, "Locallab", "Strcolh_" + index_str, spot.strcolh, spotEdited.strcolh); + assignFromKeyfile(keyFile, "Locallab", "Angcol_" + index_str, spot.angcol, spotEdited.angcol); + assignFromKeyfile(keyFile, "Locallab", "Blurcolde_" + index_str, spot.blurcolde, spotEdited.blurcolde); + assignFromKeyfile(keyFile, "Locallab", "Blurcol_" + index_str, spot.blurcol, spotEdited.blurcol); + assignFromKeyfile(keyFile, "Locallab", "Contcol_" + index_str, spot.contcol, spotEdited.contcol); + assignFromKeyfile(keyFile, "Locallab", "Blendmaskcol_" + index_str, spot.blendmaskcol, spotEdited.blendmaskcol); + assignFromKeyfile(keyFile, "Locallab", "Radmaskcol_" + index_str, spot.radmaskcol, spotEdited.radmaskcol); + assignFromKeyfile(keyFile, "Locallab", "Chromaskcol_" + index_str, spot.chromaskcol, spotEdited.chromaskcol); + assignFromKeyfile(keyFile, "Locallab", "Gammaskcol_" + index_str, spot.gammaskcol, spotEdited.gammaskcol); + assignFromKeyfile(keyFile, "Locallab", "Slomaskcol_" + index_str, spot.slomaskcol, spotEdited.slomaskcol); + assignFromKeyfile(keyFile, "Locallab", "shadmaskcol_" + index_str, spot.shadmaskcol, spotEdited.shadmaskcol); + assignFromKeyfile(keyFile, "Locallab", "strumaskcol_" + index_str, spot.strumaskcol, spotEdited.strumaskcol); + assignFromKeyfile(keyFile, "Locallab", "Lapmaskcol_" + index_str, spot.lapmaskcol, spotEdited.lapmaskcol); + assignFromKeyfile(keyFile, "Locallab", "QualityCurveMethod_" + index_str, spot.qualitycurveMethod, spotEdited.qualitycurveMethod); + assignFromKeyfile(keyFile, "Locallab", "gridMethod_" + index_str, spot.gridMethod, spotEdited.gridMethod); + assignFromKeyfile(keyFile, "Locallab", "Merg_Method_" + index_str, spot.merMethod, spotEdited.merMethod); + assignFromKeyfile(keyFile, "Locallab", "ToneMethod_" + index_str, spot.toneMethod, spotEdited.toneMethod); + assignFromKeyfile(keyFile, "Locallab", "mergecolMethod_" + index_str, spot.mergecolMethod, spotEdited.mergecolMethod); + assignFromKeyfile(keyFile, "Locallab", "LLCurve_" + index_str, spot.llcurve, spotEdited.llcurve); + assignFromKeyfile(keyFile, "Locallab", "LCCurve_" + index_str, spot.lccurve, spotEdited.lccurve); + assignFromKeyfile(keyFile, "Locallab", "CCCurve_" + index_str, spot.cccurve, spotEdited.cccurve); + assignFromKeyfile(keyFile, "Locallab", "CLCurve_" + index_str, spot.clcurve, spotEdited.clcurve); + assignFromKeyfile(keyFile, "Locallab", "RGBCurve_" + index_str, spot.rgbcurve, spotEdited.rgbcurve); + assignFromKeyfile(keyFile, "Locallab", "LHCurve_" + index_str, spot.LHcurve, spotEdited.LHcurve); + assignFromKeyfile(keyFile, "Locallab", "HHCurve_" + index_str, spot.HHcurve, spotEdited.HHcurve); + assignFromKeyfile(keyFile, "Locallab", "CHCurve_" + index_str, spot.CHcurve, spotEdited.CHcurve); + assignFromKeyfile(keyFile, "Locallab", "Invers_" + index_str, spot.invers, spotEdited.invers); + assignFromKeyfile(keyFile, "Locallab", "Special_" + index_str, spot.special, spotEdited.special); + assignFromKeyfile(keyFile, "Locallab", "Toolcol_" + index_str, spot.toolcol, spotEdited.toolcol); + assignFromKeyfile(keyFile, "Locallab", "EnaColorMask_" + index_str, spot.enaColorMask, spotEdited.enaColorMask); + assignFromKeyfile(keyFile, "Locallab", "FftColorMask_" + index_str, spot.fftColorMask, spotEdited.fftColorMask); + assignFromKeyfile(keyFile, "Locallab", "CCmaskCurve_" + index_str, spot.CCmaskcurve, spotEdited.CCmaskcurve); + assignFromKeyfile(keyFile, "Locallab", "LLmaskCurve_" + index_str, spot.LLmaskcurve, spotEdited.LLmaskcurve); + assignFromKeyfile(keyFile, "Locallab", "HHmaskCurve_" + index_str, spot.HHmaskcurve, spotEdited.HHmaskcurve); + assignFromKeyfile(keyFile, "Locallab", "HHhmaskCurve_" + index_str, spot.HHhmaskcurve, spotEdited.HHhmaskcurve); + assignFromKeyfile(keyFile, "Locallab", "Softradiuscol_" + index_str, spot.softradiuscol, spotEdited.softradiuscol); + assignFromKeyfile(keyFile, "Locallab", "Opacol_" + index_str, spot.opacol, spotEdited.opacol); + assignFromKeyfile(keyFile, "Locallab", "Mercol_" + index_str, spot.mercol, spotEdited.mercol); + assignFromKeyfile(keyFile, "Locallab", "Merlucol_" + index_str, spot.merlucol, spotEdited.merlucol); + assignFromKeyfile(keyFile, "Locallab", "Conthrcol_" + index_str, spot.conthrcol, spotEdited.conthrcol); + assignFromKeyfile(keyFile, "Locallab", "LmaskCurve_" + index_str, spot.Lmaskcurve, spotEdited.Lmaskcurve); + assignFromKeyfile(keyFile, "Locallab", "LLmaskcolCurvewav_" + index_str, spot.LLmaskcolcurvewav, spotEdited.LLmaskcolcurvewav); if (keyFile.has_key("Locallab", "CSThresholdcol_" + index_str)) { const std::vector thresh = keyFile.get_integer_list("Locallab", "CSThresholdcol_" + index_str); @@ -8734,124 +8834,124 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) spotEdited.csthresholdcol = true; } - assignFromKeyfile(keyFile, "Locallab", "Recothresc_" + index_str, pedited, spot.recothresc, spotEdited.recothresc); - assignFromKeyfile(keyFile, "Locallab", "Lowthresc_" + index_str, pedited, spot.lowthresc, spotEdited.lowthresc); - assignFromKeyfile(keyFile, "Locallab", "Higthresc_" + index_str, pedited, spot.higthresc, spotEdited.higthresc); - assignFromKeyfile(keyFile, "Locallab", "Decayc_" + index_str, pedited, spot.decayc, spotEdited.decayc); + assignFromKeyfile(keyFile, "Locallab", "Recothresc_" + index_str, spot.recothresc, spotEdited.recothresc); + assignFromKeyfile(keyFile, "Locallab", "Lowthresc_" + index_str, spot.lowthresc, spotEdited.lowthresc); + assignFromKeyfile(keyFile, "Locallab", "Higthresc_" + index_str, spot.higthresc, spotEdited.higthresc); + assignFromKeyfile(keyFile, "Locallab", "Decayc_" + index_str, spot.decayc, spotEdited.decayc); // Exposure - spot.visiexpose = assignFromKeyfile(keyFile, "Locallab", "Expexpose_" + index_str, pedited, spot.expexpose, spotEdited.expexpose); + spot.visiexpose = assignFromKeyfile(keyFile, "Locallab", "Expexpose_" + index_str, spot.expexpose, spotEdited.expexpose); if (spot.visiexpose) { spotEdited.visiexpose = true; } - assignFromKeyfile(keyFile, "Locallab", "Complexexpose_" + index_str, pedited, spot.complexexpose, spotEdited.complexexpose); - assignFromKeyfile(keyFile, "Locallab", "Expcomp_" + index_str, pedited, spot.expcomp, spotEdited.expcomp); - assignFromKeyfile(keyFile, "Locallab", "Hlcompr_" + index_str, pedited, spot.hlcompr, spotEdited.hlcompr); - assignFromKeyfile(keyFile, "Locallab", "Hlcomprthresh_" + index_str, pedited, spot.hlcomprthresh, spotEdited.hlcomprthresh); - assignFromKeyfile(keyFile, "Locallab", "Black_" + index_str, pedited, spot.black, spotEdited.black); - assignFromKeyfile(keyFile, "Locallab", "Shadex_" + index_str, pedited, spot.shadex, spotEdited.shadex); - assignFromKeyfile(keyFile, "Locallab", "Shcompr_" + index_str, pedited, spot.shcompr, spotEdited.shcompr); - assignFromKeyfile(keyFile, "Locallab", "Expchroma_" + index_str, pedited, spot.expchroma, spotEdited.expchroma); - assignFromKeyfile(keyFile, "Locallab", "Sensiex_" + index_str, pedited, spot.sensiex, spotEdited.sensiex); - assignFromKeyfile(keyFile, "Locallab", "Structexp_" + index_str, pedited, spot.structexp, spotEdited.structexp); - assignFromKeyfile(keyFile, "Locallab", "Blurexpde_" + index_str, pedited, spot.blurexpde, spotEdited.blurexpde); - assignFromKeyfile(keyFile, "Locallab", "Gamex_" + index_str, pedited, spot.gamex, spotEdited.gamex); - assignFromKeyfile(keyFile, "Locallab", "Strexp_" + index_str, pedited, spot.strexp, spotEdited.strexp); - assignFromKeyfile(keyFile, "Locallab", "Angexp_" + index_str, pedited, spot.angexp, spotEdited.angexp); - assignFromKeyfile(keyFile, "Locallab", "ExCurve_" + index_str, pedited, spot.excurve, spotEdited.excurve); - assignFromKeyfile(keyFile, "Locallab", "Norm_" + index_str, pedited, spot.norm, spotEdited.norm); - assignFromKeyfile(keyFile, "Locallab", "Inversex_" + index_str, pedited, spot.inversex, spotEdited.inversex); - assignFromKeyfile(keyFile, "Locallab", "EnaExpMask_" + index_str, pedited, spot.enaExpMask, spotEdited.enaExpMask); - assignFromKeyfile(keyFile, "Locallab", "EnaExpMaskaft_" + index_str, pedited, spot.enaExpMaskaft, spotEdited.enaExpMaskaft); - assignFromKeyfile(keyFile, "Locallab", "CCmaskexpCurve_" + index_str, pedited, spot.CCmaskexpcurve, spotEdited.CCmaskexpcurve); - assignFromKeyfile(keyFile, "Locallab", "LLmaskexpCurve_" + index_str, pedited, spot.LLmaskexpcurve, spotEdited.LLmaskexpcurve); - assignFromKeyfile(keyFile, "Locallab", "HHmaskexpCurve_" + index_str, pedited, spot.HHmaskexpcurve, spotEdited.HHmaskexpcurve); - assignFromKeyfile(keyFile, "Locallab", "Blendmaskexp_" + index_str, pedited, spot.blendmaskexp, spotEdited.blendmaskexp); - assignFromKeyfile(keyFile, "Locallab", "Radmaskexp_" + index_str, pedited, spot.radmaskexp, spotEdited.radmaskexp); - assignFromKeyfile(keyFile, "Locallab", "Chromaskexp_" + index_str, pedited, spot.chromaskexp, spotEdited.chromaskexp); - assignFromKeyfile(keyFile, "Locallab", "Gammaskexp_" + index_str, pedited, spot.gammaskexp, spotEdited.gammaskexp); - assignFromKeyfile(keyFile, "Locallab", "Slomaskexp_" + index_str, pedited, spot.slomaskexp, spotEdited.slomaskexp); - assignFromKeyfile(keyFile, "Locallab", "Lapmaskexp_" + index_str, pedited, spot.lapmaskexp, spotEdited.lapmaskexp); - assignFromKeyfile(keyFile, "Locallab", "Strmaskexp_" + index_str, pedited, spot.strmaskexp, spotEdited.strmaskexp); - assignFromKeyfile(keyFile, "Locallab", "Angmaskexp_" + index_str, pedited, spot.angmaskexp, spotEdited.angmaskexp); - assignFromKeyfile(keyFile, "Locallab", "Softradiusexp_" + index_str, pedited, spot.softradiusexp, spotEdited.softradiusexp); - assignFromKeyfile(keyFile, "Locallab", "LmaskexpCurve_" + index_str, pedited, spot.Lmaskexpcurve, spotEdited.Lmaskexpcurve); - assignFromKeyfile(keyFile, "Locallab", "ExpMethod_" + index_str, pedited, spot.expMethod, spotEdited.expMethod); - assignFromKeyfile(keyFile, "Locallab", "ExnoiseMethod_" + index_str, pedited, spot.exnoiseMethod, spotEdited.exnoiseMethod); - assignFromKeyfile(keyFile, "Locallab", "Laplacexp_" + index_str, pedited, spot.laplacexp, spotEdited.laplacexp); - assignFromKeyfile(keyFile, "Locallab", "Reparexp_" + index_str, pedited, spot.reparexp, spotEdited.reparexp); - assignFromKeyfile(keyFile, "Locallab", "Balanexp_" + index_str, pedited, spot.balanexp, spotEdited.balanexp); - assignFromKeyfile(keyFile, "Locallab", "Linearexp_" + index_str, pedited, spot.linear, spotEdited.linear); - assignFromKeyfile(keyFile, "Locallab", "Gamm_" + index_str, pedited, spot.gamm, spotEdited.gamm); - assignFromKeyfile(keyFile, "Locallab", "Fatamount_" + index_str, pedited, spot.fatamount, spotEdited.fatamount); - assignFromKeyfile(keyFile, "Locallab", "Fatdetail_" + index_str, pedited, spot.fatdetail, spotEdited.fatdetail); - assignFromKeyfile(keyFile, "Locallab", "Fatanchor_" + index_str, pedited, spot.fatanchor, spotEdited.fatanchor); - assignFromKeyfile(keyFile, "Locallab", "Fatlevel_" + index_str, pedited, spot.fatlevel, spotEdited.fatlevel); - assignFromKeyfile(keyFile, "Locallab", "Recothrese_" + index_str, pedited, spot.recothrese, spotEdited.recothrese); - assignFromKeyfile(keyFile, "Locallab", "Lowthrese_" + index_str, pedited, spot.lowthrese, spotEdited.lowthrese); - assignFromKeyfile(keyFile, "Locallab", "Higthrese_" + index_str, pedited, spot.higthrese, spotEdited.higthrese); - assignFromKeyfile(keyFile, "Locallab", "Decaye_" + index_str, pedited, spot.decaye, spotEdited.decaye); + assignFromKeyfile(keyFile, "Locallab", "Complexexpose_" + index_str, spot.complexexpose, spotEdited.complexexpose); + assignFromKeyfile(keyFile, "Locallab", "Expcomp_" + index_str, spot.expcomp, spotEdited.expcomp); + assignFromKeyfile(keyFile, "Locallab", "Hlcompr_" + index_str, spot.hlcompr, spotEdited.hlcompr); + assignFromKeyfile(keyFile, "Locallab", "Hlcomprthresh_" + index_str, spot.hlcomprthresh, spotEdited.hlcomprthresh); + assignFromKeyfile(keyFile, "Locallab", "Black_" + index_str, spot.black, spotEdited.black); + assignFromKeyfile(keyFile, "Locallab", "Shadex_" + index_str, spot.shadex, spotEdited.shadex); + assignFromKeyfile(keyFile, "Locallab", "Shcompr_" + index_str, spot.shcompr, spotEdited.shcompr); + assignFromKeyfile(keyFile, "Locallab", "Expchroma_" + index_str, spot.expchroma, spotEdited.expchroma); + assignFromKeyfile(keyFile, "Locallab", "Sensiex_" + index_str, spot.sensiex, spotEdited.sensiex); + assignFromKeyfile(keyFile, "Locallab", "Structexp_" + index_str, spot.structexp, spotEdited.structexp); + assignFromKeyfile(keyFile, "Locallab", "Blurexpde_" + index_str, spot.blurexpde, spotEdited.blurexpde); + assignFromKeyfile(keyFile, "Locallab", "Gamex_" + index_str, spot.gamex, spotEdited.gamex); + assignFromKeyfile(keyFile, "Locallab", "Strexp_" + index_str, spot.strexp, spotEdited.strexp); + assignFromKeyfile(keyFile, "Locallab", "Angexp_" + index_str, spot.angexp, spotEdited.angexp); + assignFromKeyfile(keyFile, "Locallab", "ExCurve_" + index_str, spot.excurve, spotEdited.excurve); + assignFromKeyfile(keyFile, "Locallab", "Norm_" + index_str, spot.norm, spotEdited.norm); + assignFromKeyfile(keyFile, "Locallab", "Inversex_" + index_str, spot.inversex, spotEdited.inversex); + assignFromKeyfile(keyFile, "Locallab", "EnaExpMask_" + index_str, spot.enaExpMask, spotEdited.enaExpMask); + assignFromKeyfile(keyFile, "Locallab", "EnaExpMaskaft_" + index_str, spot.enaExpMaskaft, spotEdited.enaExpMaskaft); + assignFromKeyfile(keyFile, "Locallab", "CCmaskexpCurve_" + index_str, spot.CCmaskexpcurve, spotEdited.CCmaskexpcurve); + assignFromKeyfile(keyFile, "Locallab", "LLmaskexpCurve_" + index_str, spot.LLmaskexpcurve, spotEdited.LLmaskexpcurve); + assignFromKeyfile(keyFile, "Locallab", "HHmaskexpCurve_" + index_str, spot.HHmaskexpcurve, spotEdited.HHmaskexpcurve); + assignFromKeyfile(keyFile, "Locallab", "Blendmaskexp_" + index_str, spot.blendmaskexp, spotEdited.blendmaskexp); + assignFromKeyfile(keyFile, "Locallab", "Radmaskexp_" + index_str, spot.radmaskexp, spotEdited.radmaskexp); + assignFromKeyfile(keyFile, "Locallab", "Chromaskexp_" + index_str, spot.chromaskexp, spotEdited.chromaskexp); + assignFromKeyfile(keyFile, "Locallab", "Gammaskexp_" + index_str, spot.gammaskexp, spotEdited.gammaskexp); + assignFromKeyfile(keyFile, "Locallab", "Slomaskexp_" + index_str, spot.slomaskexp, spotEdited.slomaskexp); + assignFromKeyfile(keyFile, "Locallab", "Lapmaskexp_" + index_str, spot.lapmaskexp, spotEdited.lapmaskexp); + assignFromKeyfile(keyFile, "Locallab", "Strmaskexp_" + index_str, spot.strmaskexp, spotEdited.strmaskexp); + assignFromKeyfile(keyFile, "Locallab", "Angmaskexp_" + index_str, spot.angmaskexp, spotEdited.angmaskexp); + assignFromKeyfile(keyFile, "Locallab", "Softradiusexp_" + index_str, spot.softradiusexp, spotEdited.softradiusexp); + assignFromKeyfile(keyFile, "Locallab", "LmaskexpCurve_" + index_str, spot.Lmaskexpcurve, spotEdited.Lmaskexpcurve); + assignFromKeyfile(keyFile, "Locallab", "ExpMethod_" + index_str, spot.expMethod, spotEdited.expMethod); + assignFromKeyfile(keyFile, "Locallab", "ExnoiseMethod_" + index_str, spot.exnoiseMethod, spotEdited.exnoiseMethod); + assignFromKeyfile(keyFile, "Locallab", "Laplacexp_" + index_str, spot.laplacexp, spotEdited.laplacexp); + assignFromKeyfile(keyFile, "Locallab", "Reparexp_" + index_str, spot.reparexp, spotEdited.reparexp); + assignFromKeyfile(keyFile, "Locallab", "Balanexp_" + index_str, spot.balanexp, spotEdited.balanexp); + assignFromKeyfile(keyFile, "Locallab", "Linearexp_" + index_str, spot.linear, spotEdited.linear); + assignFromKeyfile(keyFile, "Locallab", "Gamm_" + index_str, spot.gamm, spotEdited.gamm); + assignFromKeyfile(keyFile, "Locallab", "Fatamount_" + index_str, spot.fatamount, spotEdited.fatamount); + assignFromKeyfile(keyFile, "Locallab", "Fatdetail_" + index_str, spot.fatdetail, spotEdited.fatdetail); + assignFromKeyfile(keyFile, "Locallab", "Fatanchor_" + index_str, spot.fatanchor, spotEdited.fatanchor); + assignFromKeyfile(keyFile, "Locallab", "Fatlevel_" + index_str, spot.fatlevel, spotEdited.fatlevel); + assignFromKeyfile(keyFile, "Locallab", "Recothrese_" + index_str, spot.recothrese, spotEdited.recothrese); + assignFromKeyfile(keyFile, "Locallab", "Lowthrese_" + index_str, spot.lowthrese, spotEdited.lowthrese); + assignFromKeyfile(keyFile, "Locallab", "Higthrese_" + index_str, spot.higthrese, spotEdited.higthrese); + assignFromKeyfile(keyFile, "Locallab", "Decaye_" + index_str, spot.decaye, spotEdited.decaye); // Shadow highlight - spot.visishadhigh = assignFromKeyfile(keyFile, "Locallab", "Expshadhigh_" + index_str, pedited, spot.expshadhigh, spotEdited.expshadhigh); + spot.visishadhigh = assignFromKeyfile(keyFile, "Locallab", "Expshadhigh_" + index_str, spot.expshadhigh, spotEdited.expshadhigh); if (spot.visishadhigh) { spotEdited.visishadhigh = true; } - assignFromKeyfile(keyFile, "Locallab", "Complexshadhigh_" + index_str, pedited, spot.complexshadhigh, spotEdited.complexshadhigh); - assignFromKeyfile(keyFile, "Locallab", "ShMethod_" + index_str, pedited, spot.shMethod, spotEdited.shMethod); + assignFromKeyfile(keyFile, "Locallab", "Complexshadhigh_" + index_str, spot.complexshadhigh, spotEdited.complexshadhigh); + assignFromKeyfile(keyFile, "Locallab", "ShMethod_" + index_str, spot.shMethod, spotEdited.shMethod); for (int j = 0; j < 5; j ++) { - assignFromKeyfile(keyFile, "Locallab", "Multsh" + std::to_string(j) + "_" + index_str, pedited, spot.multsh[j], spotEdited.multsh[j]); + assignFromKeyfile(keyFile, "Locallab", "Multsh" + std::to_string(j) + "_" + index_str, spot.multsh[j], spotEdited.multsh[j]); } - assignFromKeyfile(keyFile, "Locallab", "Expshadhigh_" + index_str, pedited, spot.expshadhigh, spotEdited.expshadhigh); - assignFromKeyfile(keyFile, "Locallab", "highlights_" + index_str, pedited, spot.highlights, spotEdited.highlights); - assignFromKeyfile(keyFile, "Locallab", "h_tonalwidth_" + index_str, pedited, spot.h_tonalwidth, spotEdited.h_tonalwidth); - assignFromKeyfile(keyFile, "Locallab", "shadows_" + index_str, pedited, spot.shadows, spotEdited.shadows); - assignFromKeyfile(keyFile, "Locallab", "s_tonalwidth_" + index_str, pedited, spot.s_tonalwidth, spotEdited.s_tonalwidth); - assignFromKeyfile(keyFile, "Locallab", "sh_radius_" + index_str, pedited, spot.sh_radius, spotEdited.sh_radius); - assignFromKeyfile(keyFile, "Locallab", "sensihs_" + index_str, pedited, spot.sensihs, spotEdited.sensihs); - assignFromKeyfile(keyFile, "Locallab", "EnaSHMask_" + index_str, pedited, spot.enaSHMask, spotEdited.enaSHMask); - assignFromKeyfile(keyFile, "Locallab", "CCmaskSHCurve_" + index_str, pedited, spot.CCmaskSHcurve, spotEdited.CCmaskSHcurve); - assignFromKeyfile(keyFile, "Locallab", "LLmaskSHCurve_" + index_str, pedited, spot.LLmaskSHcurve, spotEdited.LLmaskSHcurve); - assignFromKeyfile(keyFile, "Locallab", "HHmaskSHCurve_" + index_str, pedited, spot.HHmaskSHcurve, spotEdited.HHmaskSHcurve); - assignFromKeyfile(keyFile, "Locallab", "BlendmaskSH_" + index_str, pedited, spot.blendmaskSH, spotEdited.blendmaskSH); - assignFromKeyfile(keyFile, "Locallab", "RadmaskSH_" + index_str, pedited, spot.radmaskSH, spotEdited.radmaskSH); - assignFromKeyfile(keyFile, "Locallab", "BlurSHde_" + index_str, pedited, spot.blurSHde, spotEdited.blurSHde); - assignFromKeyfile(keyFile, "Locallab", "StrSH_" + index_str, pedited, spot.strSH, spotEdited.strSH); - assignFromKeyfile(keyFile, "Locallab", "AngSH_" + index_str, pedited, spot.angSH, spotEdited.angSH); - assignFromKeyfile(keyFile, "Locallab", "Inverssh_" + index_str, pedited, spot.inverssh, spotEdited.inverssh); - assignFromKeyfile(keyFile, "Locallab", "ChromaskSH_" + index_str, pedited, spot.chromaskSH, spotEdited.chromaskSH); - assignFromKeyfile(keyFile, "Locallab", "GammaskSH_" + index_str, pedited, spot.gammaskSH, spotEdited.gammaskSH); - assignFromKeyfile(keyFile, "Locallab", "SlomaskSH_" + index_str, pedited, spot.slomaskSH, spotEdited.slomaskSH); - assignFromKeyfile(keyFile, "Locallab", "LapmaskSH_" + index_str, pedited, spot.lapmaskSH, spotEdited.lapmaskSH); - assignFromKeyfile(keyFile, "Locallab", "DetailSH_" + index_str, pedited, spot.detailSH, spotEdited.detailSH); - assignFromKeyfile(keyFile, "Locallab", "TePivot_" + index_str, pedited, spot.tePivot, spotEdited.tePivot); - assignFromKeyfile(keyFile, "Locallab", "Reparsh_" + index_str, pedited, spot.reparsh, spotEdited.reparsh); - assignFromKeyfile(keyFile, "Locallab", "LmaskSHCurve_" + index_str, pedited, spot.LmaskSHcurve, spotEdited.LmaskSHcurve); - assignFromKeyfile(keyFile, "Locallab", "FatamountSH_" + index_str, pedited, spot.fatamountSH, spotEdited.fatamountSH); - assignFromKeyfile(keyFile, "Locallab", "FatanchorSH_" + index_str, pedited, spot.fatanchorSH, spotEdited.fatanchorSH); - assignFromKeyfile(keyFile, "Locallab", "GamSH_" + index_str, pedited, spot.gamSH, spotEdited.gamSH); - assignFromKeyfile(keyFile, "Locallab", "SloSH_" + index_str, pedited, spot.sloSH, spotEdited.sloSH); - assignFromKeyfile(keyFile, "Locallab", "Recothress_" + index_str, pedited, spot.recothress, spotEdited.recothress); - assignFromKeyfile(keyFile, "Locallab", "Lowthress_" + index_str, pedited, spot.lowthress, spotEdited.lowthress); - assignFromKeyfile(keyFile, "Locallab", "Higthress_" + index_str, pedited, spot.higthress, spotEdited.higthress); - assignFromKeyfile(keyFile, "Locallab", "Decays_" + index_str, pedited, spot.decays, spotEdited.decays); + assignFromKeyfile(keyFile, "Locallab", "Expshadhigh_" + index_str, spot.expshadhigh, spotEdited.expshadhigh); + assignFromKeyfile(keyFile, "Locallab", "highlights_" + index_str, spot.highlights, spotEdited.highlights); + assignFromKeyfile(keyFile, "Locallab", "h_tonalwidth_" + index_str, spot.h_tonalwidth, spotEdited.h_tonalwidth); + assignFromKeyfile(keyFile, "Locallab", "shadows_" + index_str, spot.shadows, spotEdited.shadows); + assignFromKeyfile(keyFile, "Locallab", "s_tonalwidth_" + index_str, spot.s_tonalwidth, spotEdited.s_tonalwidth); + assignFromKeyfile(keyFile, "Locallab", "sh_radius_" + index_str, spot.sh_radius, spotEdited.sh_radius); + assignFromKeyfile(keyFile, "Locallab", "sensihs_" + index_str, spot.sensihs, spotEdited.sensihs); + assignFromKeyfile(keyFile, "Locallab", "EnaSHMask_" + index_str, spot.enaSHMask, spotEdited.enaSHMask); + assignFromKeyfile(keyFile, "Locallab", "CCmaskSHCurve_" + index_str, spot.CCmaskSHcurve, spotEdited.CCmaskSHcurve); + assignFromKeyfile(keyFile, "Locallab", "LLmaskSHCurve_" + index_str, spot.LLmaskSHcurve, spotEdited.LLmaskSHcurve); + assignFromKeyfile(keyFile, "Locallab", "HHmaskSHCurve_" + index_str, spot.HHmaskSHcurve, spotEdited.HHmaskSHcurve); + assignFromKeyfile(keyFile, "Locallab", "BlendmaskSH_" + index_str, spot.blendmaskSH, spotEdited.blendmaskSH); + assignFromKeyfile(keyFile, "Locallab", "RadmaskSH_" + index_str, spot.radmaskSH, spotEdited.radmaskSH); + assignFromKeyfile(keyFile, "Locallab", "BlurSHde_" + index_str, spot.blurSHde, spotEdited.blurSHde); + assignFromKeyfile(keyFile, "Locallab", "StrSH_" + index_str, spot.strSH, spotEdited.strSH); + assignFromKeyfile(keyFile, "Locallab", "AngSH_" + index_str, spot.angSH, spotEdited.angSH); + assignFromKeyfile(keyFile, "Locallab", "Inverssh_" + index_str, spot.inverssh, spotEdited.inverssh); + assignFromKeyfile(keyFile, "Locallab", "ChromaskSH_" + index_str, spot.chromaskSH, spotEdited.chromaskSH); + assignFromKeyfile(keyFile, "Locallab", "GammaskSH_" + index_str, spot.gammaskSH, spotEdited.gammaskSH); + assignFromKeyfile(keyFile, "Locallab", "SlomaskSH_" + index_str, spot.slomaskSH, spotEdited.slomaskSH); + assignFromKeyfile(keyFile, "Locallab", "LapmaskSH_" + index_str, spot.lapmaskSH, spotEdited.lapmaskSH); + assignFromKeyfile(keyFile, "Locallab", "DetailSH_" + index_str, spot.detailSH, spotEdited.detailSH); + assignFromKeyfile(keyFile, "Locallab", "TePivot_" + index_str, spot.tePivot, spotEdited.tePivot); + assignFromKeyfile(keyFile, "Locallab", "Reparsh_" + index_str, spot.reparsh, spotEdited.reparsh); + assignFromKeyfile(keyFile, "Locallab", "LmaskSHCurve_" + index_str, spot.LmaskSHcurve, spotEdited.LmaskSHcurve); + assignFromKeyfile(keyFile, "Locallab", "FatamountSH_" + index_str, spot.fatamountSH, spotEdited.fatamountSH); + assignFromKeyfile(keyFile, "Locallab", "FatanchorSH_" + index_str, spot.fatanchorSH, spotEdited.fatanchorSH); + assignFromKeyfile(keyFile, "Locallab", "GamSH_" + index_str, spot.gamSH, spotEdited.gamSH); + assignFromKeyfile(keyFile, "Locallab", "SloSH_" + index_str, spot.sloSH, spotEdited.sloSH); + assignFromKeyfile(keyFile, "Locallab", "Recothress_" + index_str, spot.recothress, spotEdited.recothress); + assignFromKeyfile(keyFile, "Locallab", "Lowthress_" + index_str, spot.lowthress, spotEdited.lowthress); + assignFromKeyfile(keyFile, "Locallab", "Higthress_" + index_str, spot.higthress, spotEdited.higthress); + assignFromKeyfile(keyFile, "Locallab", "Decays_" + index_str, spot.decays, spotEdited.decays); // Vibrance - spot.visivibrance = assignFromKeyfile(keyFile, "Locallab", "Expvibrance_" + index_str, pedited, spot.expvibrance, spotEdited.expvibrance); + spot.visivibrance = assignFromKeyfile(keyFile, "Locallab", "Expvibrance_" + index_str, spot.expvibrance, spotEdited.expvibrance); if (spot.visivibrance) { spotEdited.visivibrance = true; } - assignFromKeyfile(keyFile, "Locallab", "Complexvibrance_" + index_str, pedited, spot.complexvibrance, spotEdited.complexvibrance); - assignFromKeyfile(keyFile, "Locallab", "Saturated_" + index_str, pedited, spot.saturated, spotEdited.saturated); - assignFromKeyfile(keyFile, "Locallab", "Pastels_" + index_str, pedited, spot.pastels, spotEdited.pastels); - assignFromKeyfile(keyFile, "Locallab", "Vibgam_" + index_str, pedited, spot.vibgam, spotEdited.vibgam); - assignFromKeyfile(keyFile, "Locallab", "Warm_" + index_str, pedited, spot.warm, spotEdited.warm); + assignFromKeyfile(keyFile, "Locallab", "Complexvibrance_" + index_str, spot.complexvibrance, spotEdited.complexvibrance); + assignFromKeyfile(keyFile, "Locallab", "Saturated_" + index_str, spot.saturated, spotEdited.saturated); + assignFromKeyfile(keyFile, "Locallab", "Pastels_" + index_str, spot.pastels, spotEdited.pastels); + assignFromKeyfile(keyFile, "Locallab", "Vibgam_" + index_str, spot.vibgam, spotEdited.vibgam); + assignFromKeyfile(keyFile, "Locallab", "Warm_" + index_str, spot.warm, spotEdited.warm); if (keyFile.has_key("Locallab", "PSThreshold_" + index_str)) { const std::vector thresh = keyFile.get_integer_list("Locallab", "PSThreshold_" + index_str); @@ -8863,123 +8963,123 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) spotEdited.psthreshold = true; } - assignFromKeyfile(keyFile, "Locallab", "ProtectSkins_" + index_str, pedited, spot.protectskins, spotEdited.protectskins); - assignFromKeyfile(keyFile, "Locallab", "AvoidColorShift_" + index_str, pedited, spot.avoidcolorshift, spotEdited.avoidcolorshift); - assignFromKeyfile(keyFile, "Locallab", "PastSatTog_" + index_str, pedited, spot.pastsattog, spotEdited.pastsattog); - assignFromKeyfile(keyFile, "Locallab", "Sensiv_" + index_str, pedited, spot.sensiv, spotEdited.sensiv); - assignFromKeyfile(keyFile, "Locallab", "SkinTonesCurve_" + index_str, pedited, spot.skintonescurve, spotEdited.skintonescurve); - assignFromKeyfile(keyFile, "Locallab", "CCmaskvibCurve_" + index_str, pedited, spot.CCmaskvibcurve, spotEdited.CCmaskvibcurve); - assignFromKeyfile(keyFile, "Locallab", "LLmaskvibCurve_" + index_str, pedited, spot.LLmaskvibcurve, spotEdited.LLmaskvibcurve); - assignFromKeyfile(keyFile, "Locallab", "HHmaskvibCurve_" + index_str, pedited, spot.HHmaskvibcurve, spotEdited.HHmaskvibcurve); - assignFromKeyfile(keyFile, "Locallab", "EnavibMask_" + index_str, pedited, spot.enavibMask, spotEdited.enavibMask); - assignFromKeyfile(keyFile, "Locallab", "Blendmaskvib_" + index_str, pedited, spot.blendmaskvib, spotEdited.blendmaskvib); - assignFromKeyfile(keyFile, "Locallab", "Radmaskvib_" + index_str, pedited, spot.radmaskvib, spotEdited.radmaskvib); - assignFromKeyfile(keyFile, "Locallab", "Chromaskvib_" + index_str, pedited, spot.chromaskvib, spotEdited.chromaskvib); - assignFromKeyfile(keyFile, "Locallab", "Gammaskvib_" + index_str, pedited, spot.gammaskvib, spotEdited.gammaskvib); - assignFromKeyfile(keyFile, "Locallab", "Slomaskvib_" + index_str, pedited, spot.slomaskvib, spotEdited.slomaskvib); - assignFromKeyfile(keyFile, "Locallab", "Lapmaskvib_" + index_str, pedited, spot.lapmaskvib, spotEdited.lapmaskvib); - assignFromKeyfile(keyFile, "Locallab", "Strvib_" + index_str, pedited, spot.strvib, spotEdited.strvib); - assignFromKeyfile(keyFile, "Locallab", "Strvibab_" + index_str, pedited, spot.strvibab, spotEdited.strvibab); - assignFromKeyfile(keyFile, "Locallab", "Strvibh_" + index_str, pedited, spot.strvibh, spotEdited.strvibh); - assignFromKeyfile(keyFile, "Locallab", "Angvib_" + index_str, pedited, spot.angvib, spotEdited.angvib); - assignFromKeyfile(keyFile, "Locallab", "LmaskvibCurve_" + index_str, pedited, spot.Lmaskvibcurve, spotEdited.Lmaskvibcurve); - assignFromKeyfile(keyFile, "Locallab", "Recothresv_" + index_str, pedited, spot.recothresv, spotEdited.recothresv); - assignFromKeyfile(keyFile, "Locallab", "Lowthresv_" + index_str, pedited, spot.lowthresv, spotEdited.lowthresv); - assignFromKeyfile(keyFile, "Locallab", "Higthresv_" + index_str, pedited, spot.higthresv, spotEdited.higthresv); - assignFromKeyfile(keyFile, "Locallab", "Decayv_" + index_str, pedited, spot.decayv, spotEdited.decayv); + assignFromKeyfile(keyFile, "Locallab", "ProtectSkins_" + index_str, spot.protectskins, spotEdited.protectskins); + assignFromKeyfile(keyFile, "Locallab", "AvoidColorShift_" + index_str, spot.avoidcolorshift, spotEdited.avoidcolorshift); + assignFromKeyfile(keyFile, "Locallab", "PastSatTog_" + index_str, spot.pastsattog, spotEdited.pastsattog); + assignFromKeyfile(keyFile, "Locallab", "Sensiv_" + index_str, spot.sensiv, spotEdited.sensiv); + assignFromKeyfile(keyFile, "Locallab", "SkinTonesCurve_" + index_str, spot.skintonescurve, spotEdited.skintonescurve); + assignFromKeyfile(keyFile, "Locallab", "CCmaskvibCurve_" + index_str, spot.CCmaskvibcurve, spotEdited.CCmaskvibcurve); + assignFromKeyfile(keyFile, "Locallab", "LLmaskvibCurve_" + index_str, spot.LLmaskvibcurve, spotEdited.LLmaskvibcurve); + assignFromKeyfile(keyFile, "Locallab", "HHmaskvibCurve_" + index_str, spot.HHmaskvibcurve, spotEdited.HHmaskvibcurve); + assignFromKeyfile(keyFile, "Locallab", "EnavibMask_" + index_str, spot.enavibMask, spotEdited.enavibMask); + assignFromKeyfile(keyFile, "Locallab", "Blendmaskvib_" + index_str, spot.blendmaskvib, spotEdited.blendmaskvib); + assignFromKeyfile(keyFile, "Locallab", "Radmaskvib_" + index_str, spot.radmaskvib, spotEdited.radmaskvib); + assignFromKeyfile(keyFile, "Locallab", "Chromaskvib_" + index_str, spot.chromaskvib, spotEdited.chromaskvib); + assignFromKeyfile(keyFile, "Locallab", "Gammaskvib_" + index_str, spot.gammaskvib, spotEdited.gammaskvib); + assignFromKeyfile(keyFile, "Locallab", "Slomaskvib_" + index_str, spot.slomaskvib, spotEdited.slomaskvib); + assignFromKeyfile(keyFile, "Locallab", "Lapmaskvib_" + index_str, spot.lapmaskvib, spotEdited.lapmaskvib); + assignFromKeyfile(keyFile, "Locallab", "Strvib_" + index_str, spot.strvib, spotEdited.strvib); + assignFromKeyfile(keyFile, "Locallab", "Strvibab_" + index_str, spot.strvibab, spotEdited.strvibab); + assignFromKeyfile(keyFile, "Locallab", "Strvibh_" + index_str, spot.strvibh, spotEdited.strvibh); + assignFromKeyfile(keyFile, "Locallab", "Angvib_" + index_str, spot.angvib, spotEdited.angvib); + assignFromKeyfile(keyFile, "Locallab", "LmaskvibCurve_" + index_str, spot.Lmaskvibcurve, spotEdited.Lmaskvibcurve); + assignFromKeyfile(keyFile, "Locallab", "Recothresv_" + index_str, spot.recothresv, spotEdited.recothresv); + assignFromKeyfile(keyFile, "Locallab", "Lowthresv_" + index_str, spot.lowthresv, spotEdited.lowthresv); + assignFromKeyfile(keyFile, "Locallab", "Higthresv_" + index_str, spot.higthresv, spotEdited.higthresv); + assignFromKeyfile(keyFile, "Locallab", "Decayv_" + index_str, spot.decayv, spotEdited.decayv); // Soft Light - spot.visisoft = assignFromKeyfile(keyFile, "Locallab", "Expsoft_" + index_str, pedited, spot.expsoft, spotEdited.expsoft); + spot.visisoft = assignFromKeyfile(keyFile, "Locallab", "Expsoft_" + index_str, spot.expsoft, spotEdited.expsoft); if (spot.visisoft) { spotEdited.visisoft = true; } - assignFromKeyfile(keyFile, "Locallab", "Complexsoft_" + index_str, pedited, spot.complexsoft, spotEdited.complexsoft); - assignFromKeyfile(keyFile, "Locallab", "Streng_" + index_str, pedited, spot.streng, spotEdited.streng); - assignFromKeyfile(keyFile, "Locallab", "Sensisf_" + index_str, pedited, spot.sensisf, spotEdited.sensisf); - assignFromKeyfile(keyFile, "Locallab", "Laplace_" + index_str, pedited, spot.laplace, spotEdited.laplace); - assignFromKeyfile(keyFile, "Locallab", "SoftMethod_" + index_str, pedited, spot.softMethod, spotEdited.softMethod); + assignFromKeyfile(keyFile, "Locallab", "Complexsoft_" + index_str, spot.complexsoft, spotEdited.complexsoft); + assignFromKeyfile(keyFile, "Locallab", "Streng_" + index_str, spot.streng, spotEdited.streng); + assignFromKeyfile(keyFile, "Locallab", "Sensisf_" + index_str, spot.sensisf, spotEdited.sensisf); + assignFromKeyfile(keyFile, "Locallab", "Laplace_" + index_str, spot.laplace, spotEdited.laplace); + assignFromKeyfile(keyFile, "Locallab", "SoftMethod_" + index_str, spot.softMethod, spotEdited.softMethod); // Blur & Noise - spot.visiblur = assignFromKeyfile(keyFile, "Locallab", "Expblur_" + index_str, pedited, spot.expblur, spotEdited.expblur); + spot.visiblur = assignFromKeyfile(keyFile, "Locallab", "Expblur_" + index_str, spot.expblur, spotEdited.expblur); if (spot.visiblur) { spotEdited.visiblur = true; } - assignFromKeyfile(keyFile, "Locallab", "Complexblur_" + index_str, pedited, spot.complexblur, spotEdited.complexblur); - assignFromKeyfile(keyFile, "Locallab", "Radius_" + index_str, pedited, spot.radius, spotEdited.radius); - assignFromKeyfile(keyFile, "Locallab", "Strength_" + index_str, pedited, spot.strength, spotEdited.strength); - assignFromKeyfile(keyFile, "Locallab", "Sensibn_" + index_str, pedited, spot.sensibn, spotEdited.sensibn); - assignFromKeyfile(keyFile, "Locallab", "Iteramed_" + index_str, pedited, spot.itera, spotEdited.itera); - assignFromKeyfile(keyFile, "Locallab", "Guidbl_" + index_str, pedited, spot.guidbl, spotEdited.guidbl); - assignFromKeyfile(keyFile, "Locallab", "Strbl_" + index_str, pedited, spot.strbl, spotEdited.strbl); - assignFromKeyfile(keyFile, "Locallab", "Recothres_" + index_str, pedited, spot.recothres, spotEdited.recothres); - assignFromKeyfile(keyFile, "Locallab", "Lowthres_" + index_str, pedited, spot.lowthres, spotEdited.lowthres); - assignFromKeyfile(keyFile, "Locallab", "Higthres_" + index_str, pedited, spot.higthres, spotEdited.higthres); - assignFromKeyfile(keyFile, "Locallab", "Recothresd_" + index_str, pedited, spot.recothresd, spotEdited.recothresd); - assignFromKeyfile(keyFile, "Locallab", "Lowthresd_" + index_str, pedited, spot.lowthresd, spotEdited.lowthresd); - assignFromKeyfile(keyFile, "Locallab", "Midthresd_" + index_str, pedited, spot.midthresd, spotEdited.midthresd); - assignFromKeyfile(keyFile, "Locallab", "Midthresdch_" + index_str, pedited, spot.midthresdch, spotEdited.midthresdch); - assignFromKeyfile(keyFile, "Locallab", "Higthresd_" + index_str, pedited, spot.higthresd, spotEdited.higthresd); - assignFromKeyfile(keyFile, "Locallab", "Decayd_" + index_str, pedited, spot.decayd, spotEdited.decayd); - assignFromKeyfile(keyFile, "Locallab", "Isogr_" + index_str, pedited, spot.isogr, spotEdited.isogr); - assignFromKeyfile(keyFile, "Locallab", "Strengr_" + index_str, pedited, spot.strengr, spotEdited.strengr); - assignFromKeyfile(keyFile, "Locallab", "Scalegr_" + index_str, pedited, spot.scalegr, spotEdited.scalegr); - assignFromKeyfile(keyFile, "Locallab", "Divgr_" + index_str, pedited, spot.divgr, spotEdited.divgr); - assignFromKeyfile(keyFile, "Locallab", "Epsbl_" + index_str, pedited, spot.epsbl, spotEdited.epsbl); - assignFromKeyfile(keyFile, "Locallab", "BlMethod_" + index_str, pedited, spot.blMethod, spotEdited.blMethod); - assignFromKeyfile(keyFile, "Locallab", "ChroMethod_" + index_str, pedited, spot.chroMethod, spotEdited.chroMethod); - assignFromKeyfile(keyFile, "Locallab", "QuaMethod_" + index_str, pedited, spot.quamethod, spotEdited.quamethod); - assignFromKeyfile(keyFile, "Locallab", "BlurMethod_" + index_str, pedited, spot.blurMethod, spotEdited.blurMethod); - assignFromKeyfile(keyFile, "Locallab", "Usemaskb_" + index_str, pedited, spot.usemask, spotEdited.usemask); - assignFromKeyfile(keyFile, "Locallab", "Invmaskd_" + index_str, pedited, spot.invmaskd, spotEdited.invmaskd); - assignFromKeyfile(keyFile, "Locallab", "Invmask_" + index_str, pedited, spot.invmask, spotEdited.invmask); - assignFromKeyfile(keyFile, "Locallab", "Levelthr_" + index_str, pedited, spot.levelthr, spotEdited.levelthr); - assignFromKeyfile(keyFile, "Locallab", "Lnoiselow_" + index_str, pedited, spot.lnoiselow, spotEdited.lnoiselow); - assignFromKeyfile(keyFile, "Locallab", "Levelthrlow_" + index_str, pedited, spot.levelthrlow, spotEdited.levelthrlow); - assignFromKeyfile(keyFile, "Locallab", "MedMethod_" + index_str, pedited, spot.medMethod, spotEdited.medMethod); - assignFromKeyfile(keyFile, "Locallab", "activlum_" + index_str, pedited, spot.activlum, spotEdited.activlum); - assignFromKeyfile(keyFile, "Locallab", "noiselumf_" + index_str, pedited, spot.noiselumf, spotEdited.noiselumf); - assignFromKeyfile(keyFile, "Locallab", "noiselumf0_" + index_str, pedited, spot.noiselumf0, spotEdited.noiselumf0); - assignFromKeyfile(keyFile, "Locallab", "noiselumf2_" + index_str, pedited, spot.noiselumf2, spotEdited.noiselumf2); - assignFromKeyfile(keyFile, "Locallab", "noiselumc_" + index_str, pedited, spot.noiselumc, spotEdited.noiselumc); - assignFromKeyfile(keyFile, "Locallab", "noiselumdetail_" + index_str, pedited, spot.noiselumdetail, spotEdited.noiselumdetail); - assignFromKeyfile(keyFile, "Locallab", "noiselequal_" + index_str, pedited, spot.noiselequal, spotEdited.noiselequal); - assignFromKeyfile(keyFile, "Locallab", "noisegam_" + index_str, pedited, spot.noisegam, spotEdited.noisegam); - assignFromKeyfile(keyFile, "Locallab", "noisechrof_" + index_str, pedited, spot.noisechrof, spotEdited.noisechrof); - assignFromKeyfile(keyFile, "Locallab", "noisechroc_" + index_str, pedited, spot.noisechroc, spotEdited.noisechroc); - assignFromKeyfile(keyFile, "Locallab", "noisechrodetail_" + index_str, pedited, spot.noisechrodetail, spotEdited.noisechrodetail); - assignFromKeyfile(keyFile, "Locallab", "Adjblur_" + index_str, pedited, spot.adjblur, spotEdited.adjblur); - assignFromKeyfile(keyFile, "Locallab", "Bilateral_" + index_str, pedited, spot.bilateral, spotEdited.bilateral); - assignFromKeyfile(keyFile, "Locallab", "Nlstr_" + index_str, pedited, spot.nlstr, spotEdited.nlstr); - assignFromKeyfile(keyFile, "Locallab", "Nldet_" + index_str, pedited, spot.nldet, spotEdited.nldet); - assignFromKeyfile(keyFile, "Locallab", "Nlpat_" + index_str, pedited, spot.nlpat, spotEdited.nlpat); - assignFromKeyfile(keyFile, "Locallab", "Nlrad_" + index_str, pedited, spot.nlrad, spotEdited.nlrad); - assignFromKeyfile(keyFile, "Locallab", "Nlgam_" + index_str, pedited, spot.nlgam, spotEdited.nlgam); - assignFromKeyfile(keyFile, "Locallab", "Sensiden_" + index_str, pedited, spot.sensiden, spotEdited.sensiden); - assignFromKeyfile(keyFile, "Locallab", "Reparden_" + index_str, pedited, spot.reparden, spotEdited.reparden); - assignFromKeyfile(keyFile, "Locallab", "Detailthr_" + index_str, pedited, spot.detailthr, spotEdited.detailthr); - assignFromKeyfile(keyFile, "Locallab", "LocwavCurveden_" + index_str, pedited, spot.locwavcurveden, spotEdited.locwavcurveden); - assignFromKeyfile(keyFile, "Locallab", "LocwavCurvehue_" + index_str, pedited, spot.locwavcurvehue, spotEdited.locwavcurvehue); - assignFromKeyfile(keyFile, "Locallab", "Showmasktyp_" + index_str, pedited, spot.showmaskblMethodtyp, spotEdited.showmaskblMethodtyp); - assignFromKeyfile(keyFile, "Locallab", "CCmaskblCurve_" + index_str, pedited, spot.CCmaskblcurve, spotEdited.CCmaskblcurve); - assignFromKeyfile(keyFile, "Locallab", "LLmaskblCurve_" + index_str, pedited, spot.LLmaskblcurve, spotEdited.LLmaskblcurve); - assignFromKeyfile(keyFile, "Locallab", "HHmaskblCurve_" + index_str, pedited, spot.HHmaskblcurve, spotEdited.HHmaskblcurve); - assignFromKeyfile(keyFile, "Locallab", "EnablMask_" + index_str, pedited, spot.enablMask, spotEdited.enablMask); - assignFromKeyfile(keyFile, "Locallab", "Fftwbl_" + index_str, pedited, spot.fftwbl, spotEdited.fftwbl); - assignFromKeyfile(keyFile, "Locallab", "Invbl_" + index_str, pedited, spot.invbl, spotEdited.invbl); - assignFromKeyfile(keyFile, "Locallab", "Toolbl_" + index_str, pedited, spot.toolbl, spotEdited.toolbl); - assignFromKeyfile(keyFile, "Locallab", "Blendmaskbl_" + index_str, pedited, spot.blendmaskbl, spotEdited.blendmaskbl); - assignFromKeyfile(keyFile, "Locallab", "Radmaskbl_" + index_str, pedited, spot.radmaskbl, spotEdited.radmaskbl); - assignFromKeyfile(keyFile, "Locallab", "Chromaskbl_" + index_str, pedited, spot.chromaskbl, spotEdited.chromaskbl); - assignFromKeyfile(keyFile, "Locallab", "Gammaskbl_" + index_str, pedited, spot.gammaskbl, spotEdited.gammaskbl); - assignFromKeyfile(keyFile, "Locallab", "Slomaskbl_" + index_str, pedited, spot.slomaskbl, spotEdited.slomaskbl); - assignFromKeyfile(keyFile, "Locallab", "Lapmaskbl_" + index_str, pedited, spot.lapmaskbl, spotEdited.lapmaskbl); - assignFromKeyfile(keyFile, "Locallab", "shadmaskbl_" + index_str, pedited, spot.shadmaskbl, spotEdited.shadmaskbl); - assignFromKeyfile(keyFile, "Locallab", "shadmaskblsha_" + index_str, pedited, spot.shadmaskblsha, spotEdited.shadmaskblsha); - assignFromKeyfile(keyFile, "Locallab", "strumaskbl_" + index_str, pedited, spot.strumaskbl, spotEdited.strumaskbl); - assignFromKeyfile(keyFile, "Locallab", "LmaskblCurve_" + index_str, pedited, spot.Lmaskblcurve, spotEdited.Lmaskblcurve); - assignFromKeyfile(keyFile, "Locallab", "LLmaskblCurvewav_" + index_str, pedited, spot.LLmaskblcurvewav, spotEdited.LLmaskblcurvewav); + assignFromKeyfile(keyFile, "Locallab", "Complexblur_" + index_str, spot.complexblur, spotEdited.complexblur); + assignFromKeyfile(keyFile, "Locallab", "Radius_" + index_str, spot.radius, spotEdited.radius); + assignFromKeyfile(keyFile, "Locallab", "Strength_" + index_str, spot.strength, spotEdited.strength); + assignFromKeyfile(keyFile, "Locallab", "Sensibn_" + index_str, spot.sensibn, spotEdited.sensibn); + assignFromKeyfile(keyFile, "Locallab", "Iteramed_" + index_str, spot.itera, spotEdited.itera); + assignFromKeyfile(keyFile, "Locallab", "Guidbl_" + index_str, spot.guidbl, spotEdited.guidbl); + assignFromKeyfile(keyFile, "Locallab", "Strbl_" + index_str, spot.strbl, spotEdited.strbl); + assignFromKeyfile(keyFile, "Locallab", "Recothres_" + index_str, spot.recothres, spotEdited.recothres); + assignFromKeyfile(keyFile, "Locallab", "Lowthres_" + index_str, spot.lowthres, spotEdited.lowthres); + assignFromKeyfile(keyFile, "Locallab", "Higthres_" + index_str, spot.higthres, spotEdited.higthres); + assignFromKeyfile(keyFile, "Locallab", "Recothresd_" + index_str, spot.recothresd, spotEdited.recothresd); + assignFromKeyfile(keyFile, "Locallab", "Lowthresd_" + index_str, spot.lowthresd, spotEdited.lowthresd); + assignFromKeyfile(keyFile, "Locallab", "Midthresd_" + index_str, spot.midthresd, spotEdited.midthresd); + assignFromKeyfile(keyFile, "Locallab", "Midthresdch_" + index_str, spot.midthresdch, spotEdited.midthresdch); + assignFromKeyfile(keyFile, "Locallab", "Higthresd_" + index_str, spot.higthresd, spotEdited.higthresd); + assignFromKeyfile(keyFile, "Locallab", "Decayd_" + index_str, spot.decayd, spotEdited.decayd); + assignFromKeyfile(keyFile, "Locallab", "Isogr_" + index_str, spot.isogr, spotEdited.isogr); + assignFromKeyfile(keyFile, "Locallab", "Strengr_" + index_str, spot.strengr, spotEdited.strengr); + assignFromKeyfile(keyFile, "Locallab", "Scalegr_" + index_str, spot.scalegr, spotEdited.scalegr); + assignFromKeyfile(keyFile, "Locallab", "Divgr_" + index_str, spot.divgr, spotEdited.divgr); + assignFromKeyfile(keyFile, "Locallab", "Epsbl_" + index_str, spot.epsbl, spotEdited.epsbl); + assignFromKeyfile(keyFile, "Locallab", "BlMethod_" + index_str, spot.blMethod, spotEdited.blMethod); + assignFromKeyfile(keyFile, "Locallab", "ChroMethod_" + index_str, spot.chroMethod, spotEdited.chroMethod); + assignFromKeyfile(keyFile, "Locallab", "QuaMethod_" + index_str, spot.quamethod, spotEdited.quamethod); + assignFromKeyfile(keyFile, "Locallab", "BlurMethod_" + index_str, spot.blurMethod, spotEdited.blurMethod); + assignFromKeyfile(keyFile, "Locallab", "Usemaskb_" + index_str, spot.usemask, spotEdited.usemask); + assignFromKeyfile(keyFile, "Locallab", "Invmaskd_" + index_str, spot.invmaskd, spotEdited.invmaskd); + assignFromKeyfile(keyFile, "Locallab", "Invmask_" + index_str, spot.invmask, spotEdited.invmask); + assignFromKeyfile(keyFile, "Locallab", "Levelthr_" + index_str, spot.levelthr, spotEdited.levelthr); + assignFromKeyfile(keyFile, "Locallab", "Lnoiselow_" + index_str, spot.lnoiselow, spotEdited.lnoiselow); + assignFromKeyfile(keyFile, "Locallab", "Levelthrlow_" + index_str, spot.levelthrlow, spotEdited.levelthrlow); + assignFromKeyfile(keyFile, "Locallab", "MedMethod_" + index_str, spot.medMethod, spotEdited.medMethod); + assignFromKeyfile(keyFile, "Locallab", "activlum_" + index_str, spot.activlum, spotEdited.activlum); + assignFromKeyfile(keyFile, "Locallab", "noiselumf_" + index_str, spot.noiselumf, spotEdited.noiselumf); + assignFromKeyfile(keyFile, "Locallab", "noiselumf0_" + index_str, spot.noiselumf0, spotEdited.noiselumf0); + assignFromKeyfile(keyFile, "Locallab", "noiselumf2_" + index_str, spot.noiselumf2, spotEdited.noiselumf2); + assignFromKeyfile(keyFile, "Locallab", "noiselumc_" + index_str, spot.noiselumc, spotEdited.noiselumc); + assignFromKeyfile(keyFile, "Locallab", "noiselumdetail_" + index_str, spot.noiselumdetail, spotEdited.noiselumdetail); + assignFromKeyfile(keyFile, "Locallab", "noiselequal_" + index_str, spot.noiselequal, spotEdited.noiselequal); + assignFromKeyfile(keyFile, "Locallab", "noisegam_" + index_str, spot.noisegam, spotEdited.noisegam); + assignFromKeyfile(keyFile, "Locallab", "noisechrof_" + index_str, spot.noisechrof, spotEdited.noisechrof); + assignFromKeyfile(keyFile, "Locallab", "noisechroc_" + index_str, spot.noisechroc, spotEdited.noisechroc); + assignFromKeyfile(keyFile, "Locallab", "noisechrodetail_" + index_str, spot.noisechrodetail, spotEdited.noisechrodetail); + assignFromKeyfile(keyFile, "Locallab", "Adjblur_" + index_str, spot.adjblur, spotEdited.adjblur); + assignFromKeyfile(keyFile, "Locallab", "Bilateral_" + index_str, spot.bilateral, spotEdited.bilateral); + assignFromKeyfile(keyFile, "Locallab", "Nlstr_" + index_str, spot.nlstr, spotEdited.nlstr); + assignFromKeyfile(keyFile, "Locallab", "Nldet_" + index_str, spot.nldet, spotEdited.nldet); + assignFromKeyfile(keyFile, "Locallab", "Nlpat_" + index_str, spot.nlpat, spotEdited.nlpat); + assignFromKeyfile(keyFile, "Locallab", "Nlrad_" + index_str, spot.nlrad, spotEdited.nlrad); + assignFromKeyfile(keyFile, "Locallab", "Nlgam_" + index_str, spot.nlgam, spotEdited.nlgam); + assignFromKeyfile(keyFile, "Locallab", "Sensiden_" + index_str, spot.sensiden, spotEdited.sensiden); + assignFromKeyfile(keyFile, "Locallab", "Reparden_" + index_str, spot.reparden, spotEdited.reparden); + assignFromKeyfile(keyFile, "Locallab", "Detailthr_" + index_str, spot.detailthr, spotEdited.detailthr); + assignFromKeyfile(keyFile, "Locallab", "LocwavCurveden_" + index_str, spot.locwavcurveden, spotEdited.locwavcurveden); + assignFromKeyfile(keyFile, "Locallab", "LocwavCurvehue_" + index_str, spot.locwavcurvehue, spotEdited.locwavcurvehue); + assignFromKeyfile(keyFile, "Locallab", "Showmasktyp_" + index_str, spot.showmaskblMethodtyp, spotEdited.showmaskblMethodtyp); + assignFromKeyfile(keyFile, "Locallab", "CCmaskblCurve_" + index_str, spot.CCmaskblcurve, spotEdited.CCmaskblcurve); + assignFromKeyfile(keyFile, "Locallab", "LLmaskblCurve_" + index_str, spot.LLmaskblcurve, spotEdited.LLmaskblcurve); + assignFromKeyfile(keyFile, "Locallab", "HHmaskblCurve_" + index_str, spot.HHmaskblcurve, spotEdited.HHmaskblcurve); + assignFromKeyfile(keyFile, "Locallab", "EnablMask_" + index_str, spot.enablMask, spotEdited.enablMask); + assignFromKeyfile(keyFile, "Locallab", "Fftwbl_" + index_str, spot.fftwbl, spotEdited.fftwbl); + assignFromKeyfile(keyFile, "Locallab", "Invbl_" + index_str, spot.invbl, spotEdited.invbl); + assignFromKeyfile(keyFile, "Locallab", "Toolbl_" + index_str, spot.toolbl, spotEdited.toolbl); + assignFromKeyfile(keyFile, "Locallab", "Blendmaskbl_" + index_str, spot.blendmaskbl, spotEdited.blendmaskbl); + assignFromKeyfile(keyFile, "Locallab", "Radmaskbl_" + index_str, spot.radmaskbl, spotEdited.radmaskbl); + assignFromKeyfile(keyFile, "Locallab", "Chromaskbl_" + index_str, spot.chromaskbl, spotEdited.chromaskbl); + assignFromKeyfile(keyFile, "Locallab", "Gammaskbl_" + index_str, spot.gammaskbl, spotEdited.gammaskbl); + assignFromKeyfile(keyFile, "Locallab", "Slomaskbl_" + index_str, spot.slomaskbl, spotEdited.slomaskbl); + assignFromKeyfile(keyFile, "Locallab", "Lapmaskbl_" + index_str, spot.lapmaskbl, spotEdited.lapmaskbl); + assignFromKeyfile(keyFile, "Locallab", "shadmaskbl_" + index_str, spot.shadmaskbl, spotEdited.shadmaskbl); + assignFromKeyfile(keyFile, "Locallab", "shadmaskblsha_" + index_str, spot.shadmaskblsha, spotEdited.shadmaskblsha); + assignFromKeyfile(keyFile, "Locallab", "strumaskbl_" + index_str, spot.strumaskbl, spotEdited.strumaskbl); + assignFromKeyfile(keyFile, "Locallab", "LmaskblCurve_" + index_str, spot.Lmaskblcurve, spotEdited.Lmaskblcurve); + assignFromKeyfile(keyFile, "Locallab", "LLmaskblCurvewav_" + index_str, spot.LLmaskblcurvewav, spotEdited.LLmaskblcurvewav); if (keyFile.has_key("Locallab", "CSThresholdblur_" + index_str)) { const std::vector thresh = keyFile.get_integer_list("Locallab", "CSThresholdblur_" + index_str); @@ -8991,175 +9091,175 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) spotEdited.csthresholdblur = true; } // Tone Mapping - spot.visitonemap = assignFromKeyfile(keyFile, "Locallab", "Exptonemap_" + index_str, pedited, spot.exptonemap, spotEdited.exptonemap); + spot.visitonemap = assignFromKeyfile(keyFile, "Locallab", "Exptonemap_" + index_str, spot.exptonemap, spotEdited.exptonemap); if (spot.visitonemap) { spotEdited.visitonemap = true; } - assignFromKeyfile(keyFile, "Locallab", "Complextonemap_" + index_str, pedited, spot.complextonemap, spotEdited.complextonemap); - assignFromKeyfile(keyFile, "Locallab", "Stren_" + index_str, pedited, spot.stren, spotEdited.stren); - assignFromKeyfile(keyFile, "Locallab", "Gamma_" + index_str, pedited, spot.gamma, spotEdited.gamma); - assignFromKeyfile(keyFile, "Locallab", "Estop_" + index_str, pedited, spot.estop, spotEdited.estop); - assignFromKeyfile(keyFile, "Locallab", "Scaltm_" + index_str, pedited, spot.scaltm, spotEdited.scaltm); - assignFromKeyfile(keyFile, "Locallab", "Repartm_" + index_str, pedited, spot.repartm, spotEdited.repartm); - assignFromKeyfile(keyFile, "Locallab", "Rewei_" + index_str, pedited, spot.rewei, spotEdited.rewei); - assignFromKeyfile(keyFile, "Locallab", "Satur_" + index_str, pedited, spot.satur, spotEdited.satur); - assignFromKeyfile(keyFile, "Locallab", "Sensitm_" + index_str, pedited, spot.sensitm, spotEdited.sensitm); - assignFromKeyfile(keyFile, "Locallab", "Softradiustm_" + index_str, pedited, spot.softradiustm, spotEdited.softradiustm); - assignFromKeyfile(keyFile, "Locallab", "Amount_" + index_str, pedited, spot.amount, spotEdited.amount); - assignFromKeyfile(keyFile, "Locallab", "Equiltm_" + index_str, pedited, spot.equiltm, spotEdited.equiltm); - assignFromKeyfile(keyFile, "Locallab", "CCmasktmCurve_" + index_str, pedited, spot.CCmasktmcurve, spotEdited.CCmasktmcurve); - assignFromKeyfile(keyFile, "Locallab", "LLmasktmCurve_" + index_str, pedited, spot.LLmasktmcurve, spotEdited.LLmasktmcurve); - assignFromKeyfile(keyFile, "Locallab", "HHmasktmCurve_" + index_str, pedited, spot.HHmasktmcurve, spotEdited.HHmasktmcurve); - assignFromKeyfile(keyFile, "Locallab", "EnatmMask_" + index_str, pedited, spot.enatmMask, spotEdited.enatmMask); - assignFromKeyfile(keyFile, "Locallab", "EnatmMaskaft_" + index_str, pedited, spot.enatmMaskaft, spotEdited.enatmMaskaft); - assignFromKeyfile(keyFile, "Locallab", "Blendmasktm_" + index_str, pedited, spot.blendmasktm, spotEdited.blendmasktm); - assignFromKeyfile(keyFile, "Locallab", "Radmasktm_" + index_str, pedited, spot.radmasktm, spotEdited.radmasktm); - assignFromKeyfile(keyFile, "Locallab", "Chromasktm_" + index_str, pedited, spot.chromasktm, spotEdited.chromasktm); - assignFromKeyfile(keyFile, "Locallab", "Gammasktm_" + index_str, pedited, spot.gammasktm, spotEdited.gammasktm); - assignFromKeyfile(keyFile, "Locallab", "Slomasktm_" + index_str, pedited, spot.slomasktm, spotEdited.slomasktm); - assignFromKeyfile(keyFile, "Locallab", "Lapmasktm_" + index_str, pedited, spot.lapmasktm, spotEdited.lapmasktm); - assignFromKeyfile(keyFile, "Locallab", "LmasktmCurve_" + index_str, pedited, spot.Lmasktmcurve, spotEdited.Lmasktmcurve); - assignFromKeyfile(keyFile, "Locallab", "Recothrest_" + index_str, pedited, spot.recothrest, spotEdited.recothrest); - assignFromKeyfile(keyFile, "Locallab", "Lowthrest_" + index_str, pedited, spot.lowthrest, spotEdited.lowthrest); - assignFromKeyfile(keyFile, "Locallab", "Higthrest_" + index_str, pedited, spot.higthrest, spotEdited.higthrest); - assignFromKeyfile(keyFile, "Locallab", "Decayt_" + index_str, pedited, spot.decayt, spotEdited.decayt); + assignFromKeyfile(keyFile, "Locallab", "Complextonemap_" + index_str, spot.complextonemap, spotEdited.complextonemap); + assignFromKeyfile(keyFile, "Locallab", "Stren_" + index_str, spot.stren, spotEdited.stren); + assignFromKeyfile(keyFile, "Locallab", "Gamma_" + index_str, spot.gamma, spotEdited.gamma); + assignFromKeyfile(keyFile, "Locallab", "Estop_" + index_str, spot.estop, spotEdited.estop); + assignFromKeyfile(keyFile, "Locallab", "Scaltm_" + index_str, spot.scaltm, spotEdited.scaltm); + assignFromKeyfile(keyFile, "Locallab", "Repartm_" + index_str, spot.repartm, spotEdited.repartm); + assignFromKeyfile(keyFile, "Locallab", "Rewei_" + index_str, spot.rewei, spotEdited.rewei); + assignFromKeyfile(keyFile, "Locallab", "Satur_" + index_str, spot.satur, spotEdited.satur); + assignFromKeyfile(keyFile, "Locallab", "Sensitm_" + index_str, spot.sensitm, spotEdited.sensitm); + assignFromKeyfile(keyFile, "Locallab", "Softradiustm_" + index_str, spot.softradiustm, spotEdited.softradiustm); + assignFromKeyfile(keyFile, "Locallab", "Amount_" + index_str, spot.amount, spotEdited.amount); + assignFromKeyfile(keyFile, "Locallab", "Equiltm_" + index_str, spot.equiltm, spotEdited.equiltm); + assignFromKeyfile(keyFile, "Locallab", "CCmasktmCurve_" + index_str, spot.CCmasktmcurve, spotEdited.CCmasktmcurve); + assignFromKeyfile(keyFile, "Locallab", "LLmasktmCurve_" + index_str, spot.LLmasktmcurve, spotEdited.LLmasktmcurve); + assignFromKeyfile(keyFile, "Locallab", "HHmasktmCurve_" + index_str, spot.HHmasktmcurve, spotEdited.HHmasktmcurve); + assignFromKeyfile(keyFile, "Locallab", "EnatmMask_" + index_str, spot.enatmMask, spotEdited.enatmMask); + assignFromKeyfile(keyFile, "Locallab", "EnatmMaskaft_" + index_str, spot.enatmMaskaft, spotEdited.enatmMaskaft); + assignFromKeyfile(keyFile, "Locallab", "Blendmasktm_" + index_str, spot.blendmasktm, spotEdited.blendmasktm); + assignFromKeyfile(keyFile, "Locallab", "Radmasktm_" + index_str, spot.radmasktm, spotEdited.radmasktm); + assignFromKeyfile(keyFile, "Locallab", "Chromasktm_" + index_str, spot.chromasktm, spotEdited.chromasktm); + assignFromKeyfile(keyFile, "Locallab", "Gammasktm_" + index_str, spot.gammasktm, spotEdited.gammasktm); + assignFromKeyfile(keyFile, "Locallab", "Slomasktm_" + index_str, spot.slomasktm, spotEdited.slomasktm); + assignFromKeyfile(keyFile, "Locallab", "Lapmasktm_" + index_str, spot.lapmasktm, spotEdited.lapmasktm); + assignFromKeyfile(keyFile, "Locallab", "LmasktmCurve_" + index_str, spot.Lmasktmcurve, spotEdited.Lmasktmcurve); + assignFromKeyfile(keyFile, "Locallab", "Recothrest_" + index_str, spot.recothrest, spotEdited.recothrest); + assignFromKeyfile(keyFile, "Locallab", "Lowthrest_" + index_str, spot.lowthrest, spotEdited.lowthrest); + assignFromKeyfile(keyFile, "Locallab", "Higthrest_" + index_str, spot.higthrest, spotEdited.higthrest); + assignFromKeyfile(keyFile, "Locallab", "Decayt_" + index_str, spot.decayt, spotEdited.decayt); // Retinex - spot.visireti = assignFromKeyfile(keyFile, "Locallab", "Expreti_" + index_str, pedited, spot.expreti, spotEdited.expreti); + spot.visireti = assignFromKeyfile(keyFile, "Locallab", "Expreti_" + index_str, spot.expreti, spotEdited.expreti); if (spot.visireti) { spotEdited.visireti = true; } - assignFromKeyfile(keyFile, "Locallab", "Complexreti_" + index_str, pedited, spot.complexreti, spotEdited.complexreti); - assignFromKeyfile(keyFile, "Locallab", "retinexMethod_" + index_str, pedited, spot.retinexMethod, spotEdited.retinexMethod); - assignFromKeyfile(keyFile, "Locallab", "Str_" + index_str, pedited, spot.str, spotEdited.str); - assignFromKeyfile(keyFile, "Locallab", "Chrrt_" + index_str, pedited, spot.chrrt, spotEdited.chrrt); - assignFromKeyfile(keyFile, "Locallab", "Neigh_" + index_str, pedited, spot.neigh, spotEdited.neigh); - assignFromKeyfile(keyFile, "Locallab", "Vart_" + index_str, pedited, spot.vart, spotEdited.vart); - assignFromKeyfile(keyFile, "Locallab", "Offs_" + index_str, pedited, spot.offs, spotEdited.offs); - assignFromKeyfile(keyFile, "Locallab", "Dehaz_" + index_str, pedited, spot.dehaz, spotEdited.dehaz); - assignFromKeyfile(keyFile, "Locallab", "Depth_" + index_str, pedited, spot.depth, spotEdited.depth); - assignFromKeyfile(keyFile, "Locallab", "Sensih_" + index_str, pedited, spot.sensih, spotEdited.sensih); - assignFromKeyfile(keyFile, "Locallab", "TgainCurve_" + index_str, pedited, spot.localTgaincurve, spotEdited.localTgaincurve); - assignFromKeyfile(keyFile, "Locallab", "TtransCurve_" + index_str, pedited, spot.localTtranscurve, spotEdited.localTtranscurve); - assignFromKeyfile(keyFile, "Locallab", "Inversret_" + index_str, pedited, spot.inversret, spotEdited.inversret); - assignFromKeyfile(keyFile, "Locallab", "Equilret_" + index_str, pedited, spot.equilret, spotEdited.equilret); - assignFromKeyfile(keyFile, "Locallab", "Loglin_" + index_str, pedited, spot.loglin, spotEdited.loglin); - assignFromKeyfile(keyFile, "Locallab", "dehazeSaturation" + index_str, pedited, spot.dehazeSaturation, spotEdited.dehazeSaturation); - assignFromKeyfile(keyFile, "Locallab", "Softradiusret_" + index_str, pedited, spot.softradiusret, spotEdited.softradiusret); - assignFromKeyfile(keyFile, "Locallab", "CCmaskretiCurve_" + index_str, pedited, spot.CCmaskreticurve, spotEdited.CCmaskreticurve); - assignFromKeyfile(keyFile, "Locallab", "LLmaskretiCurve_" + index_str, pedited, spot.LLmaskreticurve, spotEdited.LLmaskreticurve); - assignFromKeyfile(keyFile, "Locallab", "HHmaskretiCurve_" + index_str, pedited, spot.HHmaskreticurve, spotEdited.HHmaskreticurve); - assignFromKeyfile(keyFile, "Locallab", "EnaretiMask_" + index_str, pedited, spot.enaretiMask, spotEdited.enaretiMask); - assignFromKeyfile(keyFile, "Locallab", "EnaretiMasktmap_" + index_str, pedited, spot.enaretiMasktmap, spotEdited.enaretiMasktmap); - assignFromKeyfile(keyFile, "Locallab", "Blendmaskreti_" + index_str, pedited, spot.blendmaskreti, spotEdited.blendmaskreti); - assignFromKeyfile(keyFile, "Locallab", "Radmaskreti_" + index_str, pedited, spot.radmaskreti, spotEdited.radmaskreti); - assignFromKeyfile(keyFile, "Locallab", "Chromaskreti_" + index_str, pedited, spot.chromaskreti, spotEdited.chromaskreti); - assignFromKeyfile(keyFile, "Locallab", "Gammaskreti_" + index_str, pedited, spot.gammaskreti, spotEdited.gammaskreti); - assignFromKeyfile(keyFile, "Locallab", "Slomaskreti_" + index_str, pedited, spot.slomaskreti, spotEdited.slomaskreti); - assignFromKeyfile(keyFile, "Locallab", "Lapmaskreti_" + index_str, pedited, spot.lapmaskreti, spotEdited.lapmaskreti); - assignFromKeyfile(keyFile, "Locallab", "Scalereti_" + index_str, pedited, spot.scalereti, spotEdited.scalereti); - assignFromKeyfile(keyFile, "Locallab", "Darkness_" + index_str, pedited, spot.darkness, spotEdited.darkness); - assignFromKeyfile(keyFile, "Locallab", "Lightnessreti_" + index_str, pedited, spot.lightnessreti, spotEdited.lightnessreti); - assignFromKeyfile(keyFile, "Locallab", "Limd_" + index_str, pedited, spot.limd, spotEdited.limd); - assignFromKeyfile(keyFile, "Locallab", "Cliptm_" + index_str, pedited, spot.cliptm, spotEdited.cliptm); - assignFromKeyfile(keyFile, "Locallab", "Fftwreti_" + index_str, pedited, spot.fftwreti, spotEdited.fftwreti); - assignFromKeyfile(keyFile, "Locallab", "LmaskretiCurve_" + index_str, pedited, spot.Lmaskreticurve, spotEdited.Lmaskreticurve); - assignFromKeyfile(keyFile, "Locallab", "Recothresr_" + index_str, pedited, spot.recothresr, spotEdited.recothresr); - assignFromKeyfile(keyFile, "Locallab", "Lowthresr_" + index_str, pedited, spot.lowthresr, spotEdited.lowthresr); - assignFromKeyfile(keyFile, "Locallab", "Higthresr_" + index_str, pedited, spot.higthresr, spotEdited.higthresr); - assignFromKeyfile(keyFile, "Locallab", "Decayr_" + index_str, pedited, spot.decayr, spotEdited.decayr); + assignFromKeyfile(keyFile, "Locallab", "Complexreti_" + index_str, spot.complexreti, spotEdited.complexreti); + assignFromKeyfile(keyFile, "Locallab", "retinexMethod_" + index_str, spot.retinexMethod, spotEdited.retinexMethod); + assignFromKeyfile(keyFile, "Locallab", "Str_" + index_str, spot.str, spotEdited.str); + assignFromKeyfile(keyFile, "Locallab", "Chrrt_" + index_str, spot.chrrt, spotEdited.chrrt); + assignFromKeyfile(keyFile, "Locallab", "Neigh_" + index_str, spot.neigh, spotEdited.neigh); + assignFromKeyfile(keyFile, "Locallab", "Vart_" + index_str, spot.vart, spotEdited.vart); + assignFromKeyfile(keyFile, "Locallab", "Offs_" + index_str, spot.offs, spotEdited.offs); + assignFromKeyfile(keyFile, "Locallab", "Dehaz_" + index_str, spot.dehaz, spotEdited.dehaz); + assignFromKeyfile(keyFile, "Locallab", "Depth_" + index_str, spot.depth, spotEdited.depth); + assignFromKeyfile(keyFile, "Locallab", "Sensih_" + index_str, spot.sensih, spotEdited.sensih); + assignFromKeyfile(keyFile, "Locallab", "TgainCurve_" + index_str, spot.localTgaincurve, spotEdited.localTgaincurve); + assignFromKeyfile(keyFile, "Locallab", "TtransCurve_" + index_str, spot.localTtranscurve, spotEdited.localTtranscurve); + assignFromKeyfile(keyFile, "Locallab", "Inversret_" + index_str, spot.inversret, spotEdited.inversret); + assignFromKeyfile(keyFile, "Locallab", "Equilret_" + index_str, spot.equilret, spotEdited.equilret); + assignFromKeyfile(keyFile, "Locallab", "Loglin_" + index_str, spot.loglin, spotEdited.loglin); + assignFromKeyfile(keyFile, "Locallab", "dehazeSaturation" + index_str, spot.dehazeSaturation, spotEdited.dehazeSaturation); + assignFromKeyfile(keyFile, "Locallab", "Softradiusret_" + index_str, spot.softradiusret, spotEdited.softradiusret); + assignFromKeyfile(keyFile, "Locallab", "CCmaskretiCurve_" + index_str, spot.CCmaskreticurve, spotEdited.CCmaskreticurve); + assignFromKeyfile(keyFile, "Locallab", "LLmaskretiCurve_" + index_str, spot.LLmaskreticurve, spotEdited.LLmaskreticurve); + assignFromKeyfile(keyFile, "Locallab", "HHmaskretiCurve_" + index_str, spot.HHmaskreticurve, spotEdited.HHmaskreticurve); + assignFromKeyfile(keyFile, "Locallab", "EnaretiMask_" + index_str, spot.enaretiMask, spotEdited.enaretiMask); + assignFromKeyfile(keyFile, "Locallab", "EnaretiMasktmap_" + index_str, spot.enaretiMasktmap, spotEdited.enaretiMasktmap); + assignFromKeyfile(keyFile, "Locallab", "Blendmaskreti_" + index_str, spot.blendmaskreti, spotEdited.blendmaskreti); + assignFromKeyfile(keyFile, "Locallab", "Radmaskreti_" + index_str, spot.radmaskreti, spotEdited.radmaskreti); + assignFromKeyfile(keyFile, "Locallab", "Chromaskreti_" + index_str, spot.chromaskreti, spotEdited.chromaskreti); + assignFromKeyfile(keyFile, "Locallab", "Gammaskreti_" + index_str, spot.gammaskreti, spotEdited.gammaskreti); + assignFromKeyfile(keyFile, "Locallab", "Slomaskreti_" + index_str, spot.slomaskreti, spotEdited.slomaskreti); + assignFromKeyfile(keyFile, "Locallab", "Lapmaskreti_" + index_str, spot.lapmaskreti, spotEdited.lapmaskreti); + assignFromKeyfile(keyFile, "Locallab", "Scalereti_" + index_str, spot.scalereti, spotEdited.scalereti); + assignFromKeyfile(keyFile, "Locallab", "Darkness_" + index_str, spot.darkness, spotEdited.darkness); + assignFromKeyfile(keyFile, "Locallab", "Lightnessreti_" + index_str, spot.lightnessreti, spotEdited.lightnessreti); + assignFromKeyfile(keyFile, "Locallab", "Limd_" + index_str, spot.limd, spotEdited.limd); + assignFromKeyfile(keyFile, "Locallab", "Cliptm_" + index_str, spot.cliptm, spotEdited.cliptm); + assignFromKeyfile(keyFile, "Locallab", "Fftwreti_" + index_str, spot.fftwreti, spotEdited.fftwreti); + assignFromKeyfile(keyFile, "Locallab", "LmaskretiCurve_" + index_str, spot.Lmaskreticurve, spotEdited.Lmaskreticurve); + assignFromKeyfile(keyFile, "Locallab", "Recothresr_" + index_str, spot.recothresr, spotEdited.recothresr); + assignFromKeyfile(keyFile, "Locallab", "Lowthresr_" + index_str, spot.lowthresr, spotEdited.lowthresr); + assignFromKeyfile(keyFile, "Locallab", "Higthresr_" + index_str, spot.higthresr, spotEdited.higthresr); + assignFromKeyfile(keyFile, "Locallab", "Decayr_" + index_str, spot.decayr, spotEdited.decayr); // Sharpening - spot.visisharp = assignFromKeyfile(keyFile, "Locallab", "Expsharp_" + index_str, pedited, spot.expsharp, spotEdited.expsharp); + spot.visisharp = assignFromKeyfile(keyFile, "Locallab", "Expsharp_" + index_str, spot.expsharp, spotEdited.expsharp); if (spot.visisharp) { spotEdited.visisharp = true; } - assignFromKeyfile(keyFile, "Locallab", "Complexsharp_" + index_str, pedited, spot.complexsharp, spotEdited.complexsharp); - assignFromKeyfile(keyFile, "Locallab", "Sharcontrast_" + index_str, pedited, spot.sharcontrast, spotEdited.sharcontrast); - assignFromKeyfile(keyFile, "Locallab", "Sharradius_" + index_str, pedited, spot.sharradius, spotEdited.sharradius); - assignFromKeyfile(keyFile, "Locallab", "Sharamount_" + index_str, pedited, spot.sharamount, spotEdited.sharamount); - assignFromKeyfile(keyFile, "Locallab", "Shardamping_" + index_str, pedited, spot.shardamping, spotEdited.shardamping); - assignFromKeyfile(keyFile, "Locallab", "Shariter_" + index_str, pedited, spot.shariter, spotEdited.shariter); - assignFromKeyfile(keyFile, "Locallab", "Sharblur_" + index_str, pedited, spot.sharblur, spotEdited.sharblur); - assignFromKeyfile(keyFile, "Locallab", "Shargam_" + index_str, pedited, spot.shargam, spotEdited.shargam); - assignFromKeyfile(keyFile, "Locallab", "Sensisha_" + index_str, pedited, spot.sensisha, spotEdited.sensisha); - assignFromKeyfile(keyFile, "Locallab", "Inverssha_" + index_str, pedited, spot.inverssha, spotEdited.inverssha); + assignFromKeyfile(keyFile, "Locallab", "Complexsharp_" + index_str, spot.complexsharp, spotEdited.complexsharp); + assignFromKeyfile(keyFile, "Locallab", "Sharcontrast_" + index_str, spot.sharcontrast, spotEdited.sharcontrast); + assignFromKeyfile(keyFile, "Locallab", "Sharradius_" + index_str, spot.sharradius, spotEdited.sharradius); + assignFromKeyfile(keyFile, "Locallab", "Sharamount_" + index_str, spot.sharamount, spotEdited.sharamount); + assignFromKeyfile(keyFile, "Locallab", "Shardamping_" + index_str, spot.shardamping, spotEdited.shardamping); + assignFromKeyfile(keyFile, "Locallab", "Shariter_" + index_str, spot.shariter, spotEdited.shariter); + assignFromKeyfile(keyFile, "Locallab", "Sharblur_" + index_str, spot.sharblur, spotEdited.sharblur); + assignFromKeyfile(keyFile, "Locallab", "Shargam_" + index_str, spot.shargam, spotEdited.shargam); + assignFromKeyfile(keyFile, "Locallab", "Sensisha_" + index_str, spot.sensisha, spotEdited.sensisha); + assignFromKeyfile(keyFile, "Locallab", "Inverssha_" + index_str, spot.inverssha, spotEdited.inverssha); // Local Contrast - spot.visicontrast = assignFromKeyfile(keyFile, "Locallab", "Expcontrast_" + index_str, pedited, spot.expcontrast, spotEdited.expcontrast); + spot.visicontrast = assignFromKeyfile(keyFile, "Locallab", "Expcontrast_" + index_str, spot.expcontrast, spotEdited.expcontrast); if (spot.visicontrast) { spotEdited.visicontrast = true; } - assignFromKeyfile(keyFile, "Locallab", "Complexcontrast_" + index_str, pedited, spot.complexcontrast, spotEdited.complexcontrast); - assignFromKeyfile(keyFile, "Locallab", "Lcradius_" + index_str, pedited, spot.lcradius, spotEdited.lcradius); - assignFromKeyfile(keyFile, "Locallab", "Lcamount_" + index_str, pedited, spot.lcamount, spotEdited.lcamount); - assignFromKeyfile(keyFile, "Locallab", "Lcdarkness_" + index_str, pedited, spot.lcdarkness, spotEdited.lcdarkness); - assignFromKeyfile(keyFile, "Locallab", "Lclightness_" + index_str, pedited, spot.lclightness, spotEdited.lclightness); - assignFromKeyfile(keyFile, "Locallab", "Sigmalc_" + index_str, pedited, spot.sigmalc, spotEdited.sigmalc); - assignFromKeyfile(keyFile, "Locallab", "Levelwav_" + index_str, pedited, spot.levelwav, spotEdited.levelwav); - assignFromKeyfile(keyFile, "Locallab", "Residcont_" + index_str, pedited, spot.residcont, spotEdited.residcont); - assignFromKeyfile(keyFile, "Locallab", "Residsha_" + index_str, pedited, spot.residsha, spotEdited.residsha); - assignFromKeyfile(keyFile, "Locallab", "Residshathr_" + index_str, pedited, spot.residshathr, spotEdited.residshathr); - assignFromKeyfile(keyFile, "Locallab", "Residhi_" + index_str, pedited, spot.residhi, spotEdited.residhi); - assignFromKeyfile(keyFile, "Locallab", "Gamlc_" + index_str, pedited, spot.gamlc, spotEdited.gamlc); - assignFromKeyfile(keyFile, "Locallab", "Residhithr_" + index_str, pedited, spot.residhithr, spotEdited.residhithr); - assignFromKeyfile(keyFile, "Locallab", "Residgam_" + index_str, pedited, spot.residgam, spotEdited.residgam); - assignFromKeyfile(keyFile, "Locallab", "Residslop_" + index_str, pedited, spot.residslop, spotEdited.residslop); - assignFromKeyfile(keyFile, "Locallab", "Residblur_" + index_str, pedited, spot.residblur, spotEdited.residblur); - assignFromKeyfile(keyFile, "Locallab", "Levelblur_" + index_str, pedited, spot.levelblur, spotEdited.levelblur); - assignFromKeyfile(keyFile, "Locallab", "Sigmabl_" + index_str, pedited, spot.sigmabl, spotEdited.sigmabl); - assignFromKeyfile(keyFile, "Locallab", "Residchro_" + index_str, pedited, spot.residchro, spotEdited.residchro); - assignFromKeyfile(keyFile, "Locallab", "Residcomp_" + index_str, pedited, spot.residcomp, spotEdited.residcomp); - assignFromKeyfile(keyFile, "Locallab", "Sigma_" + index_str, pedited, spot.sigma, spotEdited.sigma); - assignFromKeyfile(keyFile, "Locallab", "Offset_" + index_str, pedited, spot.offset, spotEdited.offset); - assignFromKeyfile(keyFile, "Locallab", "Sigmadr_" + index_str, pedited, spot.sigmadr, spotEdited.sigmadr); - assignFromKeyfile(keyFile, "Locallab", "Threswav_" + index_str, pedited, spot.threswav, spotEdited.threswav); - assignFromKeyfile(keyFile, "Locallab", "Chromalev_" + index_str, pedited, spot.chromalev, spotEdited.chromalev); - assignFromKeyfile(keyFile, "Locallab", "Chromablu_" + index_str, pedited, spot.chromablu, spotEdited.chromablu); - assignFromKeyfile(keyFile, "Locallab", "sigmadc_" + index_str, pedited, spot.sigmadc, spotEdited.sigmadc); - assignFromKeyfile(keyFile, "Locallab", "deltad_" + index_str, pedited, spot.deltad, spotEdited.deltad); - assignFromKeyfile(keyFile, "Locallab", "Fatres_" + index_str, pedited, spot.fatres, spotEdited.fatres); - assignFromKeyfile(keyFile, "Locallab", "ClariLres_" + index_str, pedited, spot.clarilres, spotEdited.clarilres); - assignFromKeyfile(keyFile, "Locallab", "ClariCres_" + index_str, pedited, spot.claricres, spotEdited.claricres); - assignFromKeyfile(keyFile, "Locallab", "Clarisoft_" + index_str, pedited, spot.clarisoft, spotEdited.clarisoft); - assignFromKeyfile(keyFile, "Locallab", "Sigmalc2_" + index_str, pedited, spot.sigmalc2, spotEdited.sigmalc2); - assignFromKeyfile(keyFile, "Locallab", "Strwav_" + index_str, pedited, spot.strwav, spotEdited.strwav); - assignFromKeyfile(keyFile, "Locallab", "Angwav_" + index_str, pedited, spot.angwav, spotEdited.angwav); - assignFromKeyfile(keyFile, "Locallab", "Strengthw_" + index_str, pedited, spot.strengthw, spotEdited.strengthw); - assignFromKeyfile(keyFile, "Locallab", "Sigmaed_" + index_str, pedited, spot.sigmaed, spotEdited.sigmaed); - assignFromKeyfile(keyFile, "Locallab", "Radiusw_" + index_str, pedited, spot.radiusw, spotEdited.radiusw); - assignFromKeyfile(keyFile, "Locallab", "Detailw_" + index_str, pedited, spot.detailw, spotEdited.detailw); - assignFromKeyfile(keyFile, "Locallab", "Gradw_" + index_str, pedited, spot.gradw, spotEdited.gradw); - assignFromKeyfile(keyFile, "Locallab", "Tloww_" + index_str, pedited, spot.tloww, spotEdited.tloww); - assignFromKeyfile(keyFile, "Locallab", "Thigw_" + index_str, pedited, spot.thigw, spotEdited.thigw); - assignFromKeyfile(keyFile, "Locallab", "Edgw_" + index_str, pedited, spot.edgw, spotEdited.edgw); - assignFromKeyfile(keyFile, "Locallab", "Basew_" + index_str, pedited, spot.basew, spotEdited.basew); - assignFromKeyfile(keyFile, "Locallab", "Sensilc_" + index_str, pedited, spot.sensilc, spotEdited.sensilc); - assignFromKeyfile(keyFile, "Locallab", "Reparw_" + index_str, pedited, spot.reparw, spotEdited.reparw); - assignFromKeyfile(keyFile, "Locallab", "Fftwlc_" + index_str, pedited, spot.fftwlc, spotEdited.fftwlc); - assignFromKeyfile(keyFile, "Locallab", "Blurlc_" + index_str, pedited, spot.blurlc, spotEdited.blurlc); - assignFromKeyfile(keyFile, "Locallab", "Wavblur_" + index_str, pedited, spot.wavblur, spotEdited.wavblur); - assignFromKeyfile(keyFile, "Locallab", "Wavedg_" + index_str, pedited, spot.wavedg, spotEdited.wavedg); - assignFromKeyfile(keyFile, "Locallab", "Waveshow_" + index_str, pedited, spot.waveshow, spotEdited.waveshow); - assignFromKeyfile(keyFile, "Locallab", "Wavcont_" + index_str, pedited, spot.wavcont, spotEdited.wavcont); - assignFromKeyfile(keyFile, "Locallab", "Wavcomp_" + index_str, pedited, spot.wavcomp, spotEdited.wavcomp); - assignFromKeyfile(keyFile, "Locallab", "Wavgradl_" + index_str, pedited, spot.wavgradl, spotEdited.wavgradl); - assignFromKeyfile(keyFile, "Locallab", "Wavcompre_" + index_str, pedited, spot.wavcompre, spotEdited.wavcompre); - assignFromKeyfile(keyFile, "Locallab", "Origlc_" + index_str, pedited, spot.origlc, spotEdited.origlc); - assignFromKeyfile(keyFile, "Locallab", "localcontMethod_" + index_str, pedited, spot.localcontMethod, spotEdited.localcontMethod); - assignFromKeyfile(keyFile, "Locallab", "localedgMethod_" + index_str, pedited, spot.localedgMethod, spotEdited.localedgMethod); - assignFromKeyfile(keyFile, "Locallab", "localneiMethod_" + index_str, pedited, spot.localneiMethod, spotEdited.localneiMethod); - assignFromKeyfile(keyFile, "Locallab", "LocwavCurve_" + index_str, pedited, spot.locwavcurve, spotEdited.locwavcurve); - assignFromKeyfile(keyFile, "Locallab", "LoclevwavCurve_" + index_str, pedited, spot.loclevwavcurve, spotEdited.loclevwavcurve); - assignFromKeyfile(keyFile, "Locallab", "LocconwavCurve_" + index_str, pedited, spot.locconwavcurve, spotEdited.locconwavcurve); - assignFromKeyfile(keyFile, "Locallab", "LoccompwavCurve_" + index_str, pedited, spot.loccompwavcurve, spotEdited.loccompwavcurve); - assignFromKeyfile(keyFile, "Locallab", "LoccomprewavCurve_" + index_str, pedited, spot.loccomprewavcurve, spotEdited.loccomprewavcurve); - assignFromKeyfile(keyFile, "Locallab", "LocedgwavCurve_" + index_str, pedited, spot.locedgwavcurve, spotEdited.locedgwavcurve); + assignFromKeyfile(keyFile, "Locallab", "Complexcontrast_" + index_str, spot.complexcontrast, spotEdited.complexcontrast); + assignFromKeyfile(keyFile, "Locallab", "Lcradius_" + index_str, spot.lcradius, spotEdited.lcradius); + assignFromKeyfile(keyFile, "Locallab", "Lcamount_" + index_str, spot.lcamount, spotEdited.lcamount); + assignFromKeyfile(keyFile, "Locallab", "Lcdarkness_" + index_str, spot.lcdarkness, spotEdited.lcdarkness); + assignFromKeyfile(keyFile, "Locallab", "Lclightness_" + index_str, spot.lclightness, spotEdited.lclightness); + assignFromKeyfile(keyFile, "Locallab", "Sigmalc_" + index_str, spot.sigmalc, spotEdited.sigmalc); + assignFromKeyfile(keyFile, "Locallab", "Levelwav_" + index_str, spot.levelwav, spotEdited.levelwav); + assignFromKeyfile(keyFile, "Locallab", "Residcont_" + index_str, spot.residcont, spotEdited.residcont); + assignFromKeyfile(keyFile, "Locallab", "Residsha_" + index_str, spot.residsha, spotEdited.residsha); + assignFromKeyfile(keyFile, "Locallab", "Residshathr_" + index_str, spot.residshathr, spotEdited.residshathr); + assignFromKeyfile(keyFile, "Locallab", "Residhi_" + index_str, spot.residhi, spotEdited.residhi); + assignFromKeyfile(keyFile, "Locallab", "Gamlc_" + index_str, spot.gamlc, spotEdited.gamlc); + assignFromKeyfile(keyFile, "Locallab", "Residhithr_" + index_str, spot.residhithr, spotEdited.residhithr); + assignFromKeyfile(keyFile, "Locallab", "Residgam_" + index_str, spot.residgam, spotEdited.residgam); + assignFromKeyfile(keyFile, "Locallab", "Residslop_" + index_str, spot.residslop, spotEdited.residslop); + assignFromKeyfile(keyFile, "Locallab", "Residblur_" + index_str, spot.residblur, spotEdited.residblur); + assignFromKeyfile(keyFile, "Locallab", "Levelblur_" + index_str, spot.levelblur, spotEdited.levelblur); + assignFromKeyfile(keyFile, "Locallab", "Sigmabl_" + index_str, spot.sigmabl, spotEdited.sigmabl); + assignFromKeyfile(keyFile, "Locallab", "Residchro_" + index_str, spot.residchro, spotEdited.residchro); + assignFromKeyfile(keyFile, "Locallab", "Residcomp_" + index_str, spot.residcomp, spotEdited.residcomp); + assignFromKeyfile(keyFile, "Locallab", "Sigma_" + index_str, spot.sigma, spotEdited.sigma); + assignFromKeyfile(keyFile, "Locallab", "Offset_" + index_str, spot.offset, spotEdited.offset); + assignFromKeyfile(keyFile, "Locallab", "Sigmadr_" + index_str, spot.sigmadr, spotEdited.sigmadr); + assignFromKeyfile(keyFile, "Locallab", "Threswav_" + index_str, spot.threswav, spotEdited.threswav); + assignFromKeyfile(keyFile, "Locallab", "Chromalev_" + index_str, spot.chromalev, spotEdited.chromalev); + assignFromKeyfile(keyFile, "Locallab", "Chromablu_" + index_str, spot.chromablu, spotEdited.chromablu); + assignFromKeyfile(keyFile, "Locallab", "sigmadc_" + index_str, spot.sigmadc, spotEdited.sigmadc); + assignFromKeyfile(keyFile, "Locallab", "deltad_" + index_str, spot.deltad, spotEdited.deltad); + assignFromKeyfile(keyFile, "Locallab", "Fatres_" + index_str, spot.fatres, spotEdited.fatres); + assignFromKeyfile(keyFile, "Locallab", "ClariLres_" + index_str, spot.clarilres, spotEdited.clarilres); + assignFromKeyfile(keyFile, "Locallab", "ClariCres_" + index_str, spot.claricres, spotEdited.claricres); + assignFromKeyfile(keyFile, "Locallab", "Clarisoft_" + index_str, spot.clarisoft, spotEdited.clarisoft); + assignFromKeyfile(keyFile, "Locallab", "Sigmalc2_" + index_str, spot.sigmalc2, spotEdited.sigmalc2); + assignFromKeyfile(keyFile, "Locallab", "Strwav_" + index_str, spot.strwav, spotEdited.strwav); + assignFromKeyfile(keyFile, "Locallab", "Angwav_" + index_str, spot.angwav, spotEdited.angwav); + assignFromKeyfile(keyFile, "Locallab", "Strengthw_" + index_str, spot.strengthw, spotEdited.strengthw); + assignFromKeyfile(keyFile, "Locallab", "Sigmaed_" + index_str, spot.sigmaed, spotEdited.sigmaed); + assignFromKeyfile(keyFile, "Locallab", "Radiusw_" + index_str, spot.radiusw, spotEdited.radiusw); + assignFromKeyfile(keyFile, "Locallab", "Detailw_" + index_str, spot.detailw, spotEdited.detailw); + assignFromKeyfile(keyFile, "Locallab", "Gradw_" + index_str, spot.gradw, spotEdited.gradw); + assignFromKeyfile(keyFile, "Locallab", "Tloww_" + index_str, spot.tloww, spotEdited.tloww); + assignFromKeyfile(keyFile, "Locallab", "Thigw_" + index_str, spot.thigw, spotEdited.thigw); + assignFromKeyfile(keyFile, "Locallab", "Edgw_" + index_str, spot.edgw, spotEdited.edgw); + assignFromKeyfile(keyFile, "Locallab", "Basew_" + index_str, spot.basew, spotEdited.basew); + assignFromKeyfile(keyFile, "Locallab", "Sensilc_" + index_str, spot.sensilc, spotEdited.sensilc); + assignFromKeyfile(keyFile, "Locallab", "Reparw_" + index_str, spot.reparw, spotEdited.reparw); + assignFromKeyfile(keyFile, "Locallab", "Fftwlc_" + index_str, spot.fftwlc, spotEdited.fftwlc); + assignFromKeyfile(keyFile, "Locallab", "Blurlc_" + index_str, spot.blurlc, spotEdited.blurlc); + assignFromKeyfile(keyFile, "Locallab", "Wavblur_" + index_str, spot.wavblur, spotEdited.wavblur); + assignFromKeyfile(keyFile, "Locallab", "Wavedg_" + index_str, spot.wavedg, spotEdited.wavedg); + assignFromKeyfile(keyFile, "Locallab", "Waveshow_" + index_str, spot.waveshow, spotEdited.waveshow); + assignFromKeyfile(keyFile, "Locallab", "Wavcont_" + index_str, spot.wavcont, spotEdited.wavcont); + assignFromKeyfile(keyFile, "Locallab", "Wavcomp_" + index_str, spot.wavcomp, spotEdited.wavcomp); + assignFromKeyfile(keyFile, "Locallab", "Wavgradl_" + index_str, spot.wavgradl, spotEdited.wavgradl); + assignFromKeyfile(keyFile, "Locallab", "Wavcompre_" + index_str, spot.wavcompre, spotEdited.wavcompre); + assignFromKeyfile(keyFile, "Locallab", "Origlc_" + index_str, spot.origlc, spotEdited.origlc); + assignFromKeyfile(keyFile, "Locallab", "localcontMethod_" + index_str, spot.localcontMethod, spotEdited.localcontMethod); + assignFromKeyfile(keyFile, "Locallab", "localedgMethod_" + index_str, spot.localedgMethod, spotEdited.localedgMethod); + assignFromKeyfile(keyFile, "Locallab", "localneiMethod_" + index_str, spot.localneiMethod, spotEdited.localneiMethod); + assignFromKeyfile(keyFile, "Locallab", "LocwavCurve_" + index_str, spot.locwavcurve, spotEdited.locwavcurve); + assignFromKeyfile(keyFile, "Locallab", "LoclevwavCurve_" + index_str, spot.loclevwavcurve, spotEdited.loclevwavcurve); + assignFromKeyfile(keyFile, "Locallab", "LocconwavCurve_" + index_str, spot.locconwavcurve, spotEdited.locconwavcurve); + assignFromKeyfile(keyFile, "Locallab", "LoccompwavCurve_" + index_str, spot.loccompwavcurve, spotEdited.loccompwavcurve); + assignFromKeyfile(keyFile, "Locallab", "LoccomprewavCurve_" + index_str, spot.loccomprewavcurve, spotEdited.loccomprewavcurve); + assignFromKeyfile(keyFile, "Locallab", "LocedgwavCurve_" + index_str, spot.locedgwavcurve, spotEdited.locedgwavcurve); if (keyFile.has_key("Locallab", "CSThreshold_" + index_str)) { @@ -9172,128 +9272,128 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) spotEdited.csthreshold = true; } - assignFromKeyfile(keyFile, "Locallab", "CCmasklcCurve_" + index_str, pedited, spot.CCmasklccurve, spotEdited.CCmasklccurve); - assignFromKeyfile(keyFile, "Locallab", "LLmasklcCurve_" + index_str, pedited, spot.LLmasklccurve, spotEdited.LLmasklccurve); - assignFromKeyfile(keyFile, "Locallab", "HHmasklcCurve_" + index_str, pedited, spot.HHmasklccurve, spotEdited.HHmasklccurve); - assignFromKeyfile(keyFile, "Locallab", "EnalcMask_" + index_str, pedited, spot.enalcMask, spotEdited.enalcMask); - assignFromKeyfile(keyFile, "Locallab", "Blendmasklc_" + index_str, pedited, spot.blendmasklc, spotEdited.blendmasklc); - assignFromKeyfile(keyFile, "Locallab", "Radmasklc_" + index_str, pedited, spot.radmasklc, spotEdited.radmasklc); - assignFromKeyfile(keyFile, "Locallab", "Chromasklc_" + index_str, pedited, spot.chromasklc, spotEdited.chromasklc); - assignFromKeyfile(keyFile, "Locallab", "LmasklcCurve_" + index_str, pedited, spot.Lmasklccurve, spotEdited.Lmasklccurve); - assignFromKeyfile(keyFile, "Locallab", "Recothresw_" + index_str, pedited, spot.recothresw, spotEdited.recothresw); - assignFromKeyfile(keyFile, "Locallab", "Lowthresw_" + index_str, pedited, spot.lowthresw, spotEdited.lowthresw); - assignFromKeyfile(keyFile, "Locallab", "Higthresw_" + index_str, pedited, spot.higthresw, spotEdited.higthresw); - assignFromKeyfile(keyFile, "Locallab", "Decayw_" + index_str, pedited, spot.decayw, spotEdited.decayw); + assignFromKeyfile(keyFile, "Locallab", "CCmasklcCurve_" + index_str, spot.CCmasklccurve, spotEdited.CCmasklccurve); + assignFromKeyfile(keyFile, "Locallab", "LLmasklcCurve_" + index_str, spot.LLmasklccurve, spotEdited.LLmasklccurve); + assignFromKeyfile(keyFile, "Locallab", "HHmasklcCurve_" + index_str, spot.HHmasklccurve, spotEdited.HHmasklccurve); + assignFromKeyfile(keyFile, "Locallab", "EnalcMask_" + index_str, spot.enalcMask, spotEdited.enalcMask); + assignFromKeyfile(keyFile, "Locallab", "Blendmasklc_" + index_str, spot.blendmasklc, spotEdited.blendmasklc); + assignFromKeyfile(keyFile, "Locallab", "Radmasklc_" + index_str, spot.radmasklc, spotEdited.radmasklc); + assignFromKeyfile(keyFile, "Locallab", "Chromasklc_" + index_str, spot.chromasklc, spotEdited.chromasklc); + assignFromKeyfile(keyFile, "Locallab", "LmasklcCurve_" + index_str, spot.Lmasklccurve, spotEdited.Lmasklccurve); + assignFromKeyfile(keyFile, "Locallab", "Recothresw_" + index_str, spot.recothresw, spotEdited.recothresw); + assignFromKeyfile(keyFile, "Locallab", "Lowthresw_" + index_str, spot.lowthresw, spotEdited.lowthresw); + assignFromKeyfile(keyFile, "Locallab", "Higthresw_" + index_str, spot.higthresw, spotEdited.higthresw); + assignFromKeyfile(keyFile, "Locallab", "Decayw_" + index_str, spot.decayw, spotEdited.decayw); // Contrast by detail levels - spot.visicbdl = assignFromKeyfile(keyFile, "Locallab", "Expcbdl_" + index_str, pedited, spot.expcbdl, spotEdited.expcbdl); + spot.visicbdl = assignFromKeyfile(keyFile, "Locallab", "Expcbdl_" + index_str, spot.expcbdl, spotEdited.expcbdl); if (spot.visicbdl) { spotEdited.visicbdl = true; } - assignFromKeyfile(keyFile, "Locallab", "Complexcbdl_" + index_str, pedited, spot.complexcbdl, spotEdited.complexcbdl); + assignFromKeyfile(keyFile, "Locallab", "Complexcbdl_" + index_str, spot.complexcbdl, spotEdited.complexcbdl); for (int j = 0; j < 6; j ++) { - assignFromKeyfile(keyFile, "Locallab", "Mult" + std::to_string(j) + "_" + index_str, pedited, spot.mult[j], spotEdited.mult[j]); + assignFromKeyfile(keyFile, "Locallab", "Mult" + std::to_string(j) + "_" + index_str, spot.mult[j], spotEdited.mult[j]); } - assignFromKeyfile(keyFile, "Locallab", "Chromacbdl_" + index_str, pedited, spot.chromacbdl, spotEdited.chromacbdl); - assignFromKeyfile(keyFile, "Locallab", "Threshold_" + index_str, pedited, spot.threshold, spotEdited.threshold); - assignFromKeyfile(keyFile, "Locallab", "Sensicb_" + index_str, pedited, spot.sensicb, spotEdited.sensicb); - assignFromKeyfile(keyFile, "Locallab", "Clarityml_" + index_str, pedited, spot.clarityml, spotEdited.clarityml); - assignFromKeyfile(keyFile, "Locallab", "Contresid_" + index_str, pedited, spot.contresid, spotEdited.contresid); - assignFromKeyfile(keyFile, "Locallab", "Softradiuscb_" + index_str, pedited, spot.softradiuscb, spotEdited.softradiuscb); - assignFromKeyfile(keyFile, "Locallab", "EnacbMask_" + index_str, pedited, spot.enacbMask, spotEdited.enacbMask); - assignFromKeyfile(keyFile, "Locallab", "CCmaskcbCurve_" + index_str, pedited, spot.CCmaskcbcurve, spotEdited.CCmaskcbcurve); - assignFromKeyfile(keyFile, "Locallab", "LLmaskcbCurve_" + index_str, pedited, spot.LLmaskcbcurve, spotEdited.LLmaskcbcurve); - assignFromKeyfile(keyFile, "Locallab", "HHmaskcbCurve_" + index_str, pedited, spot.HHmaskcbcurve, spotEdited.HHmaskcbcurve); - assignFromKeyfile(keyFile, "Locallab", "Blendmaskcb_" + index_str, pedited, spot.blendmaskcb, spotEdited.blendmaskcb); - assignFromKeyfile(keyFile, "Locallab", "Radmaskcb_" + index_str, pedited, spot.radmaskcb, spotEdited.radmaskcb); - assignFromKeyfile(keyFile, "Locallab", "Chromaskcb_" + index_str, pedited, spot.chromaskcb, spotEdited.chromaskcb); - assignFromKeyfile(keyFile, "Locallab", "Gammaskcb_" + index_str, pedited, spot.gammaskcb, spotEdited.gammaskcb); - assignFromKeyfile(keyFile, "Locallab", "Slomaskcb_" + index_str, pedited, spot.slomaskcb, spotEdited.slomaskcb); - assignFromKeyfile(keyFile, "Locallab", "Lapmaskcb_" + index_str, pedited, spot.lapmaskcb, spotEdited.lapmaskcb); - assignFromKeyfile(keyFile, "Locallab", "LmaskcbCurve_" + index_str, pedited, spot.Lmaskcbcurve, spotEdited.Lmaskcbcurve); - assignFromKeyfile(keyFile, "Locallab", "Recothrescb_" + index_str, pedited, spot.recothrescb, spotEdited.recothrescb); - assignFromKeyfile(keyFile, "Locallab", "Lowthrescb_" + index_str, pedited, spot.lowthrescb, spotEdited.lowthrescb); - assignFromKeyfile(keyFile, "Locallab", "Higthrescb_" + index_str, pedited, spot.higthrescb, spotEdited.higthrescb); - assignFromKeyfile(keyFile, "Locallab", "Decaycb_" + index_str, pedited, spot.decaycb, spotEdited.decaycb); + assignFromKeyfile(keyFile, "Locallab", "Chromacbdl_" + index_str, spot.chromacbdl, spotEdited.chromacbdl); + assignFromKeyfile(keyFile, "Locallab", "Threshold_" + index_str, spot.threshold, spotEdited.threshold); + assignFromKeyfile(keyFile, "Locallab", "Sensicb_" + index_str, spot.sensicb, spotEdited.sensicb); + assignFromKeyfile(keyFile, "Locallab", "Clarityml_" + index_str, spot.clarityml, spotEdited.clarityml); + assignFromKeyfile(keyFile, "Locallab", "Contresid_" + index_str, spot.contresid, spotEdited.contresid); + assignFromKeyfile(keyFile, "Locallab", "Softradiuscb_" + index_str, spot.softradiuscb, spotEdited.softradiuscb); + assignFromKeyfile(keyFile, "Locallab", "EnacbMask_" + index_str, spot.enacbMask, spotEdited.enacbMask); + assignFromKeyfile(keyFile, "Locallab", "CCmaskcbCurve_" + index_str, spot.CCmaskcbcurve, spotEdited.CCmaskcbcurve); + assignFromKeyfile(keyFile, "Locallab", "LLmaskcbCurve_" + index_str, spot.LLmaskcbcurve, spotEdited.LLmaskcbcurve); + assignFromKeyfile(keyFile, "Locallab", "HHmaskcbCurve_" + index_str, spot.HHmaskcbcurve, spotEdited.HHmaskcbcurve); + assignFromKeyfile(keyFile, "Locallab", "Blendmaskcb_" + index_str, spot.blendmaskcb, spotEdited.blendmaskcb); + assignFromKeyfile(keyFile, "Locallab", "Radmaskcb_" + index_str, spot.radmaskcb, spotEdited.radmaskcb); + assignFromKeyfile(keyFile, "Locallab", "Chromaskcb_" + index_str, spot.chromaskcb, spotEdited.chromaskcb); + assignFromKeyfile(keyFile, "Locallab", "Gammaskcb_" + index_str, spot.gammaskcb, spotEdited.gammaskcb); + assignFromKeyfile(keyFile, "Locallab", "Slomaskcb_" + index_str, spot.slomaskcb, spotEdited.slomaskcb); + assignFromKeyfile(keyFile, "Locallab", "Lapmaskcb_" + index_str, spot.lapmaskcb, spotEdited.lapmaskcb); + assignFromKeyfile(keyFile, "Locallab", "LmaskcbCurve_" + index_str, spot.Lmaskcbcurve, spotEdited.Lmaskcbcurve); + assignFromKeyfile(keyFile, "Locallab", "Recothrescb_" + index_str, spot.recothrescb, spotEdited.recothrescb); + assignFromKeyfile(keyFile, "Locallab", "Lowthrescb_" + index_str, spot.lowthrescb, spotEdited.lowthrescb); + assignFromKeyfile(keyFile, "Locallab", "Higthrescb_" + index_str, spot.higthrescb, spotEdited.higthrescb); + assignFromKeyfile(keyFile, "Locallab", "Decaycb_" + index_str, spot.decaycb, spotEdited.decaycb); // Log encoding - spot.visilog = assignFromKeyfile(keyFile, "Locallab", "Explog_" + index_str, pedited, spot.explog, spotEdited.explog); + spot.visilog = assignFromKeyfile(keyFile, "Locallab", "Explog_" + index_str, spot.explog, spotEdited.explog); if (spot.visilog) { spotEdited.visilog = true; } - assignFromKeyfile(keyFile, "Locallab", "Complexlog_" + index_str, pedited, spot.complexlog, spotEdited.complexlog); + assignFromKeyfile(keyFile, "Locallab", "Complexlog_" + index_str, spot.complexlog, spotEdited.complexlog); - assignFromKeyfile(keyFile, "Locallab", "Autocompute_" + index_str, pedited, spot.autocompute, spotEdited.autocompute); - assignFromKeyfile(keyFile, "Locallab", "SourceGray_" + index_str, pedited, spot.sourceGray, spotEdited.sourceGray); - assignFromKeyfile(keyFile, "Locallab", "Sourceabs_" + index_str, pedited, spot.sourceabs, spotEdited.sourceabs); - assignFromKeyfile(keyFile, "Locallab", "Targabs_" + index_str, pedited, spot.targabs, spotEdited.targabs); - assignFromKeyfile(keyFile, "Locallab", "TargetGray_" + index_str, pedited, spot.targetGray, spotEdited.targetGray); - assignFromKeyfile(keyFile, "Locallab", "Catad_" + index_str, pedited, spot.catad, spotEdited.catad); - assignFromKeyfile(keyFile, "Locallab", "Saturl_" + index_str, pedited, spot.saturl, spotEdited.saturl); - assignFromKeyfile(keyFile, "Locallab", "Chroml_" + index_str, pedited, spot.chroml, spotEdited.chroml); - assignFromKeyfile(keyFile, "Locallab", "Lightl_" + index_str, pedited, spot.lightl, spotEdited.lightl); - assignFromKeyfile(keyFile, "Locallab", "Brightq_" + index_str, pedited, spot.lightq, spotEdited.lightq); - assignFromKeyfile(keyFile, "Locallab", "Contl_" + index_str, pedited, spot.contl, spotEdited.contl); - assignFromKeyfile(keyFile, "Locallab", "Contthres_" + index_str, pedited, spot.contthres, spotEdited.contthres); - assignFromKeyfile(keyFile, "Locallab", "Contq_" + index_str, pedited, spot.contq, spotEdited.contq); - assignFromKeyfile(keyFile, "Locallab", "Colorfl_" + index_str, pedited, spot.colorfl, spotEdited.colorfl); - assignFromKeyfile(keyFile, "Locallab", "LCurveL_" + index_str, pedited, spot.LcurveL, spotEdited.LcurveL); - assignFromKeyfile(keyFile, "Locallab", "AutoGray_" + index_str, pedited, spot.Autogray, spotEdited.Autogray); - assignFromKeyfile(keyFile, "Locallab", "Fullimage_" + index_str, pedited, spot.fullimage, spotEdited.fullimage); - assignFromKeyfile(keyFile, "Locallab", "Repart_" + index_str, pedited, spot.repar, spotEdited.repar); - assignFromKeyfile(keyFile, "Locallab", "Ciecam_" + index_str, pedited, spot.ciecam, spotEdited.ciecam); - assignFromKeyfile(keyFile, "Locallab", "BlackEv_" + index_str, pedited, spot.blackEv, spotEdited.blackEv); - assignFromKeyfile(keyFile, "Locallab", "WhiteEv_" + index_str, pedited, spot.whiteEv, spotEdited.whiteEv); - assignFromKeyfile(keyFile, "Locallab", "Detail_" + index_str, pedited, spot.detail, spotEdited.detail); - assignFromKeyfile(keyFile, "Locallab", "Sensilog_" + index_str, pedited, spot.sensilog, spotEdited.sensilog); - assignFromKeyfile(keyFile, "Locallab", "Baselog_" + index_str, pedited, spot.baselog, spotEdited.baselog); - assignFromKeyfile(keyFile, "Locallab", "Sursour_" + index_str, pedited, spot.sursour, spotEdited.sursour); - assignFromKeyfile(keyFile, "Locallab", "Surround_" + index_str, pedited, spot.surround, spotEdited.surround); - assignFromKeyfile(keyFile, "Locallab", "Strlog_" + index_str, pedited, spot.strlog, spotEdited.strlog); - assignFromKeyfile(keyFile, "Locallab", "Anglog_" + index_str, pedited, spot.anglog, spotEdited.anglog); - assignFromKeyfile(keyFile, "Locallab", "CCmaskCurveL_" + index_str, pedited, spot.CCmaskcurveL, spotEdited.CCmaskcurveL); - assignFromKeyfile(keyFile, "Locallab", "LLmaskCurveL_" + index_str, pedited, spot.LLmaskcurveL, spotEdited.LLmaskcurveL); - assignFromKeyfile(keyFile, "Locallab", "HHmaskCurveL_" + index_str, pedited, spot.HHmaskcurveL, spotEdited.HHmaskcurveL); - assignFromKeyfile(keyFile, "Locallab", "EnaLMask_" + index_str, pedited, spot.enaLMask, spotEdited.enaLMask); - assignFromKeyfile(keyFile, "Locallab", "blendmaskL_" + index_str, pedited, spot.blendmaskL, spotEdited.blendmaskL); - assignFromKeyfile(keyFile, "Locallab", "radmaskL_" + index_str, pedited, spot.radmaskL, spotEdited.radmaskL); - assignFromKeyfile(keyFile, "Locallab", "chromaskL_" + index_str, pedited, spot.chromaskL, spotEdited.chromaskL); - assignFromKeyfile(keyFile, "Locallab", "LmaskCurveL_" + index_str, pedited, spot.LmaskcurveL, spotEdited.LmaskcurveL); - assignFromKeyfile(keyFile, "Locallab", "Recothresl_" + index_str, pedited, spot.recothresl, spotEdited.recothresl); - assignFromKeyfile(keyFile, "Locallab", "Lowthresl_" + index_str, pedited, spot.lowthresl, spotEdited.lowthresl); - assignFromKeyfile(keyFile, "Locallab", "Higthresl_" + index_str, pedited, spot.higthresl, spotEdited.higthresl); - assignFromKeyfile(keyFile, "Locallab", "Decayl_" + index_str, pedited, spot.decayl, spotEdited.decayl); + assignFromKeyfile(keyFile, "Locallab", "Autocompute_" + index_str, spot.autocompute, spotEdited.autocompute); + assignFromKeyfile(keyFile, "Locallab", "SourceGray_" + index_str, spot.sourceGray, spotEdited.sourceGray); + assignFromKeyfile(keyFile, "Locallab", "Sourceabs_" + index_str, spot.sourceabs, spotEdited.sourceabs); + assignFromKeyfile(keyFile, "Locallab", "Targabs_" + index_str, spot.targabs, spotEdited.targabs); + assignFromKeyfile(keyFile, "Locallab", "TargetGray_" + index_str, spot.targetGray, spotEdited.targetGray); + assignFromKeyfile(keyFile, "Locallab", "Catad_" + index_str, spot.catad, spotEdited.catad); + assignFromKeyfile(keyFile, "Locallab", "Saturl_" + index_str, spot.saturl, spotEdited.saturl); + assignFromKeyfile(keyFile, "Locallab", "Chroml_" + index_str, spot.chroml, spotEdited.chroml); + assignFromKeyfile(keyFile, "Locallab", "Lightl_" + index_str, spot.lightl, spotEdited.lightl); + assignFromKeyfile(keyFile, "Locallab", "Brightq_" + index_str, spot.lightq, spotEdited.lightq); + assignFromKeyfile(keyFile, "Locallab", "Contl_" + index_str, spot.contl, spotEdited.contl); + assignFromKeyfile(keyFile, "Locallab", "Contthres_" + index_str, spot.contthres, spotEdited.contthres); + assignFromKeyfile(keyFile, "Locallab", "Contq_" + index_str, spot.contq, spotEdited.contq); + assignFromKeyfile(keyFile, "Locallab", "Colorfl_" + index_str, spot.colorfl, spotEdited.colorfl); + assignFromKeyfile(keyFile, "Locallab", "LCurveL_" + index_str, spot.LcurveL, spotEdited.LcurveL); + assignFromKeyfile(keyFile, "Locallab", "AutoGray_" + index_str, spot.Autogray, spotEdited.Autogray); + assignFromKeyfile(keyFile, "Locallab", "Fullimage_" + index_str, spot.fullimage, spotEdited.fullimage); + assignFromKeyfile(keyFile, "Locallab", "Repart_" + index_str, spot.repar, spotEdited.repar); + assignFromKeyfile(keyFile, "Locallab", "Ciecam_" + index_str, spot.ciecam, spotEdited.ciecam); + assignFromKeyfile(keyFile, "Locallab", "BlackEv_" + index_str, spot.blackEv, spotEdited.blackEv); + assignFromKeyfile(keyFile, "Locallab", "WhiteEv_" + index_str, spot.whiteEv, spotEdited.whiteEv); + assignFromKeyfile(keyFile, "Locallab", "Detail_" + index_str, spot.detail, spotEdited.detail); + assignFromKeyfile(keyFile, "Locallab", "Sensilog_" + index_str, spot.sensilog, spotEdited.sensilog); + assignFromKeyfile(keyFile, "Locallab", "Baselog_" + index_str, spot.baselog, spotEdited.baselog); + assignFromKeyfile(keyFile, "Locallab", "Sursour_" + index_str, spot.sursour, spotEdited.sursour); + assignFromKeyfile(keyFile, "Locallab", "Surround_" + index_str, spot.surround, spotEdited.surround); + assignFromKeyfile(keyFile, "Locallab", "Strlog_" + index_str, spot.strlog, spotEdited.strlog); + assignFromKeyfile(keyFile, "Locallab", "Anglog_" + index_str, spot.anglog, spotEdited.anglog); + assignFromKeyfile(keyFile, "Locallab", "CCmaskCurveL_" + index_str, spot.CCmaskcurveL, spotEdited.CCmaskcurveL); + assignFromKeyfile(keyFile, "Locallab", "LLmaskCurveL_" + index_str, spot.LLmaskcurveL, spotEdited.LLmaskcurveL); + assignFromKeyfile(keyFile, "Locallab", "HHmaskCurveL_" + index_str, spot.HHmaskcurveL, spotEdited.HHmaskcurveL); + assignFromKeyfile(keyFile, "Locallab", "EnaLMask_" + index_str, spot.enaLMask, spotEdited.enaLMask); + assignFromKeyfile(keyFile, "Locallab", "blendmaskL_" + index_str, spot.blendmaskL, spotEdited.blendmaskL); + assignFromKeyfile(keyFile, "Locallab", "radmaskL_" + index_str, spot.radmaskL, spotEdited.radmaskL); + assignFromKeyfile(keyFile, "Locallab", "chromaskL_" + index_str, spot.chromaskL, spotEdited.chromaskL); + assignFromKeyfile(keyFile, "Locallab", "LmaskCurveL_" + index_str, spot.LmaskcurveL, spotEdited.LmaskcurveL); + assignFromKeyfile(keyFile, "Locallab", "Recothresl_" + index_str, spot.recothresl, spotEdited.recothresl); + assignFromKeyfile(keyFile, "Locallab", "Lowthresl_" + index_str, spot.lowthresl, spotEdited.lowthresl); + assignFromKeyfile(keyFile, "Locallab", "Higthresl_" + index_str, spot.higthresl, spotEdited.higthresl); + assignFromKeyfile(keyFile, "Locallab", "Decayl_" + index_str, spot.decayl, spotEdited.decayl); // mask - spot.visimask = assignFromKeyfile(keyFile, "Locallab", "Expmask_" + index_str, pedited, spot.expmask, spotEdited.expmask); - assignFromKeyfile(keyFile, "Locallab", "Complexmask_" + index_str, pedited, spot.complexmask, spotEdited.complexmask); - assignFromKeyfile(keyFile, "Locallab", "Sensimask_" + index_str, pedited, spot.sensimask, spotEdited.sensimask); - assignFromKeyfile(keyFile, "Locallab", "Blendmaskmask_" + index_str, pedited, spot.blendmask, spotEdited.blendmask); - assignFromKeyfile(keyFile, "Locallab", "Blendmaskmaskab_" + index_str, pedited, spot.blendmaskab, spotEdited.blendmaskab); - assignFromKeyfile(keyFile, "Locallab", "Softradiusmask_" + index_str, pedited, spot.softradiusmask, spotEdited.softradiusmask); - assignFromKeyfile(keyFile, "Locallab", "Enamask_" + index_str, pedited, spot.enamask, spotEdited.enamask); - assignFromKeyfile(keyFile, "Locallab", "Fftmask_" + index_str, pedited, spot.fftmask, spotEdited.fftmask); - assignFromKeyfile(keyFile, "Locallab", "Blurmask_" + index_str, pedited, spot.blurmask, spotEdited.blurmask); - assignFromKeyfile(keyFile, "Locallab", "Contmask_" + index_str, pedited, spot.contmask, spotEdited.contmask); - assignFromKeyfile(keyFile, "Locallab", "CCmask_Curve_" + index_str, pedited, spot.CCmask_curve, spotEdited.CCmask_curve); - assignFromKeyfile(keyFile, "Locallab", "LLmask_Curve_" + index_str, pedited, spot.LLmask_curve, spotEdited.LLmask_curve); - assignFromKeyfile(keyFile, "Locallab", "HHmask_Curve_" + index_str, pedited, spot.HHmask_curve, spotEdited.HHmask_curve); - assignFromKeyfile(keyFile, "Locallab", "Strumaskmask_" + index_str, pedited, spot.strumaskmask, spotEdited.strumaskmask); - assignFromKeyfile(keyFile, "Locallab", "Toolmask_" + index_str, pedited, spot.toolmask, spotEdited.toolmask); - assignFromKeyfile(keyFile, "Locallab", "Radmask_" + index_str, pedited, spot.radmask, spotEdited.radmask); - assignFromKeyfile(keyFile, "Locallab", "Lapmask_" + index_str, pedited, spot.lapmask, spotEdited.lapmask); - assignFromKeyfile(keyFile, "Locallab", "Chromask_" + index_str, pedited, spot.chromask, spotEdited.chromask); - assignFromKeyfile(keyFile, "Locallab", "Gammask_" + index_str, pedited, spot.gammask, spotEdited.gammask); - assignFromKeyfile(keyFile, "Locallab", "Slopmask_" + index_str, pedited, spot.slopmask, spotEdited.slopmask); - assignFromKeyfile(keyFile, "Locallab", "Shadmask_" + index_str, pedited, spot.shadmask, spotEdited.shadmask); - assignFromKeyfile(keyFile, "Locallab", "Str_mask_" + index_str, pedited, spot.str_mask, spotEdited.str_mask); - assignFromKeyfile(keyFile, "Locallab", "Ang_mask_" + index_str, pedited, spot.ang_mask, spotEdited.ang_mask); - assignFromKeyfile(keyFile, "Locallab", "HHhmask_Curve_" + index_str, pedited, spot.HHhmask_curve, spotEdited.HHhmask_curve); - assignFromKeyfile(keyFile, "Locallab", "Lmask_Curve_" + index_str, pedited, spot.Lmask_curve, spotEdited.Lmask_curve); - assignFromKeyfile(keyFile, "Locallab", "LLmask_Curvewav_" + index_str, pedited, spot.LLmask_curvewav, spotEdited.LLmask_curvewav); + spot.visimask = assignFromKeyfile(keyFile, "Locallab", "Expmask_" + index_str, spot.expmask, spotEdited.expmask); + assignFromKeyfile(keyFile, "Locallab", "Complexmask_" + index_str, spot.complexmask, spotEdited.complexmask); + assignFromKeyfile(keyFile, "Locallab", "Sensimask_" + index_str, spot.sensimask, spotEdited.sensimask); + assignFromKeyfile(keyFile, "Locallab", "Blendmaskmask_" + index_str, spot.blendmask, spotEdited.blendmask); + assignFromKeyfile(keyFile, "Locallab", "Blendmaskmaskab_" + index_str, spot.blendmaskab, spotEdited.blendmaskab); + assignFromKeyfile(keyFile, "Locallab", "Softradiusmask_" + index_str, spot.softradiusmask, spotEdited.softradiusmask); + assignFromKeyfile(keyFile, "Locallab", "Enamask_" + index_str, spot.enamask, spotEdited.enamask); + assignFromKeyfile(keyFile, "Locallab", "Fftmask_" + index_str, spot.fftmask, spotEdited.fftmask); + assignFromKeyfile(keyFile, "Locallab", "Blurmask_" + index_str, spot.blurmask, spotEdited.blurmask); + assignFromKeyfile(keyFile, "Locallab", "Contmask_" + index_str, spot.contmask, spotEdited.contmask); + assignFromKeyfile(keyFile, "Locallab", "CCmask_Curve_" + index_str, spot.CCmask_curve, spotEdited.CCmask_curve); + assignFromKeyfile(keyFile, "Locallab", "LLmask_Curve_" + index_str, spot.LLmask_curve, spotEdited.LLmask_curve); + assignFromKeyfile(keyFile, "Locallab", "HHmask_Curve_" + index_str, spot.HHmask_curve, spotEdited.HHmask_curve); + assignFromKeyfile(keyFile, "Locallab", "Strumaskmask_" + index_str, spot.strumaskmask, spotEdited.strumaskmask); + assignFromKeyfile(keyFile, "Locallab", "Toolmask_" + index_str, spot.toolmask, spotEdited.toolmask); + assignFromKeyfile(keyFile, "Locallab", "Radmask_" + index_str, spot.radmask, spotEdited.radmask); + assignFromKeyfile(keyFile, "Locallab", "Lapmask_" + index_str, spot.lapmask, spotEdited.lapmask); + assignFromKeyfile(keyFile, "Locallab", "Chromask_" + index_str, spot.chromask, spotEdited.chromask); + assignFromKeyfile(keyFile, "Locallab", "Gammask_" + index_str, spot.gammask, spotEdited.gammask); + assignFromKeyfile(keyFile, "Locallab", "Slopmask_" + index_str, spot.slopmask, spotEdited.slopmask); + assignFromKeyfile(keyFile, "Locallab", "Shadmask_" + index_str, spot.shadmask, spotEdited.shadmask); + assignFromKeyfile(keyFile, "Locallab", "Str_mask_" + index_str, spot.str_mask, spotEdited.str_mask); + assignFromKeyfile(keyFile, "Locallab", "Ang_mask_" + index_str, spot.ang_mask, spotEdited.ang_mask); + assignFromKeyfile(keyFile, "Locallab", "HHhmask_Curve_" + index_str, spot.HHhmask_curve, spotEdited.HHhmask_curve); + assignFromKeyfile(keyFile, "Locallab", "Lmask_Curve_" + index_str, spot.Lmask_curve, spotEdited.Lmask_curve); + assignFromKeyfile(keyFile, "Locallab", "LLmask_Curvewav_" + index_str, spot.LLmask_curvewav, spotEdited.LLmask_curvewav); if (keyFile.has_key("Locallab", "CSThresholdmask_" + index_str)) { const std::vector thresh = keyFile.get_integer_list("Locallab", "CSThresholdmask_" + index_str); @@ -9310,64 +9410,64 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } // ciecam - spot.visicie = assignFromKeyfile(keyFile, "Locallab", "Expcie_" + index_str, pedited, spot.expcie, spotEdited.expcie); + spot.visicie = assignFromKeyfile(keyFile, "Locallab", "Expcie_" + index_str, spot.expcie, spotEdited.expcie); if (spot.visicie) { spotEdited.visicie = true; } - assignFromKeyfile(keyFile, "Locallab", "Complexcie_" + index_str, pedited, spot.complexcie, spotEdited.complexcie); - assignFromKeyfile(keyFile, "Locallab", "Reparcie_" + index_str, pedited, spot.reparcie, spotEdited.reparcie); - assignFromKeyfile(keyFile, "Locallab", "Sensicie_" + index_str, pedited, spot.sensicie, spotEdited.sensicie); - assignFromKeyfile(keyFile, "Locallab", "AutoGraycie_" + index_str, pedited, spot.Autograycie, spotEdited.Autograycie); - assignFromKeyfile(keyFile, "Locallab", "Forcejz_" + index_str, pedited, spot.forcejz, spotEdited.forcejz); - assignFromKeyfile(keyFile, "Locallab", "Forcebw_" + index_str, pedited, spot.forcebw, spotEdited.forcebw); - assignFromKeyfile(keyFile, "Locallab", "Qtoj_" + index_str, pedited, spot.qtoj, spotEdited.qtoj); - assignFromKeyfile(keyFile, "Locallab", "jabcie_" + index_str, pedited, spot.jabcie, spotEdited.jabcie); - assignFromKeyfile(keyFile, "Locallab", "sigmoidqjcie_" + index_str, pedited, spot.sigmoidqjcie, spotEdited.sigmoidqjcie); - assignFromKeyfile(keyFile, "Locallab", "logcie_" + index_str, pedited, spot.logcie, spotEdited.logcie); - assignFromKeyfile(keyFile, "Locallab", "Logjz_" + index_str, pedited, spot.logjz, spotEdited.logjz); - assignFromKeyfile(keyFile, "Locallab", "Sigjz_" + index_str, pedited, spot.sigjz, spotEdited.sigjz); - assignFromKeyfile(keyFile, "Locallab", "Sigq_" + index_str, pedited, spot.sigq, spotEdited.sigq); - assignFromKeyfile(keyFile, "Locallab", "chjzcie_" + index_str, pedited, spot.chjzcie, spotEdited.chjzcie); - assignFromKeyfile(keyFile, "Locallab", "SourceGraycie_" + index_str, pedited, spot.sourceGraycie, spotEdited.sourceGraycie); - assignFromKeyfile(keyFile, "Locallab", "Sourceabscie_" + index_str, pedited, spot.sourceabscie, spotEdited.sourceabscie); - assignFromKeyfile(keyFile, "Locallab", "Sursourcie_" + index_str, pedited, spot.sursourcie, spotEdited.sursourcie); - assignFromKeyfile(keyFile, "Locallab", "Modecie_" + index_str, pedited, spot.modecie, spotEdited.modecie); - assignFromKeyfile(keyFile, "Locallab", "Modecam_" + index_str, pedited, spot.modecam, spotEdited.modecam); - assignFromKeyfile(keyFile, "Locallab", "Saturlcie_" + index_str, pedited, spot.saturlcie, spotEdited.saturlcie); - assignFromKeyfile(keyFile, "Locallab", "Rstprotectcie_" + index_str, pedited, spot.rstprotectcie, spotEdited.rstprotectcie); - assignFromKeyfile(keyFile, "Locallab", "Chromlcie_" + index_str, pedited, spot.chromlcie, spotEdited.chromlcie); - assignFromKeyfile(keyFile, "Locallab", "Huecie_" + index_str, pedited, spot.huecie, spotEdited.huecie); - assignFromKeyfile(keyFile, "Locallab", "ToneMethodcie_" + index_str, pedited, spot.toneMethodcie, spotEdited.toneMethodcie); - assignFromKeyfile(keyFile, "Locallab", "Ciecurve_" + index_str, pedited, spot.ciecurve, spotEdited.ciecurve); - assignFromKeyfile(keyFile, "Locallab", "ToneMethodcie2_" + index_str, pedited, spot.toneMethodcie2, spotEdited.toneMethodcie2); - assignFromKeyfile(keyFile, "Locallab", "Ciecurve2_" + index_str, pedited, spot.ciecurve2, spotEdited.ciecurve2); - assignFromKeyfile(keyFile, "Locallab", "Chromjzcie_" + index_str, pedited, spot.chromjzcie, spotEdited.chromjzcie); - assignFromKeyfile(keyFile, "Locallab", "Saturjzcie_" + index_str, pedited, spot.saturjzcie, spotEdited.saturjzcie); - assignFromKeyfile(keyFile, "Locallab", "Huejzcie_" + index_str, pedited, spot.huejzcie, spotEdited.huejzcie); - assignFromKeyfile(keyFile, "Locallab", "Softjzcie_" + index_str, pedited, spot.softjzcie, spotEdited.softjzcie); - assignFromKeyfile(keyFile, "Locallab", "strSoftjzcie_" + index_str, pedited, spot.strsoftjzcie, spotEdited.strsoftjzcie); - assignFromKeyfile(keyFile, "Locallab", "Thrhjzcie_" + index_str, pedited, spot.thrhjzcie, spotEdited.thrhjzcie); - assignFromKeyfile(keyFile, "Locallab", "JzCurve_" + index_str, pedited, spot.jzcurve, spotEdited.jzcurve); - assignFromKeyfile(keyFile, "Locallab", "CzCurve_" + index_str, pedited, spot.czcurve, spotEdited.czcurve); - assignFromKeyfile(keyFile, "Locallab", "CzJzCurve_" + index_str, pedited, spot.czjzcurve, spotEdited.czjzcurve); - assignFromKeyfile(keyFile, "Locallab", "HHCurvejz_" + index_str, pedited, spot.HHcurvejz, spotEdited.HHcurvejz); - assignFromKeyfile(keyFile, "Locallab", "CHCurvejz_" + index_str, pedited, spot.CHcurvejz, spotEdited.CHcurvejz); - assignFromKeyfile(keyFile, "Locallab", "LHCurvejz_" + index_str, pedited, spot.LHcurvejz, spotEdited.LHcurvejz); - assignFromKeyfile(keyFile, "Locallab", "Lightlcie_" + index_str, pedited, spot.lightlcie, spotEdited.lightlcie); - assignFromKeyfile(keyFile, "Locallab", "Lightjzcie_" + index_str, pedited, spot.lightjzcie, spotEdited.lightjzcie); - assignFromKeyfile(keyFile, "Locallab", "Brightqcie_" + index_str, pedited, spot.lightqcie, spotEdited.lightqcie); - assignFromKeyfile(keyFile, "Locallab", "Contlcie_" + index_str, pedited, spot.contlcie, spotEdited.contlcie); - assignFromKeyfile(keyFile, "Locallab", "Contjzcie_" + index_str, pedited, spot.contjzcie, spotEdited.contjzcie); - assignFromKeyfile(keyFile, "Locallab", "Adapjzcie_" + index_str, pedited, spot.adapjzcie, spotEdited.adapjzcie); - assignFromKeyfile(keyFile, "Locallab", "Jz100_" + index_str, pedited, spot.jz100, spotEdited.jz100); - assignFromKeyfile(keyFile, "Locallab", "PQremap_" + index_str, pedited, spot.pqremap, spotEdited.pqremap); - assignFromKeyfile(keyFile, "Locallab", "PQremapcam16_" + index_str, pedited, spot.pqremapcam16, spotEdited.pqremapcam16); - assignFromKeyfile(keyFile, "Locallab", "Hljzcie_" + index_str, pedited, spot.hljzcie, spotEdited.hljzcie); - assignFromKeyfile(keyFile, "Locallab", "Hlthjzcie_" + index_str, pedited, spot.hlthjzcie, spotEdited.hlthjzcie); - assignFromKeyfile(keyFile, "Locallab", "Shjzcie_" + index_str, pedited, spot.shjzcie, spotEdited.shjzcie); - assignFromKeyfile(keyFile, "Locallab", "Shthjzcie_" + index_str, pedited, spot.shthjzcie, spotEdited.shthjzcie); - assignFromKeyfile(keyFile, "Locallab", "Radjzcie_" + index_str, pedited, spot.radjzcie, spotEdited.radjzcie); + assignFromKeyfile(keyFile, "Locallab", "Complexcie_" + index_str, spot.complexcie, spotEdited.complexcie); + assignFromKeyfile(keyFile, "Locallab", "Reparcie_" + index_str, spot.reparcie, spotEdited.reparcie); + assignFromKeyfile(keyFile, "Locallab", "Sensicie_" + index_str, spot.sensicie, spotEdited.sensicie); + assignFromKeyfile(keyFile, "Locallab", "AutoGraycie_" + index_str, spot.Autograycie, spotEdited.Autograycie); + assignFromKeyfile(keyFile, "Locallab", "Forcejz_" + index_str, spot.forcejz, spotEdited.forcejz); + assignFromKeyfile(keyFile, "Locallab", "Forcebw_" + index_str, spot.forcebw, spotEdited.forcebw); + assignFromKeyfile(keyFile, "Locallab", "Qtoj_" + index_str, spot.qtoj, spotEdited.qtoj); + assignFromKeyfile(keyFile, "Locallab", "jabcie_" + index_str, spot.jabcie, spotEdited.jabcie); + assignFromKeyfile(keyFile, "Locallab", "sigmoidqjcie_" + index_str, spot.sigmoidqjcie, spotEdited.sigmoidqjcie); + assignFromKeyfile(keyFile, "Locallab", "logcie_" + index_str, spot.logcie, spotEdited.logcie); + assignFromKeyfile(keyFile, "Locallab", "Logjz_" + index_str, spot.logjz, spotEdited.logjz); + assignFromKeyfile(keyFile, "Locallab", "Sigjz_" + index_str, spot.sigjz, spotEdited.sigjz); + assignFromKeyfile(keyFile, "Locallab", "Sigq_" + index_str, spot.sigq, spotEdited.sigq); + assignFromKeyfile(keyFile, "Locallab", "chjzcie_" + index_str, spot.chjzcie, spotEdited.chjzcie); + assignFromKeyfile(keyFile, "Locallab", "SourceGraycie_" + index_str, spot.sourceGraycie, spotEdited.sourceGraycie); + assignFromKeyfile(keyFile, "Locallab", "Sourceabscie_" + index_str, spot.sourceabscie, spotEdited.sourceabscie); + assignFromKeyfile(keyFile, "Locallab", "Sursourcie_" + index_str, spot.sursourcie, spotEdited.sursourcie); + assignFromKeyfile(keyFile, "Locallab", "Modecie_" + index_str, spot.modecie, spotEdited.modecie); + assignFromKeyfile(keyFile, "Locallab", "Modecam_" + index_str, spot.modecam, spotEdited.modecam); + assignFromKeyfile(keyFile, "Locallab", "Saturlcie_" + index_str, spot.saturlcie, spotEdited.saturlcie); + assignFromKeyfile(keyFile, "Locallab", "Rstprotectcie_" + index_str, spot.rstprotectcie, spotEdited.rstprotectcie); + assignFromKeyfile(keyFile, "Locallab", "Chromlcie_" + index_str, spot.chromlcie, spotEdited.chromlcie); + assignFromKeyfile(keyFile, "Locallab", "Huecie_" + index_str, spot.huecie, spotEdited.huecie); + assignFromKeyfile(keyFile, "Locallab", "ToneMethodcie_" + index_str, spot.toneMethodcie, spotEdited.toneMethodcie); + assignFromKeyfile(keyFile, "Locallab", "Ciecurve_" + index_str, spot.ciecurve, spotEdited.ciecurve); + assignFromKeyfile(keyFile, "Locallab", "ToneMethodcie2_" + index_str, spot.toneMethodcie2, spotEdited.toneMethodcie2); + assignFromKeyfile(keyFile, "Locallab", "Ciecurve2_" + index_str, spot.ciecurve2, spotEdited.ciecurve2); + assignFromKeyfile(keyFile, "Locallab", "Chromjzcie_" + index_str, spot.chromjzcie, spotEdited.chromjzcie); + assignFromKeyfile(keyFile, "Locallab", "Saturjzcie_" + index_str, spot.saturjzcie, spotEdited.saturjzcie); + assignFromKeyfile(keyFile, "Locallab", "Huejzcie_" + index_str, spot.huejzcie, spotEdited.huejzcie); + assignFromKeyfile(keyFile, "Locallab", "Softjzcie_" + index_str, spot.softjzcie, spotEdited.softjzcie); + assignFromKeyfile(keyFile, "Locallab", "strSoftjzcie_" + index_str, spot.strsoftjzcie, spotEdited.strsoftjzcie); + assignFromKeyfile(keyFile, "Locallab", "Thrhjzcie_" + index_str, spot.thrhjzcie, spotEdited.thrhjzcie); + assignFromKeyfile(keyFile, "Locallab", "JzCurve_" + index_str, spot.jzcurve, spotEdited.jzcurve); + assignFromKeyfile(keyFile, "Locallab", "CzCurve_" + index_str, spot.czcurve, spotEdited.czcurve); + assignFromKeyfile(keyFile, "Locallab", "CzJzCurve_" + index_str, spot.czjzcurve, spotEdited.czjzcurve); + assignFromKeyfile(keyFile, "Locallab", "HHCurvejz_" + index_str, spot.HHcurvejz, spotEdited.HHcurvejz); + assignFromKeyfile(keyFile, "Locallab", "CHCurvejz_" + index_str, spot.CHcurvejz, spotEdited.CHcurvejz); + assignFromKeyfile(keyFile, "Locallab", "LHCurvejz_" + index_str, spot.LHcurvejz, spotEdited.LHcurvejz); + assignFromKeyfile(keyFile, "Locallab", "Lightlcie_" + index_str, spot.lightlcie, spotEdited.lightlcie); + assignFromKeyfile(keyFile, "Locallab", "Lightjzcie_" + index_str, spot.lightjzcie, spotEdited.lightjzcie); + assignFromKeyfile(keyFile, "Locallab", "Brightqcie_" + index_str, spot.lightqcie, spotEdited.lightqcie); + assignFromKeyfile(keyFile, "Locallab", "Contlcie_" + index_str, spot.contlcie, spotEdited.contlcie); + assignFromKeyfile(keyFile, "Locallab", "Contjzcie_" + index_str, spot.contjzcie, spotEdited.contjzcie); + assignFromKeyfile(keyFile, "Locallab", "Adapjzcie_" + index_str, spot.adapjzcie, spotEdited.adapjzcie); + assignFromKeyfile(keyFile, "Locallab", "Jz100_" + index_str, spot.jz100, spotEdited.jz100); + assignFromKeyfile(keyFile, "Locallab", "PQremap_" + index_str, spot.pqremap, spotEdited.pqremap); + assignFromKeyfile(keyFile, "Locallab", "PQremapcam16_" + index_str, spot.pqremapcam16, spotEdited.pqremapcam16); + assignFromKeyfile(keyFile, "Locallab", "Hljzcie_" + index_str, spot.hljzcie, spotEdited.hljzcie); + assignFromKeyfile(keyFile, "Locallab", "Hlthjzcie_" + index_str, spot.hlthjzcie, spotEdited.hlthjzcie); + assignFromKeyfile(keyFile, "Locallab", "Shjzcie_" + index_str, spot.shjzcie, spotEdited.shjzcie); + assignFromKeyfile(keyFile, "Locallab", "Shthjzcie_" + index_str, spot.shthjzcie, spotEdited.shthjzcie); + assignFromKeyfile(keyFile, "Locallab", "Radjzcie_" + index_str, spot.radjzcie, spotEdited.radjzcie); if (keyFile.has_key("Locallab", "CSThresholdjz_" + index_str)) { const std::vector thresh = keyFile.get_integer_list("Locallab", "CSThresholdjz_" + index_str); @@ -9378,54 +9478,54 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) spotEdited.csthresholdjz = true; } - assignFromKeyfile(keyFile, "Locallab", "Sigmalcjz_" + index_str, pedited, spot.sigmalcjz, spotEdited.sigmalcjz); - assignFromKeyfile(keyFile, "Locallab", "Clarilresjz_" + index_str, pedited, spot.clarilresjz, spotEdited.clarilresjz); - assignFromKeyfile(keyFile, "Locallab", "Claricresjz_" + index_str, pedited, spot.claricresjz, spotEdited.claricresjz); - assignFromKeyfile(keyFile, "Locallab", "Clarisoftjz_" + index_str, pedited, spot.clarisoftjz, spotEdited.clarisoftjz); - assignFromKeyfile(keyFile, "Locallab", "LocwavCurvejz_" + index_str, pedited, spot.locwavcurvejz, spotEdited.locwavcurvejz); - assignFromKeyfile(keyFile, "Locallab", "Contthrescie_" + index_str, pedited, spot.contthrescie, spotEdited.contthrescie); - assignFromKeyfile(keyFile, "Locallab", "Contthrescie_" + index_str, pedited, spot.contthrescie, spotEdited.contthrescie); - assignFromKeyfile(keyFile, "Locallab", "BlackEvjz_" + index_str, pedited, spot.blackEvjz, spotEdited.blackEvjz); - assignFromKeyfile(keyFile, "Locallab", "WhiteEvjz_" + index_str, pedited, spot.whiteEvjz, spotEdited.whiteEvjz); - assignFromKeyfile(keyFile, "Locallab", "Targetjz_" + index_str, pedited, spot.targetjz, spotEdited.targetjz); - assignFromKeyfile(keyFile, "Locallab", "Sigmoidthcie_" + index_str, pedited, spot.sigmoidthcie, spotEdited.sigmoidthcie); - assignFromKeyfile(keyFile, "Locallab", "Sigmoidblcie_" + index_str, pedited, spot.sigmoidblcie, spotEdited.sigmoidblcie); - assignFromKeyfile(keyFile, "Locallab", "Sigmoidldajzcie_" + index_str, pedited, spot.sigmoidldajzcie, spotEdited.sigmoidldajzcie); - assignFromKeyfile(keyFile, "Locallab", "Sigmoidthjzcie_" + index_str, pedited, spot.sigmoidthjzcie, spotEdited.sigmoidthjzcie); - assignFromKeyfile(keyFile, "Locallab", "Sigmoidbljzcie_" + index_str, pedited, spot.sigmoidbljzcie, spotEdited.sigmoidbljzcie); - assignFromKeyfile(keyFile, "Locallab", "Contqcie_" + index_str, pedited, spot.contqcie, spotEdited.contqcie); - assignFromKeyfile(keyFile, "Locallab", "Colorflcie_" + index_str, pedited, spot.colorflcie, spotEdited.colorflcie); + assignFromKeyfile(keyFile, "Locallab", "Sigmalcjz_" + index_str, spot.sigmalcjz, spotEdited.sigmalcjz); + assignFromKeyfile(keyFile, "Locallab", "Clarilresjz_" + index_str, spot.clarilresjz, spotEdited.clarilresjz); + assignFromKeyfile(keyFile, "Locallab", "Claricresjz_" + index_str, spot.claricresjz, spotEdited.claricresjz); + assignFromKeyfile(keyFile, "Locallab", "Clarisoftjz_" + index_str, spot.clarisoftjz, spotEdited.clarisoftjz); + assignFromKeyfile(keyFile, "Locallab", "LocwavCurvejz_" + index_str, spot.locwavcurvejz, spotEdited.locwavcurvejz); + assignFromKeyfile(keyFile, "Locallab", "Contthrescie_" + index_str, spot.contthrescie, spotEdited.contthrescie); + assignFromKeyfile(keyFile, "Locallab", "Contthrescie_" + index_str, spot.contthrescie, spotEdited.contthrescie); + assignFromKeyfile(keyFile, "Locallab", "BlackEvjz_" + index_str, spot.blackEvjz, spotEdited.blackEvjz); + assignFromKeyfile(keyFile, "Locallab", "WhiteEvjz_" + index_str, spot.whiteEvjz, spotEdited.whiteEvjz); + assignFromKeyfile(keyFile, "Locallab", "Targetjz_" + index_str, spot.targetjz, spotEdited.targetjz); + assignFromKeyfile(keyFile, "Locallab", "Sigmoidthcie_" + index_str, spot.sigmoidthcie, spotEdited.sigmoidthcie); + assignFromKeyfile(keyFile, "Locallab", "Sigmoidblcie_" + index_str, spot.sigmoidblcie, spotEdited.sigmoidblcie); + assignFromKeyfile(keyFile, "Locallab", "Sigmoidldajzcie_" + index_str, spot.sigmoidldajzcie, spotEdited.sigmoidldajzcie); + assignFromKeyfile(keyFile, "Locallab", "Sigmoidthjzcie_" + index_str, spot.sigmoidthjzcie, spotEdited.sigmoidthjzcie); + assignFromKeyfile(keyFile, "Locallab", "Sigmoidbljzcie_" + index_str, spot.sigmoidbljzcie, spotEdited.sigmoidbljzcie); + assignFromKeyfile(keyFile, "Locallab", "Contqcie_" + index_str, spot.contqcie, spotEdited.contqcie); + assignFromKeyfile(keyFile, "Locallab", "Colorflcie_" + index_str, spot.colorflcie, spotEdited.colorflcie); /* - assignFromKeyfile(keyFile, "Locallab", "Lightlzcam_" + index_str, pedited, spot.lightlzcam, spotEdited.lightlzcam); - assignFromKeyfile(keyFile, "Locallab", "Lightqzcam_" + index_str, pedited, spot.lightqzcam, spotEdited.lightqzcam); - assignFromKeyfile(keyFile, "Locallab", "Contlzcam_" + index_str, pedited, spot.contlzcam, spotEdited.contlzcam); - assignFromKeyfile(keyFile, "Locallab", "Contqzcam_" + index_str, pedited, spot.contqzcam, spotEdited.contqzcam); - assignFromKeyfile(keyFile, "Locallab", "Contthreszcam_" + index_str, pedited, spot.contthreszcam, spotEdited.contthreszcam); + assignFromKeyfile(keyFile, "Locallab", "Lightlzcam_" + index_str, spot.lightlzcam, spotEdited.lightlzcam); + assignFromKeyfile(keyFile, "Locallab", "Lightqzcam_" + index_str, spot.lightqzcam, spotEdited.lightqzcam); + assignFromKeyfile(keyFile, "Locallab", "Contlzcam_" + index_str, spot.contlzcam, spotEdited.contlzcam); + assignFromKeyfile(keyFile, "Locallab", "Contqzcam_" + index_str, spot.contqzcam, spotEdited.contqzcam); + assignFromKeyfile(keyFile, "Locallab", "Contthreszcam_" + index_str, spot.contthreszcam, spotEdited.contthreszcam); */ - assignFromKeyfile(keyFile, "Locallab", "Targabscie_" + index_str, pedited, spot.targabscie, spotEdited.targabscie); - assignFromKeyfile(keyFile, "Locallab", "TargetGraycie_" + index_str, pedited, spot.targetGraycie, spotEdited.targetGraycie); - assignFromKeyfile(keyFile, "Locallab", "Catadcie_" + index_str, pedited, spot.catadcie, spotEdited.catadcie); - assignFromKeyfile(keyFile, "Locallab", "Detailcie_" + index_str, pedited, spot.detailcie, spotEdited.detailcie); + assignFromKeyfile(keyFile, "Locallab", "Targabscie_" + index_str, spot.targabscie, spotEdited.targabscie); + assignFromKeyfile(keyFile, "Locallab", "TargetGraycie_" + index_str, spot.targetGraycie, spotEdited.targetGraycie); + assignFromKeyfile(keyFile, "Locallab", "Catadcie_" + index_str, spot.catadcie, spotEdited.catadcie); + assignFromKeyfile(keyFile, "Locallab", "Detailcie_" + index_str, spot.detailcie, spotEdited.detailcie); /* - assignFromKeyfile(keyFile, "Locallab", "Colorflzcam_" + index_str, pedited, spot.colorflzcam, spotEdited.colorflzcam); - assignFromKeyfile(keyFile, "Locallab", "Saturzcam_" + index_str, pedited, spot.saturzcam, spotEdited.saturzcam); - assignFromKeyfile(keyFile, "Locallab", "Chromzcam_" + index_str, pedited, spot.chromzcam, spotEdited.chromzcam); + assignFromKeyfile(keyFile, "Locallab", "Colorflzcam_" + index_str, spot.colorflzcam, spotEdited.colorflzcam); + assignFromKeyfile(keyFile, "Locallab", "Saturzcam_" + index_str, spot.saturzcam, spotEdited.saturzcam); + assignFromKeyfile(keyFile, "Locallab", "Chromzcam_" + index_str, spot.chromzcam, spotEdited.chromzcam); */ - assignFromKeyfile(keyFile, "Locallab", "EnacieMask_" + index_str, pedited, spot.enacieMask, spotEdited.enacieMask); - assignFromKeyfile(keyFile, "Locallab", "CCmaskcieCurve_" + index_str, pedited, spot.CCmaskciecurve, spotEdited.CCmaskciecurve); - assignFromKeyfile(keyFile, "Locallab", "LLmaskcieCurve_" + index_str, pedited, spot.LLmaskciecurve, spotEdited.LLmaskciecurve); - assignFromKeyfile(keyFile, "Locallab", "HHmaskcieCurve_" + index_str, pedited, spot.HHmaskciecurve, spotEdited.HHmaskciecurve); - assignFromKeyfile(keyFile, "Locallab", "Blendmaskcie_" + index_str, pedited, spot.blendmaskcie, spotEdited.blendmaskcie); - assignFromKeyfile(keyFile, "Locallab", "Radmaskcie_" + index_str, pedited, spot.radmaskcie, spotEdited.radmaskcie); - assignFromKeyfile(keyFile, "Locallab", "Chromaskcie_" + index_str, pedited, spot.chromaskcie, spotEdited.chromaskcie); - assignFromKeyfile(keyFile, "Locallab", "Lapmaskcie_" + index_str, pedited, spot.lapmaskcie, spotEdited.lapmaskcie); - assignFromKeyfile(keyFile, "Locallab", "Gammaskcie_" + index_str, pedited, spot.gammaskcie, spotEdited.gammaskcie); - assignFromKeyfile(keyFile, "Locallab", "Slomaskcie_" + index_str, pedited, spot.slomaskcie, spotEdited.slomaskcie); - assignFromKeyfile(keyFile, "Locallab", "LmaskcieCurve_" + index_str, pedited, spot.Lmaskciecurve, spotEdited.Lmaskciecurve); - assignFromKeyfile(keyFile, "Locallab", "Recothrescie_" + index_str, pedited, spot.recothrescie, spotEdited.recothrescie); - assignFromKeyfile(keyFile, "Locallab", "Lowthrescie_" + index_str, pedited, spot.lowthrescie, spotEdited.lowthrescie); - assignFromKeyfile(keyFile, "Locallab", "Higthrescie_" + index_str, pedited, spot.higthrescie, spotEdited.higthrescie); - assignFromKeyfile(keyFile, "Locallab", "Decaycie_" + index_str, pedited, spot.decaycie, spotEdited.decaycie); + assignFromKeyfile(keyFile, "Locallab", "EnacieMask_" + index_str, spot.enacieMask, spotEdited.enacieMask); + assignFromKeyfile(keyFile, "Locallab", "CCmaskcieCurve_" + index_str, spot.CCmaskciecurve, spotEdited.CCmaskciecurve); + assignFromKeyfile(keyFile, "Locallab", "LLmaskcieCurve_" + index_str, spot.LLmaskciecurve, spotEdited.LLmaskciecurve); + assignFromKeyfile(keyFile, "Locallab", "HHmaskcieCurve_" + index_str, spot.HHmaskciecurve, spotEdited.HHmaskciecurve); + assignFromKeyfile(keyFile, "Locallab", "Blendmaskcie_" + index_str, spot.blendmaskcie, spotEdited.blendmaskcie); + assignFromKeyfile(keyFile, "Locallab", "Radmaskcie_" + index_str, spot.radmaskcie, spotEdited.radmaskcie); + assignFromKeyfile(keyFile, "Locallab", "Chromaskcie_" + index_str, spot.chromaskcie, spotEdited.chromaskcie); + assignFromKeyfile(keyFile, "Locallab", "Lapmaskcie_" + index_str, spot.lapmaskcie, spotEdited.lapmaskcie); + assignFromKeyfile(keyFile, "Locallab", "Gammaskcie_" + index_str, spot.gammaskcie, spotEdited.gammaskcie); + assignFromKeyfile(keyFile, "Locallab", "Slomaskcie_" + index_str, spot.slomaskcie, spotEdited.slomaskcie); + assignFromKeyfile(keyFile, "Locallab", "LmaskcieCurve_" + index_str, spot.Lmaskciecurve, spotEdited.Lmaskciecurve); + assignFromKeyfile(keyFile, "Locallab", "Recothrescie_" + index_str, spot.recothrescie, spotEdited.recothrescie); + assignFromKeyfile(keyFile, "Locallab", "Lowthrescie_" + index_str, spot.lowthrescie, spotEdited.lowthrescie); + assignFromKeyfile(keyFile, "Locallab", "Higthrescie_" + index_str, spot.higthrescie, spotEdited.higthrescie); + assignFromKeyfile(keyFile, "Locallab", "Decaycie_" + index_str, spot.decaycie, spotEdited.decaycie); // Append LocallabSpot and LocallabParamsEdited locallab.spots.push_back(spot); @@ -9440,37 +9540,37 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } if (keyFile.has_group("PCVignette")) { - assignFromKeyfile(keyFile, "PCVignette", "Enabled", pedited, pcvignette.enabled, pedited->pcvignette.enabled); - assignFromKeyfile(keyFile, "PCVignette", "Strength", pedited, pcvignette.strength, pedited->pcvignette.strength); - assignFromKeyfile(keyFile, "PCVignette", "Feather", pedited, pcvignette.feather, pedited->pcvignette.feather); - assignFromKeyfile(keyFile, "PCVignette", "Roundness", pedited, pcvignette.roundness, pedited->pcvignette.roundness); + assignFromKeyfile(keyFile, "PCVignette", "Enabled", pcvignette.enabled, pedited->pcvignette.enabled); + assignFromKeyfile(keyFile, "PCVignette", "Strength", pcvignette.strength, pedited->pcvignette.strength); + assignFromKeyfile(keyFile, "PCVignette", "Feather", pcvignette.feather, pedited->pcvignette.feather); + assignFromKeyfile(keyFile, "PCVignette", "Roundness", pcvignette.roundness, pedited->pcvignette.roundness); } if (keyFile.has_group("CACorrection")) { - assignFromKeyfile(keyFile, "CACorrection", "Red", pedited, cacorrection.red, pedited->cacorrection.red); - assignFromKeyfile(keyFile, "CACorrection", "Blue", pedited, cacorrection.blue, pedited->cacorrection.blue); + assignFromKeyfile(keyFile, "CACorrection", "Red", cacorrection.red, pedited->cacorrection.red); + assignFromKeyfile(keyFile, "CACorrection", "Blue", cacorrection.blue, pedited->cacorrection.blue); } if (keyFile.has_group("Vignetting Correction")) { - assignFromKeyfile(keyFile, "Vignetting Correction", "Amount", pedited, vignetting.amount, pedited->vignetting.amount); - assignFromKeyfile(keyFile, "Vignetting Correction", "Radius", pedited, vignetting.radius, pedited->vignetting.radius); - assignFromKeyfile(keyFile, "Vignetting Correction", "Strength", pedited, vignetting.strength, pedited->vignetting.strength); - assignFromKeyfile(keyFile, "Vignetting Correction", "CenterX", pedited, vignetting.centerX, pedited->vignetting.centerX); - assignFromKeyfile(keyFile, "Vignetting Correction", "CenterY", pedited, vignetting.centerY, pedited->vignetting.centerY); + assignFromKeyfile(keyFile, "Vignetting Correction", "Amount", vignetting.amount, pedited->vignetting.amount); + assignFromKeyfile(keyFile, "Vignetting Correction", "Radius", vignetting.radius, pedited->vignetting.radius); + assignFromKeyfile(keyFile, "Vignetting Correction", "Strength", vignetting.strength, pedited->vignetting.strength); + assignFromKeyfile(keyFile, "Vignetting Correction", "CenterX", vignetting.centerX, pedited->vignetting.centerX); + assignFromKeyfile(keyFile, "Vignetting Correction", "CenterY", vignetting.centerY, pedited->vignetting.centerY); } if (keyFile.has_group("Resize")) { - assignFromKeyfile(keyFile, "Resize", "Enabled", pedited, resize.enabled, pedited->resize.enabled); - assignFromKeyfile(keyFile, "Resize", "Scale", pedited, resize.scale, pedited->resize.scale); - assignFromKeyfile(keyFile, "Resize", "AppliesTo", pedited, resize.appliesTo, pedited->resize.appliesTo); - assignFromKeyfile(keyFile, "Resize", "Method", pedited, resize.method, pedited->resize.method); - assignFromKeyfile(keyFile, "Resize", "DataSpecified", pedited, resize.dataspec, pedited->resize.dataspec); - assignFromKeyfile(keyFile, "Resize", "Width", pedited, resize.width, pedited->resize.width); - assignFromKeyfile(keyFile, "Resize", "Height", pedited, resize.height, pedited->resize.height); - assignFromKeyfile(keyFile, "Resize", "LongEdge", pedited, resize.longedge, pedited->resize.longedge); - assignFromKeyfile(keyFile, "Resize", "ShortEdge", pedited, resize.shortedge, pedited->resize.shortedge); + assignFromKeyfile(keyFile, "Resize", "Enabled", resize.enabled, pedited->resize.enabled); + assignFromKeyfile(keyFile, "Resize", "Scale", resize.scale, pedited->resize.scale); + assignFromKeyfile(keyFile, "Resize", "AppliesTo", resize.appliesTo, pedited->resize.appliesTo); + assignFromKeyfile(keyFile, "Resize", "Method", resize.method, pedited->resize.method); + assignFromKeyfile(keyFile, "Resize", "DataSpecified", resize.dataspec, pedited->resize.dataspec); + assignFromKeyfile(keyFile, "Resize", "Width", resize.width, pedited->resize.width); + assignFromKeyfile(keyFile, "Resize", "Height", resize.height, pedited->resize.height); + assignFromKeyfile(keyFile, "Resize", "LongEdge", resize.longedge, pedited->resize.longedge); + assignFromKeyfile(keyFile, "Resize", "ShortEdge", resize.shortedge, pedited->resize.shortedge); if (ppVersion >= 339) { - assignFromKeyfile(keyFile, "Resize", "AllowUpscaling", pedited, resize.allowUpscaling, pedited->resize.allowUpscaling); + assignFromKeyfile(keyFile, "Resize", "AllowUpscaling", resize.allowUpscaling, pedited->resize.allowUpscaling); } else { resize.allowUpscaling = false; if (pedited) { @@ -9480,7 +9580,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } if (keyFile.has_group ("Spot removal")) { - assignFromKeyfile(keyFile, "Spot removal", "Enabled", pedited, spot.enabled, pedited->spot.enabled); + assignFromKeyfile(keyFile, "Spot removal", "Enabled", spot.enabled, pedited->spot.enabled); int i = 0; do { std::stringstream ss; @@ -9508,21 +9608,21 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } if (keyFile.has_group("PostDemosaicSharpening")) { - assignFromKeyfile(keyFile, "PostDemosaicSharpening", "Enabled", pedited, pdsharpening.enabled, pedited->pdsharpening.enabled); - assignFromKeyfile(keyFile, "PostDemosaicSharpening", "Contrast", pedited, pdsharpening.contrast, pedited->pdsharpening.contrast); - assignFromKeyfile(keyFile, "PostDemosaicSharpening", "AutoContrast", pedited, pdsharpening.autoContrast, pedited->pdsharpening.autoContrast); - assignFromKeyfile(keyFile, "PostDemosaicSharpening", "AutoRadius", pedited, pdsharpening.autoRadius, pedited->pdsharpening.autoRadius); - assignFromKeyfile(keyFile, "PostDemosaicSharpening", "DeconvRadius", pedited, pdsharpening.deconvradius, pedited->pdsharpening.deconvradius); - assignFromKeyfile(keyFile, "PostDemosaicSharpening", "DeconvRadiusOffset", pedited, pdsharpening.deconvradiusOffset, pedited->pdsharpening.deconvradiusOffset); - assignFromKeyfile(keyFile, "PostDemosaicSharpening", "DeconvIterCheck", pedited, pdsharpening.deconvitercheck, pedited->pdsharpening.deconvitercheck); - assignFromKeyfile(keyFile, "PostDemosaicSharpening", "DeconvIterations", pedited, pdsharpening.deconviter, pedited->pdsharpening.deconviter); + assignFromKeyfile(keyFile, "PostDemosaicSharpening", "Enabled", pdsharpening.enabled, pedited->pdsharpening.enabled); + assignFromKeyfile(keyFile, "PostDemosaicSharpening", "Contrast", pdsharpening.contrast, pedited->pdsharpening.contrast); + assignFromKeyfile(keyFile, "PostDemosaicSharpening", "AutoContrast", pdsharpening.autoContrast, pedited->pdsharpening.autoContrast); + assignFromKeyfile(keyFile, "PostDemosaicSharpening", "AutoRadius", pdsharpening.autoRadius, pedited->pdsharpening.autoRadius); + assignFromKeyfile(keyFile, "PostDemosaicSharpening", "DeconvRadius", pdsharpening.deconvradius, pedited->pdsharpening.deconvradius); + assignFromKeyfile(keyFile, "PostDemosaicSharpening", "DeconvRadiusOffset", pdsharpening.deconvradiusOffset, pedited->pdsharpening.deconvradiusOffset); + assignFromKeyfile(keyFile, "PostDemosaicSharpening", "DeconvIterCheck", pdsharpening.deconvitercheck, pedited->pdsharpening.deconvitercheck); + assignFromKeyfile(keyFile, "PostDemosaicSharpening", "DeconvIterations", pdsharpening.deconviter, pedited->pdsharpening.deconviter); } if (keyFile.has_group("PostResizeSharpening")) { - assignFromKeyfile(keyFile, "PostResizeSharpening", "Enabled", pedited, prsharpening.enabled, pedited->prsharpening.enabled); - assignFromKeyfile(keyFile, "PostResizeSharpening", "Contrast", pedited, prsharpening.contrast, pedited->prsharpening.contrast); - assignFromKeyfile(keyFile, "PostResizeSharpening", "Radius", pedited, prsharpening.radius, pedited->prsharpening.radius); - assignFromKeyfile(keyFile, "PostResizeSharpening", "Amount", pedited, prsharpening.amount, pedited->prsharpening.amount); + assignFromKeyfile(keyFile, "PostResizeSharpening", "Enabled", prsharpening.enabled, pedited->prsharpening.enabled); + assignFromKeyfile(keyFile, "PostResizeSharpening", "Contrast", prsharpening.contrast, pedited->prsharpening.contrast); + assignFromKeyfile(keyFile, "PostResizeSharpening", "Radius", prsharpening.radius, pedited->prsharpening.radius); + assignFromKeyfile(keyFile, "PostResizeSharpening", "Amount", prsharpening.amount, pedited->prsharpening.amount); if (keyFile.has_key("PostResizeSharpening", "Threshold")) { if (ppVersion < 302) { @@ -9541,16 +9641,16 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "PostResizeSharpening", "OnlyEdges", pedited, prsharpening.edgesonly, pedited->prsharpening.edgesonly); - assignFromKeyfile(keyFile, "PostResizeSharpening", "EdgedetectionRadius", pedited, prsharpening.edges_radius, pedited->prsharpening.edges_radius); - assignFromKeyfile(keyFile, "PostResizeSharpening", "EdgeTolerance", pedited, prsharpening.edges_tolerance, pedited->prsharpening.edges_tolerance); - assignFromKeyfile(keyFile, "PostResizeSharpening", "HalocontrolEnabled", pedited, prsharpening.halocontrol, pedited->prsharpening.halocontrol); - assignFromKeyfile(keyFile, "PostResizeSharpening", "HalocontrolAmount", pedited, prsharpening.halocontrol_amount, pedited->prsharpening.halocontrol_amount); - assignFromKeyfile(keyFile, "PostResizeSharpening", "Method", pedited, prsharpening.method, pedited->prsharpening.method); - assignFromKeyfile(keyFile, "PostResizeSharpening", "DeconvRadius", pedited, prsharpening.deconvradius, pedited->prsharpening.deconvradius); - assignFromKeyfile(keyFile, "PostResizeSharpening", "DeconvAmount", pedited, prsharpening.deconvamount, pedited->prsharpening.deconvamount); - assignFromKeyfile(keyFile, "PostResizeSharpening", "DeconvDamping", pedited, prsharpening.deconvdamping, pedited->prsharpening.deconvdamping); - assignFromKeyfile(keyFile, "PostResizeSharpening", "DeconvIterations", pedited, prsharpening.deconviter, pedited->prsharpening.deconviter); + assignFromKeyfile(keyFile, "PostResizeSharpening", "OnlyEdges", prsharpening.edgesonly, pedited->prsharpening.edgesonly); + assignFromKeyfile(keyFile, "PostResizeSharpening", "EdgedetectionRadius", prsharpening.edges_radius, pedited->prsharpening.edges_radius); + assignFromKeyfile(keyFile, "PostResizeSharpening", "EdgeTolerance", prsharpening.edges_tolerance, pedited->prsharpening.edges_tolerance); + assignFromKeyfile(keyFile, "PostResizeSharpening", "HalocontrolEnabled", prsharpening.halocontrol, pedited->prsharpening.halocontrol); + assignFromKeyfile(keyFile, "PostResizeSharpening", "HalocontrolAmount", prsharpening.halocontrol_amount, pedited->prsharpening.halocontrol_amount); + assignFromKeyfile(keyFile, "PostResizeSharpening", "Method", prsharpening.method, pedited->prsharpening.method); + assignFromKeyfile(keyFile, "PostResizeSharpening", "DeconvRadius", prsharpening.deconvradius, pedited->prsharpening.deconvradius); + assignFromKeyfile(keyFile, "PostResizeSharpening", "DeconvAmount", prsharpening.deconvamount, pedited->prsharpening.deconvamount); + assignFromKeyfile(keyFile, "PostResizeSharpening", "DeconvDamping", prsharpening.deconvdamping, pedited->prsharpening.deconvdamping); + assignFromKeyfile(keyFile, "PostResizeSharpening", "DeconvIterations", prsharpening.deconviter, pedited->prsharpening.deconviter); } if (keyFile.has_group("Color Management")) { @@ -9561,18 +9661,17 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) pedited->icm.inputProfile = true; } } - assignFromKeyfile(keyFile, "Color Management", "ToneCurve", pedited, icm.toneCurve, pedited->icm.toneCurve); - assignFromKeyfile(keyFile, "Color Management", "ApplyLookTable", pedited, icm.applyLookTable, pedited->icm.applyLookTable); - assignFromKeyfile(keyFile, "Color Management", "ApplyBaselineExposureOffset", pedited, icm.applyBaselineExposureOffset, pedited->icm.applyBaselineExposureOffset); - assignFromKeyfile(keyFile, "Color Management", "ApplyHueSatMap", pedited, icm.applyHueSatMap, pedited->icm.applyHueSatMap); - assignFromKeyfile(keyFile, "Color Management", "DCPIlluminant", pedited, icm.dcpIlluminant, pedited->icm.dcpIlluminant); - assignFromKeyfile(keyFile, "Color Management", "WorkingProfile", pedited, icm.workingProfile, pedited->icm.workingProfile); + assignFromKeyfile(keyFile, "Color Management", "ToneCurve", icm.toneCurve, pedited->icm.toneCurve); + assignFromKeyfile(keyFile, "Color Management", "ApplyLookTable", icm.applyLookTable, pedited->icm.applyLookTable); + assignFromKeyfile(keyFile, "Color Management", "ApplyBaselineExposureOffset", icm.applyBaselineExposureOffset, pedited->icm.applyBaselineExposureOffset); + assignFromKeyfile(keyFile, "Color Management", "ApplyHueSatMap", icm.applyHueSatMap, pedited->icm.applyHueSatMap); + assignFromKeyfile(keyFile, "Color Management", "DCPIlluminant", icm.dcpIlluminant, pedited->icm.dcpIlluminant); + assignFromKeyfile(keyFile, "Color Management", "WorkingProfile", icm.workingProfile, pedited->icm.workingProfile); if ( !assignFromKeyfile( keyFile, "Color Management", "WorkingTRC", - pedited, { {"none", ColorManagementParams::WorkingTrc::NONE}, {"Custom", ColorManagementParams::WorkingTrc::CUSTOM}, @@ -9596,7 +9695,6 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) keyFile, "Color Management", "Will", - pedited, { {"def", ColorManagementParams::Illuminant::DEFAULT}, {"D41", ColorManagementParams::Illuminant::D41}, @@ -9624,7 +9722,6 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) keyFile, "Color Management", "Wprim", - pedited, { {"def", ColorManagementParams::Primaries::DEFAULT}, {"srgb", ColorManagementParams::Primaries::SRGB}, @@ -9634,6 +9731,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) {"aces", ColorManagementParams::Primaries::ACES_P1}, {"wid", ColorManagementParams::Primaries::WIDE_GAMUT}, {"ac0", ColorManagementParams::Primaries::ACES_P0}, + {"jdcmax", ColorManagementParams::Primaries::JDC_MAX}, {"bru", ColorManagementParams::Primaries::BRUCE_RGB}, {"bet", ColorManagementParams::Primaries::BETA_RGB}, {"bst", ColorManagementParams::Primaries::BEST_RGB}, @@ -9649,26 +9747,26 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) pedited->icm.wprim = true; } } - assignFromKeyfile(keyFile, "Color Management", "WorkingTRCGamma", pedited, icm.workingTRCGamma, pedited->icm.workingTRCGamma); - assignFromKeyfile(keyFile, "Color Management", "WorkingTRCSlope", pedited, icm.workingTRCSlope, pedited->icm.workingTRCSlope); + assignFromKeyfile(keyFile, "Color Management", "WorkingTRCGamma", icm.workingTRCGamma, pedited->icm.workingTRCGamma); + assignFromKeyfile(keyFile, "Color Management", "WorkingTRCSlope", icm.workingTRCSlope, pedited->icm.workingTRCSlope); - assignFromKeyfile(keyFile, "Color Management", "Redx", pedited, icm.redx, pedited->icm.redx); - assignFromKeyfile(keyFile, "Color Management", "Redy", pedited, icm.redy, pedited->icm.redy); - assignFromKeyfile(keyFile, "Color Management", "Grex", pedited, icm.grex, pedited->icm.grex); - assignFromKeyfile(keyFile, "Color Management", "Grey", pedited, icm.grey, pedited->icm.grey); - assignFromKeyfile(keyFile, "Color Management", "Blux", pedited, icm.blux, pedited->icm.blux); - assignFromKeyfile(keyFile, "Color Management", "Bluy", pedited, icm.bluy, pedited->icm.bluy); - assignFromKeyfile(keyFile, "Color Management", "Preser", pedited, icm.preser, pedited->icm.preser); - assignFromKeyfile(keyFile, "Color Management", "Fbw", pedited, icm.fbw, pedited->icm.fbw); - assignFromKeyfile(keyFile, "Color Management", "Gamut", pedited, icm.gamut, pedited->icm.gamut); - assignFromKeyfile(keyFile, "Color Management", "LabGridcieALow", pedited, icm.labgridcieALow, pedited->icm.labgridcieALow); - assignFromKeyfile(keyFile, "Color Management", "LabGridcieBLow", pedited, icm.labgridcieBLow, pedited->icm.labgridcieBLow); - assignFromKeyfile(keyFile, "Color Management", "LabGridcieAHigh", pedited, icm.labgridcieAHigh, pedited->icm.labgridcieAHigh); - assignFromKeyfile(keyFile, "Color Management", "LabGridcieBHigh", pedited, icm.labgridcieBHigh, pedited->icm.labgridcieBHigh); - assignFromKeyfile(keyFile, "Color Management", "LabGridcieGx", pedited, icm.labgridcieGx, pedited->icm.labgridcieGx); - assignFromKeyfile(keyFile, "Color Management", "LabGridcieGy", pedited, icm.labgridcieGy, pedited->icm.labgridcieGy); - assignFromKeyfile(keyFile, "Color Management", "LabGridcieWx", pedited, icm.labgridcieWx, pedited->icm.labgridcieWx); - assignFromKeyfile(keyFile, "Color Management", "LabGridcieWy", pedited, icm.labgridcieWy, pedited->icm.labgridcieWy); + assignFromKeyfile(keyFile, "Color Management", "Redx", icm.redx, pedited->icm.redx); + assignFromKeyfile(keyFile, "Color Management", "Redy", icm.redy, pedited->icm.redy); + assignFromKeyfile(keyFile, "Color Management", "Grex", icm.grex, pedited->icm.grex); + assignFromKeyfile(keyFile, "Color Management", "Grey", icm.grey, pedited->icm.grey); + assignFromKeyfile(keyFile, "Color Management", "Blux", icm.blux, pedited->icm.blux); + assignFromKeyfile(keyFile, "Color Management", "Bluy", icm.bluy, pedited->icm.bluy); + assignFromKeyfile(keyFile, "Color Management", "Preser", icm.preser, pedited->icm.preser); + assignFromKeyfile(keyFile, "Color Management", "Fbw", icm.fbw, pedited->icm.fbw); + assignFromKeyfile(keyFile, "Color Management", "Gamut", icm.gamut, pedited->icm.gamut); + assignFromKeyfile(keyFile, "Color Management", "LabGridcieALow", icm.labgridcieALow, pedited->icm.labgridcieALow); + assignFromKeyfile(keyFile, "Color Management", "LabGridcieBLow", icm.labgridcieBLow, pedited->icm.labgridcieBLow); + assignFromKeyfile(keyFile, "Color Management", "LabGridcieAHigh", icm.labgridcieAHigh, pedited->icm.labgridcieAHigh); + assignFromKeyfile(keyFile, "Color Management", "LabGridcieBHigh", icm.labgridcieBHigh, pedited->icm.labgridcieBHigh); + assignFromKeyfile(keyFile, "Color Management", "LabGridcieGx", icm.labgridcieGx, pedited->icm.labgridcieGx); + assignFromKeyfile(keyFile, "Color Management", "LabGridcieGy", icm.labgridcieGy, pedited->icm.labgridcieGy); + assignFromKeyfile(keyFile, "Color Management", "LabGridcieWx", icm.labgridcieWx, pedited->icm.labgridcieWx); + assignFromKeyfile(keyFile, "Color Management", "LabGridcieWy", icm.labgridcieWy, pedited->icm.labgridcieWy); if (keyFile.has_key("Color Management", "aIntent")) { Glib::ustring intent = keyFile.get_string("Color Management", "aIntent"); @@ -9687,7 +9785,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "Color Management", "OutputProfile", pedited, icm.outputProfile, pedited->icm.outputProfile); + assignFromKeyfile(keyFile, "Color Management", "OutputProfile", icm.outputProfile, pedited->icm.outputProfile); if (ppVersion < 341) { if (icm.outputProfile == "RT_Medium_gsRGB") { icm.outputProfile = "RTv4_Medium"; @@ -9726,73 +9824,73 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) pedited->icm.outputIntent = true; } } - assignFromKeyfile(keyFile, "Color Management", "OutputBPC", pedited, icm.outputBPC, pedited->icm.outputBPC); + assignFromKeyfile(keyFile, "Color Management", "OutputBPC", icm.outputBPC, pedited->icm.outputBPC); } if (keyFile.has_group("Wavelet")) { - assignFromKeyfile(keyFile, "Wavelet", "Enabled", pedited, wavelet.enabled, pedited->wavelet.enabled); - assignFromKeyfile(keyFile, "Wavelet", "Strength", pedited, wavelet.strength, pedited->wavelet.strength); - assignFromKeyfile(keyFile, "Wavelet", "Balance", pedited, wavelet.balance, pedited->wavelet.balance); - assignFromKeyfile(keyFile, "Wavelet", "Sigmafin", pedited, wavelet.sigmafin, pedited->wavelet.sigmafin); - assignFromKeyfile(keyFile, "Wavelet", "Sigmaton", pedited, wavelet.sigmaton, pedited->wavelet.sigmaton); - assignFromKeyfile(keyFile, "Wavelet", "Sigmacol", pedited, wavelet.sigmacol, pedited->wavelet.sigmacol); - assignFromKeyfile(keyFile, "Wavelet", "Sigmadir", pedited, wavelet.sigmadir, pedited->wavelet.sigmadir); - assignFromKeyfile(keyFile, "Wavelet", "Rangeab", pedited, wavelet.rangeab, pedited->wavelet.rangeab); - assignFromKeyfile(keyFile, "Wavelet", "Protab", pedited, wavelet.protab, pedited->wavelet.protab); - assignFromKeyfile(keyFile, "Wavelet", "Iter", pedited, wavelet.iter, pedited->wavelet.iter); - assignFromKeyfile(keyFile, "Wavelet", "Median", pedited, wavelet.median, pedited->wavelet.median); - assignFromKeyfile(keyFile, "Wavelet", "Medianlev", pedited, wavelet.medianlev, pedited->wavelet.medianlev); - assignFromKeyfile(keyFile, "Wavelet", "Linkedg", pedited, wavelet.linkedg, pedited->wavelet.linkedg); - assignFromKeyfile(keyFile, "Wavelet", "CBenab", pedited, wavelet.cbenab, pedited->wavelet.cbenab); - assignFromKeyfile(keyFile, "Wavelet", "CBgreenhigh", pedited, wavelet.greenhigh, pedited->wavelet.greenhigh); - assignFromKeyfile(keyFile, "Wavelet", "CBgreenmed", pedited, wavelet.greenmed, pedited->wavelet.greenmed); - assignFromKeyfile(keyFile, "Wavelet", "CBgreenlow", pedited, wavelet.greenlow, pedited->wavelet.greenlow); - assignFromKeyfile(keyFile, "Wavelet", "CBbluehigh", pedited, wavelet.bluehigh, pedited->wavelet.bluehigh); - assignFromKeyfile(keyFile, "Wavelet", "CBbluemed", pedited, wavelet.bluemed, pedited->wavelet.bluemed); - assignFromKeyfile(keyFile, "Wavelet", "CBbluelow", pedited, wavelet.bluelow, pedited->wavelet.bluelow); - assignFromKeyfile(keyFile, "Wavelet", "Ballum", pedited, wavelet.ballum, pedited->wavelet.ballum); - assignFromKeyfile(keyFile, "Wavelet", "Sigm", pedited, wavelet.sigm, pedited->wavelet.sigm); - assignFromKeyfile(keyFile, "Wavelet", "Levden", pedited, wavelet.levden, pedited->wavelet.levden); - assignFromKeyfile(keyFile, "Wavelet", "Thrden", pedited, wavelet.thrden, pedited->wavelet.thrden); - assignFromKeyfile(keyFile, "Wavelet", "Limden", pedited, wavelet.limden, pedited->wavelet.limden); - assignFromKeyfile(keyFile, "Wavelet", "Balchrom", pedited, wavelet.balchrom, pedited->wavelet.balchrom); - assignFromKeyfile(keyFile, "Wavelet", "Chromfine", pedited, wavelet.chromfi, pedited->wavelet.chromfi); - assignFromKeyfile(keyFile, "Wavelet", "Chromcoarse", pedited, wavelet.chromco, pedited->wavelet.chromco); - assignFromKeyfile(keyFile, "Wavelet", "MergeL", pedited, wavelet.mergeL, pedited->wavelet.mergeL); - assignFromKeyfile(keyFile, "Wavelet", "MergeC", pedited, wavelet.mergeC, pedited->wavelet.mergeC); - assignFromKeyfile(keyFile, "Wavelet", "Softrad", pedited, wavelet.softrad, pedited->wavelet.softrad); - assignFromKeyfile(keyFile, "Wavelet", "Softradend", pedited, wavelet.softradend, pedited->wavelet.softradend); - assignFromKeyfile(keyFile, "Wavelet", "Strend", pedited, wavelet.strend, pedited->wavelet.strend); - assignFromKeyfile(keyFile, "Wavelet", "Detend", pedited, wavelet.detend, pedited->wavelet.detend); - assignFromKeyfile(keyFile, "Wavelet", "Thrend", pedited, wavelet.thrend, pedited->wavelet.thrend); - assignFromKeyfile(keyFile, "Wavelet", "Lipst", pedited, wavelet.lipst, pedited->wavelet.lipst); - assignFromKeyfile(keyFile, "Wavelet", "AvoidColorShift", pedited, wavelet.avoid, pedited->wavelet.avoid); - assignFromKeyfile(keyFile, "Wavelet", "Showmask", pedited, wavelet.showmask, pedited->wavelet.showmask); - assignFromKeyfile(keyFile, "Wavelet", "Oldsh", pedited, wavelet.oldsh, pedited->wavelet.oldsh); - assignFromKeyfile(keyFile, "Wavelet", "TMr", pedited, wavelet.tmr, pedited->wavelet.tmr); - assignFromKeyfile(keyFile, "Wavelet", "LabGridALow", pedited, wavelet.labgridALow, pedited->wavelet.labgridALow); - assignFromKeyfile(keyFile, "Wavelet", "LabGridBLow", pedited, wavelet.labgridBLow, pedited->wavelet.labgridBLow); - assignFromKeyfile(keyFile, "Wavelet", "LabGridAHigh", pedited, wavelet.labgridAHigh, pedited->wavelet.labgridAHigh); - assignFromKeyfile(keyFile, "Wavelet", "LabGridBHigh", pedited, wavelet.labgridBHigh, pedited->wavelet.labgridBHigh); + assignFromKeyfile(keyFile, "Wavelet", "Enabled", wavelet.enabled, pedited->wavelet.enabled); + assignFromKeyfile(keyFile, "Wavelet", "Strength", wavelet.strength, pedited->wavelet.strength); + assignFromKeyfile(keyFile, "Wavelet", "Balance", wavelet.balance, pedited->wavelet.balance); + assignFromKeyfile(keyFile, "Wavelet", "Sigmafin", wavelet.sigmafin, pedited->wavelet.sigmafin); + assignFromKeyfile(keyFile, "Wavelet", "Sigmaton", wavelet.sigmaton, pedited->wavelet.sigmaton); + assignFromKeyfile(keyFile, "Wavelet", "Sigmacol", wavelet.sigmacol, pedited->wavelet.sigmacol); + assignFromKeyfile(keyFile, "Wavelet", "Sigmadir", wavelet.sigmadir, pedited->wavelet.sigmadir); + assignFromKeyfile(keyFile, "Wavelet", "Rangeab", wavelet.rangeab, pedited->wavelet.rangeab); + assignFromKeyfile(keyFile, "Wavelet", "Protab", wavelet.protab, pedited->wavelet.protab); + assignFromKeyfile(keyFile, "Wavelet", "Iter", wavelet.iter, pedited->wavelet.iter); + assignFromKeyfile(keyFile, "Wavelet", "Median", wavelet.median, pedited->wavelet.median); + assignFromKeyfile(keyFile, "Wavelet", "Medianlev", wavelet.medianlev, pedited->wavelet.medianlev); + assignFromKeyfile(keyFile, "Wavelet", "Linkedg", wavelet.linkedg, pedited->wavelet.linkedg); + assignFromKeyfile(keyFile, "Wavelet", "CBenab", wavelet.cbenab, pedited->wavelet.cbenab); + assignFromKeyfile(keyFile, "Wavelet", "CBgreenhigh", wavelet.greenhigh, pedited->wavelet.greenhigh); + assignFromKeyfile(keyFile, "Wavelet", "CBgreenmed", wavelet.greenmed, pedited->wavelet.greenmed); + assignFromKeyfile(keyFile, "Wavelet", "CBgreenlow", wavelet.greenlow, pedited->wavelet.greenlow); + assignFromKeyfile(keyFile, "Wavelet", "CBbluehigh", wavelet.bluehigh, pedited->wavelet.bluehigh); + assignFromKeyfile(keyFile, "Wavelet", "CBbluemed", wavelet.bluemed, pedited->wavelet.bluemed); + assignFromKeyfile(keyFile, "Wavelet", "CBbluelow", wavelet.bluelow, pedited->wavelet.bluelow); + assignFromKeyfile(keyFile, "Wavelet", "Ballum", wavelet.ballum, pedited->wavelet.ballum); + assignFromKeyfile(keyFile, "Wavelet", "Sigm", wavelet.sigm, pedited->wavelet.sigm); + assignFromKeyfile(keyFile, "Wavelet", "Levden", wavelet.levden, pedited->wavelet.levden); + assignFromKeyfile(keyFile, "Wavelet", "Thrden", wavelet.thrden, pedited->wavelet.thrden); + assignFromKeyfile(keyFile, "Wavelet", "Limden", wavelet.limden, pedited->wavelet.limden); + assignFromKeyfile(keyFile, "Wavelet", "Balchrom", wavelet.balchrom, pedited->wavelet.balchrom); + assignFromKeyfile(keyFile, "Wavelet", "Chromfine", wavelet.chromfi, pedited->wavelet.chromfi); + assignFromKeyfile(keyFile, "Wavelet", "Chromcoarse", wavelet.chromco, pedited->wavelet.chromco); + assignFromKeyfile(keyFile, "Wavelet", "MergeL", wavelet.mergeL, pedited->wavelet.mergeL); + assignFromKeyfile(keyFile, "Wavelet", "MergeC", wavelet.mergeC, pedited->wavelet.mergeC); + assignFromKeyfile(keyFile, "Wavelet", "Softrad", wavelet.softrad, pedited->wavelet.softrad); + assignFromKeyfile(keyFile, "Wavelet", "Softradend", wavelet.softradend, pedited->wavelet.softradend); + assignFromKeyfile(keyFile, "Wavelet", "Strend", wavelet.strend, pedited->wavelet.strend); + assignFromKeyfile(keyFile, "Wavelet", "Detend", wavelet.detend, pedited->wavelet.detend); + assignFromKeyfile(keyFile, "Wavelet", "Thrend", wavelet.thrend, pedited->wavelet.thrend); + assignFromKeyfile(keyFile, "Wavelet", "Lipst", wavelet.lipst, pedited->wavelet.lipst); + assignFromKeyfile(keyFile, "Wavelet", "AvoidColorShift", wavelet.avoid, pedited->wavelet.avoid); + assignFromKeyfile(keyFile, "Wavelet", "Showmask", wavelet.showmask, pedited->wavelet.showmask); + assignFromKeyfile(keyFile, "Wavelet", "Oldsh", wavelet.oldsh, pedited->wavelet.oldsh); + assignFromKeyfile(keyFile, "Wavelet", "TMr", wavelet.tmr, pedited->wavelet.tmr); + assignFromKeyfile(keyFile, "Wavelet", "LabGridALow", wavelet.labgridALow, pedited->wavelet.labgridALow); + assignFromKeyfile(keyFile, "Wavelet", "LabGridBLow", wavelet.labgridBLow, pedited->wavelet.labgridBLow); + assignFromKeyfile(keyFile, "Wavelet", "LabGridAHigh", wavelet.labgridAHigh, pedited->wavelet.labgridAHigh); + assignFromKeyfile(keyFile, "Wavelet", "LabGridBHigh", wavelet.labgridBHigh, pedited->wavelet.labgridBHigh); if (ppVersion < 331) { // wavelet.Lmethod was a string before version 331 Glib::ustring temp; - assignFromKeyfile(keyFile, "Wavelet", "LevMethod", pedited, temp, pedited->wavelet.Lmethod); + assignFromKeyfile(keyFile, "Wavelet", "LevMethod", temp, pedited->wavelet.Lmethod); try { wavelet.Lmethod = std::stoi(temp); } catch (...) { } } else { - assignFromKeyfile(keyFile, "Wavelet", "LevMethod", pedited, wavelet.Lmethod, pedited->wavelet.Lmethod); + assignFromKeyfile(keyFile, "Wavelet", "LevMethod", wavelet.Lmethod, pedited->wavelet.Lmethod); } - assignFromKeyfile(keyFile, "Wavelet", "ChoiceLevMethod", pedited, wavelet.CLmethod, pedited->wavelet.CLmethod); - assignFromKeyfile(keyFile, "Wavelet", "BackMethod", pedited, wavelet.Backmethod, pedited->wavelet.Backmethod); - assignFromKeyfile(keyFile, "Wavelet", "TilesMethod", pedited, wavelet.Tilesmethod, pedited->wavelet.Tilesmethod); + assignFromKeyfile(keyFile, "Wavelet", "ChoiceLevMethod", wavelet.CLmethod, pedited->wavelet.CLmethod); + assignFromKeyfile(keyFile, "Wavelet", "BackMethod", wavelet.Backmethod, pedited->wavelet.Backmethod); + assignFromKeyfile(keyFile, "Wavelet", "TilesMethod", wavelet.Tilesmethod, pedited->wavelet.Tilesmethod); if (keyFile.has_key("Wavelet", "complexMethod")) { - assignFromKeyfile(keyFile, "Wavelet", "complexMethod", pedited, wavelet.complexmethod, pedited->wavelet.complexmethod); + assignFromKeyfile(keyFile, "Wavelet", "complexMethod", wavelet.complexmethod, pedited->wavelet.complexmethod); } else if (wavelet.enabled) { wavelet.complexmethod = "expert"; if (pedited) { @@ -9800,67 +9898,67 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - //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); - assignFromKeyfile(keyFile, "Wavelet", "DaubMethod", pedited, wavelet.daubcoeffmethod, pedited->wavelet.daubcoeffmethod); - assignFromKeyfile(keyFile, "Wavelet", "CHromaMethod", pedited, wavelet.CHmethod, pedited->wavelet.CHmethod); - assignFromKeyfile(keyFile, "Wavelet", "Medgreinf", pedited, wavelet.Medgreinf, pedited->wavelet.Medgreinf); - assignFromKeyfile(keyFile, "Wavelet", "Ushamethod", pedited, wavelet.ushamethod, pedited->wavelet.ushamethod); - assignFromKeyfile(keyFile, "Wavelet", "CHSLromaMethod", pedited, wavelet.CHSLmethod, pedited->wavelet.CHSLmethod); - assignFromKeyfile(keyFile, "Wavelet", "EDMethod", pedited, wavelet.EDmethod, pedited->wavelet.EDmethod); - assignFromKeyfile(keyFile, "Wavelet", "NPMethod", pedited, wavelet.NPmethod, pedited->wavelet.NPmethod); - assignFromKeyfile(keyFile, "Wavelet", "BAMethod", pedited, wavelet.BAmethod, pedited->wavelet.BAmethod); - assignFromKeyfile(keyFile, "Wavelet", "TMMethod", pedited, wavelet.TMmethod, pedited->wavelet.TMmethod); - assignFromKeyfile(keyFile, "Wavelet", "HSMethod", pedited, wavelet.HSmethod, pedited->wavelet.HSmethod); - assignFromKeyfile(keyFile, "Wavelet", "DirMethod", pedited, wavelet.Dirmethod, pedited->wavelet.Dirmethod); - assignFromKeyfile(keyFile, "Wavelet", "Sigma", pedited, wavelet.sigma, pedited->wavelet.sigma); - assignFromKeyfile(keyFile, "Wavelet", "Offset", pedited, wavelet.offset, pedited->wavelet.offset); - assignFromKeyfile(keyFile, "Wavelet", "Lowthr", pedited, wavelet.lowthr, pedited->wavelet.lowthr); - assignFromKeyfile(keyFile, "Wavelet", "ResidualcontShadow", pedited, wavelet.rescon, pedited->wavelet.rescon); - assignFromKeyfile(keyFile, "Wavelet", "ResidualcontHighlight", pedited, wavelet.resconH, pedited->wavelet.resconH); - assignFromKeyfile(keyFile, "Wavelet", "Residualchroma", pedited, wavelet.reschro, pedited->wavelet.reschro); - assignFromKeyfile(keyFile, "Wavelet", "Residualblur", pedited, wavelet.resblur, pedited->wavelet.resblur); - assignFromKeyfile(keyFile, "Wavelet", "Residualblurc", pedited, wavelet.resblurc, pedited->wavelet.resblurc); - assignFromKeyfile(keyFile, "Wavelet", "ResidualTM", pedited, wavelet.tmrs, pedited->wavelet.tmrs); - assignFromKeyfile(keyFile, "Wavelet", "ResidualEDGS", pedited, wavelet.edgs, pedited->wavelet.edgs); - assignFromKeyfile(keyFile, "Wavelet", "ResidualSCALE", pedited, wavelet.scale, pedited->wavelet.scale); - assignFromKeyfile(keyFile, "Wavelet", "Residualgamma", pedited, wavelet.gamma, pedited->wavelet.gamma); - assignFromKeyfile(keyFile, "Wavelet", "ContExtra", pedited, wavelet.sup, pedited->wavelet.sup); - assignFromKeyfile(keyFile, "Wavelet", "HueRangeResidual", pedited, wavelet.sky, pedited->wavelet.sky); - assignFromKeyfile(keyFile, "Wavelet", "MaxLev", pedited, wavelet.thres, pedited->wavelet.thres); - assignFromKeyfile(keyFile, "Wavelet", "ThresholdHighlight", pedited, wavelet.threshold, pedited->wavelet.threshold); - assignFromKeyfile(keyFile, "Wavelet", "ThresholdShadow", pedited, wavelet.threshold2, pedited->wavelet.threshold2); - assignFromKeyfile(keyFile, "Wavelet", "Edgedetect", pedited, wavelet.edgedetect, pedited->wavelet.edgedetect); - assignFromKeyfile(keyFile, "Wavelet", "Edgedetectthr", pedited, wavelet.edgedetectthr, pedited->wavelet.edgedetectthr); - assignFromKeyfile(keyFile, "Wavelet", "EdgedetectthrHi", pedited, wavelet.edgedetectthr2, pedited->wavelet.edgedetectthr2); - assignFromKeyfile(keyFile, "Wavelet", "Edgesensi", pedited, wavelet.edgesensi, pedited->wavelet.edgesensi); - assignFromKeyfile(keyFile, "Wavelet", "Edgeampli", pedited, wavelet.edgeampli, pedited->wavelet.edgeampli); - assignFromKeyfile(keyFile, "Wavelet", "ThresholdChroma", pedited, wavelet.chroma, pedited->wavelet.chroma); - assignFromKeyfile(keyFile, "Wavelet", "ChromaLink", pedited, wavelet.chro, pedited->wavelet.chro); - assignFromKeyfile(keyFile, "Wavelet", "Contrast", pedited, wavelet.contrast, pedited->wavelet.contrast); - assignFromKeyfile(keyFile, "Wavelet", "Edgrad", pedited, wavelet.edgrad, pedited->wavelet.edgrad); - assignFromKeyfile(keyFile, "Wavelet", "Edgeffect", pedited, wavelet.edgeffect, pedited->wavelet.edgeffect); - assignFromKeyfile(keyFile, "Wavelet", "Edgval", pedited, wavelet.edgval, pedited->wavelet.edgval); - assignFromKeyfile(keyFile, "Wavelet", "ThrEdg", pedited, wavelet.edgthresh, pedited->wavelet.edgthresh); - assignFromKeyfile(keyFile, "Wavelet", "ThresholdResidShadow", pedited, wavelet.thr, pedited->wavelet.thr); - assignFromKeyfile(keyFile, "Wavelet", "ThresholdResidHighLight", pedited, wavelet.thrH, pedited->wavelet.thrH); - assignFromKeyfile(keyFile, "Wavelet", "Residualradius", pedited, wavelet.radius, pedited->wavelet.radius); - 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", "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); - assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveW", pedited, wavelet.opacityCurveW, pedited->wavelet.opacityCurveW); - assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveWL", pedited, wavelet.opacityCurveWL, pedited->wavelet.opacityCurveWL); - assignFromKeyfile(keyFile, "Wavelet", "HHcurve", pedited, wavelet.hhcurve, pedited->wavelet.hhcurve); - assignFromKeyfile(keyFile, "Wavelet", "Wavguidcurve", pedited, wavelet.wavguidcurve, pedited->wavelet.wavguidcurve); - assignFromKeyfile(keyFile, "Wavelet", "Wavhuecurve", pedited, wavelet.wavhuecurve, pedited->wavelet.wavhuecurve); - assignFromKeyfile(keyFile, "Wavelet", "CHcurve", pedited, wavelet.Chcurve, pedited->wavelet.Chcurve); - assignFromKeyfile(keyFile, "Wavelet", "WavclCurve", pedited, wavelet.wavclCurve, pedited->wavelet.wavclCurve); + //assignFromKeyfile(keyFile, "Wavelet", "denMethod", wavelet.denmethod, pedited->wavelet.denmethod); + assignFromKeyfile(keyFile, "Wavelet", "mixMethod", wavelet.mixmethod, pedited->wavelet.mixmethod); + assignFromKeyfile(keyFile, "Wavelet", "sliMethod", wavelet.slimethod, pedited->wavelet.slimethod); + assignFromKeyfile(keyFile, "Wavelet", "quaMethod", wavelet.quamethod, pedited->wavelet.quamethod); + assignFromKeyfile(keyFile, "Wavelet", "DaubMethod", wavelet.daubcoeffmethod, pedited->wavelet.daubcoeffmethod); + assignFromKeyfile(keyFile, "Wavelet", "CHromaMethod", wavelet.CHmethod, pedited->wavelet.CHmethod); + assignFromKeyfile(keyFile, "Wavelet", "Medgreinf", wavelet.Medgreinf, pedited->wavelet.Medgreinf); + assignFromKeyfile(keyFile, "Wavelet", "Ushamethod", wavelet.ushamethod, pedited->wavelet.ushamethod); + assignFromKeyfile(keyFile, "Wavelet", "CHSLromaMethod", wavelet.CHSLmethod, pedited->wavelet.CHSLmethod); + assignFromKeyfile(keyFile, "Wavelet", "EDMethod", wavelet.EDmethod, pedited->wavelet.EDmethod); + assignFromKeyfile(keyFile, "Wavelet", "NPMethod", wavelet.NPmethod, pedited->wavelet.NPmethod); + assignFromKeyfile(keyFile, "Wavelet", "BAMethod", wavelet.BAmethod, pedited->wavelet.BAmethod); + assignFromKeyfile(keyFile, "Wavelet", "TMMethod", wavelet.TMmethod, pedited->wavelet.TMmethod); + assignFromKeyfile(keyFile, "Wavelet", "HSMethod", wavelet.HSmethod, pedited->wavelet.HSmethod); + assignFromKeyfile(keyFile, "Wavelet", "DirMethod", wavelet.Dirmethod, pedited->wavelet.Dirmethod); + assignFromKeyfile(keyFile, "Wavelet", "Sigma", wavelet.sigma, pedited->wavelet.sigma); + assignFromKeyfile(keyFile, "Wavelet", "Offset", wavelet.offset, pedited->wavelet.offset); + assignFromKeyfile(keyFile, "Wavelet", "Lowthr", wavelet.lowthr, pedited->wavelet.lowthr); + assignFromKeyfile(keyFile, "Wavelet", "ResidualcontShadow", wavelet.rescon, pedited->wavelet.rescon); + assignFromKeyfile(keyFile, "Wavelet", "ResidualcontHighlight", wavelet.resconH, pedited->wavelet.resconH); + assignFromKeyfile(keyFile, "Wavelet", "Residualchroma", wavelet.reschro, pedited->wavelet.reschro); + assignFromKeyfile(keyFile, "Wavelet", "Residualblur", wavelet.resblur, pedited->wavelet.resblur); + assignFromKeyfile(keyFile, "Wavelet", "Residualblurc", wavelet.resblurc, pedited->wavelet.resblurc); + assignFromKeyfile(keyFile, "Wavelet", "ResidualTM", wavelet.tmrs, pedited->wavelet.tmrs); + assignFromKeyfile(keyFile, "Wavelet", "ResidualEDGS", wavelet.edgs, pedited->wavelet.edgs); + assignFromKeyfile(keyFile, "Wavelet", "ResidualSCALE", wavelet.scale, pedited->wavelet.scale); + assignFromKeyfile(keyFile, "Wavelet", "Residualgamma", wavelet.gamma, pedited->wavelet.gamma); + assignFromKeyfile(keyFile, "Wavelet", "ContExtra", wavelet.sup, pedited->wavelet.sup); + assignFromKeyfile(keyFile, "Wavelet", "HueRangeResidual", wavelet.sky, pedited->wavelet.sky); + assignFromKeyfile(keyFile, "Wavelet", "MaxLev", wavelet.thres, pedited->wavelet.thres); + assignFromKeyfile(keyFile, "Wavelet", "ThresholdHighlight", wavelet.threshold, pedited->wavelet.threshold); + assignFromKeyfile(keyFile, "Wavelet", "ThresholdShadow", wavelet.threshold2, pedited->wavelet.threshold2); + assignFromKeyfile(keyFile, "Wavelet", "Edgedetect", wavelet.edgedetect, pedited->wavelet.edgedetect); + assignFromKeyfile(keyFile, "Wavelet", "Edgedetectthr", wavelet.edgedetectthr, pedited->wavelet.edgedetectthr); + assignFromKeyfile(keyFile, "Wavelet", "EdgedetectthrHi", wavelet.edgedetectthr2, pedited->wavelet.edgedetectthr2); + assignFromKeyfile(keyFile, "Wavelet", "Edgesensi", wavelet.edgesensi, pedited->wavelet.edgesensi); + assignFromKeyfile(keyFile, "Wavelet", "Edgeampli", wavelet.edgeampli, pedited->wavelet.edgeampli); + assignFromKeyfile(keyFile, "Wavelet", "ThresholdChroma", wavelet.chroma, pedited->wavelet.chroma); + assignFromKeyfile(keyFile, "Wavelet", "ChromaLink", wavelet.chro, pedited->wavelet.chro); + assignFromKeyfile(keyFile, "Wavelet", "Contrast", wavelet.contrast, pedited->wavelet.contrast); + assignFromKeyfile(keyFile, "Wavelet", "Edgrad", wavelet.edgrad, pedited->wavelet.edgrad); + assignFromKeyfile(keyFile, "Wavelet", "Edgeffect", wavelet.edgeffect, pedited->wavelet.edgeffect); + assignFromKeyfile(keyFile, "Wavelet", "Edgval", wavelet.edgval, pedited->wavelet.edgval); + assignFromKeyfile(keyFile, "Wavelet", "ThrEdg", wavelet.edgthresh, pedited->wavelet.edgthresh); + assignFromKeyfile(keyFile, "Wavelet", "ThresholdResidShadow", wavelet.thr, pedited->wavelet.thr); + assignFromKeyfile(keyFile, "Wavelet", "ThresholdResidHighLight", wavelet.thrH, pedited->wavelet.thrH); + assignFromKeyfile(keyFile, "Wavelet", "Residualradius", wavelet.radius, pedited->wavelet.radius); + assignFromKeyfile(keyFile, "Wavelet", "ContrastCurve", wavelet.ccwcurve, pedited->wavelet.ccwcurve); + assignFromKeyfile(keyFile, "Wavelet", "blcurve", wavelet.blcurve, pedited->wavelet.blcurve); + assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveRG", wavelet.opacityCurveRG, pedited->wavelet.opacityCurveRG); + //assignFromKeyfile(keyFile, "Wavelet", "Levalshc", wavelet.opacityCurveSH, pedited->wavelet.opacityCurveSH); + assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveBY", wavelet.opacityCurveBY, pedited->wavelet.opacityCurveBY); + assignFromKeyfile(keyFile, "Wavelet", "wavdenoise", wavelet.wavdenoise, pedited->wavelet.wavdenoise); + assignFromKeyfile(keyFile, "Wavelet", "wavdenoiseh", wavelet.wavdenoiseh, pedited->wavelet.wavdenoiseh); + assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveW", wavelet.opacityCurveW, pedited->wavelet.opacityCurveW); + assignFromKeyfile(keyFile, "Wavelet", "OpacityCurveWL", wavelet.opacityCurveWL, pedited->wavelet.opacityCurveWL); + assignFromKeyfile(keyFile, "Wavelet", "HHcurve", wavelet.hhcurve, pedited->wavelet.hhcurve); + assignFromKeyfile(keyFile, "Wavelet", "Wavguidcurve", wavelet.wavguidcurve, pedited->wavelet.wavguidcurve); + assignFromKeyfile(keyFile, "Wavelet", "Wavhuecurve", wavelet.wavhuecurve, pedited->wavelet.wavhuecurve); + assignFromKeyfile(keyFile, "Wavelet", "CHcurve", wavelet.Chcurve, pedited->wavelet.Chcurve); + assignFromKeyfile(keyFile, "Wavelet", "WavclCurve", wavelet.wavclCurve, pedited->wavelet.wavclCurve); if (keyFile.has_key("Wavelet", "Hueskin")) { const std::vector thresh = keyFile.get_integer_list("Wavelet", "Hueskin"); @@ -10018,11 +10116,11 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "Wavelet", "Skinprotect", pedited, wavelet.skinprotect, pedited->wavelet.skinprotect); - assignFromKeyfile(keyFile, "Wavelet", "chrwav", pedited, wavelet.chrwav, pedited->wavelet.chrwav); - assignFromKeyfile(keyFile, "Wavelet", "bluwav", pedited, wavelet.bluwav, pedited->wavelet.bluwav); - assignFromKeyfile(keyFile, "Wavelet", "Expcontrast", pedited, wavelet.expcontrast, pedited->wavelet.expcontrast); - assignFromKeyfile(keyFile, "Wavelet", "Expchroma", pedited, wavelet.expchroma, pedited->wavelet.expchroma); + assignFromKeyfile(keyFile, "Wavelet", "Skinprotect", wavelet.skinprotect, pedited->wavelet.skinprotect); + assignFromKeyfile(keyFile, "Wavelet", "chrwav", wavelet.chrwav, pedited->wavelet.chrwav); + assignFromKeyfile(keyFile, "Wavelet", "bluwav", wavelet.bluwav, pedited->wavelet.bluwav); + assignFromKeyfile(keyFile, "Wavelet", "Expcontrast", wavelet.expcontrast, pedited->wavelet.expcontrast); + assignFromKeyfile(keyFile, "Wavelet", "Expchroma", wavelet.expchroma, pedited->wavelet.expchroma); for (int i = 0; i < 9; ++i) { std::stringstream ss; @@ -10050,19 +10148,19 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "Wavelet", "Expedge", pedited, wavelet.expedge, pedited->wavelet.expedge); - assignFromKeyfile(keyFile, "Wavelet", "expbl", pedited, wavelet.expbl, pedited->wavelet.expbl); - assignFromKeyfile(keyFile, "Wavelet", "Expresid", pedited, wavelet.expresid, pedited->wavelet.expresid); - assignFromKeyfile(keyFile, "Wavelet", "Expfinal", pedited, wavelet.expfinal, pedited->wavelet.expfinal); - assignFromKeyfile(keyFile, "Wavelet", "Exptoning", pedited, wavelet.exptoning, pedited->wavelet.exptoning); - assignFromKeyfile(keyFile, "Wavelet", "Expnoise", pedited, wavelet.expnoise, pedited->wavelet.expnoise); - assignFromKeyfile(keyFile, "Wavelet", "Expclari", pedited, wavelet.expclari, pedited->wavelet.expclari); + assignFromKeyfile(keyFile, "Wavelet", "Expedge", wavelet.expedge, pedited->wavelet.expedge); + assignFromKeyfile(keyFile, "Wavelet", "expbl", wavelet.expbl, pedited->wavelet.expbl); + assignFromKeyfile(keyFile, "Wavelet", "Expresid", wavelet.expresid, pedited->wavelet.expresid); + assignFromKeyfile(keyFile, "Wavelet", "Expfinal", wavelet.expfinal, pedited->wavelet.expfinal); + assignFromKeyfile(keyFile, "Wavelet", "Exptoning", wavelet.exptoning, pedited->wavelet.exptoning); + assignFromKeyfile(keyFile, "Wavelet", "Expnoise", wavelet.expnoise, pedited->wavelet.expnoise); + assignFromKeyfile(keyFile, "Wavelet", "Expclari", wavelet.expclari, pedited->wavelet.expclari); } if (keyFile.has_group("Directional Pyramid Equalizer")) { - assignFromKeyfile(keyFile, "Directional Pyramid Equalizer", "Enabled", pedited, dirpyrequalizer.enabled, pedited->dirpyrequalizer.enabled); - assignFromKeyfile(keyFile, "Directional Pyramid Equalizer", "Gamutlab", pedited, dirpyrequalizer.gamutlab, pedited->dirpyrequalizer.gamutlab); - assignFromKeyfile(keyFile, "Directional Pyramid Equalizer", "cbdlMethod", pedited, dirpyrequalizer.cbdlMethod, pedited->dirpyrequalizer.cbdlMethod); + assignFromKeyfile(keyFile, "Directional Pyramid Equalizer", "Enabled", dirpyrequalizer.enabled, pedited->dirpyrequalizer.enabled); + assignFromKeyfile(keyFile, "Directional Pyramid Equalizer", "Gamutlab", dirpyrequalizer.gamutlab, pedited->dirpyrequalizer.gamutlab); + assignFromKeyfile(keyFile, "Directional Pyramid Equalizer", "cbdlMethod", dirpyrequalizer.cbdlMethod, pedited->dirpyrequalizer.cbdlMethod); if (keyFile.has_key("Directional Pyramid Equalizer", "Hueskin")) { const std::vector thresh = keyFile.get_integer_list("Directional Pyramid Equalizer", "Hueskin"); @@ -10114,21 +10212,21 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "Directional Pyramid Equalizer", "Threshold", pedited, dirpyrequalizer.threshold, pedited->dirpyrequalizer.threshold); - assignFromKeyfile(keyFile, "Directional Pyramid Equalizer", "Skinprotect", pedited, dirpyrequalizer.skinprotect, pedited->dirpyrequalizer.skinprotect); + assignFromKeyfile(keyFile, "Directional Pyramid Equalizer", "Threshold", dirpyrequalizer.threshold, pedited->dirpyrequalizer.threshold); + assignFromKeyfile(keyFile, "Directional Pyramid Equalizer", "Skinprotect", dirpyrequalizer.skinprotect, pedited->dirpyrequalizer.skinprotect); } } if (keyFile.has_group("SoftLight")) { - assignFromKeyfile(keyFile, "SoftLight", "Enabled", pedited, softlight.enabled, pedited->softlight.enabled); - assignFromKeyfile(keyFile, "SoftLight", "Strength", pedited, softlight.strength, pedited->softlight.strength); + assignFromKeyfile(keyFile, "SoftLight", "Enabled", softlight.enabled, pedited->softlight.enabled); + assignFromKeyfile(keyFile, "SoftLight", "Strength", softlight.strength, pedited->softlight.strength); } if (keyFile.has_group("Dehaze")) { - assignFromKeyfile(keyFile, "Dehaze", "Enabled", pedited, dehaze.enabled, pedited->dehaze.enabled); - assignFromKeyfile(keyFile, "Dehaze", "Strength", pedited, dehaze.strength, pedited->dehaze.strength); - assignFromKeyfile(keyFile, "Dehaze", "ShowDepthMap", pedited, dehaze.showDepthMap, pedited->dehaze.showDepthMap); - assignFromKeyfile(keyFile, "Dehaze", "Depth", pedited, dehaze.depth, pedited->dehaze.depth); + assignFromKeyfile(keyFile, "Dehaze", "Enabled", dehaze.enabled, pedited->dehaze.enabled); + assignFromKeyfile(keyFile, "Dehaze", "Strength", dehaze.strength, pedited->dehaze.strength); + assignFromKeyfile(keyFile, "Dehaze", "ShowDepthMap", dehaze.showDepthMap, pedited->dehaze.showDepthMap); + assignFromKeyfile(keyFile, "Dehaze", "Depth", dehaze.depth, pedited->dehaze.depth); if (ppVersion < 349 && dehaze.enabled && keyFile.has_key("Dehaze", "Luminance")) { const bool luminance = keyFile.get_boolean("Dehaze", "Luminance"); dehaze.saturation = luminance ? 0 : 100; @@ -10136,14 +10234,14 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) pedited->dehaze.saturation = true; } } else { - assignFromKeyfile(keyFile, "Dehaze", "Saturation", pedited, dehaze.saturation, pedited->dehaze.saturation); + assignFromKeyfile(keyFile, "Dehaze", "Saturation", dehaze.saturation, pedited->dehaze.saturation); } } - + if (keyFile.has_group("Film Simulation")) { - assignFromKeyfile(keyFile, "Film Simulation", "Enabled", pedited, filmSimulation.enabled, pedited->filmSimulation.enabled); - assignFromKeyfile(keyFile, "Film Simulation", "ClutFilename", pedited, filmSimulation.clutFilename, pedited->filmSimulation.clutFilename); - #if defined (WIN32) + assignFromKeyfile(keyFile, "Film Simulation", "Enabled", filmSimulation.enabled, pedited->filmSimulation.enabled); + assignFromKeyfile(keyFile, "Film Simulation", "ClutFilename", filmSimulation.clutFilename, pedited->filmSimulation.clutFilename); + #if defined (_WIN32) // if this is Windows, replace any "/" in the filename with "\\" size_t pos = filmSimulation.clutFilename.find("/"); while (pos != string::npos) { @@ -10151,7 +10249,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) pos = filmSimulation.clutFilename.find("/", pos); } #endif - #if !defined (WIN32) + #if !defined (_WIN32) // if this is not Windows, replace any "\\" in the filename with "/" size_t pos = filmSimulation.clutFilename.find("\\"); while (pos != string::npos) { @@ -10175,7 +10273,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) if (keyFile.has_group("HSV Equalizer")) { if (ppVersion >= 329) { - assignFromKeyfile(keyFile, "HSV Equalizer", "Enabled", pedited, hsvequalizer.enabled, pedited->hsvequalizer.enabled); + assignFromKeyfile(keyFile, "HSV Equalizer", "Enabled", hsvequalizer.enabled, pedited->hsvequalizer.enabled); } else { hsvequalizer.enabled = true; @@ -10185,15 +10283,15 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } if (ppVersion >= 300) { - assignFromKeyfile(keyFile, "HSV Equalizer", "HCurve", pedited, hsvequalizer.hcurve, pedited->hsvequalizer.hcurve); - assignFromKeyfile(keyFile, "HSV Equalizer", "SCurve", pedited, hsvequalizer.scurve, pedited->hsvequalizer.scurve); - assignFromKeyfile(keyFile, "HSV Equalizer", "VCurve", pedited, hsvequalizer.vcurve, pedited->hsvequalizer.vcurve); + assignFromKeyfile(keyFile, "HSV Equalizer", "HCurve", hsvequalizer.hcurve, pedited->hsvequalizer.hcurve); + assignFromKeyfile(keyFile, "HSV Equalizer", "SCurve", hsvequalizer.scurve, pedited->hsvequalizer.scurve); + assignFromKeyfile(keyFile, "HSV Equalizer", "VCurve", hsvequalizer.vcurve, pedited->hsvequalizer.vcurve); } } if (keyFile.has_group("RGB Curves")) { if (ppVersion >= 329) { - assignFromKeyfile(keyFile, "RGB Curves", "Enabled", pedited, rgbCurves.enabled, pedited->rgbCurves.enabled); + assignFromKeyfile(keyFile, "RGB Curves", "Enabled", rgbCurves.enabled, pedited->rgbCurves.enabled); } else { rgbCurves.enabled = true; @@ -10202,23 +10300,23 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "RGB Curves", "LumaMode", pedited, rgbCurves.lumamode, pedited->rgbCurves.lumamode); - assignFromKeyfile(keyFile, "RGB Curves", "rCurve", pedited, rgbCurves.rcurve, pedited->rgbCurves.rcurve); - assignFromKeyfile(keyFile, "RGB Curves", "gCurve", pedited, rgbCurves.gcurve, pedited->rgbCurves.gcurve); - assignFromKeyfile(keyFile, "RGB Curves", "bCurve", pedited, rgbCurves.bcurve, pedited->rgbCurves.bcurve); + assignFromKeyfile(keyFile, "RGB Curves", "LumaMode", rgbCurves.lumamode, pedited->rgbCurves.lumamode); + assignFromKeyfile(keyFile, "RGB Curves", "rCurve", rgbCurves.rcurve, pedited->rgbCurves.rcurve); + assignFromKeyfile(keyFile, "RGB Curves", "gCurve", rgbCurves.gcurve, pedited->rgbCurves.gcurve); + assignFromKeyfile(keyFile, "RGB Curves", "bCurve", rgbCurves.bcurve, pedited->rgbCurves.bcurve); } if (keyFile.has_group("ColorToning")) { - assignFromKeyfile(keyFile, "ColorToning", "Enabled", pedited, colorToning.enabled, pedited->colorToning.enabled); - assignFromKeyfile(keyFile, "ColorToning", "Method", pedited, colorToning.method, pedited->colorToning.method); - assignFromKeyfile(keyFile, "ColorToning", "Lumamode", pedited, colorToning.lumamode, pedited->colorToning.lumamode); - assignFromKeyfile(keyFile, "ColorToning", "Twocolor", pedited, colorToning.twocolor, pedited->colorToning.twocolor); - assignFromKeyfile(keyFile, "ColorToning", "OpacityCurve", pedited, colorToning.opacityCurve, pedited->colorToning.opacityCurve); - assignFromKeyfile(keyFile, "ColorToning", "ColorCurve", pedited, colorToning.colorCurve, pedited->colorToning.colorCurve); - assignFromKeyfile(keyFile, "ColorToning", "Autosat", pedited, colorToning.autosat, pedited->colorToning.autosat); - assignFromKeyfile(keyFile, "ColorToning", "SatProtectionThreshold", pedited, colorToning.satProtectionThreshold, pedited->colorToning.satprotectionthreshold); - assignFromKeyfile(keyFile, "ColorToning", "SaturatedOpacity", pedited, colorToning.saturatedOpacity, pedited->colorToning.saturatedopacity); - assignFromKeyfile(keyFile, "ColorToning", "Strength", pedited, colorToning.strength, pedited->colorToning.strength); + assignFromKeyfile(keyFile, "ColorToning", "Enabled", colorToning.enabled, pedited->colorToning.enabled); + assignFromKeyfile(keyFile, "ColorToning", "Method", colorToning.method, pedited->colorToning.method); + assignFromKeyfile(keyFile, "ColorToning", "Lumamode", colorToning.lumamode, pedited->colorToning.lumamode); + assignFromKeyfile(keyFile, "ColorToning", "Twocolor", colorToning.twocolor, pedited->colorToning.twocolor); + assignFromKeyfile(keyFile, "ColorToning", "OpacityCurve", colorToning.opacityCurve, pedited->colorToning.opacityCurve); + assignFromKeyfile(keyFile, "ColorToning", "ColorCurve", colorToning.colorCurve, pedited->colorToning.colorCurve); + assignFromKeyfile(keyFile, "ColorToning", "Autosat", colorToning.autosat, pedited->colorToning.autosat); + assignFromKeyfile(keyFile, "ColorToning", "SatProtectionThreshold", colorToning.satProtectionThreshold, pedited->colorToning.satprotectionthreshold); + assignFromKeyfile(keyFile, "ColorToning", "SaturatedOpacity", colorToning.saturatedOpacity, pedited->colorToning.saturatedopacity); + assignFromKeyfile(keyFile, "ColorToning", "Strength", colorToning.strength, pedited->colorToning.strength); if (keyFile.has_key("ColorToning", "HighlightsColorSaturation")) { const std::vector thresh = keyFile.get_integer_list("ColorToning", "HighlightsColorSaturation"); @@ -10244,25 +10342,25 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "ColorToning", "ClCurve", pedited, colorToning.clcurve, pedited->colorToning.clcurve); - assignFromKeyfile(keyFile, "ColorToning", "Cl2Curve", pedited, colorToning.cl2curve, pedited->colorToning.cl2curve); - assignFromKeyfile(keyFile, "ColorToning", "Redlow", pedited, colorToning.redlow, pedited->colorToning.redlow); - assignFromKeyfile(keyFile, "ColorToning", "Greenlow", pedited, colorToning.greenlow, pedited->colorToning.greenlow); - assignFromKeyfile(keyFile, "ColorToning", "Bluelow", pedited, colorToning.bluelow, pedited->colorToning.bluelow); - assignFromKeyfile(keyFile, "ColorToning", "Satlow", pedited, colorToning.satlow, pedited->colorToning.satlow); - assignFromKeyfile(keyFile, "ColorToning", "Balance", pedited, colorToning.balance, pedited->colorToning.balance); - assignFromKeyfile(keyFile, "ColorToning", "Sathigh", pedited, colorToning.sathigh, pedited->colorToning.sathigh); - assignFromKeyfile(keyFile, "ColorToning", "Redmed", pedited, colorToning.redmed, pedited->colorToning.redmed); - assignFromKeyfile(keyFile, "ColorToning", "Greenmed", pedited, colorToning.greenmed, pedited->colorToning.greenmed); - assignFromKeyfile(keyFile, "ColorToning", "Bluemed", pedited, colorToning.bluemed, pedited->colorToning.bluemed); - assignFromKeyfile(keyFile, "ColorToning", "Redhigh", pedited, colorToning.redhigh, pedited->colorToning.redhigh); - assignFromKeyfile(keyFile, "ColorToning", "Greenhigh", pedited, colorToning.greenhigh, pedited->colorToning.greenhigh); - assignFromKeyfile(keyFile, "ColorToning", "Bluehigh", pedited, colorToning.bluehigh, pedited->colorToning.bluehigh); + assignFromKeyfile(keyFile, "ColorToning", "ClCurve", colorToning.clcurve, pedited->colorToning.clcurve); + assignFromKeyfile(keyFile, "ColorToning", "Cl2Curve", colorToning.cl2curve, pedited->colorToning.cl2curve); + assignFromKeyfile(keyFile, "ColorToning", "Redlow", colorToning.redlow, pedited->colorToning.redlow); + assignFromKeyfile(keyFile, "ColorToning", "Greenlow", colorToning.greenlow, pedited->colorToning.greenlow); + assignFromKeyfile(keyFile, "ColorToning", "Bluelow", colorToning.bluelow, pedited->colorToning.bluelow); + assignFromKeyfile(keyFile, "ColorToning", "Satlow", colorToning.satlow, pedited->colorToning.satlow); + assignFromKeyfile(keyFile, "ColorToning", "Balance", colorToning.balance, pedited->colorToning.balance); + assignFromKeyfile(keyFile, "ColorToning", "Sathigh", colorToning.sathigh, pedited->colorToning.sathigh); + assignFromKeyfile(keyFile, "ColorToning", "Redmed", colorToning.redmed, pedited->colorToning.redmed); + assignFromKeyfile(keyFile, "ColorToning", "Greenmed", colorToning.greenmed, pedited->colorToning.greenmed); + assignFromKeyfile(keyFile, "ColorToning", "Bluemed", colorToning.bluemed, pedited->colorToning.bluemed); + assignFromKeyfile(keyFile, "ColorToning", "Redhigh", colorToning.redhigh, pedited->colorToning.redhigh); + assignFromKeyfile(keyFile, "ColorToning", "Greenhigh", colorToning.greenhigh, pedited->colorToning.greenhigh); + assignFromKeyfile(keyFile, "ColorToning", "Bluehigh", colorToning.bluehigh, pedited->colorToning.bluehigh); - assignFromKeyfile(keyFile, "ColorToning", "LabGridALow", pedited, colorToning.labgridALow, pedited->colorToning.labgridALow); - assignFromKeyfile(keyFile, "ColorToning", "LabGridBLow", pedited, colorToning.labgridBLow, pedited->colorToning.labgridBLow); - assignFromKeyfile(keyFile, "ColorToning", "LabGridAHigh", pedited, colorToning.labgridAHigh, pedited->colorToning.labgridAHigh); - assignFromKeyfile(keyFile, "ColorToning", "LabGridBHigh", pedited, colorToning.labgridBHigh, pedited->colorToning.labgridBHigh); + assignFromKeyfile(keyFile, "ColorToning", "LabGridALow", colorToning.labgridALow, pedited->colorToning.labgridALow); + assignFromKeyfile(keyFile, "ColorToning", "LabGridBLow", colorToning.labgridBLow, pedited->colorToning.labgridBLow); + assignFromKeyfile(keyFile, "ColorToning", "LabGridAHigh", colorToning.labgridAHigh, pedited->colorToning.labgridAHigh); + assignFromKeyfile(keyFile, "ColorToning", "LabGridBHigh", colorToning.labgridBHigh, pedited->colorToning.labgridBHigh); if (ppVersion < 337) { const double scale = ColorToningParams::LABGRID_CORR_SCALE; colorToning.labgridALow *= scale; @@ -10277,47 +10375,47 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) ColorToningParams::LabCorrectionRegion cur; done = true; std::string n = std::to_string(i); - if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionA_") + n, pedited, cur.a, pedited->colorToning.labregions)) { + if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionA_") + n, cur.a, pedited->colorToning.labregions)) { found = true; done = false; } - if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionB_") + n, pedited, cur.b, pedited->colorToning.labregions)) { + if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionB_") + n, cur.b, pedited->colorToning.labregions)) { found = true; done = false; } - if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionSaturation_") + n, pedited, cur.saturation, pedited->colorToning.labregions)) { + if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionSaturation_") + n, cur.saturation, pedited->colorToning.labregions)) { found = true; done = false; } - if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionSlope_") + n, pedited, cur.slope, pedited->colorToning.labregions)) { + if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionSlope_") + n, cur.slope, pedited->colorToning.labregions)) { found = true; done = false; } - if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionOffset_") + n, pedited, cur.offset, pedited->colorToning.labregions)) { + if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionOffset_") + n, cur.offset, pedited->colorToning.labregions)) { found = true; done = false; } - if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionPower_") + n, pedited, cur.power, pedited->colorToning.labregions)) { + if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionPower_") + n, cur.power, pedited->colorToning.labregions)) { found = true; done = false; } - if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionHueMask_") + n, pedited, cur.hueMask, pedited->colorToning.labregions)) { + if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionHueMask_") + n, cur.hueMask, pedited->colorToning.labregions)) { found = true; done = false; } - if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionChromaticityMask_") + n, pedited, cur.chromaticityMask, pedited->colorToning.labregions)) { + if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionChromaticityMask_") + n, cur.chromaticityMask, pedited->colorToning.labregions)) { found = true; done = false; } - if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionLightnessMask_") + n, pedited, cur.lightnessMask, pedited->colorToning.labregions)) { + if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionLightnessMask_") + n, cur.lightnessMask, pedited->colorToning.labregions)) { found = true; done = false; } - if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionMaskBlur_") + n, pedited, cur.maskBlur, pedited->colorToning.labregions)) { + if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionMaskBlur_") + n, cur.maskBlur, pedited->colorToning.labregions)) { found = true; done = false; } - if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionChannel_") + n, pedited, cur.channel, pedited->colorToning.labregions)) { + if (assignFromKeyfile(keyFile, "ColorToning", Glib::ustring("LabRegionChannel_") + n, cur.channel, pedited->colorToning.labregions)) { found = true; done = false; } @@ -10328,7 +10426,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) if (found) { colorToning.labregions = std::move(lg); } - assignFromKeyfile(keyFile, "ColorToning", "LabRegionsShowMask", pedited, colorToning.labregionsShowMask, pedited->colorToning.labregionsShowMask); + assignFromKeyfile(keyFile, "ColorToning", "LabRegionsShowMask", colorToning.labregionsShowMask, pedited->colorToning.labregionsShowMask); } if (keyFile.has_group("RAW")) { @@ -10339,7 +10437,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) pedited->raw.darkFrame = true; } } - assignFromKeyfile(keyFile, "RAW", "DarkFrameAuto", pedited, raw.df_autoselect, pedited->raw.df_autoselect); + assignFromKeyfile(keyFile, "RAW", "DarkFrameAuto", raw.df_autoselect, pedited->raw.df_autoselect); if (keyFile.has_key("RAW", "FlatFieldFile")) { raw.ff_file = expandRelativePath2(fname, options.rtSettings.flatFieldsPath, "", keyFile.get_string("RAW", "FlatFieldFile")); @@ -10347,66 +10445,66 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) pedited->raw.ff_file = true; } } - assignFromKeyfile(keyFile, "RAW", "FlatFieldAutoSelect", pedited, raw.ff_AutoSelect, pedited->raw.ff_AutoSelect); - assignFromKeyfile(keyFile, "RAW", "FlatFieldFromMetaData", pedited, raw.ff_FromMetaData, pedited->raw.ff_FromMetaData); - assignFromKeyfile(keyFile, "RAW", "FlatFieldBlurRadius", pedited, raw.ff_BlurRadius, pedited->raw.ff_BlurRadius); - assignFromKeyfile(keyFile, "RAW", "FlatFieldBlurType", pedited, raw.ff_BlurType, pedited->raw.ff_BlurType); - assignFromKeyfile(keyFile, "RAW", "FlatFieldAutoClipControl", pedited, raw.ff_AutoClipControl, pedited->raw.ff_AutoClipControl); + assignFromKeyfile(keyFile, "RAW", "FlatFieldAutoSelect", raw.ff_AutoSelect, pedited->raw.ff_AutoSelect); + assignFromKeyfile(keyFile, "RAW", "FlatFieldFromMetaData", raw.ff_FromMetaData, pedited->raw.ff_FromMetaData); + assignFromKeyfile(keyFile, "RAW", "FlatFieldBlurRadius", raw.ff_BlurRadius, pedited->raw.ff_BlurRadius); + assignFromKeyfile(keyFile, "RAW", "FlatFieldBlurType", raw.ff_BlurType, pedited->raw.ff_BlurType); + assignFromKeyfile(keyFile, "RAW", "FlatFieldAutoClipControl", raw.ff_AutoClipControl, pedited->raw.ff_AutoClipControl); if (ppVersion < 328) { // With ppversion < 328 this value was stored as a boolean, which is nonsense. // To avoid annoying warnings we skip reading and assume 0. raw.ff_clipControl = 0; } else { - assignFromKeyfile(keyFile, "RAW", "FlatFieldClipControl", pedited, raw.ff_clipControl, pedited->raw.ff_clipControl); + assignFromKeyfile(keyFile, "RAW", "FlatFieldClipControl", raw.ff_clipControl, pedited->raw.ff_clipControl); } - assignFromKeyfile(keyFile, "RAW", "CA", pedited, raw.ca_autocorrect, pedited->raw.ca_autocorrect); + assignFromKeyfile(keyFile, "RAW", "CA", raw.ca_autocorrect, pedited->raw.ca_autocorrect); if (ppVersion >= 342) { - assignFromKeyfile(keyFile, "RAW", "CAAutoIterations", pedited, raw.caautoiterations, pedited->raw.caautoiterations); + assignFromKeyfile(keyFile, "RAW", "CAAutoIterations", raw.caautoiterations, pedited->raw.caautoiterations); } else { raw.caautoiterations = 1; } if (ppVersion >= 343) { - assignFromKeyfile(keyFile, "RAW", "CAAvoidColourshift", pedited, raw.ca_avoidcolourshift, pedited->raw.ca_avoidcolourshift); + assignFromKeyfile(keyFile, "RAW", "CAAvoidColourshift", raw.ca_avoidcolourshift, pedited->raw.ca_avoidcolourshift); } else { raw.ca_avoidcolourshift = false; } - assignFromKeyfile(keyFile, "RAW", "CARed", pedited, raw.cared, pedited->raw.cared); - assignFromKeyfile(keyFile, "RAW", "CABlue", pedited, raw.cablue, pedited->raw.cablue); + assignFromKeyfile(keyFile, "RAW", "CARed", raw.cared, pedited->raw.cared); + assignFromKeyfile(keyFile, "RAW", "CABlue", raw.cablue, pedited->raw.cablue); // For compatibility to elder pp3 versions - assignFromKeyfile(keyFile, "RAW", "HotDeadPixels", pedited, raw.hotPixelFilter, pedited->raw.hotPixelFilter); + assignFromKeyfile(keyFile, "RAW", "HotDeadPixels", raw.hotPixelFilter, pedited->raw.hotPixelFilter); raw.deadPixelFilter = raw.hotPixelFilter; if (pedited) { pedited->raw.deadPixelFilter = pedited->raw.hotPixelFilter; } - assignFromKeyfile(keyFile, "RAW", "HotPixelFilter", pedited, raw.hotPixelFilter, pedited->raw.hotPixelFilter); - assignFromKeyfile(keyFile, "RAW", "DeadPixelFilter", pedited, raw.deadPixelFilter, pedited->raw.deadPixelFilter); - assignFromKeyfile(keyFile, "RAW", "HotDeadPixelThresh", pedited, raw.hotdeadpix_thresh, pedited->raw.hotdeadpix_thresh); - assignFromKeyfile(keyFile, "RAW", "PreExposure", pedited, raw.expos, pedited->raw.exPos); + assignFromKeyfile(keyFile, "RAW", "HotPixelFilter", raw.hotPixelFilter, pedited->raw.hotPixelFilter); + assignFromKeyfile(keyFile, "RAW", "DeadPixelFilter", raw.deadPixelFilter, pedited->raw.deadPixelFilter); + assignFromKeyfile(keyFile, "RAW", "HotDeadPixelThresh", raw.hotdeadpix_thresh, pedited->raw.hotdeadpix_thresh); + assignFromKeyfile(keyFile, "RAW", "PreExposure", raw.expos, pedited->raw.exPos); if (ppVersion < 320) { - assignFromKeyfile(keyFile, "RAW", "Method", pedited, raw.bayersensor.method, pedited->raw.bayersensor.method); - assignFromKeyfile(keyFile, "RAW", "CcSteps", pedited, raw.bayersensor.ccSteps, pedited->raw.bayersensor.ccSteps); - assignFromKeyfile(keyFile, "RAW", "LineDenoise", pedited, raw.bayersensor.linenoise, pedited->raw.bayersensor.linenoise); - assignFromKeyfile(keyFile, "RAW", "GreenEqThreshold", pedited, raw.bayersensor.greenthresh, pedited->raw.bayersensor.greenEq); - assignFromKeyfile(keyFile, "RAW", "DCBIterations", pedited, raw.bayersensor.dcb_iterations, pedited->raw.bayersensor.dcbIterations); - assignFromKeyfile(keyFile, "RAW", "DCBEnhance", pedited, raw.bayersensor.dcb_enhance, pedited->raw.bayersensor.dcbEnhance); - assignFromKeyfile(keyFile, "RAW", "LMMSEIterations", pedited, raw.bayersensor.lmmse_iterations, pedited->raw.bayersensor.lmmseIterations); - assignFromKeyfile(keyFile, "RAW", "PreBlackzero", pedited, raw.bayersensor.black0, pedited->raw.bayersensor.exBlack0); - assignFromKeyfile(keyFile, "RAW", "PreBlackone", pedited, raw.bayersensor.black1, pedited->raw.bayersensor.exBlack1); - assignFromKeyfile(keyFile, "RAW", "PreBlacktwo", pedited, raw.bayersensor.black2, pedited->raw.bayersensor.exBlack2); - assignFromKeyfile(keyFile, "RAW", "PreBlackthree", pedited, raw.bayersensor.black3, pedited->raw.bayersensor.exBlack3); - assignFromKeyfile(keyFile, "RAW", "PreTwoGreen", pedited, raw.bayersensor.twogreen, pedited->raw.bayersensor.exTwoGreen); + assignFromKeyfile(keyFile, "RAW", "Method", raw.bayersensor.method, pedited->raw.bayersensor.method); + assignFromKeyfile(keyFile, "RAW", "CcSteps", raw.bayersensor.ccSteps, pedited->raw.bayersensor.ccSteps); + assignFromKeyfile(keyFile, "RAW", "LineDenoise", raw.bayersensor.linenoise, pedited->raw.bayersensor.linenoise); + assignFromKeyfile(keyFile, "RAW", "GreenEqThreshold", raw.bayersensor.greenthresh, pedited->raw.bayersensor.greenEq); + assignFromKeyfile(keyFile, "RAW", "DCBIterations", raw.bayersensor.dcb_iterations, pedited->raw.bayersensor.dcbIterations); + assignFromKeyfile(keyFile, "RAW", "DCBEnhance", raw.bayersensor.dcb_enhance, pedited->raw.bayersensor.dcbEnhance); + assignFromKeyfile(keyFile, "RAW", "LMMSEIterations", raw.bayersensor.lmmse_iterations, pedited->raw.bayersensor.lmmseIterations); + assignFromKeyfile(keyFile, "RAW", "PreBlackzero", raw.bayersensor.black0, pedited->raw.bayersensor.exBlack0); + assignFromKeyfile(keyFile, "RAW", "PreBlackone", raw.bayersensor.black1, pedited->raw.bayersensor.exBlack1); + assignFromKeyfile(keyFile, "RAW", "PreBlacktwo", raw.bayersensor.black2, pedited->raw.bayersensor.exBlack2); + assignFromKeyfile(keyFile, "RAW", "PreBlackthree", raw.bayersensor.black3, pedited->raw.bayersensor.exBlack3); + assignFromKeyfile(keyFile, "RAW", "PreTwoGreen", raw.bayersensor.twogreen, pedited->raw.bayersensor.exTwoGreen); } } if (keyFile.has_group("RAW Bayer")) { - assignFromKeyfile(keyFile, "RAW Bayer", "Method", pedited, raw.bayersensor.method, pedited->raw.bayersensor.method); - assignFromKeyfile(keyFile, "RAW Bayer", "Border", pedited, raw.bayersensor.border, pedited->raw.bayersensor.border); + assignFromKeyfile(keyFile, "RAW Bayer", "Method", raw.bayersensor.method, pedited->raw.bayersensor.method); + assignFromKeyfile(keyFile, "RAW Bayer", "Border", raw.bayersensor.border, pedited->raw.bayersensor.border); if (keyFile.has_key("RAW Bayer", "ImageNum")) { raw.bayersensor.imageNum = keyFile.get_integer("RAW Bayer", "ImageNum") - 1; @@ -10416,13 +10514,13 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "RAW Bayer", "CcSteps", pedited, raw.bayersensor.ccSteps, pedited->raw.bayersensor.ccSteps); - assignFromKeyfile(keyFile, "RAW Bayer", "PreBlack0", pedited, raw.bayersensor.black0, pedited->raw.bayersensor.exBlack0); - assignFromKeyfile(keyFile, "RAW Bayer", "PreBlack1", pedited, raw.bayersensor.black1, pedited->raw.bayersensor.exBlack1); - assignFromKeyfile(keyFile, "RAW Bayer", "PreBlack2", pedited, raw.bayersensor.black2, pedited->raw.bayersensor.exBlack2); - assignFromKeyfile(keyFile, "RAW Bayer", "PreBlack3", pedited, raw.bayersensor.black3, pedited->raw.bayersensor.exBlack3); - assignFromKeyfile(keyFile, "RAW Bayer", "PreTwoGreen", pedited, raw.bayersensor.twogreen, pedited->raw.bayersensor.exTwoGreen); - assignFromKeyfile(keyFile, "RAW Bayer", "LineDenoise", pedited, raw.bayersensor.linenoise, pedited->raw.bayersensor.linenoise); + assignFromKeyfile(keyFile, "RAW Bayer", "CcSteps", raw.bayersensor.ccSteps, pedited->raw.bayersensor.ccSteps); + assignFromKeyfile(keyFile, "RAW Bayer", "PreBlack0", raw.bayersensor.black0, pedited->raw.bayersensor.exBlack0); + assignFromKeyfile(keyFile, "RAW Bayer", "PreBlack1", raw.bayersensor.black1, pedited->raw.bayersensor.exBlack1); + assignFromKeyfile(keyFile, "RAW Bayer", "PreBlack2", raw.bayersensor.black2, pedited->raw.bayersensor.exBlack2); + assignFromKeyfile(keyFile, "RAW Bayer", "PreBlack3", raw.bayersensor.black3, pedited->raw.bayersensor.exBlack3); + assignFromKeyfile(keyFile, "RAW Bayer", "PreTwoGreen", raw.bayersensor.twogreen, pedited->raw.bayersensor.exTwoGreen); + assignFromKeyfile(keyFile, "RAW Bayer", "LineDenoise", raw.bayersensor.linenoise, pedited->raw.bayersensor.linenoise); if (keyFile.has_key("RAW Bayer", "LineDenoiseDirection")) { raw.bayersensor.linenoiseDirection = RAWParams::BayerSensor::LineNoiseDirection(keyFile.get_integer("RAW Bayer", "LineDenoiseDirection")); @@ -10432,18 +10530,18 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "RAW Bayer", "GreenEqThreshold", pedited, raw.bayersensor.greenthresh, pedited->raw.bayersensor.greenEq); - assignFromKeyfile(keyFile, "RAW Bayer", "DCBIterations", pedited, raw.bayersensor.dcb_iterations, pedited->raw.bayersensor.dcbIterations); - assignFromKeyfile(keyFile, "RAW Bayer", "DCBEnhance", pedited, raw.bayersensor.dcb_enhance, pedited->raw.bayersensor.dcbEnhance); - assignFromKeyfile(keyFile, "RAW Bayer", "LMMSEIterations", pedited, raw.bayersensor.lmmse_iterations, pedited->raw.bayersensor.lmmseIterations); - assignFromKeyfile(keyFile, "RAW Bayer", "DualDemosaicAutoContrast", pedited, raw.bayersensor.dualDemosaicAutoContrast, pedited->raw.bayersensor.dualDemosaicAutoContrast); + assignFromKeyfile(keyFile, "RAW Bayer", "GreenEqThreshold", raw.bayersensor.greenthresh, pedited->raw.bayersensor.greenEq); + assignFromKeyfile(keyFile, "RAW Bayer", "DCBIterations", raw.bayersensor.dcb_iterations, pedited->raw.bayersensor.dcbIterations); + assignFromKeyfile(keyFile, "RAW Bayer", "DCBEnhance", raw.bayersensor.dcb_enhance, pedited->raw.bayersensor.dcbEnhance); + assignFromKeyfile(keyFile, "RAW Bayer", "LMMSEIterations", raw.bayersensor.lmmse_iterations, pedited->raw.bayersensor.lmmseIterations); + assignFromKeyfile(keyFile, "RAW Bayer", "DualDemosaicAutoContrast", raw.bayersensor.dualDemosaicAutoContrast, pedited->raw.bayersensor.dualDemosaicAutoContrast); if (ppVersion < 345) { raw.bayersensor.dualDemosaicAutoContrast = false; if (pedited) { pedited->raw.bayersensor.dualDemosaicAutoContrast = true; } } - assignFromKeyfile(keyFile, "RAW Bayer", "DualDemosaicContrast", pedited, raw.bayersensor.dualDemosaicContrast, pedited->raw.bayersensor.dualDemosaicContrast); + assignFromKeyfile(keyFile, "RAW Bayer", "DualDemosaicContrast", raw.bayersensor.dualDemosaicContrast, pedited->raw.bayersensor.dualDemosaicContrast); if (keyFile.has_key("RAW Bayer", "PixelShiftMotionCorrectionMethod")) { raw.bayersensor.pixelShiftMotionCorrectionMethod = (RAWParams::BayerSensor::PSMotionCorrectionMethod)keyFile.get_integer("RAW Bayer", "PixelShiftMotionCorrectionMethod"); @@ -10453,24 +10551,24 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } - assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftEperIso", pedited, raw.bayersensor.pixelShiftEperIso, pedited->raw.bayersensor.pixelShiftEperIso); + assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftEperIso", raw.bayersensor.pixelShiftEperIso, pedited->raw.bayersensor.pixelShiftEperIso); if (ppVersion < 332) { raw.bayersensor.pixelShiftEperIso += 1.0; } - assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftSigma", pedited, raw.bayersensor.pixelShiftSigma, pedited->raw.bayersensor.pixelShiftSigma); - assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftShowMotion", pedited, raw.bayersensor.pixelShiftShowMotion, pedited->raw.bayersensor.pixelShiftShowMotion); - assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftShowMotionMaskOnly", pedited, raw.bayersensor.pixelShiftShowMotionMaskOnly, pedited->raw.bayersensor.pixelShiftShowMotionMaskOnly); - assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftHoleFill", pedited, raw.bayersensor.pixelShiftHoleFill, pedited->raw.bayersensor.pixelShiftHoleFill); - assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftMedian", pedited, raw.bayersensor.pixelShiftMedian, pedited->raw.bayersensor.pixelShiftMedian); - assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftAverage", pedited, raw.bayersensor.pixelShiftAverage, pedited->raw.bayersensor.pixelShiftAverage); - assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftGreen", pedited, raw.bayersensor.pixelShiftGreen, pedited->raw.bayersensor.pixelShiftGreen); - assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftBlur", pedited, raw.bayersensor.pixelShiftBlur, pedited->raw.bayersensor.pixelShiftBlur); - assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftSmoothFactor", pedited, raw.bayersensor.pixelShiftSmoothFactor, pedited->raw.bayersensor.pixelShiftSmooth); - assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftEqualBright", pedited, raw.bayersensor.pixelShiftEqualBright, pedited->raw.bayersensor.pixelShiftEqualBright); - assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftEqualBrightChannel", pedited, raw.bayersensor.pixelShiftEqualBrightChannel, pedited->raw.bayersensor.pixelShiftEqualBrightChannel); - assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftNonGreenCross", pedited, raw.bayersensor.pixelShiftNonGreenCross, pedited->raw.bayersensor.pixelShiftNonGreenCross); + assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftSigma", raw.bayersensor.pixelShiftSigma, pedited->raw.bayersensor.pixelShiftSigma); + assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftShowMotion", raw.bayersensor.pixelShiftShowMotion, pedited->raw.bayersensor.pixelShiftShowMotion); + assignFromKeyfile(keyFile, "RAW Bayer", "PixelShiftShowMotionMaskOnly", raw.bayersensor.pixelShiftShowMotionMaskOnly, pedited->raw.bayersensor.pixelShiftShowMotionMaskOnly); + assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftHoleFill", raw.bayersensor.pixelShiftHoleFill, pedited->raw.bayersensor.pixelShiftHoleFill); + assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftMedian", raw.bayersensor.pixelShiftMedian, pedited->raw.bayersensor.pixelShiftMedian); + assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftAverage", raw.bayersensor.pixelShiftAverage, pedited->raw.bayersensor.pixelShiftAverage); + assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftGreen", raw.bayersensor.pixelShiftGreen, pedited->raw.bayersensor.pixelShiftGreen); + assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftBlur", raw.bayersensor.pixelShiftBlur, pedited->raw.bayersensor.pixelShiftBlur); + assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftSmoothFactor", raw.bayersensor.pixelShiftSmoothFactor, pedited->raw.bayersensor.pixelShiftSmooth); + assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftEqualBright", raw.bayersensor.pixelShiftEqualBright, pedited->raw.bayersensor.pixelShiftEqualBright); + assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftEqualBrightChannel", raw.bayersensor.pixelShiftEqualBrightChannel, pedited->raw.bayersensor.pixelShiftEqualBrightChannel); + assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftNonGreenCross", raw.bayersensor.pixelShiftNonGreenCross, pedited->raw.bayersensor.pixelShiftNonGreenCross); if (ppVersion < 336) { if (keyFile.has_key("RAW Bayer", "pixelShiftLmmse")) { @@ -10487,34 +10585,34 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } } } else { - assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftDemosaicMethod", pedited, raw.bayersensor.pixelShiftDemosaicMethod, pedited->raw.bayersensor.pixelShiftDemosaicMethod); + assignFromKeyfile(keyFile, "RAW Bayer", "pixelShiftDemosaicMethod", raw.bayersensor.pixelShiftDemosaicMethod, pedited->raw.bayersensor.pixelShiftDemosaicMethod); } - assignFromKeyfile(keyFile, "RAW Bayer", "PDAFLinesFilter", pedited, raw.bayersensor.pdafLinesFilter, pedited->raw.bayersensor.pdafLinesFilter); + assignFromKeyfile(keyFile, "RAW Bayer", "PDAFLinesFilter", raw.bayersensor.pdafLinesFilter, pedited->raw.bayersensor.pdafLinesFilter); } if (keyFile.has_group("RAW X-Trans")) { - assignFromKeyfile(keyFile, "RAW X-Trans", "Method", pedited, raw.xtranssensor.method, pedited->raw.xtranssensor.method); - assignFromKeyfile(keyFile, "RAW X-Trans", "DualDemosaicAutoContrast", pedited, raw.xtranssensor.dualDemosaicAutoContrast, pedited->raw.xtranssensor.dualDemosaicAutoContrast); + assignFromKeyfile(keyFile, "RAW X-Trans", "Method", raw.xtranssensor.method, pedited->raw.xtranssensor.method); + assignFromKeyfile(keyFile, "RAW X-Trans", "DualDemosaicAutoContrast", raw.xtranssensor.dualDemosaicAutoContrast, pedited->raw.xtranssensor.dualDemosaicAutoContrast); if (ppVersion < 345) { raw.xtranssensor.dualDemosaicAutoContrast = false; if (pedited) { pedited->raw.xtranssensor.dualDemosaicAutoContrast = true; } } - assignFromKeyfile(keyFile, "RAW X-Trans", "DualDemosaicContrast", pedited, raw.xtranssensor.dualDemosaicContrast, pedited->raw.xtranssensor.dualDemosaicContrast); - assignFromKeyfile(keyFile, "RAW X-Trans", "Border", pedited, raw.xtranssensor.border, pedited->raw.xtranssensor.border); - assignFromKeyfile(keyFile, "RAW X-Trans", "CcSteps", pedited, raw.xtranssensor.ccSteps, pedited->raw.xtranssensor.ccSteps); - assignFromKeyfile(keyFile, "RAW X-Trans", "PreBlackRed", pedited, raw.xtranssensor.blackred, pedited->raw.xtranssensor.exBlackRed); - assignFromKeyfile(keyFile, "RAW X-Trans", "PreBlackGreen", pedited, raw.xtranssensor.blackgreen, pedited->raw.xtranssensor.exBlackGreen); - assignFromKeyfile(keyFile, "RAW X-Trans", "PreBlackBlue", pedited, raw.xtranssensor.blackblue, pedited->raw.xtranssensor.exBlackBlue); + assignFromKeyfile(keyFile, "RAW X-Trans", "DualDemosaicContrast", raw.xtranssensor.dualDemosaicContrast, pedited->raw.xtranssensor.dualDemosaicContrast); + assignFromKeyfile(keyFile, "RAW X-Trans", "Border", raw.xtranssensor.border, pedited->raw.xtranssensor.border); + assignFromKeyfile(keyFile, "RAW X-Trans", "CcSteps", raw.xtranssensor.ccSteps, pedited->raw.xtranssensor.ccSteps); + assignFromKeyfile(keyFile, "RAW X-Trans", "PreBlackRed", raw.xtranssensor.blackred, pedited->raw.xtranssensor.exBlackRed); + assignFromKeyfile(keyFile, "RAW X-Trans", "PreBlackGreen", raw.xtranssensor.blackgreen, pedited->raw.xtranssensor.exBlackGreen); + assignFromKeyfile(keyFile, "RAW X-Trans", "PreBlackBlue", raw.xtranssensor.blackblue, pedited->raw.xtranssensor.exBlackBlue); } if (keyFile.has_group("Film Negative")) { - assignFromKeyfile(keyFile, "Film Negative", "Enabled", pedited, filmNegative.enabled, pedited->filmNegative.enabled); - assignFromKeyfile(keyFile, "Film Negative", "RedRatio", pedited, filmNegative.redRatio, pedited->filmNegative.redRatio); - assignFromKeyfile(keyFile, "Film Negative", "GreenExponent", pedited, filmNegative.greenExp, pedited->filmNegative.greenExp); - assignFromKeyfile(keyFile, "Film Negative", "BlueRatio", pedited, filmNegative.blueRatio, pedited->filmNegative.blueRatio); + assignFromKeyfile(keyFile, "Film Negative", "Enabled", filmNegative.enabled, pedited->filmNegative.enabled); + assignFromKeyfile(keyFile, "Film Negative", "RedRatio", filmNegative.redRatio, pedited->filmNegative.redRatio); + assignFromKeyfile(keyFile, "Film Negative", "GreenExponent", filmNegative.greenExp, pedited->filmNegative.greenExp); + assignFromKeyfile(keyFile, "Film Negative", "BlueRatio", filmNegative.blueRatio, pedited->filmNegative.blueRatio); if (ppVersion < 347) { // Backwards compatibility with RT v5.8 @@ -10529,9 +10627,9 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } else if (!keyFile.has_key("Film Negative", "RefInput")) { // Backwards compatibility with intermediate dev version (after v5.8) using film base values bool r, g, b; - assignFromKeyfile(keyFile, "Film Negative", "RedBase", pedited, filmNegative.refInput.r, r); - assignFromKeyfile(keyFile, "Film Negative", "GreenBase", pedited, filmNegative.refInput.g, g); - assignFromKeyfile(keyFile, "Film Negative", "BlueBase", pedited, filmNegative.refInput.b, b); + assignFromKeyfile(keyFile, "Film Negative", "RedBase", filmNegative.refInput.r, r); + assignFromKeyfile(keyFile, "Film Negative", "GreenBase", filmNegative.refInput.g, g); + assignFromKeyfile(keyFile, "Film Negative", "BlueBase", filmNegative.refInput.b, b); if (pedited) { pedited->filmNegative.refInput = r || g || b; pedited->filmNegative.refOutput = r || g || b; @@ -10546,11 +10644,11 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } else { // current version - assignFromKeyfile(keyFile, "Film Negative", "RefInput", pedited, filmNegative.refInput, pedited->filmNegative.refInput); - assignFromKeyfile(keyFile, "Film Negative", "RefOutput", pedited, filmNegative.refOutput, pedited->filmNegative.refOutput); + assignFromKeyfile(keyFile, "Film Negative", "RefInput", filmNegative.refInput, pedited->filmNegative.refInput); + assignFromKeyfile(keyFile, "Film Negative", "RefOutput", filmNegative.refOutput, pedited->filmNegative.refOutput); int cs = toUnderlying(filmNegative.colorSpace); - assignFromKeyfile(keyFile, "Film Negative", "ColorSpace", pedited, cs, pedited->filmNegative.colorSpace); + assignFromKeyfile(keyFile, "Film Negative", "ColorSpace", cs, pedited->filmNegative.colorSpace); filmNegative.colorSpace = static_cast(cs); if (keyFile.has_key("Film Negative", "BackCompat")) { @@ -10571,20 +10669,25 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) } if (keyFile.has_group("MetaData")) { - int mode = int(MetaDataParams::TUNNEL); - assignFromKeyfile(keyFile, "MetaData", "Mode", pedited, mode, pedited->metadata.mode); + int mode = int(MetaDataParams::EDIT); + assignFromKeyfile(keyFile, "MetaData", "Mode", mode, pedited->metadata.mode); if (mode >= int(MetaDataParams::TUNNEL) && mode <= int(MetaDataParams::STRIP)) { metadata.mode = static_cast(mode); } + + assignFromKeyfile(keyFile, "MetaData", "ExifKeys", metadata.exifKeys, pedited->metadata.exifKeys); } if (keyFile.has_group("Exif")) { for (const auto& key : keyFile.get_keys("Exif")) { - exif[key] = keyFile.get_string("Exif", key); + auto it = exif_keys.find(key); + if (it != exif_keys.end()) { + metadata.exif[it->second] = keyFile.get_string("Exif", key); - if (pedited) { - pedited->exif = true; + if (pedited) { + pedited->exif = true; + } } } } @@ -10604,16 +10707,22 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) if (keyFile.has_group("IPTC")) { for (const auto& key : keyFile.get_keys("IPTC")) { // does this key already exist? - const IPTCPairs::iterator element = iptc.find(key); + auto it = iptc_keys.find(key); + if (it == iptc_keys.end()) { + continue; + } - if (element != iptc.end()) { + auto kk = it->second; + const IPTCPairs::iterator element = metadata.iptc.find(kk); + + if (element != metadata.iptc.end()) { // it already exist so we cleanup the values element->second.clear(); } // TODO: look out if merging Keywords and SupplementalCategories from the procparams chain would be interesting for (const auto& currLoadedTagValue : keyFile.get_string_list("IPTC", key)) { - iptc[key].push_back(currLoadedTagValue); + metadata.iptc[kk].push_back(currLoadedTagValue); } if (pedited) { @@ -10693,8 +10802,6 @@ bool ProcParams::operator ==(const ProcParams& other) const && rgbCurves == other.rgbCurves && colorToning == other.colorToning && metadata == other.metadata - && exif == other.exif - && iptc == other.iptc && dehaze == other.dehaze && filmNegative == other.filmNegative; } diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 769101ce0..2723cd2f2 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -643,15 +643,11 @@ struct WBParams { double equal; double tempBias; StandardObserver observer; - int itcwb_thres; - int itcwb_precis; - int itcwb_size; - int itcwb_delta; - int itcwb_fgreen; + double itcwb_green; int itcwb_rgreen; bool itcwb_nopurple; - bool itcwb_sorted; - bool itcwb_forceextra; + bool itcwb_alg; + Glib::ustring itcwb_prim; bool itcwb_sampling; WBParams(); @@ -1941,6 +1937,7 @@ struct ColorManagementParams { ACES_P1, WIDE_GAMUT, ACES_P0, + JDC_MAX, BRUCE_RGB, BETA_RGB, BEST_RGB, @@ -1993,31 +1990,22 @@ struct ColorManagementParams { bool operator !=(const ColorManagementParams& other) const; }; -/** - * Parameters for metadata handling - */ -struct MetaDataParams { - enum Mode { - TUNNEL, - EDIT, - STRIP - }; - Mode mode; - - MetaDataParams(); - - bool operator ==(const MetaDataParams &other) const; - bool operator !=(const MetaDataParams &other) const; -}; - - /** * Minimal wrapper allowing forward declaration for representing a key/value for the exif metadata information */ class ExifPairs final { +private: + using Pairs = std::map; + public: - using const_iterator = std::map::const_iterator; + using const_iterator = Pairs::const_iterator; + using size_type = Pairs::size_type; + + const_iterator find(const Glib::ustring& key) const + { + return pairs.find(key); + } const_iterator begin() const { @@ -2034,6 +2022,16 @@ public: pairs.clear(); } + size_type erase(const Glib::ustring& key) + { + return pairs.erase(key); + } + + bool empty() const + { + return pairs.empty(); + } + Glib::ustring& operator[](const Glib::ustring& key) { return pairs[key]; @@ -2045,7 +2043,7 @@ public: } private: - std::map pairs; + Pairs pairs; }; /** @@ -2077,6 +2075,11 @@ public: return pairs.empty(); } + iterator erase(const const_iterator& key) + { + return pairs.erase(key); + } + void clear() { pairs.clear(); @@ -2096,6 +2099,29 @@ private: std::map> pairs; }; +/** + * Parameters for metadata handling + */ +struct MetaDataParams { + enum Mode { + TUNNEL, + EDIT, + STRIP + }; + Mode mode; + std::vector exifKeys; + ExifPairs exif; + IPTCPairs iptc; + + MetaDataParams(); + + bool operator ==(const MetaDataParams &other) const; + bool operator !=(const MetaDataParams &other) const; + + static std::vector basicExifKeys; +}; + + struct WaveletParams { std::vector ccwcurve; std::vector wavdenoise; @@ -2614,8 +2640,8 @@ public: int ppVersion; ///< Version of the PP file from which the parameters have been read MetaDataParams metadata; ///< Metadata parameters - ExifPairs exif; ///< List of modifications appplied on the exif tags of the input image - IPTCPairs iptc; ///< The IPTC tags and values to be saved to the output image + // ExifPairs exif; ///< List of modifications appplied on the exif tags of the input image + // IPTCPairs iptc; ///< The IPTC tags and values to be saved to the output image /** * The constructor only sets the hand-wired defaults. diff --git a/rtengine/rawimage.cc b/rtengine/rawimage.cc index 8478d56ab..dc026d83a 100644 --- a/rtengine/rawimage.cc +++ b/rtengine/rawimage.cc @@ -5,7 +5,7 @@ */ #include -#ifdef WIN32 +#ifdef _WIN32 #include #else #include diff --git a/rtengine/rawimagesource.cc b/rtengine/rawimagesource.cc index 044b6a3be..738ba4e71 100644 --- a/rtengine/rawimagesource.cc +++ b/rtengine/rawimagesource.cc @@ -43,7 +43,6 @@ #include "rt_math.h" #include "rtengine.h" #include "rtlensfun.h" - #include "../rtgui/options.h" #define BENCHMARK @@ -58,9 +57,9 @@ namespace { -void rotateLine (const float* const line, rtengine::PlanarPtr &channel, const int tran, const int i, const int w, const int h) +void rotateLine(const float* const line, rtengine::PlanarPtr &channel, const int tran, const int i, const int w, const int h) { - switch(tran & TR_ROT) { + switch (tran & TR_ROT) { case TR_R180: for (int j = 0; j < w; j++) { channel(h - 1 - i, w - 1 - j) = line[j]; @@ -90,15 +89,15 @@ void rotateLine (const float* const line, rtengine::PlanarPtr &channel, c } } -void transLineStandard (const float* const red, const float* const green, const float* const blue, const int i, rtengine::Imagefloat* const image, const int tran, const int imwidth, const int imheight) +void transLineStandard(const float* const red, const float* const green, const float* const blue, const int i, rtengine::Imagefloat* const image, const int tran, const int imwidth, const int imheight) { // conventional CCD coarse rotation - rotateLine (red, image->r, tran, i, imwidth, imheight); - rotateLine (green, image->g, tran, i, imwidth, imheight); - rotateLine (blue, image->b, tran, i, imwidth, imheight); + rotateLine(red, image->r, tran, i, imwidth, imheight); + rotateLine(green, image->g, tran, i, imwidth, imheight); + rotateLine(blue, image->b, tran, i, imwidth, imheight); } -void transLineFuji (const float* const red, const float* const green, const float* const blue, const int i, rtengine::Imagefloat* const image, const int tran, const int imheight, const int fw) +void transLineFuji(const float* const red, const float* const green, const float* const blue, const int i, rtengine::Imagefloat* const image, const int tran, const int imheight, const int fw) { // Fuji SuperCCD rotation + coarse rotation @@ -107,7 +106,7 @@ void transLineFuji (const float* const red, const float* const green, const floa int h = (imheight - fw) * 2 + 1; int end = min(h + fw - i, w - fw + i); - switch(tran & TR_ROT) { + switch (tran & TR_ROT) { case TR_R180: for (int j = start; j < end; j++) { int y = i + j - fw; @@ -165,14 +164,14 @@ void transLineFuji (const float* const red, const float* const green, const floa } } -void transLineD1x (const float* const red, const float* const green, const float* const blue, const int i, rtengine::Imagefloat* const image, const int tran, const int imwidth, const int imheight, const bool oddHeight, const bool clip) +void transLineD1x(const float* const red, const float* const green, const float* const blue, const int i, rtengine::Imagefloat* const image, const int tran, const int imwidth, const int imheight, const bool oddHeight, const bool clip) { // Nikon D1X has an uncommon sensor with 4028 x 1324 sensels. // Vertical sensel size is 2x horizontal sensel size // We have to do vertical interpolation for the 'missing' rows // We do that in combination with coarse rotation - switch(tran & TR_ROT) { + switch (tran & TR_ROT) { case TR_R180: // rotate 180 degree for (int j = 0; j < imwidth; j++) { image->r(2 * (imheight - 1 - i), imwidth - 1 - j) = red[j]; @@ -370,9 +369,9 @@ void transLineD1x (const float* const red, const float* const green, const float case TR_NONE: // no coarse rotation default: - rotateLine (red, image->r, tran, 2 * i, imwidth, imheight); - rotateLine (green, image->g, tran, 2 * i, imwidth, imheight); - rotateLine (blue, image->b, tran, 2 * i, imwidth, imheight); + rotateLine(red, image->r, tran, 2 * i, imwidth, imheight); + rotateLine(green, image->g, tran, 2 * i, imwidth, imheight); + rotateLine(blue, image->b, tran, 2 * i, imwidth, imheight); if (i == 1 || i == 2) { // linear interpolation for (int j = 0; j < imwidth; j++) { @@ -426,7 +425,7 @@ void transLineD1x (const float* const red, const float* const green, const float namespace rtengine { -RawImageSource::RawImageSource () +RawImageSource::RawImageSource() : ImageSource() , W(0), H(0) , plistener(nullptr) @@ -476,7 +475,7 @@ RawImageSource::RawImageSource () //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -RawImageSource::~RawImageSource () +RawImageSource::~RawImageSource() { delete idata; @@ -493,11 +492,11 @@ RawImageSource::~RawImageSource () } if (camProfile) { - cmsCloseProfile (camProfile); + cmsCloseProfile(camProfile); } if (embProfile) { - cmsCloseProfile (embProfile); + cmsCloseProfile(embProfile); } } @@ -506,7 +505,7 @@ unsigned RawImageSource::FC(int row, int col) const return ri->FC(row, col); } -eSensorType RawImageSource::getSensorType () const +eSensorType RawImageSource::getSensorType() const { return ri != nullptr ? ri->getSensorType() : ST_NONE; } @@ -523,7 +522,7 @@ int RawImageSource::getRotateDegree() const //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::transformRect (const PreviewProps &pp, int tran, int &ssx1, int &ssy1, int &width, int &height, int &fw) +void RawImageSource::transformRect(const PreviewProps &pp, int tran, int &ssx1, int &ssy1, int &width, int &height, int &fw) { int pp_x = pp.getX() + border; int pp_y = pp.getY() + border; @@ -674,7 +673,7 @@ void RawImageSource::wbCamera2Mul(double &rm, double &gm, double &bm) double r = ri->get_pre_mul(0) / rm; double g = ri->get_pre_mul(1) / gm; double b = ri->get_pre_mul(2) / bm; - + if (imatrices) { double rr = imatrices->rgb_cam[0][0] * r + imatrices->rgb_cam[0][1] * g + imatrices->rgb_cam[0][2] * b; double gg = imatrices->rgb_cam[1][0] * r + imatrices->rgb_cam[1][1] * g + imatrices->rgb_cam[1][2] * b; @@ -692,7 +691,7 @@ void RawImageSource::wbCamera2Mul(double &rm, double &gm, double &bm) -void RawImageSource::getWBMults (const ColorTemp &ctemp, const RAWParams &raw, std::array& out_scale_mul, float &autoGainComp, float &rm, float &gm, float &bm) const +void RawImageSource::getWBMults(const ColorTemp &ctemp, const RAWParams &raw, std::array& out_scale_mul, float &autoGainComp, float &rm, float &gm, float &bm) const { // compute channel multipliers double r, g, b; @@ -704,7 +703,7 @@ void RawImageSource::getWBMults (const ColorTemp &ctemp, const RAWParams &raw, s gm = ri->get_pre_mul(1); bm = ri->get_pre_mul(2); } else { - ctemp.getMultipliers (r, g, b); + ctemp.getMultipliers(r, g, b); rm = imatrices.cam_rgb[0][0] * r + imatrices.cam_rgb[0][1] * g + imatrices.cam_rgb[0][2] * b; gm = imatrices.cam_rgb[1][0] * r + imatrices.cam_rgb[1][1] * g + imatrices.cam_rgb[1][2] * b; bm = imatrices.cam_rgb[2][0] * r + imatrices.cam_rgb[2][1] * g + imatrices.cam_rgb[2][2] * b; @@ -715,9 +714,10 @@ void RawImageSource::getWBMults (const ColorTemp &ctemp, const RAWParams &raw, s float new_scale_mul[4]; bool isMono = (ri->getSensorType() == ST_FUJI_XTRANS && raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) - || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); + || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); float c_white[4]; + for (int i = 0; i < 4; ++i) { c_white[i] = (ri->get_white(i) - cblacksom[i]) / static_cast(raw.expos) + cblacksom[i]; } @@ -741,10 +741,11 @@ void RawImageSource::getWBMults (const ColorTemp &ctemp, const RAWParams &raw, s autoGainComp = camInitialGain / initialGain; } -void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const ToneCurveParams &hrp, const RAWParams &raw, int opposed) -{// added int opposed to force getimage to use inpaint-opposed if enable, only once +void RawImageSource::getImage(const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const ToneCurveParams &hrp, const RAWParams &raw) +{ MyMutex::MyLock lock(getImageMutex); - tran = defTransform (tran); + + tran = defTransform(ri, tran); // compute channel multipliers double r, g, b; @@ -756,9 +757,9 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima gm = ri->get_pre_mul(1); bm = ri->get_pre_mul(2); } else { - // ctemp.getMultipliers (r, g, b); - r = g = b = 1; - wbCamera2Mul(r, g, b); + // ctemp.getMultipliers (r, g, b); + r = g = b = 1; + wbCamera2Mul(r, g, b); rm = imatrices.cam_rgb[0][0] * r + imatrices.cam_rgb[0][1] * g + imatrices.cam_rgb[0][2] * b; gm = imatrices.cam_rgb[1][0] * r + imatrices.cam_rgb[1][1] * g + imatrices.cam_rgb[1][2] * b; bm = imatrices.cam_rgb[2][0] * r + imatrices.cam_rgb[2][1] * g + imatrices.cam_rgb[2][2] * b; @@ -802,7 +803,7 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima defGain = 0.0; // compute image area to render in order to provide the requested part of the image int sx1, sy1, imwidth, imheight, fw, d1xHeightOdd = 0; - transformRect (pp, tran, sx1, sy1, imwidth, imheight, fw); + transformRect(pp, tran, sx1, sy1, imwidth, imheight, fw); // check possible overflows int maximwidth, maximheight; @@ -846,20 +847,20 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima bool iscolor = (hrp.method == "Color" || hrp.method == "Coloropp"); const bool doClip = (chmax[0] >= clmax[0] || chmax[1] >= clmax[1] || chmax[2] >= clmax[2]) && !hrp.hrenabled && hrp.clampOOG; bool doHr = (hrp.hrenabled && !iscolor); + if (hrp.hrenabled && iscolor) { - if(hrp.method == "Coloropp" && opposed == 1) {//force Inpaint opposed if WB change, and opposed limited tne number to 1 - rgbSourceModified = false; - } if (!rgbSourceModified) { - if(hrp.method == "Color") { + if (hrp.method == "Color") { if (settings->verbose) { - printf ("Applying Highlight Recovery: Color propagation.\n"); + printf("Applying Highlight Recovery: Color propagation.\n"); } - HLRecovery_inpaint (red, green, blue, hrp.hlbl); - } else if(hrp.method == "Coloropp" && ctemp.getTemp() >= 0) { + + HLRecovery_inpaint(red, green, blue, hrp.hlbl); + } else if (hrp.method == "Coloropp" && ctemp.getTemp() >= 0) { float s[3] = { rm, gm, bm }; highlight_recovery_opposed(s, ctemp, hrp.hlth); } + rgbSourceModified = true; } } @@ -874,6 +875,7 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima gm *= g; bm *= b; } + hlmax[0] = clmax[0] * rm; hlmax[1] = clmax[1] * gm; hlmax[2] = clmax[2] * bm; @@ -887,8 +889,8 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima rm /= area; gm /= area; bm /= area; - - + + #ifdef _OPENMP #pragma omp parallel if(!d1x) // omp disabled for D1x to avoid race conditions (see Issue 1088 http://code.google.com/p/rawtherapee/issues/detail?id=1088) { @@ -973,15 +975,15 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima //process all highlight recovery other than "Color" if (doHr) { - hlRecovery (hrp.method, line_red, line_grn, line_blue, imwidth, hlmax); + hlRecovery(hrp.method, line_red, line_grn, line_blue, imwidth, hlmax); } if (d1x) { - transLineD1x (line_red, line_grn, line_blue, ix, image, tran, imwidth, imheight, d1xHeightOdd, doClip); + transLineD1x(line_red, line_grn, line_blue, ix, image, tran, imwidth, imheight, d1xHeightOdd, doClip); } else if (fuji) { - transLineFuji (line_red, line_grn, line_blue, ix, image, tran, imheight, fw); + transLineFuji(line_red, line_grn, line_blue, ix, image, tran, imheight, fw); } else { - transLineStandard (line_red, line_grn, line_blue, ix, image, tran, imwidth, imheight); + transLineStandard(line_red, line_grn, line_blue, ix, image, tran, imwidth, imheight); } } @@ -1040,22 +1042,22 @@ void RawImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* ima // Flip if needed if (tran & TR_HFLIP) { - hflip (image); + hflip(image); } if (tran & TR_VFLIP) { - vflip (image); + vflip(image); } // Colour correction (only when running on full resolution) if (pp.getSkip() == 1) { - switch(ri->getSensorType()) { + switch (ri->getSensorType()) { case ST_BAYER: - processFalseColorCorrection (image, raw.bayersensor.ccSteps); + processFalseColorCorrection(image, raw.bayersensor.ccSteps); break; case ST_FUJI_XTRANS: - processFalseColorCorrection (image, raw.xtranssensor.ccSteps); + processFalseColorCorrection(image, raw.xtranssensor.ccSteps); break; case ST_FOVEON: @@ -1079,6 +1081,7 @@ DCPProfile *RawImageSource::getDCP(const ColorManagementParams &cmp, DCPProfileA if (settings->verbose) { printf("Can't load DCP profile '%s'!\n", cmp.inputProfile.c_str()); } + return nullptr; } @@ -1089,13 +1092,27 @@ DCPProfile *RawImageSource::getDCP(const ColorManagementParams &cmp, DCPProfileA void RawImageSource::convertColorSpace(Imagefloat* image, const ColorManagementParams &cmp, const ColorTemp &wb) { double pre_mul[3] = { ri->get_pre_mul(0), ri->get_pre_mul(1), ri->get_pre_mul(2) }; - colorSpaceConversion (image, cmp, wb, pre_mul, embProfile, camProfile, imatrices.xyz_cam, (static_cast(getMetaData()))->getCamera()); + colorSpaceConversion(image, cmp, wb, pre_mul, embProfile, camProfile, imatrices.xyz_cam, (static_cast(getMetaData()))->getCamera()); } -void RawImageSource::getFullSize (int& w, int& h, int tr) +void RawImageSource::getFullSize(int& w, int& h, int tr) { + computeFullSize(ri, tr, w, h, border); +} - tr = defTransform (tr); + +void RawImageSource::computeFullSize(const RawImage *ri, int tr, int &w, int &h, int border) +{ + tr = defTransform(ri, tr); + + const int W = ri->get_width(); + const int H = ri->get_height(); + const bool fuji = ri->get_FujiWidth() != 0; + const bool d1x = !ri->get_model().compare("D1X"); + const int b = + border >= 0 ? border : + (ri->getSensorType() == ST_BAYER ? 4 : + (ri->getSensorType() == ST_FUJI_XTRANS ? 7 : 0)); if (fuji) { w = ri->get_FujiWidth() * 2 + 1; @@ -1114,13 +1131,13 @@ void RawImageSource::getFullSize (int& w, int& h, int tr) h = tmp; } - w -= 2 * border; - h -= 2 * border; + w -= 2 * b; + h -= 2 * b; } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::getSize (const PreviewProps &pp, int& w, int& h) +void RawImageSource::getSize(const PreviewProps &pp, int& w, int& h) { w = pp.getWidth() / pp.getSkip() + (pp.getWidth() % pp.getSkip() > 0); h = pp.getHeight() / pp.getSkip() + (pp.getHeight() % pp.getSkip() > 0); @@ -1128,14 +1145,14 @@ void RawImageSource::getSize (const PreviewProps &pp, int& w, int& h) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::hflip (Imagefloat* image) +void RawImageSource::hflip(Imagefloat* image) { image->hflip(); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::vflip (Imagefloat* image) +void RawImageSource::vflip(Imagefloat* image) { image->vflip(); } @@ -1143,7 +1160,7 @@ void RawImageSource::vflip (Imagefloat* image) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) +int RawImageSource::load(const Glib::ustring &fname, bool firstFrameOnly) { MyTime t1, t2; @@ -1151,15 +1168,17 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) fileName = fname; if (plistener) { - plistener->setProgressStr ("PROGRESSBAR_DECODING"); - plistener->setProgress (0.0); + plistener->setProgressStr("PROGRESSBAR_DECODING"); + plistener->setProgress(0.0); } + ri = new RawImage(fname); - int errCode = ri->loadRaw (false, 0, false); + int errCode = ri->loadRaw(false, 0, false); if (errCode) { return errCode; } + numFrames = firstFrameOnly ? (numFrames < 7 ? 1 : ri->getFrameCount()) : ri->getFrameCount(); errCode = 0; @@ -1172,6 +1191,7 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) } else { numFrames = 6; } + #ifdef _OPENMP #pragma omp parallel #endif @@ -1180,15 +1200,17 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) #ifdef _OPENMP #pragma omp for nowait #endif + for (unsigned int i = 0; i < numFrames; ++i) { if (i == 0) { riFrames[i] = ri; - errCodeThr = riFrames[i]->loadRaw (true, i + 1, true, plistener, 0.8); + errCodeThr = riFrames[i]->loadRaw(true, i + 1, true, plistener, 0.8); } else { riFrames[i] = new RawImage(fname); - errCodeThr = riFrames[i]->loadRaw (true, i + 1); + errCodeThr = riFrames[i]->loadRaw(true, i + 1); } } + #ifdef _OPENMP #pragma omp critical #endif @@ -1205,15 +1227,18 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) #ifdef _OPENMP #pragma omp for nowait #endif - for (unsigned int i = 0; i < numFrames; ++i) { + + for (unsigned int i = 0; i < numFrames; ++i) + { if (i == 0) { riFrames[i] = ri; - errCodeThr = riFrames[i]->loadRaw (true, i, true, plistener, 0.8); + errCodeThr = riFrames[i]->loadRaw(true, i, true, plistener, 0.8); } else { riFrames[i] = new RawImage(fname); - errCodeThr = riFrames[i]->loadRaw (true, i); + errCodeThr = riFrames[i]->loadRaw(true, i); } } + #ifdef _OPENMP #pragma omp critical #endif @@ -1223,7 +1248,7 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) } } else { riFrames[0] = ri; - errCode = riFrames[0]->loadRaw (true, 0, true, plistener, 0.8); + errCode = riFrames[0]->loadRaw(true, 0, true, plistener, 0.8); } if (!errCode) { @@ -1241,7 +1266,7 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) } if (plistener) { - plistener->setProgress (0.9); + plistener->setProgress(0.9); } /***** Copy once constant data extracted from raw *******/ @@ -1256,7 +1281,7 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) // compute inverse of the color transformation matrix // first arg is matrix, second arg is inverse - inverse33 (imatrices.rgb_cam, imatrices.cam_rgb); + inverse33(imatrices.rgb_cam, imatrices.cam_rgb); d1x = ! ri->get_model().compare("D1X"); @@ -1269,11 +1294,11 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) } if (ri->get_profile()) { - embProfile = cmsOpenProfileFromMem (ri->get_profile(), ri->get_profileLen()); + embProfile = cmsOpenProfileFromMem(ri->get_profile(), ri->get_profileLen()); } // create profile - memset (imatrices.xyz_cam, 0, sizeof(imatrices.xyz_cam)); + memset(imatrices.xyz_cam, 0, sizeof(imatrices.xyz_cam)); for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) @@ -1281,8 +1306,8 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) imatrices.xyz_cam[i][j] += xyz_sRGB[i][k] * imatrices.rgb_cam[k][j]; } - camProfile = ICCStore::getInstance()->createFromMatrix (imatrices.xyz_cam, false, "Camera"); - inverse33 (imatrices.xyz_cam, imatrices.cam_xyz); + camProfile = ICCStore::getInstance()->createFromMatrix(imatrices.xyz_cam, false, "Camera"); + inverse33(imatrices.xyz_cam, imatrices.cam_xyz); // First we get the "as shot" ("Camera") white balance and store it float pre_mul[4]; @@ -1296,7 +1321,7 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) double cam_r = imatrices.rgb_cam[0][0] * camwb_red + imatrices.rgb_cam[0][1] * camwb_green + imatrices.rgb_cam[0][2] * camwb_blue; double cam_g = imatrices.rgb_cam[1][0] * camwb_red + imatrices.rgb_cam[1][1] * camwb_green + imatrices.rgb_cam[1][2] * camwb_blue; double cam_b = imatrices.rgb_cam[2][0] * camwb_red + imatrices.rgb_cam[2][1] * camwb_green + imatrices.rgb_cam[2][2] * camwb_blue; - camera_wb = ColorTemp (cam_r, cam_g, cam_b, 1., ColorTemp::DEFAULT_OBSERVER); // as shot WB + camera_wb = ColorTemp(cam_r, cam_g, cam_b, 1., ColorTemp::DEFAULT_OBSERVER); // as shot WB if (settings->verbose) { printf("Raw As Shot White balance: temp %f, tint %f\n", camera_wb.getTemp(), camera_wb.getGreen()); @@ -1332,15 +1357,19 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) initialGain = 1.0 / min(pre_mul[0], pre_mul[1], pre_mul[2]); }*/ - for (unsigned int i = 0;i < numFrames; ++i) { + for (unsigned int i = 0; i < numFrames; ++i) { riFrames[i]->set_prefilters(); } // Load complete Exif information - std::unique_ptr rml(new RawMetaDataLocation (ri->get_exifBase(), ri->get_ciffBase(), ri->get_ciffLen())); - idata = new FramesData (fname, std::move(rml)); - idata->setDCRawFrameCount (numFrames); + idata = new FramesData(fname); // TODO: std::unique_ptr<> + idata->setDCRawFrameCount(numFrames); + { + int ww, hh; + getFullSize(ww, hh); + idata->setDimensions(ww, hh); + } green(W, H); red(W, H); @@ -1348,7 +1377,7 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) //hpmap = allocArray(W, H); if (plistener) { - plistener->setProgress (1.0); + plistener->setProgress(1.0); } plistener = nullptr; // This must be reset, because only load() is called through progressConnector @@ -1363,7 +1392,7 @@ int RawImageSource::load (const Glib::ustring &fname, bool firstFrameOnly) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &lensProf, const CoarseTransformParams& coarse, bool prepareDenoise) +void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lensProf, const CoarseTransformParams& coarse, bool prepareDenoise) { // BENCHFUN MyTime t1, t2; @@ -1373,7 +1402,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le // Recalculate the scaling coefficients, using auto WB if selected in the Preprocess WB param. // Auto WB gives us better demosaicing and CA auto-correct performance for strange white balance settings (such as UniWB) float dummy_cblk[4] = { 0.f }; // Avoid overwriting c_black, see issue #5676 - ri->get_colorsCoeff( ref_pre_mul, scale_mul, dummy_cblk, raw.preprocessWB.mode == RAWParams::PreprocessWB::Mode::AUTO); + ri->get_colorsCoeff(ref_pre_mul, scale_mul, dummy_cblk, raw.preprocessWB.mode == RAWParams::PreprocessWB::Mode::AUTO); refwb_red = ri->get_pre_mul(0) / ref_pre_mul[0]; refwb_green = ri->get_pre_mul(1) / ref_pre_mul[1]; @@ -1383,7 +1412,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le const double ref_r = imatrices.rgb_cam[0][0] * refwb_red + imatrices.rgb_cam[0][1] * refwb_green + imatrices.rgb_cam[0][2] * refwb_blue; const double ref_g = imatrices.rgb_cam[1][0] * refwb_red + imatrices.rgb_cam[1][1] * refwb_green + imatrices.rgb_cam[1][2] * refwb_blue; const double ref_b = imatrices.rgb_cam[2][0] * refwb_red + imatrices.rgb_cam[2][1] * refwb_green + imatrices.rgb_cam[2][2] * refwb_blue; - const ColorTemp ReferenceWB = ColorTemp (ref_r, ref_g, ref_b, 1., ColorTemp::DEFAULT_OBSERVER); + const ColorTemp ReferenceWB = ColorTemp(ref_r, ref_g, ref_b, 1., ColorTemp::DEFAULT_OBSERVER); if (settings->verbose) { printf("Raw Reference white balance: temp %f, tint %f, multipliers [%f %f %f | %f %f %f]\n", ReferenceWB.getTemp(), ReferenceWB.getGreen(), ref_r, ref_g, ref_b, refwb_red, refwb_blue, refwb_green); @@ -1438,14 +1467,16 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le if (numFrames == 4) { int bufferNumber = 0; - for (unsigned int i=0; i<4; ++i) { - if (i==currFrame) { + + for (unsigned int i = 0; i < 4; ++i) { + if (i == currFrame) { copyOriginalPixels(raw, ri, rid, rif, rawData); rawDataFrames[i] = &rawData; } else { if (!rawDataBuffer[bufferNumber]) { rawDataBuffer[bufferNumber] = new array2D; } + rawDataFrames[i] = rawDataBuffer[bufferNumber]; ++bufferNumber; copyOriginalPixels(raw, riFrames[i], rid, rif, *rawDataFrames[i]); @@ -1455,6 +1486,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le if (!rawDataBuffer[0]) { rawDataBuffer[0] = new array2D; } + rawDataFrames[1] = rawDataBuffer[0]; copyOriginalPixels(raw, riFrames[1], rid, rif, *rawDataFrames[1]); copyOriginalPixels(raw, ri, rid, rif, rawData); @@ -1467,6 +1499,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le } else { copyOriginalPixels(raw, ri, rid, rif, rawData); } + //FLATFIELD end if (raw.ff_FromMetaData && isGainMapSupported()) { @@ -1510,7 +1543,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le } if (numFrames == 4) { - for (int i=0; i<4; ++i) { + for (int i = 0; i < 4; ++i) { scaleColors(0, 0, W, H, raw, *rawDataFrames[i]); } } else { @@ -1520,6 +1553,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le // Correct vignetting of lens profile if (!hasFlatField && lensProf.useVign && lensProf.lcMode != LensProfParams::LcMode::NONE) { std::unique_ptr pmap; + if (lensProf.useLensfun()) { pmap = LFDatabase::getInstance()->findModifier(lensProf, idata, W, H, coarse, -1); } else { @@ -1532,6 +1566,7 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le if (pmap) { LensCorrection &map = *pmap; + if (ri->getSensorType() == ST_BAYER || ri->getSensorType() == ST_FUJI_XTRANS || ri->get_colors() == 1) { if (numFrames == 4) { for (int i = 0; i < 4; ++i) { @@ -1550,8 +1585,8 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le if (ri->getSensorType() == ST_BAYER && (raw.hotPixelFilter > 0 || raw.deadPixelFilter > 0)) { if (plistener) { - plistener->setProgressStr ("PROGRESSBAR_HOTDEADPIXELFILTER"); - plistener->setProgress (0.0); + plistener->setProgressStr("PROGRESSBAR_HOTDEADPIXELFILTER"); + plistener->setProgress(0.0); } if (!bitmapBads) { @@ -1572,16 +1607,17 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le if (!bitmapBads) { bitmapBads.reset(new PixelsMap(W, H)); } - + int n = f.mark(rawData, *bitmapBads); totBP += n; if (n > 0) { if (settings->verbose) { - printf("Marked %d hot pixels from PDAF lines\n", n); + printf("Marked %d hot pixels from PDAF lines\n", n); } - auto &thresh = f.greenEqThreshold(); + auto &thresh = f.greenEqThreshold(); + if (numFrames == 4) { for (int i = 0; i < 4; ++i) { green_equilibrate(thresh, *rawDataFrames[i]); @@ -1594,17 +1630,17 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le // check if green equilibration is needed. If yes, compute G channel pre-compensation factors const auto globalGreenEq = - [&]() -> bool - { - CameraConstantsStore *ccs = CameraConstantsStore::getInstance(); - const CameraConst *cc = ccs->get(ri->get_maker().c_str(), ri->get_model().c_str()); - return cc && cc->get_globalGreenEquilibration(); - }; - + [&]() -> bool { + CameraConstantsStore *ccs = CameraConstantsStore::getInstance(); + const CameraConst *cc = ccs->get(ri->get_maker().c_str(), ri->get_model().c_str()); + return cc && cc->get_globalGreenEquilibration(); + }; + if (ri->getSensorType() == ST_BAYER && (raw.bayersensor.greenthresh || (globalGreenEq() && raw.bayersensor.method != RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::VNG4)))) { if (settings->verbose) { printf("Performing global green equilibration...\n"); } + // global correction if (numFrames == 4) { for (int i = 0; i < 4; ++i) { @@ -1617,8 +1653,8 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le if (ri->getSensorType() == ST_BAYER && raw.bayersensor.greenthresh > 0) { if (plistener) { - plistener->setProgressStr ("PROGRESSBAR_GREENEQUIL"); - plistener->setProgress (0.0); + plistener->setProgressStr("PROGRESSBAR_GREENEQUIL"); + plistener->setProgress(0.0); } GreenEqulibrateThreshold thresh(0.01 * raw.bayersensor.greenthresh); @@ -1651,11 +1687,12 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le if (ri->getSensorType() == ST_BAYER && raw.bayersensor.linenoise > 0) { if (plistener) { - plistener->setProgressStr ("PROGRESSBAR_LINEDENOISE"); - plistener->setProgress (0.0); + plistener->setProgressStr("PROGRESSBAR_LINEDENOISE"); + plistener->setProgress(0.0); } std::unique_ptr line_denoise_rowblender; + if (raw.bayersensor.linenoiseDirection == RAWParams::BayerSensor::LineNoiseDirection::PDAF_LINES) { PDAFLinesFilter f(ri); line_denoise_rowblender = f.lineDenoiseRowBlender(); @@ -1668,18 +1705,20 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le if ((raw.ca_autocorrect || std::fabs(raw.cared) > 0.001 || std::fabs(raw.cablue) > 0.001) && ri->getSensorType() == ST_BAYER) { // Auto CA correction disabled for X-Trans, for now... if (plistener) { - plistener->setProgressStr ("PROGRESSBAR_RAWCACORR"); - plistener->setProgress (0.0); + plistener->setProgressStr("PROGRESSBAR_RAWCACORR"); + plistener->setProgress(0.0); } + if (numFrames == 4) { double fitParams[64]; - float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[0], fitParams, false, true, nullptr, false, options.chunkSizeCA, options.measure); + float *buffer = CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, raw.bayersensor.border, *rawDataFrames[0], fitParams, false, true, nullptr, false, options.chunkSizeCA, options.measure); for (int i = 1; i < 3; ++i) { - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[i], fitParams, true, false, buffer, false, options.chunkSizeCA, options.measure); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, raw.bayersensor.border, *rawDataFrames[i], fitParams, true, false, buffer, false, options.chunkSizeCA, options.measure); } - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, *rawDataFrames[3], fitParams, true, false, buffer, true, options.chunkSizeCA, options.measure); + + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, raw.bayersensor.border, *rawDataFrames[3], fitParams, true, false, buffer, true, options.chunkSizeCA, options.measure); } else { - CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, rawData, nullptr, false, false, nullptr, true, options.chunkSizeCA, options.measure); + CA_correct_RT(raw.ca_autocorrect, raw.caautoiterations, raw.cared, raw.cablue, raw.ca_avoidcolourshift, raw.bayersensor.border, rawData, nullptr, false, false, nullptr, true, options.chunkSizeCA, options.measure); } } @@ -1688,8 +1727,8 @@ void RawImageSource::preprocess (const RAWParams &raw, const LensProfParams &le int aehistcompr; double clip = 0; int brightness, contrast, black, hlcompr, hlcomprthresh; - getAutoExpHistogram (aehist, aehistcompr); - ImProcFunctions::getAutoExp (aehist, aehistcompr, clip, dirpyrdenoiseExpComp, brightness, contrast, black, hlcompr, hlcomprthresh); + getAutoExpHistogram(aehist, aehistcompr); + ImProcFunctions::getAutoExp(aehist, aehistcompr, clip, dirpyrdenoiseExpComp, brightness, contrast, black, hlcompr, hlcomprthresh); } t2.set(); @@ -1710,13 +1749,13 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c if (ri->getSensorType() == ST_BAYER) { if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::HPHD)) { - hphd_demosaic (); + hphd_demosaic(); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::VNG4)) { - vng4_demosaic (rawData, red, green, blue); + vng4_demosaic(rawData, red, green, blue); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AHD)) { - ahd_demosaic (); + ahd_demosaic(); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZE)) { - amaze_demosaic_RT (0, 0, W, H, rawData, red, green, blue, options.chunkSizeAMAZE, options.measure); + amaze_demosaic_RT(0, 0, W, H, rawData, red, green, blue, options.chunkSizeAMAZE, options.measure); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZEBILINEAR) || raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::AMAZEVNG4) || raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCBBILINEAR) @@ -1725,16 +1764,16 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c || raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::RCDVNG4)) { if (!autoContrast) { double threshold = raw.bayersensor.dualDemosaicContrast; - dual_demosaic_RT (true, raw, W, H, rawData, red, green, blue, threshold, false); + dual_demosaic_RT(true, raw, W, H, rawData, red, green, blue, threshold, false); } else { - dual_demosaic_RT (true, raw, W, H, rawData, red, green, blue, contrastThreshold, true); + dual_demosaic_RT(true, raw, W, H, rawData, red, green, blue, contrastThreshold, true); } } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::PIXELSHIFT)) { pixelshift(0, 0, W, H, raw, currFrame, ri->get_maker(), ri->get_model(), raw.expos); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::DCB)) { dcb_demosaic(raw.bayersensor.dcb_iterations, raw.bayersensor.dcb_enhance); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::EAHD)) { - eahd_demosaic (); + eahd_demosaic(); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::IGV)) { igv_interpolate(W, H); } else if (raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::LMMSE)) { @@ -1758,9 +1797,9 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c } else if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FOUR_PASS) || raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::TWO_PASS)) { if (!autoContrast) { double threshold = raw.xtranssensor.dualDemosaicContrast; - dual_demosaic_RT (false, raw, W, H, rawData, red, green, blue, threshold, false); + dual_demosaic_RT(false, raw, W, H, rawData, red, green, blue, threshold, false); } else { - dual_demosaic_RT (false, raw, W, H, rawData, red, green, blue, contrastThreshold, true); + dual_demosaic_RT(false, raw, W, H, rawData, red, green, blue, contrastThreshold, true); } } else if (raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) { nodemosaic(true); @@ -1779,12 +1818,14 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c rgbSourceModified = false; + if (cache) { if (!redCache) { redCache = new array2D(W, H); greenCache = new array2D(W, H); blueCache = new array2D(W, H); } + #ifdef _OPENMP #pragma omp parallel sections #endif @@ -1792,22 +1833,27 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c #ifdef _OPENMP #pragma omp section #endif + for (int i = 0; i < H; ++i) { for (int j = 0; j < W; ++j) { (*redCache)[i][j] = red[i][j]; } } + #ifdef _OPENMP #pragma omp section #endif + for (int i = 0; i < H; ++i) { for (int j = 0; j < W; ++j) { (*greenCache)[i][j] = green[i][j]; } } + #ifdef _OPENMP #pragma omp section #endif + for (int i = 0; i < H; ++i) { for (int j = 0; j < W; ++j) { (*blueCache)[i][j] = blue[i][j]; @@ -1822,6 +1868,7 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c delete blueCache; blueCache = nullptr; } + if (settings->verbose) { if (getSensorType() == ST_BAYER) { printf("Demosaicing Bayer data: %s - %d usec\n", raw.bayersensor.method.c_str(), t2.etime(t1)); @@ -1836,10 +1883,10 @@ void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &c void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, const RetinexParams &retinexParams, multi_array2D &conversionBuffer, LUTu &lhist16RETI) { bool useHsl = (retinexParams.retinexcolorspace == "HSLLOG" || retinexParams.retinexcolorspace == "HSLLIN"); - conversionBuffer[0] (W - 2 * border, H - 2 * border); - conversionBuffer[1] (W - 2 * border, H - 2 * border); - conversionBuffer[2] (W - 2 * border, H - 2 * border); - conversionBuffer[3] (W - 2 * border, H - 2 * border); + conversionBuffer[0](W - 2 * border, H - 2 * border); + conversionBuffer[1](W - 2 * border, H - 2 * border); + conversionBuffer[2](W - 2 * border, H - 2 * border); + conversionBuffer[3](W - 2 * border, H - 2 * border); LUTf *retinexgamtab = nullptr;//gamma before and after Retinex to restore tones LUTf lutTonereti; @@ -1883,9 +1930,9 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con double x; if (gamm2 < 1.) { - x = Color::igammareti (val, gamm, start, ts, mul , add); + x = Color::igammareti(val, gamm, start, ts, mul, add); } else { - x = Color::gammareti (val, gamm, start, ts, mul , add); + x = Color::gammareti(val, gamm, start, ts, mul, add); } lutTonereti[i] = CLIP(x * 65535.);// CLIP avoid in some case extra values @@ -2024,7 +2071,7 @@ void RawImageSource::retinexPrepareBuffers(const ColorManagementParams& cmp, con } } else { - TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix (cmp.workingProfile); + TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix(cmp.workingProfile); const float wp[3][3] = { {static_cast(wprof[0][0]), static_cast(wprof[0][1]), static_cast(wprof[0][2])}, {static_cast(wprof[1][0]), static_cast(wprof[1][1]), static_cast(wprof[1][2])}, @@ -2106,7 +2153,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara t4.set(); if (settings->verbose) { - printf ("Applying Retinex\n"); + printf("Applying Retinex\n"); } LUTf lutToneireti; @@ -2151,9 +2198,9 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara double x; if (gamm2 < 1.) { - x = Color::gammareti (val, gamm, start, ts, mul , add); + x = Color::gammareti(val, gamm, start, ts, mul, add); } else { - x = Color::igammareti (val, gamm, start, ts, mul , add); + x = Color::igammareti(val, gamm, start, ts, mul, add); } lutToneireti[i] = CLIP(x * 65535.); @@ -2167,7 +2214,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara const int HNew = H - 2 * border; const int WNew = W - 2 * border; - array2D LBuffer (WNew, HNew); + array2D LBuffer(WNew, HNew); float **temp = conversionBuffer[2]; // one less dereference LUTf dLcurve; LUTu hist16RET; @@ -2222,8 +2269,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara int pos = LBuffer[i][j]; hist16RETThr[pos]++; //histogram in Curve } - } - else + } else for (int j = 0; j < W - 2 * border; j++) { LBuffer[i][j] = temp[i][j]; } @@ -2300,7 +2346,7 @@ void RawImageSource::retinex(const ColorManagementParams& cmp, const RetinexPara } } else { - TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix (cmp.workingProfile); + TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix(cmp.workingProfile); double wip[3][3] = { {wiprof[0][0], wiprof[0][1], wiprof[0][2]}, @@ -2495,6 +2541,7 @@ void RawImageSource::flush() if (rawData) { rawData(0, 0); } + if (green) { green(0, 0); } @@ -2522,16 +2569,16 @@ void RawImageSource::flush() void RawImageSource::HLRecovery_Global(const ToneCurveParams &hrp) { - // if (hrp.hrenabled && hrp.method == "Color") { - // if (!rgbSourceModified) { - // if (settings->verbose) { - // printf ("Applying Highlight Recovery: Color propagation...\n"); - // } +// if (hrp.hrenabled && hrp.method == "Color") { +// if (!rgbSourceModified) { +// if (settings->verbose) { +// printf ("Applying Highlight Recovery: Color propagation...\n"); +// } +// +// HLRecovery_inpaint (red, green, blue, hrp.hlbl); // - // HLRecovery_inpaint (red, green, blue, hrp.hlbl); -// // rgbSourceModified = true; - // } +// } // } } @@ -2557,16 +2604,19 @@ void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, con #ifdef _OPENMP #pragma omp parallel for #endif + for (int row = 0; row < H; row++) { const int c0 = FC(row, 0); const float black0 = black[(c0 == 1 && !(row & 1)) ? 3 : c0]; const int c1 = FC(row, 1); const float black1 = black[(c1 == 1 && !(row & 1)) ? 3 : c1]; int col; + for (col = 0; col < W - 1; col += 2) { rawData[row][col] = max(src->data[row][col] + black0 - riDark->data[row][col], 0.0f); rawData[row][col + 1] = max(src->data[row][col + 1] + black1 - riDark->data[row][col + 1], 0.0f); } + if (col < W) { rawData[row][col] = max(src->data[row][col] + black0 - riDark->data[row][col], 0.0f); } @@ -2607,6 +2657,7 @@ void RawImageSource::copyOriginalPixels(const RAWParams &raw, RawImage *src, con } } } + if (riFlatFile && W == riFlatFile->get_width() && H == riFlatFile->get_height()) { processFlatField(raw, riFlatFile, rawData, black); } // flatfield @@ -2810,7 +2861,7 @@ void RawImageSource::scaleColors(int winx, int winy, int winw, int winh, const R //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -int RawImageSource::defTransform (int tran) +int RawImageSource::defTransform(const RawImage *ri, int tran) { int deg = ri->get_rotateDegree(); @@ -2849,7 +2900,7 @@ int RawImageSource::defTransform (int tran) //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // Thread called part -void RawImageSource::processFalseColorCorrectionThread (Imagefloat* im, array2D &rbconv_Y, array2D &rbconv_I, array2D &rbconv_Q, array2D &rbout_I, array2D &rbout_Q, const int row_from, const int row_to) +void RawImageSource::processFalseColorCorrectionThread(Imagefloat* im, array2D &rbconv_Y, array2D &rbconv_I, array2D &rbconv_Q, array2D &rbout_I, array2D &rbout_Q, const int row_from, const int row_to) { const int W = im->getWidth(); @@ -2871,8 +2922,8 @@ void RawImageSource::processFalseColorCorrectionThread (Imagefloat* im, array2D int px = (row_from - 1) % 3, cx = row_from % 3, nx = 0; - convert_row_to_YIQ (im->r(row_from - 1), im->g(row_from - 1), im->b(row_from - 1), rbconv_Y[px], rbconv_I[px], rbconv_Q[px], W); - convert_row_to_YIQ (im->r(row_from), im->g(row_from), im->b(row_from), rbconv_Y[cx], rbconv_I[cx], rbconv_Q[cx], W); + convert_row_to_YIQ(im->r(row_from - 1), im->g(row_from - 1), im->b(row_from - 1), rbconv_Y[px], rbconv_I[px], rbconv_Q[px], W); + convert_row_to_YIQ(im->r(row_from), im->g(row_from), im->b(row_from), rbconv_Y[cx], rbconv_I[cx], rbconv_Q[cx], W); for (int j = 0; j < W; j++) { rbout_I[px][j] = rbconv_I[px][j]; @@ -2885,11 +2936,11 @@ void RawImageSource::processFalseColorCorrectionThread (Imagefloat* im, array2D cx = i % 3; nx = (i + 1) % 3; - convert_row_to_YIQ (im->r(i + 1), im->g(i + 1), im->b(i + 1), rbconv_Y[nx], rbconv_I[nx], rbconv_Q[nx], W); + convert_row_to_YIQ(im->r(i + 1), im->g(i + 1), im->b(i + 1), rbconv_Y[nx], rbconv_I[nx], rbconv_Q[nx], W); #ifdef __SSE2__ - pre1[0] = _mm_setr_ps(rbconv_I[px][0], rbconv_Q[px][0], 0, 0) , pre1[1] = _mm_setr_ps(rbconv_I[cx][0], rbconv_Q[cx][0], 0, 0), pre1[2] = _mm_setr_ps(rbconv_I[nx][0], rbconv_Q[nx][0], 0, 0); - pre2[0] = _mm_setr_ps(rbconv_I[px][1], rbconv_Q[px][1], 0, 0) , pre2[1] = _mm_setr_ps(rbconv_I[cx][1], rbconv_Q[cx][1], 0, 0), pre2[2] = _mm_setr_ps(rbconv_I[nx][1], rbconv_Q[nx][1], 0, 0); + pre1[0] = _mm_setr_ps(rbconv_I[px][0], rbconv_Q[px][0], 0, 0), pre1[1] = _mm_setr_ps(rbconv_I[cx][0], rbconv_Q[cx][0], 0, 0), pre1[2] = _mm_setr_ps(rbconv_I[nx][0], rbconv_Q[nx][0], 0, 0); + pre2[0] = _mm_setr_ps(rbconv_I[px][1], rbconv_Q[px][1], 0, 0), pre2[1] = _mm_setr_ps(rbconv_I[cx][1], rbconv_Q[cx][1], 0, 0), pre2[2] = _mm_setr_ps(rbconv_I[nx][1], rbconv_Q[nx][1], 0, 0); // fill first element in rbout_I and rbout_Q rbout_I[cx][0] = rbconv_I[cx][0]; @@ -2962,7 +3013,7 @@ void RawImageSource::processFalseColorCorrectionThread (Imagefloat* im, array2D // blur i-1th row if (i > row_from) { - convert_to_RGB (im->r(i - 1, 0), im->g(i - 1, 0), im->b(i - 1, 0), rbconv_Y[px][0], rbout_I[px][0], rbout_Q[px][0]); + convert_to_RGB(im->r(i - 1, 0), im->g(i - 1, 0), im->b(i - 1, 0), rbconv_Y[px][0], rbout_I[px][0], rbout_Q[px][0]); #ifdef _OPENMP #pragma omp simd @@ -2971,15 +3022,15 @@ void RawImageSource::processFalseColorCorrectionThread (Imagefloat* im, array2D for (int j = 1; j < W - 1; j++) { float I = (rbout_I[px][j - 1] + rbout_I[px][j] + rbout_I[px][j + 1] + rbout_I[cx][j - 1] + rbout_I[cx][j] + rbout_I[cx][j + 1] + rbout_I[nx][j - 1] + rbout_I[nx][j] + rbout_I[nx][j + 1]) * onebynine; float Q = (rbout_Q[px][j - 1] + rbout_Q[px][j] + rbout_Q[px][j + 1] + rbout_Q[cx][j - 1] + rbout_Q[cx][j] + rbout_Q[cx][j + 1] + rbout_Q[nx][j - 1] + rbout_Q[nx][j] + rbout_Q[nx][j + 1]) * onebynine; - convert_to_RGB (im->r(i - 1, j), im->g(i - 1, j), im->b(i - 1, j), rbconv_Y[px][j], I, Q); + convert_to_RGB(im->r(i - 1, j), im->g(i - 1, j), im->b(i - 1, j), rbconv_Y[px][j], I, Q); } - convert_to_RGB (im->r(i - 1, W - 1), im->g(i - 1, W - 1), im->b(i - 1, W - 1), rbconv_Y[px][W - 1], rbout_I[px][W - 1], rbout_Q[px][W - 1]); + convert_to_RGB(im->r(i - 1, W - 1), im->g(i - 1, W - 1), im->b(i - 1, W - 1), rbconv_Y[px][W - 1], rbout_I[px][W - 1], rbout_Q[px][W - 1]); } } // blur last 3 row and finalize H-1th row - convert_to_RGB (im->r(row_to - 1, 0), im->g(row_to - 1, 0), im->b(row_to - 1, 0), rbconv_Y[cx][0], rbout_I[cx][0], rbout_Q[cx][0]); + convert_to_RGB(im->r(row_to - 1, 0), im->g(row_to - 1, 0), im->b(row_to - 1, 0), rbconv_Y[cx][0], rbout_I[cx][0], rbout_Q[cx][0]); #ifdef _OPENMP #pragma omp simd #endif @@ -2987,16 +3038,16 @@ void RawImageSource::processFalseColorCorrectionThread (Imagefloat* im, array2D for (int j = 1; j < W - 1; j++) { float I = (rbout_I[px][j - 1] + rbout_I[px][j] + rbout_I[px][j + 1] + rbout_I[cx][j - 1] + rbout_I[cx][j] + rbout_I[cx][j + 1] + rbconv_I[nx][j - 1] + rbconv_I[nx][j] + rbconv_I[nx][j + 1]) * onebynine; float Q = (rbout_Q[px][j - 1] + rbout_Q[px][j] + rbout_Q[px][j + 1] + rbout_Q[cx][j - 1] + rbout_Q[cx][j] + rbout_Q[cx][j + 1] + rbconv_Q[nx][j - 1] + rbconv_Q[nx][j] + rbconv_Q[nx][j + 1]) * onebynine; - convert_to_RGB (im->r(row_to - 1, j), im->g(row_to - 1, j), im->b(row_to - 1, j), rbconv_Y[cx][j], I, Q); + convert_to_RGB(im->r(row_to - 1, j), im->g(row_to - 1, j), im->b(row_to - 1, j), rbconv_Y[cx][j], I, Q); } - convert_to_RGB (im->r(row_to - 1, W - 1), im->g(row_to - 1, W - 1), im->b(row_to - 1, W - 1), rbconv_Y[cx][W - 1], rbout_I[cx][W - 1], rbout_Q[cx][W - 1]); + convert_to_RGB(im->r(row_to - 1, W - 1), im->g(row_to - 1, W - 1), im->b(row_to - 1, W - 1), rbconv_Y[cx][W - 1], rbout_I[cx][W - 1], rbout_Q[cx][W - 1]); } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // correction_YIQ_LQ -void RawImageSource::processFalseColorCorrection (Imagefloat* im, const int steps) +void RawImageSource::processFalseColorCorrection(Imagefloat* im, const int steps) { if (im->getHeight() < 4 || steps < 1) { @@ -3006,7 +3057,7 @@ void RawImageSource::processFalseColorCorrection (Imagefloat* im, const int ste #ifdef _OPENMP #pragma omp parallel { - multi_array2D buffer (W, 3); + multi_array2D buffer(W, 3); int tid = omp_get_thread_num(); int nthreads = omp_get_num_threads(); int blk = (im->getHeight() - 2) / nthreads; @@ -3014,19 +3065,19 @@ void RawImageSource::processFalseColorCorrection (Imagefloat* im, const int ste for (int t = 0; t < steps; t++) { if (tid < nthreads - 1) { - processFalseColorCorrectionThread (im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 + tid * blk, 1 + (tid + 1)*blk); + processFalseColorCorrectionThread(im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 + tid * blk, 1 + (tid + 1)*blk); } else { - processFalseColorCorrectionThread (im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 + tid * blk, im->getHeight() - 1); + processFalseColorCorrectionThread(im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 + tid * blk, im->getHeight() - 1); } #pragma omp barrier } } #else - multi_array2D buffer (W, 3); + multi_array2D buffer(W, 3); for (int t = 0; t < steps; t++) { - processFalseColorCorrectionThread (im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1 , im->getHeight() - 1); + processFalseColorCorrectionThread(im, buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], 1, im->getHeight() - 1); } #endif @@ -3100,7 +3151,7 @@ lab2ProphotoRgbD50(float L, float A, float B, float& r, float& g, float& b) } // Converts raw image including ICC input profile to working space - floating point version -void RawImageSource::colorSpaceConversion_ (Imagefloat* im, const ColorManagementParams& cmp, const ColorTemp &wb, double pre_mul[3], cmsHPROFILE embedded, cmsHPROFILE camprofile, double camMatrix[3][3], const std::string &camName) +void RawImageSource::colorSpaceConversion_(Imagefloat* im, const ColorManagementParams& cmp, const ColorTemp &wb, double pre_mul[3], cmsHPROFILE embedded, cmsHPROFILE camprofile, double camMatrix[3][3], const std::string &camName) { // MyTime t1, t2, t3; @@ -3134,7 +3185,7 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, const ColorManagemen // in this case we avoid using the slllllooooooowwww lcms // Calculate matrix for direct conversion raw>working space - TMatrix work = ICCStore::getInstance()->workingSpaceInverseMatrix (cmp.workingProfile); + TMatrix work = ICCStore::getInstance()->workingSpaceInverseMatrix(cmp.workingProfile); double mat[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; for (int i = 0; i < 3; i++) @@ -3235,6 +3286,7 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, const ColorManagemen TMatrix toxyz = ICCStore::getInstance()->workingSpaceMatrix(cmp.workingProfile); TMatrix torgb = ICCStore::getInstance()->workingSpaceInverseMatrix("ProPhoto"); float rgb[3] = {0.f, 0.f, 0.f}; + for (int i = 0; i < 2 && !working_space_is_prophoto; ++i) { rgb[i] = 1.f; float x, y, z; @@ -3246,17 +3298,20 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, const ColorManagemen if (rgb[j] < 0.f || rgb[j] > 1.f) { working_space_is_prophoto = true; prophoto = ICCStore::getInstance()->workingSpace(cmp.workingProfile); + if (settings->verbose) { std::cout << "colorSpaceConversion_: converting directly to " << cmp.workingProfile << " instead of passing through ProPhoto" << std::endl; } + break; } + rgb[j] = 0.f; } } } - - lcmsMutex->lock (); + + lcmsMutex->lock(); switch (camera_icc_type) { case CAMERA_ICC_TYPE_PHASE_ONE: @@ -3265,7 +3320,7 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, const ColorManagemen transform_via_pcs_lab = true; separate_pcs_lab_highlights = true; // We transform to Lab because we can and that we avoid getting an unnecessary unmatched gamma conversion which we would need to revert. - hTransform = cmsCreateTransform (in, TYPE_RGB_FLT, nullptr, TYPE_Lab_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE); + hTransform = cmsCreateTransform(in, TYPE_RGB_FLT, nullptr, TYPE_Lab_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { @@ -3283,24 +3338,24 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, const ColorManagemen case CAMERA_ICC_TYPE_NIKON: case CAMERA_ICC_TYPE_GENERIC: default: - hTransform = cmsCreateTransform (in, TYPE_RGB_FLT, prophoto, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE); // NOCACHE is important for thread safety + hTransform = cmsCreateTransform(in, TYPE_RGB_FLT, prophoto, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE); // NOCACHE is important for thread safety break; } - lcmsMutex->unlock (); + lcmsMutex->unlock(); if (hTransform == nullptr) { // Fallback: create transform from camera profile. Should not happen normally. - lcmsMutex->lock (); - hTransform = cmsCreateTransform (camprofile, TYPE_RGB_FLT, prophoto, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE); - lcmsMutex->unlock (); + lcmsMutex->lock(); + hTransform = cmsCreateTransform(camprofile, TYPE_RGB_FLT, prophoto, TYPE_RGB_FLT, INTENT_RELATIVE_COLORIMETRIC, cmsFLAGS_NOOPTIMIZE | cmsFLAGS_NOCACHE); + lcmsMutex->unlock(); } TMatrix toxyz = {}, torgb = {}; if (!working_space_is_prophoto) { - toxyz = ICCStore::getInstance()->workingSpaceMatrix ("ProPhoto"); - torgb = ICCStore::getInstance()->workingSpaceInverseMatrix (cmp.workingProfile); //sRGB .. Adobe...Wide... + toxyz = ICCStore::getInstance()->workingSpaceMatrix("ProPhoto"); + torgb = ICCStore::getInstance()->workingSpaceInverseMatrix(cmp.workingProfile); //sRGB .. Adobe...Wide... } #ifdef _OPENMP @@ -3389,10 +3444,10 @@ void RawImageSource::colorSpaceConversion_ (Imagefloat* im, const ColorManagemen } // Run icc transform - cmsDoTransform (hTransform, buffer.data, buffer.data, im->getWidth()); + cmsDoTransform(hTransform, buffer.data, buffer.data, im->getWidth()); if (separate_pcs_lab_highlights) { - cmsDoTransform (hTransform, hl_buffer.data, hl_buffer.data, im->getWidth()); + cmsDoTransform(hTransform, hl_buffer.data, hl_buffer.data, im->getWidth()); } // Apply post-processing @@ -3518,7 +3573,7 @@ bool RawImageSource::findInputProfile(Glib::ustring inProfile, cmsHPROFILE embed } else if (inProfile != "(camera)" && !inProfile.empty()) { Glib::ustring normalName = inProfile; - if (!inProfile.compare (0, 5, "file:")) { + if (!inProfile.compare(0, 5, "file:")) { normalName = inProfile.substr(5); } @@ -3527,7 +3582,7 @@ bool RawImageSource::findInputProfile(Glib::ustring inProfile, cmsHPROFILE embed } if (*dcpProf == nullptr) { - in = ICCStore::getInstance()->getProfile (inProfile); + in = ICCStore::getInstance()->getProfile(inProfile); } } @@ -3558,6 +3613,7 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi const float satthresh = 0.5; float clip[3]; + for (int c = 0; c < ColorCount; ++c) { clip[c] = rtengine::min(maxave, hlmax[c]); } @@ -3601,8 +3657,7 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi for (int c = 0; c < ColorCount; ++c) { lab[i][c] = 0; - for (int j = 0; j < ColorCount; j++) - { + for (int j = 0; j < ColorCount; j++) { lab[i][c] += trans[c][j] * cam[i][j]; } } @@ -3625,11 +3680,11 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi for (int c = 0; c < ColorCount; ++c) { cam[0][c] = 0; - for (int j = 0; j < ColorCount; j++) - { + for (int j = 0; j < ColorCount; j++) { cam[0][c] += itrans[c][j] * lab[0][j]; } } + for (int c = 0; c < ColorCount; ++c) { rgb[c] = cam[0][c] / ColorCount; } @@ -3669,7 +3724,7 @@ void RawImageSource::HLRecovery_blend(float* rin, float* gin, float* bin, int wi } } -void RawImageSource::HLRecovery_Luminance (float* rin, float* gin, float* bin, float* rout, float* gout, float* bout, int width, float maxval) +void RawImageSource::HLRecovery_Luminance(float* rin, float* gin, float* bin, float* rout, float* gout, float* bout, int width, float maxval) { for (int i = 0; i < width; i++) { @@ -3686,7 +3741,7 @@ void RawImageSource::HLRecovery_Luminance (float* rin, float* gin, float* bin, f double Ho = 2 * bo - ro - go; if (r != g && g != b) { - double ratio = std::sqrt ((Co * Co + Ho * Ho) / (C * C + H * H)); + double ratio = std::sqrt((Co * Co + Ho * Ho) / (C * C + H * H)); C *= ratio; H *= ratio; } @@ -3707,8 +3762,8 @@ void RawImageSource::HLRecovery_Luminance (float* rin, float* gin, float* bin, f //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::HLRecovery_CIELab (float* rin, float* gin, float* bin, float* rout, float* gout, float* bout, - int width, float maxval, double xyz_cam[3][3], double cam_xyz[3][3]) +void RawImageSource::HLRecovery_CIELab(float* rin, float* gin, float* bin, float* rout, float* gout, float* bout, + int width, float maxval, double xyz_cam[3][3], double cam_xyz[3][3]) { //static bool crTableReady = false; @@ -3764,16 +3819,15 @@ void RawImageSource::HLRecovery_CIELab (float* rin, float* gin, float* bin, floa //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::hlRecovery (const std::string &method, float* red, float* green, float* blue, int width, float* hlmax) +void RawImageSource::hlRecovery(const std::string &method, float* red, float* green, float* blue, int width, float* hlmax) { -// BENCHFUN +// BENCHFUN if (method == "Luminance") { - HLRecovery_Luminance (red, green, blue, red, green, blue, width, 65535.0); + HLRecovery_Luminance(red, green, blue, red, green, blue, width, 65535.0); } else if (method == "CIELab blending") { - HLRecovery_CIELab (red, green, blue, red, green, blue, width, 65535.0, imatrices.xyz_cam, imatrices.cam_xyz); - } - else if (method == "Blend") { // derived from Dcraw + HLRecovery_CIELab(red, green, blue, red, green, blue, width, 65535.0, imatrices.xyz_cam, imatrices.cam_xyz); + } else if (method == "Blend") { // derived from Dcraw HLRecovery_blend(red, green, blue, width, 65535.0, hlmax); } @@ -3781,7 +3835,7 @@ void RawImageSource::hlRecovery (const std::string &method, float* red, float* g //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::getAutoExpHistogram (LUTu & histogram, int& histcompr) +void RawImageSource::getAutoExpHistogram(LUTu & histogram, int& histcompr) { // BENCHFUN histcompr = 3; @@ -3802,7 +3856,7 @@ void RawImageSource::getAutoExpHistogram (LUTu & histogram, int& histcompr) for (int i = border; i < H - border; i++) { int start, end; - getRowStartEnd (i, start, end); + getRowStartEnd(i, start, end); if (ri->getSensorType() == ST_BAYER) { // precalculate factors to avoid expensive per pixel calculations @@ -3863,7 +3917,7 @@ void RawImageSource::getAutoExpHistogram (LUTu & histogram, int& histcompr) } // Histogram MUST be 256 in size; gamma is applied, blackpoint and gain also -void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LUTu & histBlueRaw) +void RawImageSource::getRAWHistogram(LUTu & histRedRaw, LUTu & histGreenRaw, LUTu & histBlueRaw) { // BENCHFUN histRedRaw.clear(); @@ -3930,7 +3984,7 @@ void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LU for (int i = border; i < H - border; i++) { int start, end; - getRowStartEnd (i, start, end); + getRowStartEnd(i, start, end); if (ri->getSensorType() == ST_BAYER) { int j; @@ -3983,11 +4037,10 @@ void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LU } // end of parallel region const auto getidx = - [&](int c, int i) -> int - { - float f = mult[c] * std::max(0.f, i - cblacksom[c]); - return f > 0.f ? (f < 1.f ? 1 : std::min(int(f), 255)) : 0; - }; + [&](int c, int i) -> int { + float f = mult[c] * std::max(0.f, i - cblacksom[c]); + return f > 0.f ? (f < 1.f ? 1 : std::min(int(f), 255)) : 0; + }; for (int i = 0; i < histoSize; i++) { int idx = getidx(0, i); @@ -4010,12 +4063,10 @@ void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LU if (ri->getSensorType() == ST_BAYER) // since there are twice as many greens, correct for it for (int i = 0; i < 256; i++) { histGreenRaw[i] >>= 1; - } - else if (ri->getSensorType() == ST_FUJI_XTRANS) // since Xtrans has 2.5 as many greens, correct for it + } else if (ri->getSensorType() == ST_FUJI_XTRANS) // since Xtrans has 2.5 as many greens, correct for it for (int i = 0; i < 256; i++) { histGreenRaw[i] = (histGreenRaw[i] * 2) / 5; - } - else if (ri->get_colors() == 1) { // monochrome sensor => set all histograms equal + } else if (ri->get_colors() == 1) { // monochrome sensor => set all histograms equal histGreenRaw += histRedRaw; histBlueRaw += histRedRaw; } @@ -4024,7 +4075,7 @@ void RawImageSource::getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LU //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void RawImageSource::getRowStartEnd (int x, int &start, int &end) +void RawImageSource::getRowStartEnd(int x, int &start, int &end) { if (fuji) { int fw = ri->get_FujiWidth(); @@ -4057,9 +4108,12 @@ static void histoxyY_low(int bfhitc, int bfwitc, const array2D & xc, cons #ifdef _OPENMP #pragma omp for schedule(dynamic, 4) nowait #endif - for (int y = 0; y < bfhitc ; y++) { + + for (int y = 0; y < bfhitc ; y++) + { for (int x = 0; x < bfwitc ; x++) { int nh = -1; + if (xc[y][x] < 0.12f && xc[y][x] > 0.03f && yc[y][x] > 0.1f) { // near Prophoto if (yc[y][x] < 0.2f) { nh = 0; @@ -4482,6 +4536,7 @@ static void histoxyY_low(int bfhitc, int bfwitc, const array2D & xc, cons } else if (xc[y][x] < 0.75f && yc[y][x] > 0.1f) { nh = 191; } + if (nh >= 0) { histxythr[nh]++; xxxthr[nh] += xc[y][x]; @@ -4490,6 +4545,7 @@ static void histoxyY_low(int bfhitc, int bfwitc, const array2D & xc, cons } } } + #ifdef _OPENMP #pragma omp critical #endif @@ -4503,16 +4559,21 @@ static void histoxyY_low(int bfhitc, int bfwitc, const array2D & xc, cons } +//enable display cells +//int cellxy[80][90] ; -static void histoxyY(int bfhitc, int bfwitc, const array2D & xc, const array2D & yc, const array2D & Yc, LUTf &xxx, LUTf &yyy, LUTf &YYY, LUTu &histxy, bool purp) +static void histoxyY(int bfhitc, int bfwitc, const array2D & xc, const array2D & yc, const array2D & Yc, LUTf &xxx, LUTf &yyy, LUTf &YYY, LUTu &histxy, bool purpe) { // calculate histogram x y in a range of 236 colors // this "choice" are guided by generally colors who are in nature skin, sky, etc. in those cases "steps" are small // of course we can change to be more precise // purp enable or not purple color in xyY - approximation... +//enable display cells +// int totalpixels = 0; + #ifdef _OPENMP - #pragma omp parallel + #pragma omp parallel // disabled if enable display cells #endif { LUTu histxythr(histxy.getSize()); @@ -4523,9 +4584,21 @@ static void histoxyY(int bfhitc, int bfwitc, const array2D & xc, const ar yyythr.clear(); LUTf YYYthr(YYY.getSize()); YYYthr.clear(); - // bool purp = false; + bool purp = true; + float Ypurp = 0.5f; + float Ypurpmax = 1.f; + //enable display cells + /* + // clear + for (int i = 0; i < 80; ++i) { + for (int j = 0 ; j < 90; ++j) { + cellxy[i][j] = 0; + } + } + */ #ifdef _OPENMP - #pragma omp for schedule(dynamic, 4) nowait + #pragma omp for schedule(dynamic, 4) nowait //disable if enable display cells + #endif for (int y = 0; y < bfhitc ; y++) @@ -4533,6 +4606,12 @@ static void histoxyY(int bfhitc, int bfwitc, const array2D & xc, const ar for (int x = 0; x < bfwitc ; x++) { int nh = -1; + if (!purpe) { + purp = (Yc[y][x] < Ypurp);//cut values with Y > Ypurp + } else { + purp = (Yc[y][x] < Ypurpmax);// + } + if (xc[y][x] < 0.12f && xc[y][x] > 0.03f && yc[y][x] > 0.1f) { // near Prophoto if (yc[y][x] < 0.2f) { nh = 0; @@ -5051,11 +5130,23 @@ static void histoxyY(int bfhitc, int bfwitc, const array2D & xc, const ar yyythr[nh] += yc[y][x]; YYYthr[nh] += Yc[y][x]; } + +//enable display cells + /* + // update + int x1 = (int)(100.0 * (xc[y][x])); + int y1 = (int)(100.0 * (yc[y][x])); + + if (x1 >= 0 && x1 < 80 && y1 >= 0 && y1 < 90) { + cellxy[x1][y1]++; + totalpixels++; + } + */ } } #ifdef _OPENMP - #pragma omp critical + #pragma omp critical //disable if enable display cells #endif { histxy += histxythr; @@ -5119,10 +5210,10 @@ float static studentXY(const array2D & YYcurr, const array2D & ref -void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double &tempitc, double &greenitc, float &studgood, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, const ColorManagementParams &cmp, const RAWParams &raw, const WBParams & wbpar, const ToneCurveParams &hrp) +void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double &tempitc, double &greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, const ColorManagementParams &cmp, const RAWParams &raw, const WBParams & wbpar, const ToneCurveParams &hrp) { /* - Copyright (c) Jacques Desmis 6 - 2018 jdesmis@gmail.com, update 2 - 2023 + Copyright (c) Jacques Desmis 6 - 2018 jdesmis@gmail.com, update 6 - 2023 Copyright (c) Ingo Weyrich 3 - 2020 (heckflosse67@gmx.de) This algorithm try to find temperature correlation between 20 to 80 colors between 201 spectral color and about 20 to 55 color found in the image between 236, I just found the idea in the web "correlate with chroma" instead of RGB grey point,but I don't use any algo found on the web. @@ -5130,17 +5221,17 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double I have test many many algorithms to find the first one that work :) Probably (sure) there are improvement to do... - I have create a table temperature with temp and white point with 118 values between 2000K and 12000K we can obviously change these values, more...with different steps + I have create a table temperature with temp and white point with 191 values between 2000K and 15000K we can obviously change these values, more...with different steps I have create a table for tint (green)with 134 values between 0.4 to 4. - I have create or recuparate and transformed 201 spectral colors from Colorchecker24, others color and my 468 colors target, or from web flowers, etc. with a step of 5nm, I think it is large enough. - I think this value of 201 is now complete: I tested correlation with 60, 90, 100, 120, 155...better student increase with number of color, but now it seems stabilized + I have create or recuparate and transformed 406 spectral colors from Colorchecker24, others color and my 468 colors target, or from web flowers, etc. with a step of 5nm, I think it is large enough. + I think this value of 265 is now complete: I tested correlation with 60, 90, 100, 120, 155...better student increase with number of color, but now it seems stabilized Of course we can increase this number :) 1) for the current raw file we create a table for each temp of RGB multipliers 2) then, I choose the "camera temp" to initialize calculation (why not) - 3) for this temp, I calculated XYZ values for the 201 spectral data - 4) then I create for the image an "histogram", but for xyY (CIE 1931 color space or CIE 1964 (default)) - 5) for each pixel (in fact to accelerate only 1/5 for and 1/5 for y), I determine for each couple xy, the number of occurrences, can be change by Itcwb_precis to 3 or 9 + 3) for this temp, I calculated XYZ values for the 406 spectral data + 4) then I create for the image an "histogram", but for xyY (CIE 1931 color space or CIE 1964) + 5) for each pixel (in fact to accelerate only 1/3 for and 1/3 for y), I determine for each couple xy, the number of occurrences 6) I sort this result in ascending order 7) in option we can sort in another manner to take into account chroma : chromax = x - white point x, chromay = y - white point y 8) then I compare this result, with spectral data found above in 3) with deltaE (limited to chroma) @@ -5155,13 +5246,13 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double 17) after we pass this value to improccoordinator 18) in a second part if camera green is out, I used an "extra" algorithm - 19) we make vary green between 2 limits (settings in option) - 20) between these green limits, we make slightly vary temp (settings in options) and recalculated RGB multipliers + 19) we make vary green between 2 limits + 20) between these green limits, we make slightly vary temp and recalculated RGB multipliers 21) with this multipliers for the RGB color find in histogram we recalculate xyY 22) we re-adjust references color for these xyY from 20) 23) then find all Student correlation for each couple green / temp 24) sort these Student values, and choose the minimum - 25) then for the 5 better couple "temp / green" choose the one where green is nearest from 1. + 25) then for the 3 better couple "temp / green" choose the one where green is nearest from 1. Some variables or function are not used, keep in case of I have test with cat02 but result are not stable enough ! why ??, therefore cat02 neutralized @@ -5173,916 +5264,2139 @@ void RawImageSource::ItcWB(bool extra, double &tempref, double &greenref, double You must avoid when illuminant is non standard (fluorescent, LED...) and also, when the subject is lost in the image (some target to generate profiles). You can change parameters in White Balance - Frame adapted to Itcwb - Itcwb_thres : 34 by default ==> number of color used in final algorithm - between 10 and max 55 - Itcwb_sorted : true by default, can improve algorithm if true, ==> sort value in something near chroma order, instead of histogram number - Itcwb_greenrange : 0 amplitude of green variation - between 0 to 2 - Itcwb_greendelta : 1 - delta temp in green iterate loop for "extra" - between 0 to 4 - Itcwb_forceextra : false by default - Use all Ciexy diagram instead of sRGB - //Itcwb_sizereference : repalce by int maxnb 3 by default, can be set to 5 ==> size of reference color compare to size of histogram real color - itcwb_delta : 1 by default can be set between 0 to 5 ==> delta temp to build histogram xy - if camera temp is not probably good - //itcwb_precis : replace by int precision = 3 by default - can be set to 3 or 9 - 3 best sampling but more time...9 "old" settings - but low differences in times with 3 instead of 9 about twice time 160ms instead of 80ms for a big raw file - itcwb_nopurple : true default - allow to bypass highlight recovery and inpait opposed when need flowers and not purple due to highlights... - itcwb_fgreen : 5 by default - between 3 to 6 - find the compromise student / green to reach green near of 1 - - In file options. - use standard observer 10°, false = standard observer 2° + Itcwb_rgreen : 1 amplitude of green variation - between 0 to 2 + Itcwb_prim : sRGB, Beta rgb (default), XYZcam, JDCmax = Use near Ciexy diagram instead of sRGB + itcwb_delta : 4 by default can be set between 0 to 5 ==> delta temp to build histogram xy - if camera temp is not probably good + itcwb_nopurple : false default - allow to bypass highlight recovery and inpait opposed when need flowers and not purple due to highlights... + itcwb_green - adjust green refinement */ - // BENCHFUN + BENCHFUN + MyTime t1, t2, t3, t4, t5, t6, t7, t8; + t1.set(); - Glib::ustring profuse; - profuse = "sRGB";//or "Adobe RGB" - if( wbpar.itcwb_forceextra && wbpar.itcwb_sampling == false) {//Adobe RGB - profuse = "ACESp0";//cover all CIE xy diagram - } - - TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix(profuse); //ACESp0 or sRGB - const float wp[3][3] = { - {static_cast(wprof[0][0]), static_cast(wprof[0][1]), static_cast(wprof[0][2])}, - {static_cast(wprof[1][0]), static_cast(wprof[1][1]), static_cast(wprof[1][2])}, - {static_cast(wprof[2][0]), static_cast(wprof[2][1]), static_cast(wprof[2][2])} + bool itciterate = true; + bool lastitc = true; + + typedef struct Wboptim {//store config Itcwb + float stud; + float minc; + double titc; + double gritc; + double tempre; + double greenre; + int drea; + int kmi; + float minhis; + float maxhis; + double avg_r; + double avg_g; + double avg_b; + float delt; + + } Wboptim; + + Wboptim optitc[2] = { + {0.f, 0.f, 5000., 1., 5000., 1., 1, 1, 10.f, 100.f, 1., 1., 1., 0.f}, + {0.f, 0.f, 5000., 1., 5000., 1., 1, 1, 10.f, 100.f, 1., 1., 1., 0.f} }; + int nbitc = 0; + int choiceitc = 0; + bool oldsampling = wbpar.itcwb_sampling; - TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix(profuse);//ACESp0 or sRGB - //inverse matrix user select - const float wip[3][3] = { - {static_cast(wiprof[0][0]), static_cast(wiprof[0][1]), static_cast(wiprof[0][2])}, - {static_cast(wiprof[1][0]), static_cast(wiprof[1][1]), static_cast(wiprof[1][2])}, - {static_cast(wiprof[2][0]), static_cast(wiprof[2][1]), static_cast(wiprof[2][2])} - }; + while (itciterate) {//loop to find best mix minchrom and studgood and deltaE patch + Glib::ustring profuse; + profuse = "JDCmax"; - const int bfwitc = bfw; - const int bfhitc = bfh; + int limx = 0.05f; + int limy = 0.04f; - typedef struct WbGreen { - double green; - float snedecor;//1. actually but put in case of confiance interval - } WbGreen; - //green (tint) values between 0.4 to 4.0 - constexpr WbGreen gree[134] = {//symmetric coefficient between 0.717 and 1.40 - {0.400, 1.f}, - {0.420, 1.f}, - {0.440, 1.f}, - {0.460, 1.f}, - {0.480, 1.f}, - {0.500, 1.f}, - {0.520, 1.f}, - {0.540, 1.f}, - {0.550, 1.f}, - {0.560, 1.f}, - {0.570, 1.f}, - {0.580, 1.f}, - {0.590, 1.f}, - {0.600, 1.f}, - {0.610, 1.f}, - {0.620, 1.f},//extended range - {0.630, 1.f}, - {0.640, 1.f}, - {0.650, 1.f}, - {0.660, 1.f}, - {0.670, 1.f}, - {0.680, 1.f}, - {0.690, 1.f}, - {0.700, 1.f}, - {0.714, 1.f},//usual 2 range - {0.727, 1.f}, - {0.741, 1.f}, - {0.755, 1.f}, - {0.769, 1.f}, - {0.784, 1.f}, - {0.800, 1.f}, - {0.806, 1.f}, - {0.813, 1.f}, - {0.820, 1.f},//usual range - {0.826, 1.f}, - {0.833, 1.f}, - {0.840, 1.f}, - {0.847, 1.f}, - {0.855, 1.f}, - {0.862, 1.f}, - {0.870, 1.f}, - {0.877, 1.f}, - {0.885, 1.f}, - {0.893, 1.f}, - {0.901, 1.f}, - {0.909, 1.f}, - {0.917, 1.f}, - {0.926, 1.f}, - {0.935, 1.f}, - {0.943, 1.f}, - {0.952, 1.f}, - {0.962, 1.f}, - {0.971, 1.f}, - {0.980, 1.f}, - {0.990, 1.f}, - {1.000, 1.f},//55 reference - {1.010, 1.f}, - {1.020, 1.f}, - {1.030, 1.f}, - {1.040, 1.f}, - {1.050, 1.f}, - {1.060, 1.f}, - {1.070, 1.f}, - {1.080, 1.f}, - {1.090, 1.f}, - {1.100, 1.f}, - {1.110, 1.f}, - {1.120, 1.f}, - {1.130, 1.f}, - {1.140, 1.f}, - {1.150, 1.f}, - {1.160, 1.f}, - {1.170, 1.f}, - {1.180, 1.f}, - {1.190, 1.f}, - {1.200, 1.f}, - {1.210, 1.f}, - {1.220, 1.f}, - {1.230, 1.f}, - {1.240, 1.f}, - {1.250, 1.f},// usual range - {1.275, 1.f}, - {1.300, 1.f}, - {1.325, 1.f}, - {1.350, 1.f}, - {1.375, 1.f}, - {1.400, 1.f},//usual 2 range - {1.425, 1.f}, - {1.450, 1.f}, - {1.475, 1.f}, - {1.500, 1.f}, - {1.525, 1.f}, - {1.550, 1.f}, - {1.575, 1.f},//extended range - {1.600, 1.f}, - {1.633, 1.f}, - {1.666, 1.f}, - {1.700, 1.f}, - {1.733, 1.f}, - {1.766, 1.f}, - {1.800, 1.f}, - {1.833, 1.f}, - {1.866, 1.f}, - {1.900, 1.f}, - {1.933, 1.f}, - {1.966, 1.f}, - {2.000, 1.f}, - {2.033, 1.f}, - {2.066, 1.f}, - {2.100, 1.f}, - {2.133, 1.f}, - {2.166, 1.f}, - {2.200, 1.f}, - {2.250, 1.f}, - {2.300, 1.f}, - {2.350, 1.f}, - {2.400, 1.f}, - {2.450, 1.f}, - {2.500, 1.f}, - {2.550, 1.f}, - {2.600, 1.f}, - {2.650, 1.f}, - {2.700, 1.f}, - {2.750, 1.f}, - {2.800, 1.f}, - {2.850, 1.f}, - {2.900, 1.f}, - {2.950, 1.f}, - {3.000, 1.f}, - {3.200, 1.f}, - {3.400, 1.f}, - {3.600, 1.f}, - {3.800, 1.f}, - {4.000, 1.f} - }; - const int N_g = sizeof(gree) / sizeof(gree[0]); //number of green - - typedef struct RangeGreen { - int begin; - int end; - } RangeGreen; - - constexpr RangeGreen Rangestandard = {33, 80};//usual green range - constexpr RangeGreen Rangestandard2 = {24, 86};//usual 2 green range - constexpr RangeGreen Rangeextended = {15, 93}; - const RangeGreen Rangemax = {0, N_g}; - - RangeGreen Rangegreenused; - - if (wbpar.itcwb_rgreen == 0) { - Rangegreenused = Rangestandard; - } else if (wbpar.itcwb_rgreen == 1) { - Rangegreenused = Rangestandard2; - } else if (wbpar.itcwb_rgreen == 2) { - Rangegreenused = Rangeextended; - } else { - Rangegreenused = Rangemax; - } - if(wbpar.itcwb_sampling == true) { - Rangegreenused = Rangestandard2; - } - typedef struct WbTxyz { - double Tem; - double XX; - double ZZ; - } WbTxyz; - //we can change step to increase precision if need - also in Colortemp.cc with same changes - //I don't know how to pass this structure to Colortemp ! - // X and Z values calculate for each temp between 2000K to 12000K, so no result after 12000K ! - //of course we can change the step between each temp if need - constexpr WbTxyz Txyz[118] = {//temperature Xwb Zwb 118 values x wb and y wb are calculated after, Xwb and Ywb calculated with a spreadsheet - {2001., 1.273842, 0.145295}, - {2101., 1.244008, 0.167533}, - {2201., 1.217338, 0.190697}, - {2301., 1.193444, 0.214632}, - {2401., 1.171996, 0.239195}, - {2501., 1.152883, 0.264539}, - {2605., 1.134667, 0.290722}, - {2655., 1.126659, 0.303556}, - {2705., 1.119049, 0.316446}, - {2755., 1.111814, 0.329381}, - {2803., 1.105381, 0.342193}, - {2856., 1.098258, 0.355599}, - {2910., 1.091550, 0.369645}, - {2960., 1.085649, 0.382655}, - {3003., 1.080982, 0.394258}, - {3050., 1.075727, 0.406057}, - {3103., 1.070277, 0.419815}, - {3153., 1.065384, 0.432769}, - {3203., 1.060906, 0.446161}, - {3250., 1.056535, 0.457806}, - {3303., 1.052034, 0.471422}, - {3353., 1.047990, 0.484218}, - {3400., 1.044547, 0.496719}, - {3450., 1.040667, 0.508891}, - {3500., 1.037145, 0.521523}, - {3550., 1.033783, 0.534090}, - {3600., 1.030574, 0.546590}, - {3650., 1.027510, 0.559020}, - {3699., 1.024834, 0.571722}, - {3801., 1.019072, 0.596102}, - {3851., 1.016527, 0.608221}, - {3902., 1.014244, 0.621136}, - {3952., 1.011729, 0.632447}, - {4002., 0.996153, 0.609518}, - {4052., 0.993720, 0.620805}, - {4102., 0.993908, 0.631520}, - {4152., 0.989179, 0.643262}, - {4202., 0.989283, 0.653999}, - {4252., 0.985039, 0.665536}, - {4302., 0.985067, 0.676288}, - {4352., 0.981271, 0.687599}, - {4402., 0.981228, 0.698349}, - {4452., 0.977843, 0.709425}, - {4502., 0.977736, 0.720159}, - {4552., 0.974728, 0.730993}, - {4602., 0.974562, 0.741698}, - {4652., 0.971899, 0.752284}, - {4702., 0.971681, 0.762949}, - {4752., 0.969335, 0.773285}, - {4802., 0.969069, 0.783899}, - {4827., 0.967570, 0.788836}, - {4852., 0.967011, 0.793982}, - {4877., 0.966465, 0.799108}, - {4902., 0.965933, 0.804214}, - {4927., 0.965414, 0.809229}, - {4952., 0.964908, 0.814366}, - {4977., 0.964415, 0.819412}, - {5002., 0.963934, 0.824438},//57 reference - {5027., 0.963465, 0.829444}, - {5052., 0.963008, 0.834429}, - {5077., 0.962563, 0.839395}, - {5102., 0.962129, 0.844339}, - {5127., 0.961706, 0.849263}, - {5152., 0.961294, 0.854166}, - {5177., 0.960893, 0.859049}, - {5202., 0.960501, 0.863911}, - {5252., 0.959749, 0.873572}, - {5302., 0.959313, 0.883815}, - {5352., 0.958361, 0.892644}, - {5402., 0.957903, 0.902793}, - {5452., 0.957116, 0.911379}, - {5502., 0.956639, 0.921431}, - {5552., 0.956002, 0.929779}, - {5602., 0.955509, 0.939728}, - {5652., 0.955008, 0.947842}, - {5702., 0.954502, 0.957685}, - {5752., 0.954124, 0.965569}, - {5802., 0.953608, 0.975303}, - {5852., 0.953342, 0.982963}, - {5902., 0.952818, 0.992584}, - {5952., 0.952652, 1.000025}, - {6002., 0.952122, 1.009532}, - {6052., 0.952047, 1.016759}, - {6102., 0.951514, 1.026149}, - {6152., 0.951520, 1.033168}, - {6202., 0.950985, 1.042439}, - {6252., 0.951064, 1.049256}, - {6302., 0.950530, 1.058406}, - {6352., 0.950674, 1.065027}, - {6402., 0.950143, 1.074055}, - {6452., 0.950345, 1.080484}, - {6502., 0.950201, 1.088097}, - {6552., 0.950070, 1.095633}, - {6602., 0.949952, 1.103094}, - {6652., 0.949846, 1.110479}, - {6702., 0.949752, 1.119138}, - {6752., 0.949668, 1.125027}, - {6802., 0.949596, 1.132190}, - {6902., 0.949033, 1.147691}, - {7002., 0.949402, 1.160129}, - {7152., 0.949348, 1.180429}, - {7301., 0.948896, 1.201432}, - {7451., 0.949434, 1.219076}, - {7601., 0.949099, 1.239061}, - {7751., 0.949729, 1.255559}, - {7901., 0.949498, 1.274460}, - {8151., 0.950361, 1.300912}, - {8301., 0.950253, 1.318464}, - {8451., 0.950966, 1.332651}, - {8601., 0.950941, 1.349261}, - {8801., 0.951772, 1.367421}, - {9001., 0.951969, 1.387639}, - {9201., 0.952784, 1.404422}, - {9401., 0.953081, 1.423213}, - {9901., 0.954537, 1.464134}, - {10501., 0.956321, 1.508623}, - {11001., 0.957747, 1.541281}, - {12001., 0.960440, 1.601019} - }; - const int N_t = sizeof(Txyz) / sizeof(Txyz[0]); //number of temperature White point - constexpr int Nc = 201 + 1;//201 number of reference spectral colors, I think it is enough to retrieve good values - array2D Tx(N_t, Nc); - array2D Ty(N_t, Nc); - array2D Tz(N_t, Nc); - array2D Ta(N_t, Nc); - array2D Tb(N_t, Nc); - array2D TL(N_t, Nc); - double TX[Nc]; - double TY[Nc]; - double TZ[Nc]; - std::vector good_spectral(Nc, false); - - float rmm[N_t]; - float gmm[N_t]; - float bmm[N_t]; - - int siza = 237; //192 untill 01/2023 size of histogram - if(wbpar.itcwb_sampling == true) { - siza = 192;//old sampling 5.9 and before... - } - // tempref and greenref are camera wb values. - // I used them by default to select good spectral values !! but they are changed after - tempref = rtengine::min(tempref, 12000.0); - - int repref = 0; - - for (int tt = 0; tt < N_t; tt++) { - if (Txyz[tt].Tem > tempref) { - repref = tt;//show the select temp - break; - } - } - - //calculate R G B multiplier in function illuminant and temperature - const bool isMono = (ri->getSensorType() == ST_FUJI_XTRANS && raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) - || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); - for (int tt = 0; tt < N_t; ++tt) { - double r, g, b; - float rm, gm, bm; - ColorTemp WBiter = ColorTemp(Txyz[tt].Tem, greenitc, 1.f, "Custom", wbpar.observer); - WBiter.getMultipliers(r, g, b); - - rm = imatrices.cam_rgb[0][0] * r + imatrices.cam_rgb[0][1] * g + imatrices.cam_rgb[0][2] * b; - gm = imatrices.cam_rgb[1][0] * r + imatrices.cam_rgb[1][1] * g + imatrices.cam_rgb[1][2] * b; - bm = imatrices.cam_rgb[2][0] * r + imatrices.cam_rgb[2][1] * g + imatrices.cam_rgb[2][2] * b; - - const float new_pre_mul[4] = { ri->get_pre_mul(0) / rm, ri->get_pre_mul(1) / gm, ri->get_pre_mul(2) / bm, ri->get_pre_mul(3) / gm }; - float new_scale_mul[4]; - const float gain = calculate_scale_mul(new_scale_mul, new_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); - - rm = new_scale_mul[0] / scale_mul[0] * gain; - gm = new_scale_mul[1] / scale_mul[1] * gain; - bm = new_scale_mul[2] / scale_mul[2] * gain; - rmm[tt] = rm / gm; - gmm[tt] = 1.f; - bmm[tt] = bm / gm; - //return rmm, gmm, bmm in function of temp - } - - struct hiss { - int histnum; - int index; - bool operator()(const hiss& lhis, const hiss& rhis) - { - return lhis.histnum < rhis.histnum; + if (wbpar.itcwb_prim == "srgb") { + profuse = "sRGB"; + limx = 0.12f; + limy = 0.06f; + } else if (wbpar.itcwb_prim == "beta") { + profuse = "Beta RGB"; + limx = 0.1f; + limy = 0.05f; + } else if (wbpar.itcwb_prim == "XYZcam") { + profuse = "XYZcam"; + limx = 0.05f; + limy = 0.04f; + } else if (wbpar.itcwb_prim == "jdcmax") { + profuse = "JDCmax"; + limx = 0.05f; + limy = 0.04f; } - } ; - //intermediate structure - struct chrom { - float chroxy_number; - float chroxy; - float chrox; - float chroy; - float Y; - int index; - int interest; - bool operator()(const chrom& lchro, const chrom& rchro) - { - return lchro.chroxy_number < rchro.chroxy_number; + if (oldsampling) { + profuse = "sRGB"; } - } ; + float wb[3][3], iwb[3][3]; + double wb2[3][3]; - LUTu histxy(siza); //number of values for each pair xy + if (profuse == "XYZcam") {//thanks to Reffort - histxy.clear(); + // get a copy of the camera matrices + for (int r = 0; r < 3; ++r) { + for (int c = 0; c < 3; ++c) { + wb[r][c] = imatrices.xyz_cam[r][c]; + wb2[r][c] = imatrices.xyz_cam[r][c]; + iwb[r][c] = imatrices.cam_xyz[r][c]; + } + } + } else if ((cmp.inputProfile == "(camera)")) {//when no input profile found or if user select Camera standard + if (settings->verbose) { + printf("Use Camera Dcraw-Matrix and modify rgbloc\n"); + } - LUTf xxx(siza);//for color references calculated ==> max in images "like histogram" + //improvment with new values for redloc, greenloc, blueloc when Camera Dcraw is used + TMatrix iwork = ICCStore::getInstance()->workingSpaceInverseMatrix(profuse); + TMatrix workn = ICCStore::getInstance()->workingSpaceMatrix(profuse); + double mat[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; - xxx.clear(); + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + for (int k = 0; k < 3; k++) { + mat[i][j] += iwork[i][k] * imatrices.xyz_cam[k][j]; // rgb_xyz * imatrices.xyz_cam + } - LUTf yyy(siza); - - yyy.clear(); - - LUTf YYY(siza);//not used directly, but necessary to keep good range - - YYY.clear(); - - bool separated = true; - - int w = -1; - - array2D reff_spect_yy_camera(N_t, 2 * Nc + 2); - - array2D reff_spect_xx_camera(N_t, 2 * Nc + 2); - - //here we select the good spectral color inside the 113 values - //call tempxy to calculate for 201 color references Temp and XYZ with cat02 - - ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 200 illuminants - - //find the good spectral values - //calculate xy reference spectral for tempref - for (int j = 0; j < Nc ; j++) { - reff_spect_xx_camera[j][repref] = TX[j] / (TX[j] + TY[j] + TZ[j]); // x from xyY - reff_spect_yy_camera[j][repref] = TY[j] / (TX[j] + TY[j] + TZ[j]); // y from xyY - } - - array2D xc(bfwitc, bfhitc); - array2D yc(bfwitc, bfhitc); - array2D Yc(bfwitc, bfhitc); - - const int deltarepref = 1; //settings->itcwb_delta; - - for (int nn = 0, drep = -deltarepref; nn <= 2; ++nn, drep += deltarepref) { - //three loop to refine color if temp camera is probably not very good - const int rep = rtengine::LIM(repref + drep, 0, N_t); - - //initialize calculation of xy current for tempref #ifdef _OPENMP - #pragma omp parallel for + #pragma omp parallel for #endif - for (int y = 0; y < bfh ; ++y) { - for (int x = 0; x < bfw ; ++x) { - const float RR = rmm[rep] * redloc[y][x]; - const float GG = gmm[rep] * greenloc[y][x]; - const float BB = bmm[rep] * blueloc[y][x]; - Color::rgbxyY(RR, GG, BB, xc[y][x], yc[y][x], Yc[y][x], wp);//use sRGB or ACESp0 + for (int y = 0; y < bfh; y++) + for (int x = 0; x < bfw; x++) { + + float newred = mat[0][0] * redloc[y][x] + mat[0][1] * greenloc[y][x] + mat[0][2] * blueloc[y][x]; + float newgreen = mat[1][0] * redloc[y][x] + mat[1][1] * greenloc[y][x] + mat[1][2] * blueloc[y][x]; + float newblue = mat[2][0] * redloc[y][x] + mat[2][1] * greenloc[y][x] + mat[2][2] * blueloc[y][x]; + + redloc[y][x] = newred;//new values for redloc + greenloc[y][x] = newgreen; + blueloc[y][x] = newblue; + + } + + for (int r = 0; r < 3; ++r) { + for (int c = 0; c < 3; ++c) { + wb[r][c] = workn[r][c]; + wb2[r][c] = workn[r][c]; + iwb[r][c] = iwork[r][c]; + } } - } - //histogram xy depend of temp...but in most cases D45 ..D65.. - //calculate for this image the mean values for each family of color, near histogram x y (number) - //xy vary from x 0..0.77 y 0..0.82 - //neutral values are near x=0.34 0.33 0.315 0.37 y =0.35 0.36 0.34 - //skin are about x 0.45 0.49 y 0.4 0.47 - //blue sky x=0.25 y=0.28 and x=0.29 y=0.32 - // step about 0.02 x 0.32 0.34 y= 0.34 0.36 skin -- sky x 0.24 0.30 y 0.28 0.32 - //big step about 0.2 - - bool purp = true;//if inpaint-opposed or something else enable purp - - // if (hrp.hrenabled && hrp.method == "Coloropp" && settings->itcwb_nopurple == true) {//we disabled (user) with settings if image are naturally with purple (flowers...) - if (hrp.hrenabled && hrp.method == "Coloropp" && wbpar.itcwb_nopurple == true) {//we disabled (user) with settings if image are naturally with purple (flowers...) - purp = false; - } - if(wbpar.itcwb_sampling == false) { - //printf("Use high smapling\n"); - histoxyY(bfhitc, bfwitc, xc, yc, Yc, xxx, yyy, YYY, histxy, purp);//purp enable, enable purple color in WB - //return histogram x and y for each temp and in a range of 235 colors (siza) } else { - //printf("Use low smapling - 5.9\n"); - histoxyY_low(bfhitc, bfwitc, xc, yc, Yc, xxx, yyy, YYY, histxy);//low scaling - } - } - // free some memory - xc.free(); - yc.free(); - Yc.free(); - //calculate x y Y - const int sizcurrref = siza;//choice of number of correlate colors in image - array2D histcurrref(N_t, sizcurrref); - array2D xx_curref(N_t, sizcurrref); - array2D yy_curref(N_t, sizcurrref); - array2D YY_curref(N_t, sizcurrref); - array2D xx_curref_reduc(N_t, sizcurrref); - array2D yy_curref_reduc(N_t, sizcurrref); - array2D YY_curref_reduc(N_t, sizcurrref); + TMatrix wprof = ICCStore::getInstance()->workingSpaceMatrix(profuse); + TMatrix wiprof = ICCStore::getInstance()->workingSpaceInverseMatrix(profuse); - hiss Wbhis[siza]; - - for (int nh = 0; nh < siza; nh++) { - Wbhis[nh].histnum = histxy[nh]; - Wbhis[nh].index = nh; - } - - //sort in ascending order - std::sort(Wbhis, Wbhis + siza, Wbhis[0]); - - int n1 = 0; - int n4 = 0; - int n15 = 0; - int n30 = 0; - - //part to improve - //determined the number of colors who be used after - for (int nh = 0; nh < siza; nh++) { - if (Wbhis[nh].histnum < 30) { - n30++; //keep only existing color but avoid to small - - if (Wbhis[nh].histnum < 15) { - n15++; //keep only existing color but avoid to small - - if (Wbhis[nh].histnum < 4) { - n4++; //keep only existing color but avoid to small - - if (Wbhis[nh].histnum < 1) { - n1++; //keep only existing color but avoid to small - } + for (int r = 0; r < 3; ++r) { + for (int c = 0; c < 3; ++c) { + wb[r][c] = wprof[r][c]; + wb2[r][c] = wprof[r][c]; + iwb[r][c] = wiprof[r][c]; } } } - } - - int ntr = n30; - - if (ntr > (siza - 25)) { - ntr = n15; //if to less elements 25 elements mini - } - - if (ntr > (siza - 23)) { - ntr = n4; //if to less elements 25 elements mini - } - - if (ntr > (siza - 20)) { - ntr = n1; //if to less elements 20 elements mini - normally never be used ! - } - - int sizcurr2ref = sizcurrref - ntr; - const int sizcu30 = sizcurrref - n30; - int nbm = 77;//number max of color used = 1.4 * 55 in case all CIExy diagram - if(profuse == "sRGB" || wbpar.itcwb_sampling == true) { - nbm = 55; - } - const int sizcu4 = rtengine::min(sizcu30, nbm);//size of chroma values - - if (settings->verbose) { - printf("ntr=%i sizcurr2ref=%i sizcu30=%i sizcu4=%i\n", ntr, sizcurr2ref, sizcu30, sizcu4); - } - - chrom wbchro[sizcu4]; - const float swpr = Txyz[repref].XX + Txyz[repref].ZZ + 1.f; - const float xwpr = Txyz[repref].XX / swpr;//white point for tt in xy coordinates - const float ywpr = 1.f / swpr; - - for (int i = 0; i < sizcu4; ++i) { //take the max values - histcurrref[i][repref] = Wbhis[siza - (i + 1)].histnum; - xx_curref[i][repref] = xxx[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; - yy_curref[i][repref] = yyy[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; - YY_curref[i][repref] = YYY[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; - } - - float estimchrom = 0.f; - - //estimate chromaticity for references - for (int nh = 0; nh < sizcu4; ++nh) { - const float chxy = std::sqrt(SQR(xx_curref[nh][repref] - xwpr) + SQR(yy_curref[nh][repref] - ywpr)); - wbchro[nh].chroxy_number = chxy * std::sqrt(histcurrref[nh][repref]); - wbchro[nh].chroxy = std::sqrt(chxy); - wbchro[nh].chrox = xx_curref[nh][repref]; - wbchro[nh].chroy = yy_curref[nh][repref]; - wbchro[nh].Y = YY_curref[nh][repref]; - wbchro[nh].index = nh; - estimchrom += chxy; - } - - estimchrom /= sizcu4; - - if (settings->verbose) { - printf("estimchrom=%f\n", estimchrom); - } - bool issorted = wbpar.itcwb_sorted; - - if(wbpar.itcwb_sampling == true) { - issorted = false; - } - - - if (issorted) { //sort in ascending with chroma values - std::sort(wbchro, wbchro + sizcu4, wbchro[0]); - } - - int maxval = rtengine::LIM(wbpar.itcwb_thres, 10, 55);//max values of color to find correlation - if(wbpar.itcwb_sampling == true) { - maxval = 34; - } - - sizcurr2ref = rtengine::min(sizcurr2ref, maxval); //keep about the biggest values, - - for (int i = 0; i < sizcurr2ref; ++i) { - //is condition chroxy necessary ? - if (wbchro[sizcu4 - (i + 1)].chrox > 0.1f && wbchro[sizcu4 - (i + 1)].chroy > 0.1f && wbchro[sizcu4 - (i + 1)].chroxy > 0.0f) { //suppress value too far from reference spectral - w++; - xx_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chrox; - yy_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chroy; - YY_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].Y; - } - } - - //calculate deltaE xx to find best values of spectrals data - limited to chroma values - // int maxnb = rtengine::LIM(settings->itcwb_sizereference, 1, 5); - // int maxnb = rtengine::LIM(wbpar.itcwb_size, 1, 5); - int maxnb = 3; - //wbpar.itcwb_size to verify if this setting is usefull...diificulties with High gamut and limited patch spectral colors. - - if (wbpar.itcwb_thres > 55) {//normally never used - maxnb = 201 / wbpar.itcwb_thres; - } - - for (int nb = 1; nb <= maxnb; ++nb) { //max 5 iterations for Itcwb_thres=33, after trial 3 is good in most cases but in some cases 5 - for (int i = 0; i < w; ++i) { - float mindeltaE = 100000.f;//we can change this value... - int kN = 0; - - for (int j = 0; j < Nc ; j++) { - if (!good_spectral[j]) { - const float deltaE = SQR(xx_curref_reduc[i][repref] - reff_spect_xx_camera[j][repref]) + SQR(yy_curref_reduc[i][repref] - reff_spect_yy_camera[j][repref]); - - if (deltaE < mindeltaE) { - mindeltaE = deltaE; - kN = j; - } - } - } - - good_spectral[kN] = true;//good spectral are spectral color that match color histogram xy - } - } - - // reuse some buffers - array2D& R_curref_reduc = xx_curref_reduc; - array2D& G_curref_reduc = yy_curref_reduc; - array2D& B_curref_reduc = YY_curref_reduc; - - //reconvert to RGB for "reduction" - for (int i = 0; i < w; i++) { - const float X = 65535.f * xx_curref_reduc[i][repref] * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; - const float Y = 65535.f * YY_curref_reduc[i][repref]; - const float Z = 65535.f * (1.f - xx_curref_reduc[i][repref] - yy_curref_reduc[i][repref]) * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; - float r, g, b; - Color::xyz2rgb(X, Y, Z, r, g, b, wip); - R_curref_reduc[i][repref] = r / rmm[repref]; - G_curref_reduc[i][repref] = g / gmm[repref]; - B_curref_reduc[i][repref] = b / bmm[repref]; - - } - -//end first part - - //Now begin real calculations - separated = false; - //recalculate histogram with good values and not estimated - ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar); //calculate chroma xy (xyY) for Z known colors on under 90 illuminants - //calculate x y Y - int sizcurr = siza;//choice of number of correlate colors in image - array2D xxyycurr_reduc(N_t, 2 * sizcurr); - array2D reff_spect_xxyy(N_t, 2 * Nc + 2); - array2D reff_spect_xxyy_prov(N_t, 2 * Nc + 2); - - float minstud = 100000.f; - int goodref = 1; - -//calculate x y z for each pixel with multiplier rmm gmm bmm - - for (int tt = 0; tt < N_t; ++tt) {//N_t - for (int i = 0; i < w; ++i) { - float unused; - - const float RR = rmm[tt] * R_curref_reduc[i][repref]; - const float GG = gmm[tt] * G_curref_reduc[i][repref]; - const float BB = bmm[tt] * B_curref_reduc[i][repref]; - Color::rgbxyY(RR, GG, BB, xxyycurr_reduc[2 * i][tt], xxyycurr_reduc[2 * i + 1][tt], unused, wp); - } - - for (int j = 0; j < Nc ; ++j) { - reff_spect_xxyy_prov[2 * j][tt] = Tx[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // x from xyY - reff_spect_xxyy_prov[2 * j + 1][tt] = Ty[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // y from xyY - } - - int kk = -1; - - for (int i = 0; i < Nc ; ++i) { - if (good_spectral[i]) { - kk++; - //we calculate now absolute chroma for each spectral color - reff_spect_xxyy[2 * kk][tt] = reff_spect_xxyy_prov[2 * i][tt]; - reff_spect_xxyy[2 * kk + 1][tt] = reff_spect_xxyy_prov[2 * i + 1][tt]; - } - } - - const float abstud = std::fabs(studentXY(xxyycurr_reduc, reff_spect_xxyy, 2 * w, 2 * kk, tt)); - - if (abstud < minstud) { // find the minimum Student - minstud = abstud; - goodref = tt; - } - } - - if (extra) {//always used if extra = true because I made this choice, brings better results - struct Tempgreen { - float student; - int tempref; - int greenref; - bool operator()(const Tempgreen& ltg, const Tempgreen& rtg) - { - return ltg.student < rtg.student; - } - }; - Tempgreen Tgstud[N_g]; - - for (int i = 0; i < N_g; ++i) {//init variables with - Tgstud[i].student = 1000.f;//max value to initialize - Tgstud[i].tempref = 57;//5002K position in the list - Tgstud[i].greenref = 55;// 1.f position in the list - } - - int dgoodref = rtengine::LIM(wbpar.itcwb_delta,1, 4); - if(wbpar.itcwb_sampling == true) { - dgoodref = 2; - } - const int scantempbeg = rtengine::max(goodref - (dgoodref + 1), 1); - const int scantempend = rtengine::min(goodref + dgoodref, N_t - 1); - - for (int gr = Rangegreenused.begin; gr < Rangegreenused.end; ++gr) { - float minstudgr = 100000.f; - int goodrefgr = 1; - - for (int tt = scantempbeg; tt < scantempend; ++tt) { - double r, g, b; - ColorTemp WBiter(Txyz[tt].Tem, gree[gr].green, 1.f, "Custom", wbpar.observer); - WBiter.getMultipliers(r, g, b); - float rm = imatrices.cam_rgb[0][0] * r + imatrices.cam_rgb[0][1] * g + imatrices.cam_rgb[0][2] * b; - float gm = imatrices.cam_rgb[1][0] * r + imatrices.cam_rgb[1][1] * g + imatrices.cam_rgb[1][2] * b; - float bm = imatrices.cam_rgb[2][0] * r + imatrices.cam_rgb[2][1] * g + imatrices.cam_rgb[2][2] * b; - //recalculate Multipliers now with good range of temp and green - - const float new_pre_mul[4] = { ri->get_pre_mul(0) / rm, ri->get_pre_mul(1) / gm, ri->get_pre_mul(2) / bm, ri->get_pre_mul(3) / gm }; - float new_scale_mul[4]; - const float gain = calculate_scale_mul(new_scale_mul, new_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); - - rm = new_scale_mul[0] / scale_mul[0] * gain; - gm = new_scale_mul[1] / scale_mul[1] * gain; - bm = new_scale_mul[2] / scale_mul[2] * gain; - rmm[tt] = rm / gm; - gmm[tt] = 1.f; - bmm[tt] = bm / gm; - } - - - for (int tt = scantempbeg; tt < scantempend; ++tt) {//N_t - for (int i = 0; i < w; ++i) { - float unused; - - const float RR = rmm[tt] * R_curref_reduc[i][repref]; - const float GG = gmm[tt] * G_curref_reduc[i][repref]; - const float BB = bmm[tt] * B_curref_reduc[i][repref]; - Color::rgbxyY(RR, GG, BB, xxyycurr_reduc[2 * i][tt], xxyycurr_reduc[2 * i + 1][tt], unused, wp); - } - - //recalculate xy spectral now with good range of temp and green - - for (int j = 0; j < Nc ; ++j) { - reff_spect_xxyy_prov[2 * j][tt] = Tx[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // x from xyY - reff_spect_xxyy_prov[2 * j + 1][tt] = Ty[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]); // y from xyY - } - - int kkg = -1; - - for (int i = 0; i < Nc ; ++i) { - if (good_spectral[i]) { - kkg++; - reff_spect_xxyy[2 * kkg][tt] = reff_spect_xxyy_prov[2 * i][tt]; - reff_spect_xxyy[2 * kkg + 1][tt] = reff_spect_xxyy_prov[2 * i + 1][tt]; - } - } - - //now we have good spectral data - //calculate student correlation - const float abstudgr = std::fabs(studentXY(xxyycurr_reduc, reff_spect_xxyy, 2 * w, 2 * kkg, tt)); - - if (abstudgr < minstudgr) { // find the minimum Student - minstudgr = abstudgr; - goodrefgr = tt; - } - - //found the values - Tgstud[gr].tempref = goodrefgr; - Tgstud[gr].greenref = gr; - Tgstud[gr].student = minstudgr; - - } - } - - std::sort(Tgstud, Tgstud + N_g, Tgstud[0]); - - // now search the value of green the nearest of 1 with a good student value, I think it is a good choice, perhaps no... - // I take the 5 first values - // I admit a symetrie in green coefiicient for rgb multiplier...probably not exactly true - // perhaps we can used a Snedecor test ? but why...at least we have confidence interval > 90% - int greengood = 55; - - int maxkgood = wbpar.itcwb_fgreen;//we can change ...to test 3, 4, 5. High values perhaps less good student, but it is a compromise... - maxkgood = rtengine::LIM(maxkgood, 3, 6); - if(wbpar.itcwb_sampling == true) { - maxkgood = 3; // force to 3 with old low sampling - } - - int mingood = std::min(std::fabs(Tgstud[0].greenref - 55), std::fabs(Tgstud[1].greenref - 55)); - - for (int k = 2; k < maxkgood; ++k) { - mingood = std::min(std::fabs(mingood), std::fabs(Tgstud[k].greenref - 55)); - } - - for (int k = 0; k < maxkgood ; ++k) { - if (mingood == fabs(Tgstud[k].greenref - 55)) { - greengood = Tgstud[k].greenref ; - goodref = Tgstud[k].tempref; - studgood = Tgstud[k].student;; - } - } if (settings->verbose) { - printf("Student_0=%f Student_k= %f\n", Tgstud[0].student, Tgstud[maxkgood - 1].student); - printf("mingood=%i greeng=%i goodref=%i stud=%f\n", mingood, greengood, goodref, (double) studgood); + printf("Sampling=%s \n", profuse.c_str()); + printf("wp = %f %f %f\n", wb[0][0], wb[0][1], wb[0][2]); + printf(" %f %f %f\n", wb[1][0], wb[1][1], wb[1][2]); + printf(" %f %f %f\n", wb[2][0], wb[2][1], wb[2][2]); } - tempitc = Txyz[goodref].Tem; - greenitc = gree[greengood].green; + const int bfwitc = bfw; + const int bfhitc = bfh; - if (estimchrom < 0.025f) { - float ac = -2.40f * estimchrom + 0.06f;//small empirical correction, maximum 0.06 if chroma=0 for all image, currently for very low chroma +0.02 - greenitc += ac; + typedef struct WbGreen { + double green; + float snedecor;//1. actually but put in case of confiance interval + } WbGreen; + //green (tint) values between 0.4 to 4.0 + constexpr WbGreen gree[134] = {//symmetric coefficient between 0.717 and 1.40 + {0.400, 1.f}, + {0.420, 1.f}, + {0.440, 1.f}, + {0.460, 1.f}, + {0.480, 1.f}, + {0.500, 1.f}, + {0.520, 1.f}, + {0.540, 1.f}, + {0.550, 1.f}, + {0.560, 1.f}, + {0.570, 1.f}, + {0.580, 1.f}, + {0.590, 1.f}, + {0.600, 1.f}, + {0.610, 1.f}, + {0.620, 1.f},//extended range + {0.630, 1.f}, + {0.640, 1.f}, + {0.650, 1.f}, + {0.660, 1.f}, + {0.670, 1.f}, + {0.680, 1.f}, + {0.690, 1.f}, + {0.700, 1.f}, + {0.714, 1.f},//usual 2 range + {0.727, 1.f}, + {0.741, 1.f}, + {0.755, 1.f}, + {0.769, 1.f}, + {0.784, 1.f}, + {0.800, 1.f}, + {0.806, 1.f}, + {0.813, 1.f}, + {0.820, 1.f},//usual range + {0.826, 1.f}, + {0.833, 1.f}, + {0.840, 1.f}, + {0.847, 1.f}, + {0.855, 1.f}, + {0.862, 1.f}, + {0.870, 1.f}, + {0.877, 1.f}, + {0.885, 1.f}, + {0.893, 1.f}, + {0.901, 1.f}, + {0.909, 1.f}, + {0.917, 1.f}, + {0.926, 1.f}, + {0.935, 1.f}, + {0.943, 1.f},//49 limit low normal + {0.952, 1.f}, + {0.962, 1.f}, + {0.971, 1.f}, + {0.980, 1.f}, + {0.990, 1.f}, + {1.000, 1.f},//55 reference + {1.010, 1.f}, + {1.020, 1.f}, + {1.030, 1.f}, + {1.040, 1.f}, + {1.050, 1.f}, + {1.060, 1.f}, + {1.070, 1.f}, + {1.080, 1.f}, + {1.090, 1.f}, + {1.100, 1.f}, + {1.110, 1.f}, + {1.120, 1.f}, + {1.130, 1.f}, + {1.140, 1.f}, + {1.150, 1.f}, + {1.160, 1.f}, + {1.170, 1.f}, + {1.180, 1.f}, + {1.190, 1.f}, + {1.200, 1.f}, + {1.210, 1.f}, + {1.220, 1.f}, + {1.230, 1.f}, + {1.240, 1.f}, + {1.250, 1.f},// usual range + {1.275, 1.f}, + {1.300, 1.f}, + {1.325, 1.f}, + {1.350, 1.f}, + {1.375, 1.f}, + {1.400, 1.f},//usual 2 range + {1.425, 1.f}, + {1.450, 1.f}, + {1.475, 1.f}, + {1.500, 1.f}, + {1.525, 1.f}, + {1.550, 1.f}, + {1.575, 1.f},//extended range + {1.600, 1.f}, + {1.633, 1.f}, + {1.666, 1.f}, + {1.700, 1.f}, + {1.733, 1.f}, + {1.766, 1.f}, + {1.800, 1.f}, + {1.833, 1.f}, + {1.866, 1.f}, + {1.900, 1.f}, + {1.933, 1.f}, + {1.966, 1.f}, + {2.000, 1.f}, + {2.033, 1.f}, + {2.066, 1.f}, + {2.100, 1.f}, + {2.133, 1.f}, + {2.166, 1.f}, + {2.200, 1.f}, + {2.250, 1.f}, + {2.300, 1.f}, + {2.350, 1.f}, + {2.400, 1.f}, + {2.450, 1.f}, + {2.500, 1.f}, + {2.550, 1.f}, + {2.600, 1.f}, + {2.650, 1.f}, + {2.700, 1.f}, + {2.750, 1.f}, + {2.800, 1.f}, + {2.850, 1.f}, + {2.900, 1.f}, + {2.950, 1.f}, + {3.000, 1.f}, + {3.200, 1.f}, + {3.400, 1.f}, + {3.600, 1.f}, + {3.800, 1.f}, + {4.000, 1.f} + }; + const int N_g = sizeof(gree) / sizeof(gree[0]); //number of green + + typedef struct RangeGreen { + int begin; + int end; + } RangeGreen; + + int greenrefo = 55; + double origgreen = greenitc; + + for (int gg = 0; gg < N_g; gg++) { + if (gree[gg].green > origgreen) { + greenrefo = gg;//show the green + break; + } + } + + constexpr RangeGreen Rangestandard = {33, 80};//usual green range + constexpr RangeGreen Rangestandard2 = {24, 86};//usual 2 green range + constexpr RangeGreen Rangeextended = {15, 93}; + const RangeGreen Rangemax = {0, N_g}; + + RangeGreen Rangegreenused; + + if (wbpar.itcwb_rgreen == 0) { + Rangegreenused = Rangestandard; + } else if (wbpar.itcwb_rgreen == 1) { + Rangegreenused = Rangestandard2; + } else if (wbpar.itcwb_rgreen == 2) { + Rangegreenused = Rangeextended; + } else { + Rangegreenused = Rangemax; + } + + + if (wbpar.itcwb_rgreen == 0) {//new way to set green + Rangegreenused.begin = std::max(greenrefo - 13, 0); + Rangegreenused.end = std::min(greenrefo + 13, N_g); + } + + if (wbpar.itcwb_rgreen == 1) {//new way to set green + Rangegreenused.begin = std::max(greenrefo - 17, 0); + Rangegreenused.end = std::min(greenrefo + 17, N_g); + } + + if (oldsampling == true) { + Rangegreenused = Rangestandard2; + } + + typedef struct WbTxyz { + double Tem; + double XX; + double ZZ; + } WbTxyz; + //we can change step to increase precision if need - also in Colortemp.cc with same changes + //I don't know how to pass this structure to Colortemp ! + // X and Z values calculate for each temp between 2000K to 15000K, so no result after 15000K ! + //of course we can change the step between each temp if need + + constexpr WbTxyz Txyz[191] = {//temperature Xwb Zwb 191 values x wb and y wb are calculated after, Xwb and Ywb calculated with a spreadsheet + {2001., 1.273842, 0.145295}, + {2051., 1.258802, 0.156066}, + {2101., 1.244008, 0.167533}, + {2151., 1.230570, 0.178778}, + {2201., 1.217338, 0.190697}, + {2251., 1.205305, 0.202338}, + {2301., 1.193444, 0.214632}, + {2351., 1.182648, 0.226598}, + {2401., 1.171996, 0.239195}, + {2451., 1.162290, 0.251421}, + {2501., 1.152883, 0.264539}, + {2551., 1.143965, 0.276682}, + {2605., 1.134667, 0.290722}, + {2655., 1.126659, 0.303556}, + {2705., 1.119049, 0.316446}, + {2755., 1.111814, 0.329381}, + {2790., 1.106961, 0.338455}, + {2803., 1.105381, 0.342193}, + {2825., 1.102275, 0.347542}, + {2856., 1.098258, 0.355599}, + {2880., 1.095233, 0.361840}, + {2910., 1.091550, 0.369645}, + {2930., 1.089155, 0.374849}, + {2960., 1.085649, 0.382655}, + {2980., 1.083369, 0.387858}, + {3003., 1.080982, 0.394258}, + {3025., 1.078397, 0.399561}, + {3050., 1.075727, 0.406057}, + {3075., 1.073122, 0.412550}, + {3103., 1.070277, 0.419815}, + {3128., 1.067801, 0.426296}, + {3153., 1.065384, 0.432769}, + {3175., 1.063305, 0.438459}, + {3203., 1.060906, 0.446161}, + {3225., 1.058738, 0.451367}, + {3250., 1.056535, 0.457806}, + {3280., 1.053960, 0.465519}, + {3303., 1.052034, 0.471422}, + {3353., 1.047990, 0.484218}, + {3400., 1.044547, 0.496719}, + {3450., 1.040667, 0.508891}, + {3500., 1.037145, 0.521523}, + {3550., 1.033783, 0.534090}, + {3600., 1.030574, 0.546590}, + {3650., 1.027510, 0.559020}, + {3699., 1.024834, 0.571722}, + {3801., 1.019072, 0.596102}, + {3851., 1.016527, 0.608221}, + {3902., 1.014244, 0.621136}, + {3952., 1.011729, 0.632447}, + {4002., 0.996153, 0.609518}, + {4052., 0.993720, 0.620805}, + {4102., 0.993908, 0.631520}, + {4152., 0.989179, 0.643262}, + {4202., 0.989283, 0.653999}, + {4252., 0.985039, 0.665536}, + {4302., 0.985067, 0.676288}, + {4352., 0.981271, 0.687599}, + {4402., 0.981228, 0.698349}, + {4452., 0.977843, 0.709425}, + {4502., 0.977736, 0.720159}, + {4552., 0.974728, 0.730993}, + {4602., 0.974562, 0.741698}, + {4652., 0.971899, 0.752284}, + {4702., 0.971681, 0.762949}, + {4752., 0.969335, 0.773285}, + {4802., 0.969069, 0.783899}, + {4827., 0.967570, 0.788836}, + {4852., 0.967011, 0.793982}, + {4877., 0.966465, 0.799108}, + {4902., 0.965933, 0.804214}, + {4914., 0.965682, 0.806658}, + {4927., 0.965414, 0.809229}, + {4940., 0.965149, 0.811937}, + {4952., 0.964908, 0.814366}, + {4965., 0.964650, 0.816993}, + {4977., 0.964415, 0.819412}, + {4990., 0.964163, 0.822028}, + {5002., 0.963934, 0.824438},//80 + {5015., 0.963689, 0.827044}, + {5027., 0.963465, 0.829444}, + {5040., 0.963226, 0.832039}, + {5051., 0.963008, 0.834429}, + {5065., 0.963226, 0.832039}, + {5077., 0.962563, 0.839395}, + {5090., 0.962336, 0.841968}, + {5102., 0.962129, 0.844339}, + {5115., 0.961907, 0.846902}, + {5127., 0.961706, 0.849263}, + {5140., 0.961490, 0.851815}, + {5151., 0.961294, 0.854166}, + {5177., 0.960893, 0.859049}, + {5202., 0.960501, 0.863911}, + {5253., 0.959749, 0.873572}, + {5302., 0.959313, 0.883815}, + {5351., 0.958361, 0.892644}, + {5402., 0.957903, 0.902793}, + {5452., 0.957116, 0.911379}, + {5502., 0.956639, 0.921431}, + {5553., 0.956002, 0.929779}, + {5602., 0.955509, 0.939728}, + {5652., 0.955008, 0.947842}, + {5702., 0.954502, 0.957685}, + {5752., 0.954124, 0.965569}, + {5802., 0.953608, 0.975303}, + {5852., 0.953342, 0.982963}, + {5902., 0.952818, 0.992584}, + {5952., 0.952652, 1.000025}, + {6002., 0.952122, 1.009532}, + {6052., 0.952047, 1.016759}, + {6102., 0.951514, 1.026149}, + {6152., 0.951520, 1.033168}, + {6202., 0.950985, 1.042439}, + {6252., 0.951064, 1.049256}, + {6302., 0.950530, 1.058406}, + {6352., 0.950674, 1.065027}, + {6380., 0.950576, 1.069386}, + {6402., 0.950143, 1.074055}, + {6425., 0.950428, 1.076341}, + {6452., 0.950345, 1.080484}, + {6475., 0.950277, 1.083996}, + {6502., 0.950201, 1.088097}, + {6525., 0.950139, 1.091573}, + {6552., 0.950070, 1.095633}, + {6575., 0.950014, 1.099075}, + {6602., 0.949952, 1.103094}, + {6625., 0.949902, 1.106501}, + {6652., 0.949846, 1.110479}, + {6675., 0.949801, 1.113852}, + {6702., 0.949752, 1.119138}, + {6725., 0.949712, 1.121128}, + {6752., 0.949668, 1.125027}, + {6802., 0.949596, 1.132190}, + {6852., 0.949533, 1.139281}, + {6902., 0.949033, 1.147691}, + {6952., 0.949437, 1.153246}, + {7002., 0.949402, 1.160129}, + {7052., 0.949376, 1.166966}, + {7102., 0.949358, 1.173732}, + {7152., 0.949348, 1.180429}, + {7202., 0.949346, 1.187058}, + {7252., 0.949350, 1.193619}, + {7301., 0.948896, 1.201432}, + {7352., 0.949380, 1.206541}, + {7402., 0.949405, 1.212904}, + {7451., 0.949434, 1.219076}, + {7501., 0.949471, 1.225312}, + {7551., 0.949512, 1.231485}, + {7601., 0.949099, 1.239061}, + {7675., 0.949638, 1.246525}, + {7751., 0.949729, 1.255559}, + {7825., 0.949828, 1.264225}, + {7901., 0.949498, 1.274460}, + {7952., 0.950018, 1.278800}, + {8025., 0.950137, 1.287013}, + {8095., 0.950259, 1.294777}, + {8151., 0.950361, 1.300912}, + {8225., 0.950501, 1.308915}, + {8301., 0.950253, 1.318464}, + {8375., 0.950804, 1.324786}, + {8451., 0.950966, 1.332651}, + {8525., 0.951129, 1.340199}, + {8601., 0.950941, 1.349261}, + {8701., 0.951533, 1.357724}, + {8801., 0.951772, 1.367421}, + {8901., 0.952018, 1.376935}, + {9001., 0.951969, 1.387639}, + {9201., 0.952784, 1.404422}, + {9401., 0.953081, 1.423213},//since 5 2023 I increased the number of temp references above 12000K + {9651., 0.953993, 1.442883}, + {9901., 0.954537, 1.464134}, + {10201., 0.955520, 1.485825}, + {10501., 0.956321, 1.508623}, + {10751., 0.957057, 1.524806}, + {11001., 0.957747, 1.541281}, + {11251., 0.958436, 1.557207}, + {11501., 0.959112, 1.572366}, + {11751., 0.959784, 1.587037}, + {12001., 0.960440, 1.601019},//since 5 2023 I increased the number of temp refrences above 12000K + {12251., 0.961090, 1.614566}, + {12501., 0.963963, 1.627492}, + {12751., 0.962350, 1.640031}, + {13001., 0.962962, 1.652055}, + {13251., 0.963561, 1.663638}, + {13501., 0.964147, 1.674804}, + {13751., 0.964720, 1.685571}, + {14001., 0.965279, 1.695919}, + {14251., 0.965827, 1.705950}, + {14501., 0.966363, 1.715637}, + {14751., 0.966886, 1.724998}, + {15001., 0.967397, 1.734047} + }; + //compatibility 5.9 + constexpr WbTxyz Txyzs[118] = {//temperature Xwb Zwb 118 values - same table as in Rawimagesource.cc x wb and y wb are calculated after + {2001., 1.273842, 0.145295}, + {2101., 1.244008, 0.167533}, + {2201., 1.217338, 0.190697}, + {2301., 1.193444, 0.214632}, + {2401., 1.171996, 0.239195}, + {2501., 1.152883, 0.264539}, + {2605., 1.134667, 0.290722}, + {2655., 1.126659, 0.303556}, + {2705., 1.119049, 0.316446}, + {2755., 1.111814, 0.329381}, + {2803., 1.105381, 0.342193}, + {2856., 1.098258, 0.355599}, + {2910., 1.091550, 0.369645}, + {2960., 1.085649, 0.382655}, + {3003., 1.080982, 0.394258}, + {3050., 1.075727, 0.406057}, + {3103., 1.070277, 0.419815}, + {3153., 1.065384, 0.432769}, + {3203., 1.060906, 0.446161}, + {3250., 1.056535, 0.457806}, + {3303., 1.052034, 0.471422}, + {3353., 1.047990, 0.484218}, + {3400., 1.044547, 0.496719}, + {3450., 1.040667, 0.508891}, + {3500., 1.037145, 0.521523}, + {3550., 1.033783, 0.534090}, + {3600., 1.030574, 0.546590}, + {3650., 1.027510, 0.559020}, + {3699., 1.024834, 0.571722}, + {3801., 1.019072, 0.596102}, + {3851., 1.016527, 0.608221}, + {3902., 1.014244, 0.621136}, + {3952., 1.011729, 0.632447}, + {4002., 0.996153, 0.609518}, + {4052., 0.993720, 0.620805}, + {4102., 0.993908, 0.631520}, + {4152., 0.989179, 0.643262}, + {4202., 0.989283, 0.653999}, + {4252., 0.985039, 0.665536}, + {4302., 0.985067, 0.676288}, + {4352., 0.981271, 0.687599}, + {4402., 0.981228, 0.698349}, + {4452., 0.977843, 0.709425}, + {4502., 0.977736, 0.720159}, + {4552., 0.974728, 0.730993}, + {4602., 0.974562, 0.741698}, + {4652., 0.971899, 0.752284}, + {4702., 0.971681, 0.762949}, + {4752., 0.969335, 0.773285}, + {4802., 0.969069, 0.783899}, + {4827., 0.967570, 0.788836}, + {4852., 0.967011, 0.793982}, + {4877., 0.966465, 0.799108}, + {4902., 0.965933, 0.804214}, + {4927., 0.965414, 0.809229}, + {4952., 0.964908, 0.814366}, + {4977., 0.964415, 0.819412}, + {5002., 0.963934, 0.824438}, + {5027., 0.963465, 0.829444}, + {5052., 0.963008, 0.834429}, + {5077., 0.962563, 0.839395}, + {5102., 0.962129, 0.844339}, + {5127., 0.961706, 0.849263}, + {5152., 0.961294, 0.854166}, + {5177., 0.960893, 0.859049}, + {5202., 0.960501, 0.863911}, + {5252., 0.959749, 0.873572}, + {5302., 0.959313, 0.883815}, + {5352., 0.958361, 0.892644}, + {5402., 0.957903, 0.902793}, + {5452., 0.957116, 0.911379}, + {5502., 0.956639, 0.921431}, + {5552., 0.956002, 0.929779}, + {5602., 0.955509, 0.939728}, + {5652., 0.955008, 0.947842}, + {5702., 0.954502, 0.957685}, + {5752., 0.954124, 0.965569}, + {5802., 0.953608, 0.975303}, + {5852., 0.953342, 0.982963}, + {5902., 0.952818, 0.992584}, + {5952., 0.952652, 1.000025}, + {6002., 0.952122, 1.009532}, + {6052., 0.952047, 1.016759}, + {6102., 0.951514, 1.026149}, + {6152., 0.951520, 1.033168}, + {6202., 0.950985, 1.042439}, + {6252., 0.951064, 1.049256}, + {6302., 0.950530, 1.058406}, + {6352., 0.950674, 1.065027}, + {6402., 0.950143, 1.074055}, + {6452., 0.950345, 1.080484}, + {6502., 0.950201, 1.088097}, + {6552., 0.950070, 1.095633}, + {6602., 0.949952, 1.103094}, + {6652., 0.949846, 1.110479}, + {6702., 0.949752, 1.119138}, + {6752., 0.949668, 1.125027}, + {6802., 0.949596, 1.132190}, + {6902., 0.949033, 1.147691}, + {7002., 0.949402, 1.160129}, + {7152., 0.949348, 1.180429}, + {7301., 0.948896, 1.201432}, + {7451., 0.949434, 1.219076}, + {7601., 0.949099, 1.239061}, + {7751., 0.949729, 1.255559}, + {7901., 0.949498, 1.274460}, + {8151., 0.950361, 1.300912}, + {8301., 0.950253, 1.318464}, + {8451., 0.950966, 1.332651}, + {8601., 0.950941, 1.349261}, + {8801., 0.951772, 1.367421}, + {9001., 0.951969, 1.387639}, + {9201., 0.952784, 1.404422}, + {9401., 0.953081, 1.423213}, + {9901., 0.954537, 1.464134}, + {10501., 0.956321, 1.508623}, + {11001., 0.957747, 1.541281}, + {12001., 0.960440, 1.601019} + }; + bool purp = true;//if inpaint-opposed or something else enable purp + + int N_t = sizeof(Txyz) / sizeof(Txyz[0]); //number of temperature White point + + if (oldsampling) { + N_t = sizeof(Txyzs) / sizeof(Txyzs[0]); //number of temperature White point + } + + // constexpr int Nc = 428 + 1; //429 number of reference spectral colors + int Ncr = 429; + + if (wbpar.itcwb_prim == "srgb") { + Ncr = 429; + } else if (wbpar.itcwb_prim == "adob") { + Ncr = 429; + } else if (wbpar.itcwb_prim == "XYZcam") { + Ncr = 429; + } else if (wbpar.itcwb_prim == "jdcmax") { + Ncr = 429; + } + + if (oldsampling) { //low sampling 5.9 with less spectral datas 201 + Ncr = 202; + } + + array2D Tx(N_t, Ncr); + array2D Ty(N_t, Ncr); + array2D Tz(N_t, Ncr); + array2D Ta(N_t, Ncr); + array2D Tb(N_t, Ncr); + array2D TL(N_t, Ncr); + + double TX[Ncr]; + double TY[Ncr]; + double TZ[Ncr]; + + std::vector good_spectral(Ncr, false); + std::vector good_size(Ncr, false); + + double WPX[N_t]; + double WPZ[N_t]; + + float rmm[N_t]; + float gmm[N_t]; + float bmm[N_t]; + + int siza = 237; //192 untill 01/2023 size of histogram + + if (oldsampling == true) { + siza = 192;//old sampling 5.9 and before... + } + + // tempref and greenref are camera wb values. + // I used them by default to select good spectral values !! but they are changed after + tempref = rtengine::min(tempref, 15000.0); + int repref = 0; + + for (int tt = 0; tt < N_t; tt++) { + if (Txyz[tt].Tem > tempref) { + repref = tt;//show the select temp + break; + } + } + + if (oldsampling) { + for (int tt = 0; tt < N_t; tt++) { + if (Txyzs[tt].Tem > tempref) { + repref = tt;//show the select temp + break; + } + } + } + + if (repref >= N_t - 1) { + repref = N_t - 2; + } + + //calculate R G B multiplier in function illuminant and temperature + const bool isMono = (ri->getSensorType() == ST_FUJI_XTRANS && raw.xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) + || (ri->getSensorType() == ST_BAYER && raw.bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO)); + greenitc += wbpar.itcwb_green; + double keepgreen = greenitc; + + for (int tt = 0; tt < N_t; ++tt) { + double r, g, b; + float rm, gm, bm; + + if (!oldsampling) { + ColorTemp(Txyz[tt].Tem, greenitc, 1., "Custom", wbpar.observer).getMultipliers(r, g, b); + } else { + ColorTemp(Txyzs[tt].Tem, greenitc, 1., "Custom", wbpar.observer).getMultipliers(r, g, b);//brings differences with old version 5.9, maybe Observer in 5.9, I did not find a solution + } + + rm = imatrices.cam_rgb[0][0] * r + imatrices.cam_rgb[0][1] * g + imatrices.cam_rgb[0][2] * b; + gm = imatrices.cam_rgb[1][0] * r + imatrices.cam_rgb[1][1] * g + imatrices.cam_rgb[1][2] * b; + bm = imatrices.cam_rgb[2][0] * r + imatrices.cam_rgb[2][1] * g + imatrices.cam_rgb[2][2] * b; + + const float new_pre_mul[4] = { ri->get_pre_mul(0) / rm, ri->get_pre_mul(1) / gm, ri->get_pre_mul(2) / bm, ri->get_pre_mul(3) / gm }; + float new_scale_mul[4]; + const float gain = calculate_scale_mul(new_scale_mul, new_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); + rm = new_scale_mul[0] / scale_mul[0] * gain; + gm = new_scale_mul[1] / scale_mul[1] * gain; + bm = new_scale_mul[2] / scale_mul[2] * gain; + rmm[tt] = rm / gm; + gmm[tt] = 1.f; + bmm[tt] = bm / gm; + //return rmm, gmm, bmm in function of temp + } + + t2.set(); + + if (settings->verbose) { + printf("First: up calculate multipliers: %d nsec\n", t2.etime(t1)); + } + + struct hiss {//histogram + int histnum; + int index; + bool operator()(const hiss& lhis, const hiss& rhis) + { + return lhis.histnum < rhis.histnum; + } + + } ; + + //intermediate structure + struct chrom {//chroma image + float chroxy_number; + float number; + float hue; + float chroxy; + float chrox; + float chroy; + float Y; + int index; + int interest; + bool operator()(const chrom& lchro, const chrom& rchro) + { + return lchro.chroxy_number < rchro.chroxy_number; + } + + } ; + + struct Temppatch {//patch characterictics + float minchroma; + float delt_E; + float minhi; + float maxhi; + bool operator()(const Temppatch& ltp, const Temppatch& rtp) + { + return ltp.minchroma < rtp.minchroma; + } + }; + + Temppatch Tppat[N_t]; + + LUTu histxy(siza); //number of values for each pair xy + + histxy.clear(); + + LUTf xxx(siza);//for color references calculated ==> max in images "like histogram" + + xxx.clear(); + + LUTf yyy(siza); + + yyy.clear(); + + LUTf YYY(siza);//not used directly, but necessary to keep good range + + YYY.clear(); + + bool separated = true;//true + + int w = -1; + + array2D reff_spect_yy_camera(N_t, 2 * Ncr + 2); + + array2D reff_spect_xx_camera(N_t, 2 * Ncr + 2); + + array2D reff_spect_Y_camera(N_t, 2 * Ncr + 2); + + int ttbeg = 0; + + int ttend = N_t; + + //call tempxy to calculate for 406 or 201 color references Temp and XYZ with cat02 + double wpx = 0.; + + double wpz = 0.; + + ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar, ttbeg, ttend, wpx, wpz, WPX, WPZ); //calculate chroma xy (xyY) for Z known colors on under 200 illuminants + + //find the good spectral values + //calculate xy reference spectral for tempref + for (int j = 0; j < Ncr ; j++) { + float xxx = std::max(TX[j] / (TX[j] + TY[j] + TZ[j]), 0.01); // x from xyY + float yyy = std::max(TY[j] / (TX[j] + TY[j] + TZ[j]), 0.01); // y from xyY + float YY = TY[j]; + reff_spect_xx_camera[j][repref] = xxx; + reff_spect_yy_camera[j][repref] = yyy; + reff_spect_Y_camera[j][repref] = YY; + /* + //display spectral datas + float xr = reff_spect_xx_camera[j][repref]; + float yr = reff_spect_yy_camera[j][repref]; + float Yr = reff_spect_Y_camera[j][repref]; + float X_r = (65535.f * (xr * Yr)) / yr; + float Z_r = (65535.f * (1.f - xr - yr) * Yr) / yr; + float Y_r = 65535.f * Yr; + float Lr, ar, br; + Color::XYZ2Lab(X_r, Y_r, Z_r, Lr, ar, br);//it make sense, because known spectral color + + + printf("Nc=%i repref=%i xxx=%f yyy=%f YY=%f Lr=%f a=%f b=%f\n", j, repref, (double) xxx, (double) yyy, (double) YY, (double) Lr/327.68f, (double) ar/327.68f, (double) br/327.68f); + */ + } + + array2D xc(bfwitc, bfhitc); + array2D yc(bfwitc, bfhitc); + array2D zc(bfwitc, bfhitc); + array2D Yc(bfwitc, bfhitc); + + // int rep = rtengine::LIM(repref + 1, 0, N_t); + + //initialize calculation of xy current for tempref + if (oldsampling == false) { + + //small denoise with median 3x3 strong + float** tmL; + int wid = bfw; + int hei = bfh; + tmL = new float*[hei]; + + for (int i = 0; i < hei; ++i) { + tmL[i] = new float[wid]; + } + + typedef ImProcFunctions::Median Median; + Median medianTypeL = Median::TYPE_3X3_STRONG;//x2 + int pas = 2; + ImProcFunctions::Median_Denoise(redloc, redloc, bfw, bfh, medianTypeL, pas, false, tmL); + ImProcFunctions::Median_Denoise(greenloc, greenloc, bfw, bfh, medianTypeL, pas, false, tmL); + ImProcFunctions::Median_Denoise(blueloc, blueloc, bfw, bfh, medianTypeL, pas, false, tmL); + + for (int i = 0; i < hei; ++i) { + delete[] tmL[i]; + } + + delete[] tmL; + } + + t3.set(); + + if (settings->verbose) { + printf("Second: from first to up median 3x3: %d nsec\n", t3.etime(t2)); + } + + if (oldsampling == false) { +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int y = 0; y < bfh ; ++y) { + for (int x = 0; x < bfw ; ++x) { + const float RR = rmm[repref] * redloc[y][x]; + const float GG = gmm[repref] * greenloc[y][x]; + const float BB = bmm[repref] * blueloc[y][x]; + + Color::rgbxyz(RR, GG, BB, xc[y][x], yc[y][x], zc[y][x], wb2);//use sRGB Adobe Rec2020 ACESp0 + float X_r = xc[y][x]; + float Y_r = yc[y][x]; + float Z_r = zc[y][x]; + + if (oldsampling == false) { + Color::gamutmap(X_r, Y_r, Z_r, wb2);//gamut control + } + + const float som = X_r + Y_r + Z_r; + xc[y][x] = X_r / som; + yc[y][x] = Y_r / som; + Yc[y][x] = Y_r / 65535.f; + } + } + + //histogram xy depend of temp...but in most cases D45 ..D65.. + // these values change with temp + //calculate for this image the mean values for each family of color, near histogram x y (number) + //xy vary from x 0..0.77 y 0..0.82 + //neutral values are near x=0.34 0.33 0.315 0.37 y =0.35 0.36 0.34 + //skin are about x 0.45 0.49 y 0.4 0.47 + //blue sky x=0.25 y=0.28 and x=0.29 y=0.32 + // step about 0.02 x 0.32 0.34 y= 0.34 0.36 skin -- sky x 0.24 0.30 y 0.28 0.32 + + + if (wbpar.itcwb_nopurple == true) {//since 21 april - change to filter magenta + purp = false; + } + + histoxyY(bfhitc, bfwitc, xc, yc, Yc, xxx, yyy, YYY, histxy, purp);//purp enable, enable purple color in WB + //return histogram x and y for each temp and in a range of 235 colors (siza) + + } else { + const int deltarepref = 1; + + for (int nn = 0, drep = -deltarepref; nn <= 2; ++nn, drep += deltarepref) { + //three loop to refine color if temp camera is probably not very good + const int rep = rtengine::LIM(repref + drep, 0, N_t); + + //initialize calculation of xy current for tempref +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int y = 0; y < bfh ; ++y) { + for (int x = 0; x < bfw ; ++x) { + const float RR = rmm[rep] * redloc[y][x]; + const float GG = gmm[rep] * greenloc[y][x]; + const float BB = bmm[rep] * blueloc[y][x]; + Color::rgbxyY(RR, GG, BB, xc[y][x], yc[y][x], Yc[y][x], wb); + } + } + + + histoxyY_low(bfhitc, bfwitc, xc, yc, Yc, xxx, yyy, YYY, histxy); + //return histogram x and y for each temp and in a range of 158 colors (siza) + } + + } + +//enable display cells + /* + printf ("xc\tyc\tcount\n") ; + printf ("--\t--\t-----\n") ; + for (int x1 = 0 ; x1 < 80; ++x1) { + for (int y1 = 0; y1 < 90; ++y1) { + if (cellxy[x1][y1] > 0) { + printf ("%d\t%d\t%d\n", x1, y1, cellxy[x1][y1]); + } + } + } + */ + + // free some memory + xc.free(); + yc.free(); + Yc.free(); + //calculate x y Y + const int sizcurrref = siza;//choice of number of correlate colors in image + array2D histcurrref(N_t, sizcurrref); + array2D xx_curref(N_t, sizcurrref); + array2D yy_curref(N_t, sizcurrref); + array2D YY_curref(N_t, sizcurrref); + array2D xx_curref_reduc(N_t, sizcurrref); + array2D yy_curref_reduc(N_t, sizcurrref); + array2D YY_curref_reduc(N_t, sizcurrref); + array2D nn_curref_reduc(N_t, sizcurrref);//new array to improve patch + array2D chronum_curref_reduc(N_t, sizcurrref);//new array to improve patch + array2D hue_curref_reduc(N_t, sizcurrref);//new array to improve patch + array2D chro_curref_reduc(N_t, sizcurrref);//new array to improve patch + array2D estim_hue(N_t, sizcurrref);//new array to improve patch + + hiss Wbhis[siza]; + + for (int nh = 0; nh < siza; nh++) { + Wbhis[nh].histnum = histxy[nh]; + Wbhis[nh].index = nh; + } + + //sort in ascending order + std::sort(Wbhis, Wbhis + siza, Wbhis[0]); + int n1 = 0; + int n4 = 0; + int n15 = 0; + int n30 = 0; + + //part to improve + //determined the number of colors who be used after + int ntot = 0; + + for (int nh = 0; nh < siza; nh++) { + if (Wbhis[nh].histnum > 0) { + ntot++; + } + } + + dread = ntot;//read colors + + for (int nh = 0; nh < siza; nh++) { + if (Wbhis[nh].histnum < 30) { + n30++; //keep only existing color but avoid to small + + if (Wbhis[nh].histnum < 15) { + n15++; //keep only existing color but avoid to small + + if (Wbhis[nh].histnum < 4) { + n4++; //keep only existing color but avoid to small + + if (Wbhis[nh].histnum < 1) { + n1++; //keep only existing color but avoid to small + } + } + } + } + } + + int ntr = n30; + + if (ntr > (siza - 25)) { + ntr = n15; //if to less elements 25 elements mini + } + + if (ntr > (siza - 23)) { + ntr = n4; //if to less elements 25 elements mini + } + + if (ntr > (siza - 20)) { + ntr = n1; //if to less elements 20 elements mini - normally never be used ! + } + + int sizcurr2ref = sizcurrref - ntr; + const int sizcu30 = sizcurrref - n30; + int maxsiz = 70; + maxsiz = LIM(maxsiz, 50, 80); + int nbm = maxsiz; + int sizcu4 = maxsiz; + + if (oldsampling == true) { + nbm = 55; + sizcu4 = rtengine::min(sizcu30, nbm);//size of chroma values + } + + Tppat[repref].maxhi = Wbhis[siza - 1].histnum; + Tppat[repref].minhi = Wbhis[siza - nbm].histnum; + + if (settings->verbose) { + printf("number total datas read=%i\n", ntot); + printf("Others datas - ntr=%i sizcurr2ref=%i sizcu4=%i sizcu30=%i\n", ntr, sizcurr2ref, sizcu4, sizcu30); + printf("Number max of data samples in last patch=%i\n", (int) Tppat[repref].maxhi); + printf("Number of data samples in beginning patch =%i\n", (int) Tppat[repref].minhi); + } + + chrom wbchro[sizcu4]; + float swpr = wpx + wpz + 1.f; + float xwpr = wpx / swpr;//white point for tt in xy coordinates + float ywpr = 1.f / swpr; + + if (oldsampling == true) { + swpr = Txyz[repref].XX + Txyz[repref].ZZ + 1.f; + xwpr = Txyz[repref].XX / swpr;//white point for tt in xy coordinates + ywpr = 1.f / swpr; + } + + if (settings->verbose) { + printf("White Point XYZ x=%f y=%f z=%f\n", wpx, 1., wpz); + printf("White Point xyY x=%f y=%f\n", xwpr, ywpr); + } + + float estimchrom = 0.f; + + if (oldsampling == true) { + for (int i = 0; i < sizcu4; ++i) { //take the max values + histcurrref[i][repref] = Wbhis[siza - (i + 1)].histnum; + xx_curref[i][repref] = xxx[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; + yy_curref[i][repref] = yyy[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; + YY_curref[i][repref] = YYY[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; + } + if (settings->verbose) { + printf("Sizcu4=%i\n", sizcu4); + } + + //estimate chromaticity for references + for (int nh = 0; nh < sizcu4; ++nh) { + const float chxy = std::sqrt(SQR(xx_curref[nh][repref] - xwpr) + SQR(yy_curref[nh][repref] - ywpr)); + wbchro[nh].chroxy_number = chxy * std::sqrt(histcurrref[nh][repref]); + wbchro[nh].chroxy = std::sqrt(chxy); + wbchro[nh].chrox = xx_curref[nh][repref]; + wbchro[nh].chroy = yy_curref[nh][repref]; + wbchro[nh].Y = YY_curref[nh][repref]; + wbchro[nh].index = nh; + estimchrom += chxy; + } + + estimchrom /= sizcu4; + + if (settings->verbose) { + printf("estimchrom=%f\n", estimchrom); + } + + const int maxval = 34; + + sizcurr2ref = rtengine::min(sizcurr2ref, maxval); //keep about the biggest values, + + for (int i = 0; i < sizcurr2ref; ++i) { + //is condition chroxy necessary ? + if (wbchro[sizcu4 - (i + 1)].chrox > 0.1f && wbchro[sizcu4 - (i + 1)].chroy > 0.1f && wbchro[sizcu4 - (i + 1)].chroxy > 0.0f) { //suppress value too far from reference spectral + w++; + xx_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chrox; + yy_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chroy; + YY_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].Y; + nn_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].number; + } + } + + //calculate deltaE xx to find best values of spectrals data - limited to chroma values + int maxnb = 3; + + + float dEmean = 0.f; + int ndEmean = 0; + float maxhist = -1000.f; + float minhist = 100000000.f; + + for (int nb = 1; nb <= maxnb; ++nb) { + for (int i = 0; i < w; ++i) { + float mindeltaE = 100000.f; + int kN = 0; + + for (int j = 0; j < Ncr ; j++) { + if (!good_spectral[j]) { + const float deltaE = SQR(xx_curref_reduc[i][repref] - reff_spect_xx_camera[j][repref]) + SQR(yy_curref_reduc[i][repref] - reff_spect_yy_camera[j][repref]); + + if (deltaE < mindeltaE) { + mindeltaE = deltaE; + kN = j; + } + } + } + + {//display in console for 5.9 + float spectlimit = settings->itcwb_deltaspec; + float dE = sqrt(SQR(xx_curref_reduc[i][repref] - reff_spect_xx_camera[kN][repref]) + SQR(yy_curref_reduc[i][repref] - reff_spect_yy_camera[kN][repref])); + dEmean += dE; + ndEmean++; + + if (nn_curref_reduc[i][repref] < minhist) { + minhist = nn_curref_reduc[i][repref]; + } + + if (nn_curref_reduc[i][repref] > maxhist) { + maxhist = nn_curref_reduc[i][repref]; + } + + if (settings->verbose) { + float xr = reff_spect_xx_camera[kN][repref]; + float yr = reff_spect_yy_camera[kN][repref]; + float Yr = reff_spect_Y_camera[kN][repref]; + float X_r = (65535.f * (xr * Yr)) / yr; + float Z_r = (65535.f * (1.f - xr - yr) * Yr) / yr; + float Y_r = 65535.f * Yr; + float Lr, ar, br; + Color::XYZ2Lab(X_r, Y_r, Z_r, Lr, ar, br);//it make sense, because known spectral color + + if (dE > spectlimit) { + printf("i=%i kn=%i REFLAB for info not used - not relevant Lr=%3.2f ar=%3.2f br=%3.2f \n", i, kN, (double)(Lr / 327.68f), (double)(ar / 327.68f), (double)(br / 327.68f)); + printf("IMAGE: kn=%i hist=%7.0f chro_num=%5.1f hue=%2.2f chro=%2.3f xx=%f yy=%f YY=%f\n", kN, (double) nn_curref_reduc[i][repref], (double) chronum_curref_reduc[i][repref], (double) hue_curref_reduc[i][repref], (double) chro_curref_reduc[i][repref], (double) xx_curref_reduc[i][repref], (double) yy_curref_reduc[i][repref], (double) YY_curref_reduc[i][repref]); + printf("kn=%i REfxy xxr=%f yyr=%f YYr=%f\n", kN, (double) reff_spect_xx_camera[kN][repref], (double) reff_spect_yy_camera[kN][repref], (double) reff_spect_Y_camera[kN][repref]); + printf("kn=%i DELTA delt=%f\n", kN, dE); + printf(".... \n"); + } + } + + } + + good_spectral[kN] = true;//good spectral are spectral color that match color histogram xy + } + } + } else { + + for (int i = 0; i < sizcu4; ++i) { //take the max values + histcurrref[i][repref] = Wbhis[siza - (i + 1)].histnum; + xx_curref[i][repref] = xxx[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; + yy_curref[i][repref] = yyy[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; + YY_curref[i][repref] = YYY[Wbhis[siza - (i + 1)].index] / histcurrref[i][repref]; + } + + int minsize = 20; + int maxsize = maxsiz; + bool isponderate = true; //to build patch ponderate + + bool isponder = true;//with true moving average + float powponder = settings->itcwb_powponder;//not used today... + powponder = LIM(powponder, 0.01f, 0.2f); + float estimchrom = 0.f; + + for (int j = minsize; j < maxsize; ++j) {//20 empirical minimal value default to ensure a correlation + if (!good_size[j]) { + float countchxynum = 0.f; + estimchrom = 0.f; + float xh = 0.f; + float yh = 0.f; + wbchro[j].hue = 0.f; + wbchro[j].chroxy_number = 0.f; + wbchro[j].number = 0.f; + wbchro[j].chroxy = 0.f; + wbchro[j].chrox = 0.f; + wbchro[j].chroy = 0.f; + wbchro[j].Y = 0.f; + wbchro[j].index = 0; + int ind1 = 1; + int ind2 = -1; + float chxy1 = 0.f; + float chxy2 = 0.f; + float chxynum1 = 0.f; + float chxynum2 = 0.f; + + for (int nh = 0; nh < j; ++nh) { + ind1++; + ind2++; + + if (ind1 < j && !isponderate) { + chxy1 = std::sqrt(SQR(xx_curref[ind1][repref] - xwpr) + SQR(yy_curref[ind1][repref] - ywpr)); + } + + if (ind2 <= 0 && !isponderate) { + chxy2 = std::sqrt(SQR(xx_curref[ind2][repref] - xwpr) + SQR(yy_curref[ind2][repref] - ywpr)); + } + + const float chxy = std::sqrt(SQR(xx_curref[nh][repref] - xwpr) + SQR(yy_curref[nh][repref] - ywpr)); + xh += xx_curref[nh][repref] - xwpr; + yh += yy_curref[nh][repref] - ywpr; + wbchro[nh].hue = fmodf(xatan2f(yy_curref[nh][repref] - ywpr, xx_curref[nh][repref] - xwpr), 2.f * RT_PI_F); + const float chxynum = wbchro[nh].chroxy_number = chxy * pow((double) histcurrref[nh][repref], 0.05);//sqrt was too big no convergence + + //We can replace 0.05 by powponder + if (ind1 < j && isponderate) { //with issorted ponderate chroma + chxynum1 = chxy1 * pow((double) histcurrref[ind1][repref], 0.05);//0.05 to 0.1 allows convergence, near 1.5 betwween max and min value + }//We can replace 0.05 by powponder + + if (ind2 < 0 && isponderate) { + chxynum2 = chxy2 * pow((double) histcurrref[ind2][repref], 0.05);//We can replace 0.05 by powponder + } + + wbchro[nh].number = histcurrref[nh][repref]; + wbchro[nh].chroxy = std::sqrt(chxy); + wbchro[nh].chrox = xx_curref[nh][repref]; + wbchro[nh].chroy = yy_curref[nh][repref]; + wbchro[nh].Y = YY_curref[nh][repref]; + wbchro[nh].index = nh; + + if (!isponderate) { + estimchrom += chxy; + + if (isponder && !isponderate) { + estimchrom += chxy1; + estimchrom += chxy2; + } + } + + if (isponderate) { + estimchrom += chxynum; + + if (isponder) { + estimchrom += chxynum1; + estimchrom += chxynum2; + } + + countchxynum += pow((double)histcurrref[nh][repref], 0.05);//no error, to take into account mean value //We can replace 0.05 by powponder + } + } + + estim_hue[j][repref] = xatan2f(yh, xh); + + if (isponder) { + estimchrom /= (j + 2 * (j - 1)); //extrem not taken + } else { + estimchrom /= j; + } + + if (estimchrom < minchrom) { + minchrom = estimchrom; + Tppat[repref].minchroma = minchrom; + kmin = j; + } + + Tppat[repref].minchroma = minchrom; + } + + good_size[kmin] = true; + } + + sizcu4 = kmin; + + int maxval = maxsiz; + sizcurr2ref = rtengine::min(sizcurr2ref, maxval); //keep about the biggest values, + int index1 = 0; + int index2 = sizcu4; + int indn = index1; + + + for (int i = index1; i < index2; ++i) { + if (wbchro[sizcu4 - (i + 1)].number < 400.f) { //remove too low numbers datas about an area 60*60 pixels or reparted + indn++; + } + } + + Tppat[repref].minhi = (float) rtengine::max((int) wbchro[sizcu4 - (indn + 1)].number, (int) Tppat[repref].minhi); + + if (settings->verbose) { + printf("Index1=%i index2=%i \n", indn, index2); + } + + if (settings->verbose) { + printf("Info2 - patch estimation of wp displacement (before):j=%i repref=%i real=%i Tppat=%f chrom=%f hue=%f\n", kmin, repref, index2 - indn, (double) Tppat[repref].minchroma, (double) minchrom, (double) estim_hue[kmin][repref]); + }; + + float limexclu = 0.96f;//to avoid highlight in some rare cases (sky...) + + + for (int i = indn; i < index2; ++i) { + //improvment to limit high Y values wbchro[sizcu4 - (i + 1)].Y < 0.96 0.96 arbitrary high value, maybe 0.9 or 0.98...or 1.0 + if (wbchro[sizcu4 - (i + 1)].chrox > limx && wbchro[sizcu4 - (i + 1)].chroy > limy && wbchro[sizcu4 - (i + 1)].Y < limexclu) { //remove value too far from reference spectral + w++;// w number of real tests + xx_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chrox; + yy_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chroy; + YY_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].Y; + chronum_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chroxy_number; + nn_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].number; + hue_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].hue; + chro_curref_reduc[w][repref] = wbchro[sizcu4 - (i + 1)].chroxy; + } + } + + if (settings->verbose) { + printf("Number of real tests=%i\n", w); + } + + int maxnb = 1; //since 8 april 2023 + + + float dEmean = 0.f; + int ndEmean = 0; + maxhist = -1000.f; + minhist = 100000000.f; + + for (int nb = 1; nb <= maxnb; ++nb) { //1 is good, but 2 3 or 4 help to find more spectral values + for (int i = 0; i < w; ++i) { + float mindeltaE = 100000.f; + int kN = 0; + + for (int j = 0; j < Ncr ; j++) { + if (!good_spectral[j]) { + const float deltaE = SQR(xx_curref_reduc[i][repref] - reff_spect_xx_camera[j][repref]) + SQR(yy_curref_reduc[i][repref] - reff_spect_yy_camera[j][repref]); + + if (deltaE < mindeltaE) { + mindeltaE = deltaE; + kN = j; + } + } + } + //display in console + float spectlimit = settings->itcwb_deltaspec; + float dE = sqrt(SQR(xx_curref_reduc[i][repref] - reff_spect_xx_camera[kN][repref]) + SQR(yy_curref_reduc[i][repref] - reff_spect_yy_camera[kN][repref])); + dEmean += dE; + ndEmean++; + + if (nn_curref_reduc[i][repref] < minhist) { + minhist = nn_curref_reduc[i][repref]; + } + + if (nn_curref_reduc[i][repref] > maxhist) { + maxhist = nn_curref_reduc[i][repref]; + } + + if (settings->verbose) { + float xr = reff_spect_xx_camera[kN][repref]; + float yr = reff_spect_yy_camera[kN][repref]; + float Yr = reff_spect_Y_camera[kN][repref]; + float X_r = (65535.f * (xr * Yr)) / yr; + float Z_r = (65535.f * (1.f - xr - yr) * Yr) / yr; + float Y_r = 65535.f * Yr; + float Lr, ar, br; + Color::XYZ2Lab(X_r, Y_r, Z_r, Lr, ar, br);//it make sense, because known spectral color + + if (dE > spectlimit) { + printf("i=%i kn=%i REFLAB for info not used - not relevant Lr=%3.2f ar=%3.2f br=%3.2f \n", i, kN, (double)(Lr / 327.68f), (double)(ar / 327.68f), (double)(br / 327.68f)); + printf("IMAGE: kn=%i hist=%7.0f chro_num=%5.1f hue=%2.2f chro=%2.3f xx=%f yy=%f YY=%f\n", kN, (double) nn_curref_reduc[i][repref], (double) chronum_curref_reduc[i][repref], (double) hue_curref_reduc[i][repref], (double) chro_curref_reduc[i][repref], (double) xx_curref_reduc[i][repref], (double) yy_curref_reduc[i][repref], (double) YY_curref_reduc[i][repref]); + printf("kn=%i REfxy xxr=%f yyr=%f YYr=%f\n", kN, (double) reff_spect_xx_camera[kN][repref], (double) reff_spect_yy_camera[kN][repref], (double) reff_spect_Y_camera[kN][repref]); + printf("kn=%i DELTA delt=%f\n", kN, dE); + printf(".... \n"); + } + } + + + good_spectral[kN] = true;//good spectral are spectral color that match color histogram xy + } + + if (ndEmean == 0) { + ndEmean = 2; + } + + Tppat[repref].delt_E = dEmean / ndEmean; + delta = Tppat[repref].delt_E; + Tppat[repref].maxhi = maxhist; + Tppat[repref].minhi = minhist; + + if (settings->verbose && !oldsampling) { + printf("Patch Mean - Repref=%i deltaE=%f minhisto=%6.0f maxhisto=%7.0f \n", repref, (double) dEmean / ndEmean, (double) minhist, (double) maxhist); + } + } + } + + // reuse some buffers + array2D& R_curref_reduc = xx_curref_reduc; + array2D& G_curref_reduc = yy_curref_reduc; + array2D& B_curref_reduc = YY_curref_reduc; + + //reconvert to RGB for "reduction" + for (int i = 0; i < w; i++) { + const float X = 65535.f * xx_curref_reduc[i][repref] * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; + const float Y = 65535.f * YY_curref_reduc[i][repref]; + const float Z = 65535.f * (1.f - xx_curref_reduc[i][repref] - yy_curref_reduc[i][repref]) * YY_curref_reduc[i][repref] / yy_curref_reduc[i][repref]; + float r, g, b; + Color::xyz2rgb(X, Y, Z, r, g, b, iwb); + R_curref_reduc[i][repref] = r / rmm[repref]; + G_curref_reduc[i][repref] = g / gmm[repref]; + B_curref_reduc[i][repref] = b / bmm[repref]; + } + + t4.set(); + + if (settings->verbose) { + printf("Third: from second to find patch: %d nsec\n", t4.etime(t3)); + } + + +//end first part + + //Now begin real calculations + separated = false; + ttbeg = 0; + ttend = N_t; + + ttbeg = std::max(repref - 11, 0);//enough in all cases > dgoodref + ttend = std::min(repref + 11, N_t); + + if (oldsampling == true) { + ttbeg = 0; + ttend = N_t; + } + + //recalculate histogram with good values and not estimated + double wpx1 = 0.; + double wpz1 = 0.; + + ColorTemp::tempxy(separated, repref, Tx, Ty, Tz, Ta, Tb, TL, TX, TY, TZ, wbpar, ttbeg, ttend, wpx1, wpz1, WPX, WPZ); //calculate chroma xy (xyY) for Z known colors on under 90 illuminants + //calculate x y Y + int sizcurr = siza;//choice of number of correlate colors in image + array2D xxyycurr_reduc(N_t, 2 * sizcurr); + array2D reff_spect_xxyy(N_t, 2 * Ncr + 2); + array2D reff_spect_xxyy_prov(N_t, 2 * Ncr + 2); + t5.set(); + + if (settings->verbose) { + printf("Fourth: from third recalculate spectral: %d nsec\n", t5.etime(t4)); + } + + float minstud = 100000.f; + int goodref = 1; + +//calculate x y z for each pixel with multiplier rmm gmm bmm + + for (int tt = ttbeg; tt < ttend; ++tt) {//N_t + for (int i = 0; i < w; ++i) { + float unused; + + const float RR = rmm[tt] * R_curref_reduc[i][repref]; + const float GG = gmm[tt] * G_curref_reduc[i][repref]; + const float BB = bmm[tt] * B_curref_reduc[i][repref]; + Color::rgbxyY(RR, GG, BB, xxyycurr_reduc[2 * i][tt], xxyycurr_reduc[2 * i + 1][tt], unused, wb); + } + + for (int j = 0; j < Ncr ; ++j) { + reff_spect_xxyy_prov[2 * j][tt] = std::max(Tx[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]), 0.01f); // x from xyY + reff_spect_xxyy_prov[2 * j + 1][tt] = std::max(Ty[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]), 0.01f); // y from xyY + } + + int kk = -1; + + for (int i = 0; i < Ncr ; ++i) { + if (good_spectral[i]) { + kk++; + //we calculate now absolute chroma for each spectral color + reff_spect_xxyy[2 * kk][tt] = reff_spect_xxyy_prov[2 * i][tt]; + reff_spect_xxyy[2 * kk + 1][tt] = reff_spect_xxyy_prov[2 * i + 1][tt]; + } + } + + const float abstud = std::fabs(studentXY(xxyycurr_reduc, reff_spect_xxyy, 2 * w, 2 * (kk + 1), tt)); + + if (abstud < minstud) { // find the minimum Student + minstud = abstud; + goodref = tt; + } + } + + t6.set(); + + if (settings->verbose) { + printf("Fifth: from fourth to find first correlation: %d nsec\n", t6.etime(t5)); + } + + { + //always used if extra = true because I made this choice, brings better results + struct Tempgreen { + float student; + int tempref; + int greenref; + bool operator()(const Tempgreen& ltg, const Tempgreen& rtg) + { + return ltg.student < rtg.student; + } + }; + Tempgreen Tgstud[N_g]; + + for (int i = 0; i < N_g; ++i) {//init variables with + Tgstud[i].student = 1000.f;//max value to initialize + + if (!oldsampling) { + Tgstud[i].tempref = 80;//5002K position in the list + } else { + Tgstud[i].tempref = 57;//5002K position in the list + } + + Tgstud[i].greenref = 55;// 1.f position in the list + } + + int newdelta = 1.8f * 4; // wbpar.itcwb_delta - default = 4; + int dgoodref = rtengine::LIM(newdelta, 1, 10); // 1.8 increase delta temp scan + + if (oldsampling == true) { + dgoodref = 2; + } + + const int scantempbeg = rtengine::max(goodref - (dgoodref + 1), 1); + const int scantempend = rtengine::min(goodref + dgoodref, N_t - 1); + int goodrefgr = 1; + + for (int gr = Rangegreenused.begin; gr < Rangegreenused.end; ++gr) { + float minstudgr = 100000.f; + goodrefgr = 1; + + for (int tt = scantempbeg; tt < scantempend; ++tt) { + double r, g, b; + + if (!oldsampling) { + ColorTemp(Txyz[tt].Tem, gree[gr].green, 1., "Custom", wbpar.observer).getMultipliers(r, g, b); + } else { + ColorTemp(Txyzs[tt].Tem, gree[gr].green, 1., "Custom", wbpar.observer).getMultipliers(r, g, b); + } + + float rm = imatrices.cam_rgb[0][0] * r + imatrices.cam_rgb[0][1] * g + imatrices.cam_rgb[0][2] * b; + float gm = imatrices.cam_rgb[1][0] * r + imatrices.cam_rgb[1][1] * g + imatrices.cam_rgb[1][2] * b; + float bm = imatrices.cam_rgb[2][0] * r + imatrices.cam_rgb[2][1] * g + imatrices.cam_rgb[2][2] * b; + //recalculate Multipliers now with good range of temp and green + + const float new_pre_mul[4] = { ri->get_pre_mul(0) / rm, ri->get_pre_mul(1) / gm, ri->get_pre_mul(2) / bm, ri->get_pre_mul(3) / gm }; + float new_scale_mul[4]; + const float gain = calculate_scale_mul(new_scale_mul, new_pre_mul, c_white, cblacksom, isMono, ri->get_colors()); + + rm = new_scale_mul[0] / scale_mul[0] * gain; + gm = new_scale_mul[1] / scale_mul[1] * gain; + bm = new_scale_mul[2] / scale_mul[2] * gain; + rmm[tt] = rm / gm; + gmm[tt] = 1.f; + bmm[tt] = bm / gm; + } + + + for (int tt = scantempbeg; tt < scantempend; ++tt) {//N_t + for (int i = 0; i < w; ++i) { + float unused; + + const float RR = rmm[tt] * R_curref_reduc[i][repref]; + const float GG = gmm[tt] * G_curref_reduc[i][repref]; + const float BB = bmm[tt] * B_curref_reduc[i][repref]; + Color::rgbxyY(RR, GG, BB, xxyycurr_reduc[2 * i][tt], xxyycurr_reduc[2 * i + 1][tt], unused, wb); + } + + //recalculate xy spectral now with good range of temp and green + + for (int j = 0; j < Ncr ; ++j) { + reff_spect_xxyy_prov[2 * j][tt] = std::max(Tx[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]), 0.01f); // x from xyY + reff_spect_xxyy_prov[2 * j + 1][tt] = std::max(Ty[j][tt] / (Tx[j][tt] + Ty[j][tt] + Tz[j][tt]), 0.01f); // y from xyY + } + + int kkg = -1; + + for (int i = 0; i < Ncr ; ++i) { + if (good_spectral[i]) { + kkg++; + reff_spect_xxyy[2 * kkg][tt] = reff_spect_xxyy_prov[2 * i][tt]; + reff_spect_xxyy[2 * kkg + 1][tt] = reff_spect_xxyy_prov[2 * i + 1][tt]; + } + } + + //now we have good spectral data + //calculate student correlation + const float abstudgr = std::fabs(studentXY(xxyycurr_reduc, reff_spect_xxyy, 2 * w, 2 * (kkg + 1), tt)); + + if (abstudgr < minstudgr) { // find the minimum Student + minstudgr = abstudgr; + goodrefgr = tt; + } + + //found the values + Tgstud[gr].tempref = goodrefgr; + Tgstud[gr].greenref = gr; + Tgstud[gr].student = minstudgr; + + } + } + + t7.set(); + + if (settings->verbose) { + printf("Sixth: from fifth to find patch in extra mode: %d nsec\n", t7.etime(t6)); + } + + float estimchromf = 0.f; + float estimhuef = 0.f; + float xhf = 0.f; + float yhf = 0.f; + + const float swprf = WPX[goodrefgr] + WPZ[goodrefgr] + 1.f; + const float xwprf = WPX[goodrefgr] / swpr;//white point for tt in xy coordinates + + const float ywprf = 1.f / swprf; + + for (int nh = 0; nh < w; ++nh) { + const float chxy = std::sqrt(SQR(xxyycurr_reduc[2 * nh][goodrefgr] - xwprf) + SQR(xxyycurr_reduc[2 * nh + 1][goodrefgr] - ywprf)); + xhf += xxyycurr_reduc[2 * nh][goodrefgr] - xwprf; + yhf += xxyycurr_reduc[2 * nh + 1][goodrefgr] - ywprf; + estimchromf += chxy; + } + + estimhuef = xatan2f(yhf, xhf); + estimchromf /= w; + + if (settings->verbose) { + printf("New white point calculated patch for information : xwprf=%f ywprf=%f\n", (double) xwprf, (double) ywprf); + printf("Info - patch estimation of white-point displacement: chrom=%f hue=%f\n", (double) estimchromf, (double) estimhuef); + } + + + std::sort(Tgstud, Tgstud + N_g, Tgstud[0]); + + if (!oldsampling) { + + // now search the value of green the nearest of 1 with a good student value, I think it is a good choice, perhaps no... + // I take the first values + // I admit a symetrie in green coefiicient for rgb multiplier...probably not exactly true + // perhaps we can used a Snedecor test ? but why...at least we have confidence interval > 90% + int greengood = 55; + + int maxkgood = 3;//default 3 - we can change ...to test 2, 4, 5, 6. High values perhaps less good student, but it is a compromise... + maxkgood = rtengine::LIM(maxkgood, 1, 6);// 2 6 + + if (oldsampling == true) { + maxkgood = 3; // force to 3 with old low sampling + } + + int mingood = std::min(std::fabs(Tgstud[0].greenref - 55), std::fabs(Tgstud[1].greenref - 55)); + + for (int k = 0; k < maxkgood; ++k) { + mingood = std::min(std::fabs(mingood), std::fabs(Tgstud[k].greenref - 55)); + } + + for (int k = 0; k < maxkgood ; ++k) { + if (mingood == fabs(Tgstud[k].greenref - 55)) { + greengood = Tgstud[k].greenref ; + goodref = Tgstud[k].tempref; + studgood = Tgstud[k].student; + } + } + + if (settings->verbose) { + printf("Green comparison=%f\n", keepgreen); + printf("Rangegreen begin=%i Rangegreen end=%i\n", Rangegreenused.begin, Rangegreenused.end); + printf("scantemp begin=%i scantemp end=%i\n", scantempbeg, scantempend); + printf("Student_0=%f Student_k= %f\n", Tgstud[0].student, Tgstud[maxkgood - 1].student); + printf("mingood=%i greeng=%i goodref=%i stud=%f\n", mingood, greengood, goodref, (double) studgood); + } + + tempitc = Txyz[goodref].Tem; + + greenitc = gree[greengood].green; + + int greencam = 55; + + for (int gg = 0; gg < N_g; gg++) { + if (gree[gg].green > keepgreen) { + greencam = gg;//show the green + break; + } + } + + bool greenex = false; + + if ((keepgreen > 0.92 && keepgreen < 1.23)) { + if (abs(greengood - greencam) > 5) { + double ag = 0.; + double gcal = gree[greengood].green; + ag = 0.89 * (gcal - keepgreen); + greenitc = gcal - ag; + greenex = true; + + if (settings->verbose) { + printf("green correction_1=%f \n", ag); + } + } else { + double ag = 0.; + double gcal = gree[greengood].green; + + if (keepgreen > 1.09) { + ag = 0.10 * (gcal - keepgreen) * abs(greengood - greencam); + } else { + ag = 0.16 * (gcal - keepgreen) * abs(greengood - greencam); + } + + greenitc = gcal - ag; + greenex = true; + + if (settings->verbose) { + printf("green correction_0=%f \n", ag); + } + + } + } + + if (((keepgreen >= 0.952 && keepgreen < 1.25) && greengood > 55) && !greenex) { + double ag = 0.; + double gcal = gree[greengood].green;//empirical correction when green suspicious + ag = 0.96 * (gcal - keepgreen); + greenitc = gcal - ag; + greenex = true; + + if (settings->verbose) { + printf("green correction_2=%f \n", ag); + } + } + + if (((greengood > 41 && keepgreen < 0.7) || (greengood > 46 && keepgreen < 0.952)) && !greenex) { + double ag = 0.; + double gcal = gree[greengood].green; + ag = 0.95 * (gcal - keepgreen);//empirical correction when green low - to improve + + if (purp == false) { + ag -= 0.12; + } + + if (settings->verbose) { + printf("green correction_3=%f \n", ag); + } + + greenitc = gcal - ag; + } + } else {//oldsampling + int greengood; + int greengoodprov; + int goodrefprov; + float studprov; + const int goodref0 = Tgstud[0].tempref; + const int greengood0 = Tgstud[0].greenref - 55;//55 green = 1 + const float stud0 = Tgstud[0].student; + const int goodref1 = Tgstud[1].tempref; + const float stud1 = Tgstud[1].student; + const int greengood1 = Tgstud[1].greenref - 55; + const int goodref2 = Tgstud[2].tempref; + const int greengood2 = Tgstud[2].greenref - 55; + const float stud2 = Tgstud[2].student; + + if (std::fabs(greengood2) < std::fabs(greengood1)) { + greengoodprov = greengood2; + goodrefprov = goodref2; + studprov = stud2; + } else { + greengoodprov = greengood1; + goodrefprov = goodref1; + studprov = stud1; + + } + + if (std::fabs(greengoodprov) < std::fabs(greengood0)) { + goodref = goodrefprov; + greengood = greengoodprov + 55; + studgood = studprov; + + } else { + goodref = goodref0; + greengood = greengood0 + 55; + studgood = stud0; + } + + tempitc = Txyz[goodref].Tem; + greenitc = gree[greengood].green; + + if (estimchrom < 0.025f) { + float ac = -2.40f * estimchrom + 0.06f;//small empirical correction, maximum 0.06 if chroma=0 for all image, currently for very low chroma +0.02 + greenitc += ac; + } + + itciterate = false; + + } + } + + avg_rm = 10000.f * rmm[goodref]; + avg_gm = 10000.f * gmm[goodref]; + avg_bm = 10000.f * bmm[goodref]; + + //now we have temp green and student + if (!oldsampling) { + if (lastitc && nocam == 0 && wbpar.itcwb_alg == false) { //try to find if another tempref + if ((tempitc < 4000.f || tempitc > 6000.f) || extra == true) { + optitc[nbitc].stud = studgood; + optitc[nbitc].minc = Tppat[repref].minchroma; + optitc[nbitc].titc = tempitc; + optitc[nbitc].gritc = greenitc; + optitc[nbitc].tempre = tempref; + optitc[nbitc].greenre = greenref; + optitc[nbitc].drea = dread; + optitc[nbitc].kmi = kmin; + optitc[nbitc].minhis = Tppat[repref].minhi; + optitc[nbitc].maxhis = Tppat[repref].maxhi; + optitc[nbitc].avg_r = avg_rm; + optitc[nbitc].avg_g = avg_gm; + optitc[nbitc].avg_b = avg_bm; + optitc[nbitc].delt = Tppat[repref].delt_E; + + nbitc++; + + if (tempitc < 4000.f) {//change the second temp to be near of the first one + if (tempitc < 2800.f && kcam == 1) { + tempitc += 151.f; + } else if (tempitc >= 2800.f && kcam == 1) { + tempitc -= 149.f; + } else { + tempitc += 201.f; + } + } else { + if (tempitc < 8000.f) { + tempitc = 4197.f + 0.1255f * tempitc; + } else { + tempitc = 5200.f * (1.f * (tempitc / 8000.f)); + } + } + + tempref = tempitc * (1. + wbpar.tempBias); + + optitc[nbitc].stud = studgood; + optitc[nbitc].minc = Tppat[repref].minchroma; + optitc[nbitc].titc = tempitc; + optitc[nbitc].gritc = greenitc; + optitc[nbitc].tempre = tempref; + optitc[nbitc].greenre = greenref; + optitc[nbitc].drea = dread; + optitc[nbitc].kmi = kmin; + optitc[nbitc].minhis = Tppat[repref].minhi; + optitc[nbitc].maxhis = Tppat[repref].maxhi; + optitc[nbitc].avg_r = avg_rm; + optitc[nbitc].avg_g = avg_gm; + optitc[nbitc].avg_b = avg_bm; + optitc[nbitc].delt = Tppat[repref].delt_E; + lastitc = false; + + } else if ((tempitc >= 4000.f && tempitc <= 6000.f) || extra == true) { + optitc[nbitc].stud = studgood; + optitc[nbitc].minc = Tppat[repref].minchroma; + optitc[nbitc].titc = tempitc; + optitc[nbitc].gritc = greenitc; + optitc[nbitc].tempre = tempref; + optitc[nbitc].greenre = greenref; + optitc[nbitc].drea = dread; + optitc[nbitc].kmi = kmin; + optitc[nbitc].minhis = Tppat[repref].minhi; + optitc[nbitc].maxhis = Tppat[repref].maxhi; + optitc[nbitc].avg_r = avg_rm; + optitc[nbitc].avg_g = avg_gm; + optitc[nbitc].avg_b = avg_bm; + optitc[nbitc].delt = Tppat[repref].delt_E; + + nbitc++; + + if (tempitc < 5000.f) {//change the second temp to be near of the first one + tempitc += 105.f; + } else { + tempitc -= 105.f; + } + + tempref = tempitc * (1. + wbpar.tempBias); + + optitc[nbitc].stud = studgood; + optitc[nbitc].minc = Tppat[repref].minchroma; + optitc[nbitc].titc = tempitc; + optitc[nbitc].gritc = greenitc; + optitc[nbitc].tempre = tempref; + optitc[nbitc].greenre = greenref; + optitc[nbitc].drea = dread; + optitc[nbitc].kmi = kmin; + optitc[nbitc].minhis = Tppat[repref].minhi; + optitc[nbitc].maxhis = Tppat[repref].maxhi; + optitc[nbitc].avg_r = avg_rm; + optitc[nbitc].avg_g = avg_gm; + optitc[nbitc].avg_b = avg_bm; + optitc[nbitc].delt = Tppat[repref].delt_E; + lastitc = false; + + } + } else if (nocam > 0 && wbpar.itcwb_alg == false) { + optitc[nbitc].stud = studgood; + optitc[nbitc].minc = Tppat[repref].minchroma; + optitc[nbitc].titc = tempitc; + optitc[nbitc].gritc = greenitc; + optitc[nbitc].tempre = tempref; + optitc[nbitc].greenre = greenref; + optitc[nbitc].drea = dread; + optitc[nbitc].kmi = kmin; + optitc[nbitc].minhis = Tppat[repref].minhi; + optitc[nbitc].maxhis = Tppat[repref].maxhi; + optitc[nbitc].avg_r = avg_rm; + optitc[nbitc].avg_g = avg_gm; + optitc[nbitc].avg_b = avg_bm; + optitc[nbitc].delt = Tppat[repref].delt_E; + + nbitc++; + + if (nocam == 1) { //new tempitc empirical values to refine + tempitc -= 199.f; + } else if (nocam == 2) { + tempitc += 201.f; + } else if (nocam == 3) { + tempitc -= 199.f; + } else if (nocam == 4) { + tempitc += 201.f; + } else if (nocam == 5) { + tempitc += 299.f; + } else if (nocam == 6) { + tempitc += 201.f; + } else if (nocam == 7) { + tempitc += 299.f; + } else if (nocam == 8) { + tempitc += 500.f; + } else if (nocam == 9) { + tempitc += 199.f; + } else if (nocam == 10) { + tempitc += 199.f; + } + + nocam = 0; + tempref = tempitc * (1. + wbpar.tempBias); + + optitc[nbitc].stud = studgood; + optitc[nbitc].minc = Tppat[repref].minchroma; + optitc[nbitc].titc = tempitc; + optitc[nbitc].gritc = greenitc; + optitc[nbitc].tempre = tempref; + optitc[nbitc].greenre = greenref; + optitc[nbitc].drea = dread; + optitc[nbitc].kmi = kmin; + optitc[nbitc].minhis = Tppat[repref].minhi; + optitc[nbitc].maxhis = Tppat[repref].maxhi; + optitc[nbitc].avg_r = avg_rm; + optitc[nbitc].avg_g = avg_gm; + optitc[nbitc].avg_b = avg_bm; + optitc[nbitc].delt = Tppat[repref].delt_E; + lastitc = false; + } else { + optitc[nbitc].stud = studgood; + optitc[nbitc].minc = Tppat[repref].minchroma; + optitc[nbitc].titc = tempitc; + optitc[nbitc].gritc = greenitc; + optitc[nbitc].tempre = tempref; + optitc[nbitc].greenre = greenref; + optitc[nbitc].drea = dread; + optitc[nbitc].kmi = kmin; + optitc[nbitc].minhis = Tppat[repref].minhi; + optitc[nbitc].maxhis = Tppat[repref].maxhi; + optitc[nbitc].avg_r = avg_rm; + optitc[nbitc].avg_g = avg_gm; + optitc[nbitc].avg_b = avg_bm; + optitc[nbitc].delt = Tppat[repref].delt_E; + + lastitc = false; + itciterate = false; + } + + + if (optitc[1].minc > 0.f) { + choiceitc = 1; + temp0 = optitc[0].titc; + } else { + choiceitc = 0; + temp0 = 0.f; + } + }//end loop + + if (!oldsampling) { + + if (settings->verbose) { + for (int d = 0; d < 2; d++) { + printf("n=%i nbitc=%i stu=%f minc=%f tempitc=%f greenitc=%f deltaE=%f choiceitc=%i\n", d, nbitc, (double) optitc[d].stud, (double) optitc[d].minc, (double) optitc[d].titc, (double) optitc[d].gritc, (double) optitc[d].delt, choiceitc); + } + } + + if ((nbitc == 1 && choiceitc == 1) && wbpar.itcwb_alg == false && oldsampling == false) { + bia = 2; + + if ((std::max(optitc[1].stud, 0.0004f) * optitc[1].delt < std::max(optitc[0].stud, 0.0004f) * optitc[0].delt) && wbpar.itcwb_alg == false) { + bia = 3; + } else { + bia = 2; + } + + studgood = optitc[choiceitc].stud; + minchrom = optitc[choiceitc].minc; + tempitc = optitc[choiceitc].titc; + greenitc = optitc[choiceitc].gritc; + tempref = optitc[choiceitc].tempre; + greenref = optitc[choiceitc].greenre; + dread = optitc[choiceitc].drea; + kmin = optitc[choiceitc].kmi; + minhist = optitc[choiceitc].minhis; + maxhist = optitc[choiceitc].maxhis; + avg_rm = optitc[choiceitc].avg_r; + avg_gm = optitc[choiceitc].avg_g; + avg_bm = optitc[choiceitc].avg_b; + } else if (!oldsampling) { + studgood = optitc[0].stud; + minchrom = optitc[0].minc; + tempitc = optitc[0].titc; + greenitc = optitc[0].gritc; + tempref = optitc[0].tempre; + greenref = optitc[0].greenre; + dread = optitc[0].drea; + kmin = optitc[0].kmi; + minhist = optitc[0].minhis; + maxhist = optitc[0].maxhis; + avg_rm = optitc[0].avg_r; + avg_gm = optitc[0].avg_g; + avg_bm = optitc[0].avg_b; + } } } - avg_rm = 10000.f * rmm[goodref]; - avg_gm = 10000.f * gmm[goodref]; - avg_bm = 10000.f * bmm[goodref]; + t8.set(); - if (!extra) { - tempitc = Txyz[goodref].Tem; - } - - //now we have temp green and student if (settings->verbose) { - printf("ITCWB tempitc=%f gritc=%f stud=%f \n", tempitc, greenitc, studgood); + printf("Seventh: from sixth to end: %d nsec\n", t8.etime(t7)); } + } -void RawImageSource::WBauto(double & tempref, double & greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double & avg_rm, double & avg_gm, double & avg_bm, double & tempitc, double & greenitc, float & studgood, bool & twotimes, const WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const ColorManagementParams & cmp, const RAWParams & raw, const ToneCurveParams &hrp) +void RawImageSource::WBauto(bool extra, double & tempref, double & greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double & avg_rm, double & avg_gm, double & avg_bm, double & tempitc, double & greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float & studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, bool & twotimes, const WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const ColorManagementParams & cmp, const RAWParams & raw, const ToneCurveParams &hrp) { // BENCHFUN //auto white balance //put green (tint) in reasonable limits for an Daylight illuminant // avoid too bi or too low values if (wbpar.method == "autitcgreen") { - bool extra = true; + // bool extra = true; if (greenref > 0.5 && greenref < 1.3) {// 0.5 and 1.3 arbitraties values greenitc = greenref; } else { greenitc = 1.; - extra = true; + // extra = true; } tempitc = 5000.; - ItcWB(extra, tempref, greenref, tempitc, greenitc, studgood, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, cmp, raw, wbpar, hrp); + ItcWB(extra, tempref, greenref, tempitc, greenitc, temp0, delta, bia, dread, kcam, nocam, studgood, minchrom, kmin, minhist, maxhist, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, cmp, raw, wbpar, hrp); } } @@ -6092,7 +7406,9 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int //used by auto WB local to calculate red, green, blue in local region int precision = 3;//must be 3 5 or 9 - if(wbpar.itcwb_sampling == true) { + bool oldsampling = wbpar.itcwb_sampling; + + if (oldsampling == true) { precision = 5; } @@ -6163,7 +7479,7 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int } } -void RawImageSource::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 WBParams & wbpar, const ColorManagementParams & cmp, const RAWParams & raw, const ToneCurveParams &hrp) +void RawImageSource::getAutoWBMultipliersitc(bool extra, double & tempref, double & greenref, double & tempitc, double & greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, 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 WBParams & wbpar, const ColorManagementParams & cmp, const RAWParams & raw, const ToneCurveParams &hrp) { // BENCHFUN constexpr double clipHigh = 64000.0; @@ -6356,21 +7672,24 @@ void RawImageSource::getAutoWBMultipliersitc(double & tempref, double & greenref if (wbpar.method == "autitcgreen") { bool twotimes = false; int precision = 3;//must be 3 5 or 9 - if(wbpar.itcwb_sampling == true) { + bool oldsampling = wbpar.itcwb_sampling; + + if (oldsampling == true) { precision = 5; } + // bool extra = true; const int bfw = W / precision + ((W % precision) > 0 ? 1 : 0);// 5 arbitrary value can be change to 3 or 9 ; const int bfh = H / precision + ((H % precision) > 0 ? 1 : 0); - WBauto(tempref, greenref, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, tempitc, greenitc, studgood, twotimes, wbpar, begx, begy, yEn, xEn, cx, cy, cmp, raw, hrp); + WBauto(extra, tempref, greenref, redloc, greenloc, blueloc, bfw, bfh, avg_rm, avg_gm, avg_bm, tempitc, greenitc, temp0, delta, bia, dread, kcam, nocam, studgood, minchrom, kmin, minhist, maxhist, twotimes, wbpar, begx, begy, yEn, xEn, cx, cy, cmp, raw, hrp); } redloc(0, 0); greenloc(0, 0); blueloc(0, 0); - if (settings->verbose) { - printf("AVG: %g %g %g\n", avg_r / std::max(1, rn), avg_g / std::max(1, gn), avg_b / std::max(1, bn)); + if (settings->verbose && wbpar.method != "autitcgreen") { + printf("RGB grey AVG: %g %g %g\n", avg_r / std::max(1, rn), avg_g / std::max(1, gn), avg_b / std::max(1, bn)); } if (wbpar.method == "autitcgreen") { @@ -6605,7 +7924,7 @@ void RawImageSource::getAutoWBMultipliers(double &rm, double &gm, double &bm) blueAWBMul = bm = imatrices.rgb_cam[2][0] * reds + imatrices.rgb_cam[2][1] * greens + imatrices.rgb_cam[2][2] * blues; } -ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vector &green, std::vector &blue, int tran, double equal, StandardObserver observer) +ColorTemp RawImageSource::getSpotWB(std::vector &red, std::vector &green, std::vector &blue, int tran, double equal, StandardObserver observer) { int x; @@ -6618,7 +7937,7 @@ ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vector &red, std::vector 52500 || + if (initialGain * (rawData[yr][3 * xr]) > 52500 || initialGain * (rawData[yg][3 * xg + 1]) > 52500 || initialGain * (rawData[yb][3 * xb + 2]) > 52500) { continue; @@ -6677,7 +7996,7 @@ ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vector= 0 && ymin >= 0 && xmax < W && ymax < H) { - reds += (rawData[yr][3 * xr] ); + reds += (rawData[yr][3 * xr]); greens += (rawData[yg][3 * xg + 1]); blues += (rawData[yb][3 * xb + 2]); rn++; @@ -6690,7 +8009,7 @@ ColorTemp RawImageSource::getSpotWB (std::vector &red, std::vector &red, std::vector &red, std::vector &red, std::vector &red, std::vectorget_rotateDegree(); rotate %= 360; + if (rotate == 90) { - std::swap(xnew,ynew); + std::swap(xnew, ynew); ynew = H - 1 - ynew; } else if (rotate == 180) { xnew = W - 1 - xnew; ynew = H - 1 - ynew; } else if (rotate == 270) { - std::swap(xnew,ynew); + std::swap(xnew, ynew); xnew = W - 1 - xnew; } xnew = LIM(xnew, 0, W - 1); ynew = LIM(ynew, 0, H - 1); - int c = ri->getSensorType() == ST_FUJI_XTRANS ? ri->XTRANSFC(ynew,xnew) : ri->FC(ynew,xnew); + int c = ri->getSensorType() == ST_FUJI_XTRANS ? ri->XTRANSFC(ynew, xnew) : ri->FC(ynew, xnew); int val = round(rawData[ynew][xnew] / scale_mul[c]); + if (c == 0) { - R = val; G = 0; B = 0; + R = val; + G = 0; + B = 0; } else if (c == 2) { - R = 0; G = 0; B = val; + R = 0; + G = 0; + B = val; } else { - R = 0; G = val; B = 0; + R = 0; + G = val; + B = 0; } } -bool RawImageSource::isGainMapSupported() const { +bool RawImageSource::isGainMapSupported() const +{ return ri->isGainMapSupported(); } -void RawImageSource::applyDngGainMap(const float black[4], const std::vector &gainMaps) { +void RawImageSource::applyDngGainMap(const float black[4], const std::vector &gainMaps) +{ // now we can apply each gain map to raw_data array2D mvals[2][2]; + for (auto &m : gainMaps) { mvals[m.Top & 1][m.Left & 1](m.MapPointsH, m.MapPointsV, m.MapGain.data()); } // now we assume, col_scale and row scale is the same for all maps - const float col_scale = float(gainMaps[0].MapPointsH-1) / float(W); - const float row_scale = float(gainMaps[0].MapPointsV-1) / float(H); + const float col_scale = float(gainMaps[0].MapPointsH - 1) / float(W); + const float row_scale = float(gainMaps[0].MapPointsV - 1) / float(H); #ifdef _OPENMP #pragma omp parallel for schedule(dynamic, 16) #endif + for (std::size_t y = 0; y < static_cast(H); ++y) { - const float rowBlack[2] = {black[FC(y,0)], black[FC(y,1)]}; + const float rowBlack[2] = {black[FC(y, 0)], black[FC(y, 1)]}; const float ys = y * row_scale; float xs = 0.f; + for (std::size_t x = 0; x < static_cast(W); ++x, xs += col_scale) { const float f = getBilinearValue(mvals[y & 1][x & 1], xs, ys); const float b = rowBlack[x & 1]; @@ -7008,7 +8341,7 @@ void RawImageSource::applyDngGainMap(const float black[4], const std::vector &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw, const procparams::WBParams & wbpar, const procparams::ToneCurveParams &hrp); + void ItcWB(bool extra, double &tempref, double &greenref, double &tempitc, double &greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, const procparams::ColorManagementParams &cmp, const procparams::RAWParams &raw, const procparams::WBParams & wbpar, const procparams::ToneCurveParams &hrp); unsigned FC(int row, int col) const; inline void getRowStartEnd (int x, int &start, int &end); @@ -141,12 +141,12 @@ public: void processFlatField(const procparams::RAWParams &raw, const RawImage *riFlatFile, array2D &rawData, const float black[4]); void copyOriginalPixels(const procparams::RAWParams &raw, RawImage *ri, const RawImage *riDark, RawImage *riFlatFile, array2D &rawData ); void scaleColors (int winx, int winy, int winw, int winh, const procparams::RAWParams &raw, array2D &rawData); // raw for cblack - void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &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, const procparams::ToneCurveParams &hrp) 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, const procparams::ToneCurveParams &hrp) override; + void WBauto(bool extra, double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, 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, const procparams::ToneCurveParams &hrp) override; + void getAutoWBMultipliersitc(bool extra, double &tempref, double &greenref, double &tempitc, double &greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, 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, const procparams::ToneCurveParams &hrp) override; void getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, const procparams::WBParams & wbpar) override; void getWBMults (const ColorTemp &ctemp, const procparams::RAWParams &raw, std::array& scale_mul, float &autoGainComp, float &rm, float &gm, float &bm) const override; - void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hrp, const procparams::RAWParams &raw, int opposed) override; + void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hrp, const procparams::RAWParams &raw) override; eSensorType getSensorType () const override; bool isMono () const override; ColorTemp getWB () const override @@ -186,7 +186,7 @@ public: } void getAutoExpHistogram (LUTu & histogram, int& histcompr) override; void getRAWHistogram (LUTu & histRedRaw, LUTu & histGreenRaw, LUTu & histBlueRaw) override; - void getAutoMatchedToneCurve(const procparams::ColorManagementParams &cp, StandardObserver observer, std::vector &outCurve) override; + void getAutoMatchedToneCurve(const procparams::ColorManagementParams &cp, const procparams::RAWParams &rawParams, StandardObserver observer, std::vector &outCurve) override; DCPProfile *getDCP(const procparams::ColorManagementParams &cmp, DCPProfileApplyState &as) override; void convertColorSpace(Imagefloat* image, const procparams::ColorManagementParams &cmp, const ColorTemp &wb) override; @@ -232,6 +232,8 @@ public: virtual float operator()(int row) const { return 1.f; } }; + static void computeFullSize(const RawImage *ri, int tr, int &w, int &h, int border=-1); + protected: typedef unsigned short ushort; void processFalseColorCorrection(Imagefloat* i, const int steps); @@ -249,6 +251,7 @@ protected: double cared, double cablue, bool avoidColourshift, + int border, array2D &rawData, double* fitParamsTransfer, bool fitParamsIn, diff --git a/rtengine/rawmetadatalocation.h b/rtengine/rawmetadatalocation.h deleted file mode 100644 index 894bc6bd2..000000000 --- a/rtengine/rawmetadatalocation.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * 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 RawTherapee. If not, see . - */ -#pragma once - -namespace rtengine -{ - -class RawMetaDataLocation { - -public: - int exifBase; - int ciffBase; - int ciffLength; - - RawMetaDataLocation () : exifBase(-1), ciffBase(-1), ciffLength(-1) {} - explicit RawMetaDataLocation (int exifBase) : exifBase(exifBase), ciffBase(-1), ciffLength(-1) {} - RawMetaDataLocation (int ciffBase, int ciffLength) : exifBase(-1), ciffBase(ciffBase), ciffLength(ciffLength) {} - RawMetaDataLocation (int exifBase, int ciffBase, int ciffLength) : exifBase(exifBase), ciffBase(ciffBase), ciffLength(ciffLength) {} -}; - -} diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index eb4a3f888..c589e8ba4 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -64,9 +64,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = { DARKFRAME, // EvLCPUseVign, HDR, // EvLCPUseCA, M_VOID, // EvFixedExp - ALLNORAW, // EvWBMethod, - ALLNORAW, // EvWBTemp, - ALLNORAW, // EvWBGreen, + WB, // EvWBMethod, + WB, // EvWBTemp, + WB, // EvWBGreen, AUTOEXP, // EvToneCurveMode1, AUTOEXP, // EvToneCurve2, AUTOEXP, // EvToneCurveMode2, @@ -234,7 +234,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, // EvCATbadpix LUMINANCECURVE, // EvCATAutoadap DEFRINGE, // EvPFCurve - ALLNORAW, // EvWBequal + WB, // EvWBequal 0, // EvWBequalbo : obsolete HDR, // EvGradientDegree HDR, // EvGradientEnabled @@ -470,7 +470,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = { RETINEX, // EvRetinexgaintransmission RETINEX, // EvLskal OUTPUTPROFILE, // EvOBPCompens - ALLNORAW, // EvWBtempBias + WB, // EvWBtempBias DARKFRAME, // EvRawImageNum 0, // unused 0, // unused @@ -517,7 +517,7 @@ int refreshmap[rtengine::NUMOFEVENTS] = { ALLNORAW, // EvTMFattalEnabled HDR, // EvTMFattalThreshold HDR, // EvTMFattalAmount - ALLNORAW, // EvWBEnabled + WB, // EvWBEnabled AUTOEXP, // EvRGBEnabled LUMINANCECURVE, // EvLEnabled DEMOSAIC, // EvPdShrEnabled diff --git a/rtengine/refreshmap.h b/rtengine/refreshmap.h index b53252796..7113ba6a5 100644 --- a/rtengine/refreshmap.h +++ b/rtengine/refreshmap.h @@ -23,17 +23,18 @@ #include "procevents.h" // Use M_VOID if you wish to update the proc params without updating the preview at all ! -#define M_VOID (1<<17) +#define M_VOID (1<<20) // Use M_MINUPDATE if you wish to update the preview without modifying the image (think about it like a "refreshPreview") // Must NOT be used with other event (i.e. will be used for MINUPDATE only) -#define M_MINUPDATE (1<<16) +#define M_MINUPDATE (1<<19) // Force high quality -#define M_HIGHQUAL (1<<15) +#define M_HIGHQUAL (1<<18) // Elementary functions that can be done to // the preview image when an event occurs -#define M_SPOT (1<<19) -#define M_CSHARP (1<<18) +#define M_WB (1<<17) +#define M_SPOT (1<<16) +#define M_CSHARP (1<<15) #define M_MONITOR (1<<14) #define M_RETINEX (1<<13) #define M_CROP (1<<12) @@ -57,6 +58,7 @@ #define DARKFRAME (M_PREPROC|M_RAW|M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) #define FLATFIELD (M_PREPROC|M_RAW|M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) #define DEMOSAIC (M_RAW|M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) +#define WB (M_WB|M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) #define ALLNORAW (M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) #define CAPTURESHARPEN (M_INIT|M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR|M_CSHARP) #define HDR (M_SPOT|M_LINDENOISE|M_HDR|M_TRANSFORM|M_BLURMAP|M_AUTOEXP|M_RGBCURVE|M_LUMACURVE|M_LUMINANCE|M_COLOR) diff --git a/rtengine/rtengine.h b/rtengine/rtengine.h index 1d7994ace..ba4d2ed60 100644 --- a/rtengine/rtengine.h +++ b/rtengine/rtengine.h @@ -1,4 +1,5 @@ -/* +/* -*- C++ -*- + * * This file is part of RawTherapee. * * Copyright (c) 2004-2010 Gabor Horvath @@ -30,7 +31,6 @@ #include "iimage.h" #include "imageformat.h" #include "procevents.h" -#include "rawmetadatalocation.h" #include "settings.h" #include "../rtgui/threadutils.h" @@ -51,12 +51,6 @@ class LUT; using LUTu = LUT; class EditDataProvider; -namespace rtexif -{ - -class TagDirectory; - -} namespace rtengine { @@ -91,78 +85,56 @@ class FramesMetaData { public: - /** @return Returns the number of root Metadata */ - virtual unsigned int getRootCount () const = 0; /** @return Returns the number of frame contained in the file based on Metadata */ - virtual unsigned int getFrameCount () const = 0; + virtual unsigned int getFrameCount() const = 0; /** Checks the availability of exif metadata tags. * @return Returns true if image contains exif metadata tags */ - virtual bool hasExif (unsigned int frame = 0) const = 0; - /** Returns the directory of exif metadata tags. - * @param root root number in the metadata tree - * @return The directory of exif metadata tags */ - virtual rtexif::TagDirectory* getRootExifData (unsigned int root = 0) const = 0; - /** Returns the directory of exif metadata tags. - * @param frame frame number in the metadata tree - * @return The directory of exif metadata tags */ - virtual rtexif::TagDirectory* getFrameExifData (unsigned int frame = 0) const = 0; - /** Returns the directory of exif metadata tags containing at least the 'Make' tag for the requested frame. - * If no usable metadata exist in the frame, send back the best TagDirectory describing the frame content. - * @param imgSource rawimage that we want the metadata from - * @param rawParams RawParams to select the frame number - * @return The directory of exif metadata tags containing at least the 'Make' tag */ - virtual rtexif::TagDirectory* getBestExifData (ImageSource *imgSource, procparams::RAWParams *rawParams) const = 0; - /** Checks the availability of IPTC tags. - * @return Returns true if image contains IPTC tags */ - virtual bool hasIPTC (unsigned int frame = 0) const = 0; - /** Returns the directory of IPTC tags. - * @return The directory of IPTC tags */ - virtual procparams::IPTCPairs getIPTCData (unsigned int frame = 0) const = 0; + virtual bool hasExif() const = 0; /** @return a struct containing the date and time of the image */ - virtual tm getDateTime (unsigned int frame = 0) const = 0; + virtual tm getDateTime() const = 0; /** @return a timestamp containing the date and time of the image */ - virtual time_t getDateTimeAsTS(unsigned int frame = 0) const = 0; + virtual time_t getDateTimeAsTS() const = 0; /** @return the ISO of the image */ - virtual int getISOSpeed (unsigned int frame = 0) const = 0; + virtual int getISOSpeed() const = 0; /** @return the F number of the image */ - virtual double getFNumber (unsigned int frame = 0) const = 0; + virtual double getFNumber() const = 0; /** @return the focal length used at the exposure */ - virtual double getFocalLen (unsigned int frame = 0) const = 0; + virtual double getFocalLen() const = 0; /** @return the focal length in 35mm used at the exposure */ - virtual double getFocalLen35mm (unsigned int frame = 0) const = 0; + virtual double getFocalLen35mm() const = 0; /** @return the focus distance in meters, 0=unknown, 10000=infinity */ - virtual float getFocusDist (unsigned int frame = 0) const = 0; + virtual float getFocusDist() const = 0; /** @return the shutter speed */ - virtual double getShutterSpeed (unsigned int frame = 0) const = 0; + virtual double getShutterSpeed() const = 0; /** @return the exposure compensation */ - virtual double getExpComp (unsigned int frame = 0) const = 0; + virtual double getExpComp() const = 0; /** @return the maker of the camera */ - virtual std::string getMake (unsigned int frame = 0) const = 0; + virtual std::string getMake() const = 0; /** @return the model of the camera */ - virtual std::string getModel (unsigned int frame = 0) const = 0; + virtual std::string getModel() const = 0; - std::string getCamera (unsigned int frame = 0) const + std::string getCamera() const { - return getMake(frame) + " " + getModel(frame); + return getMake() + " " + getModel(); } /** @return the lens on the camera */ - virtual std::string getLens (unsigned int frame = 0) const = 0; + virtual std::string getLens() const = 0; /** @return the orientation of the image */ - virtual std::string getOrientation (unsigned int frame = 0) const = 0; + virtual std::string getOrientation() const = 0; /** @return the rating of the image */ - virtual int getRating (unsigned int frame = 0) const = 0; + virtual int getRating() const = 0; /** @return true if the file is a PixelShift shot (Pentax and Sony bodies) */ virtual bool getPixelShift () const = 0; /** @return false: not an HDR file ; true: single or multi-frame HDR file (e.g. Pentax HDR raw file or 32 bit float DNG file or Log compressed) */ - virtual bool getHDR (unsigned int frame = 0) const = 0; + virtual bool getHDR() const = 0; /** @return false: not an HDR file ; true: single or multi-frame HDR file (e.g. Pentax HDR raw file or 32 bit float DNG file or Log compressed) */ - virtual std::string getImageType (unsigned int frame) const = 0; + virtual std::string getImageType() const = 0; /** @return the sample format based on MetaData */ - virtual IIOSampleFormat getSampleFormat (unsigned int frame = 0) const = 0; + virtual IIOSampleFormat getSampleFormat() const = 0; /** Functions to convert between floating point and string representation of shutter and aperture */ static std::string apertureToString (double aperture); @@ -183,7 +155,10 @@ public: * Use it only for raw files. In caseof jpgs and tiffs pass a NULL pointer. * @param firstFrameOnly must be true to get the MetaData of the first frame only, e.g. for a PixelShift file. * @return The metadata */ - static FramesMetaData* fromFile (const Glib::ustring& fname, std::unique_ptr rml, bool firstFrameOnly = false); + static FramesMetaData* fromFile(const Glib::ustring& fname); + + virtual Glib::ustring getFileName() const = 0; + virtual void getDimensions(int &w, int &h) const = 0; }; /** This listener interface is used to indicate the progress of time consuming operations */ @@ -398,7 +373,7 @@ public : virtual void adapCamChanged(double cadap) = 0; virtual void ybCamChanged(int yb) = 0; virtual void wbCamChanged(double tem, double tin) = 0; - + }; class AutoChromaListener @@ -484,7 +459,7 @@ class AutoWBListener { public: virtual ~AutoWBListener() = default; - virtual void WBChanged(double temp, double green, double rw, double gw, double bw, float studgood) = 0; + virtual void WBChanged(int met, double temp, double green, double rw, double gw, double bw, float temp0, float delta, int bia, int dread, float studgood, float minchrom, int kmin, float histmin, float histmax) = 0; }; class FrameCountListener @@ -635,7 +610,7 @@ public: virtual void getCamWB (double& temp, double& green, StandardObserver observer) = 0; virtual void getSpotWB (int x, int y, int rectSize, double& temp, double& green) = 0; virtual bool getFilmNegativeSpot(int x, int y, int spotSize, procparams::FilmNegativeParams::RGB &refInput, procparams::FilmNegativeParams::RGB &refOutput) = 0; - + virtual void getAutoCrop (double ratio, int &x, int &y, int &w, int &h) = 0; virtual void saveInputICCReference (const Glib::ustring& fname, bool apply_wb) = 0; diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index 11dae8018..bc832661a 100644 --- a/rtengine/rtthumbnail.cc +++ b/rtengine/rtthumbnail.cc @@ -16,6 +16,8 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ +#include +#include #include #include @@ -65,6 +67,84 @@ bool checkRawImageThumb (const rtengine::RawImage& raw_image) return raw_image.get_thumbOffset() + length <= raw_image.get_file()->size; } +/** + * Apply the black level adjustments in the processing parameters. + * + * @param cblack The original black levels that will be modified. + * @param sensorType Sensor type. + * @param rawParams Subset of processing parameters for raw data. + */ +void adjustBlackLevels(float cblack[4], rtengine::eSensorType sensorType, const rtengine::RAWParams *rawParams) +{ + if (!rawParams) { + return; + } + + std::array black_adjust{0.f, 0.f, 0.f, 0.f}; + + switch (sensorType) { + case rtengine::eSensorType::ST_BAYER: + case rtengine::eSensorType::ST_FOVEON: + black_adjust[0] = static_cast(rawParams->bayersensor.black1); // R + black_adjust[1] = static_cast(rawParams->bayersensor.black0); // G1 + black_adjust[2] = static_cast(rawParams->bayersensor.black2); // B + black_adjust[3] = static_cast(rawParams->bayersensor.black3); // G2 + break; + case rtengine::eSensorType::ST_FUJI_XTRANS: + black_adjust[0] = static_cast(rawParams->xtranssensor.blackred); + black_adjust[1] = static_cast(rawParams->xtranssensor.blackgreen); + black_adjust[2] = static_cast(rawParams->xtranssensor.blackblue); + black_adjust[3] = static_cast(rawParams->xtranssensor.blackgreen); + break; + case rtengine::eSensorType::ST_NONE: + break; + } + + for (int i = 0; i < black_adjust.size(); i++) { + cblack[i] = std::max(0.f, cblack[i] + black_adjust[i]); + } +} + +/** + * Calculate the new scale multipliers based on new black levels. + * + * @param scale_mul The original scale multipliers to be adjusted. + * @param pre_mul Pre-multipliers. + * @param c_black Updated black levels. + * @param isMono Is the image using mono demosaicing? + * @param ri Pointer to the raw image. + */ +void calculate_scale_mul(float scale_mul[4], const float pre_mul_[4], const float c_black[4], bool isMono, const rtengine::RawImage *ri) +{ + std::array c_white; + + for (int i = 0; i < c_white.size(); ++i) { + c_white[i] = static_cast(ri->get_white(i)); + } + + if (isMono || ri->get_colors() == 1) { + for (int c = 0; c < 4; c++) { + scale_mul[c] = 65535.f / (c_white[c] - c_black[c]); + } + } else { + std::array pre_mul; + + for (int c = 0; c < 4; c++) { + pre_mul[c] = pre_mul_[c]; + } + + if (pre_mul[3] == 0) { + pre_mul[3] = pre_mul[1]; // G2 == G1 + } + + float maxpremul = std::max(std::max(std::max(pre_mul[0], pre_mul[1]), pre_mul[2]), pre_mul[3]); + + for (int c = 0; c < 4; c++) { + scale_mul[c] = (pre_mul[c] / maxpremul) * 65535.f / (c_white[c] - c_black[c]); + } + } +} + void scale_colors (rtengine::RawImage *ri, float scale_mul[4], float cblack[4], bool multiThread) { @@ -324,10 +404,10 @@ Thumbnail* Thumbnail::loadFromImage (const Glib::ustring& fname, int &w, int &h, namespace { -Image8 *load_inspector_mode(const Glib::ustring &fname, RawMetaDataLocation &rml, eSensorType &sensorType, int &w, int &h) +Image8 *load_inspector_mode(const Glib::ustring &fname, eSensorType &sensorType, int &w, int &h) { BENCHFUN - + RawImageSource src; int err = src.load(fname, true); if (err) { @@ -336,7 +416,7 @@ Image8 *load_inspector_mode(const Glib::ustring &fname, RawMetaDataLocation &rml src.getFullSize(w, h); sensorType = src.getSensorType(); - + ProcParams neutral; neutral.raw.bayersensor.method = RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::FAST); neutral.raw.xtranssensor.method = RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::FAST); @@ -350,7 +430,7 @@ Image8 *load_inspector_mode(const Glib::ustring &fname, RawMetaDataLocation &rml PreviewProps pp(0, 0, w, h, 1); Imagefloat tmp(w, h); - src.getImage(src.getWB(), TR_NONE, &tmp, pp, neutral.toneCurve, neutral.raw, 0); + src.getImage(src.getWB(), TR_NONE, &tmp, pp, neutral.toneCurve, neutral.raw); src.convertColorSpace(&tmp, neutral.icm, src.getWB()); Image8 *img = new Image8(w, h); @@ -380,7 +460,7 @@ Image8 *load_inspector_mode(const Glib::ustring &fname, RawMetaDataLocation &rml } // namespace -Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, RawMetaDataLocation& rml, eSensorType &sensorType, int &w, int &h, int fixwh, bool rotate, bool inspectorMode, bool forHistogramMatching) +Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, eSensorType &sensorType, int &w, int &h, int fixwh, bool rotate, bool inspectorMode, bool forHistogramMatching) { Thumbnail* tpp = new Thumbnail (); tpp->isRaw = 1; @@ -390,7 +470,7 @@ Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, RawMetaDataL tpp->colorMatrix[2][2] = 1.0; if (inspectorMode && !forHistogramMatching && settings->thumbnail_inspector_mode == Settings::ThumbnailInspectorMode::RAW) { - Image8 *img = load_inspector_mode(fname, rml, sensorType, w, h); + Image8 *img = load_inspector_mode(fname, sensorType, w, h); if (!img) { delete tpp; return nullptr; @@ -401,7 +481,7 @@ Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, RawMetaDataL return tpp; } - + RawImage *ri = new RawImage (fname); unsigned int imageNum = 0; int r = ri->loadRaw (false, imageNum, false); @@ -415,10 +495,6 @@ Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, RawMetaDataL sensorType = ri->getSensorType(); - rml.exifBase = ri->get_exifBase(); - rml.ciffBase = ri->get_ciffBase(); - rml.ciffLength = ri->get_ciffLen(); - Image8* img = new Image8 (); // No sample format detection occurred earlier, so we set them here, // as they are mandatory for the setScanline method @@ -458,8 +534,8 @@ Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, RawMetaDataL if (!forHistogramMatching && settings->thumbnail_inspector_mode == Settings::ThumbnailInspectorMode::RAW_IF_NOT_JPEG_FULLSIZE && float(std::max(w, h))/float(std::max(ri->get_width(), ri->get_height())) < 0.9f) { delete img; delete ri; - - img = load_inspector_mode(fname, rml, sensorType, w, h); + + img = load_inspector_mode(fname, sensorType, w, h); if (!img) { delete tpp; return nullptr; @@ -467,7 +543,7 @@ Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, RawMetaDataL tpp->scale = 1.; tpp->thumbImg = img; - + return tpp; } } else { @@ -523,28 +599,7 @@ Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, RawMetaDataL #define FISGREEN(filter,row,col) \ ((filter >> ((((row) << 1 & 14) + ((col) & 1)) << 1) & 3)==1 || !filter) -RawMetaDataLocation Thumbnail::loadMetaDataFromRaw (const Glib::ustring& fname) -{ - RawMetaDataLocation rml; - rml.exifBase = -1; - rml.ciffBase = -1; - rml.ciffLength = -1; - - RawImage ri (fname); - unsigned int imageNum = 0; - - int r = ri.loadRaw (false, imageNum); - - if ( !r ) { - rml.exifBase = ri.get_exifBase(); - rml.ciffBase = ri.get_ciffBase(); - rml.ciffLength = ri.get_ciffLen(); - } - - return rml; -} - -Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, RawMetaDataLocation& rml, eSensorType &sensorType, int &w, int &h, int fixwh, double wbEq, StandardObserver wbObserver, bool rotate, bool forHistogramMatching) +Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, eSensorType &sensorType, int &w, int &h, int fixwh, double wbEq, StandardObserver wbObserver, bool rotate, const RAWParams *rawParams, bool forHistogramMatching) { RawImage *ri = new RawImage (fname); unsigned int tempImageNum = 0; @@ -587,16 +642,20 @@ Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, RawMetaDataLocati tpp->greenMultiplier = ri->get_pre_mul (1); tpp->blueMultiplier = ri->get_pre_mul (2); + bool isMono = + rawParams && + ((ri->getSensorType() == ST_FUJI_XTRANS && + rawParams->xtranssensor.method == RAWParams::XTransSensor::getMethodString(RAWParams::XTransSensor::Method::MONO)) || + (ri->getSensorType() == ST_BAYER && + rawParams->bayersensor.method == RAWParams::BayerSensor::getMethodString(RAWParams::BayerSensor::Method::MONO))); float pre_mul[4], scale_mul[4], cblack[4]; ri->get_colorsCoeff (pre_mul, scale_mul, cblack, false); + adjustBlackLevels(cblack, sensorType, rawParams); + calculate_scale_mul(scale_mul, pre_mul, cblack, isMono, ri); scale_colors (ri, scale_mul, cblack, forHistogramMatching); // enable multithreading when forHistogramMatching is true ri->pre_interpolate(); - rml.exifBase = ri->get_exifBase(); - rml.ciffBase = ri->get_ciffBase(); - rml.ciffLength = ri->get_ciffLen(); - tpp->camwbRed = tpp->redMultiplier / pre_mul[0]; //ri->get_pre_mul(0); tpp->camwbGreen = tpp->greenMultiplier / pre_mul[1]; //ri->get_pre_mul(1); tpp->camwbBlue = tpp->blueMultiplier / pre_mul[2]; //ri->get_pre_mul(2); @@ -999,6 +1058,9 @@ Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, RawMetaDataLocati } tpp->init(); + + RawImageSource::computeFullSize(ri, TR_NONE, tpp->full_width, tpp->full_height); + delete ri; return tpp; } @@ -1056,7 +1118,9 @@ Thumbnail::Thumbnail () : gammaCorrected (false), colorMatrix{}, scaleGain (1.0), - isRaw (true) + isRaw (true), + full_width(-1), + full_height(-1) { } @@ -1109,20 +1173,12 @@ IImage8* Thumbnail::quickProcessImage (const procparams::ProcParams& params, int // Full thumbnail processing, second stage if complete profile exists IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorType sensorType, int rheight, TypeInterpolation interp, const FramesMetaData *metadata, double& myscale, bool forMonitor, bool forHistogramMatching) { - unsigned int imgNum = 0; - if (isRaw) { - if (sensorType == ST_BAYER) { - imgNum = rtengine::LIM(params.raw.bayersensor.imageNum, 0, metadata->getFrameCount() - 1); - } else if (sensorType == ST_FUJI_XTRANS) { - //imgNum = rtengine::LIM(params.raw.xtranssensor.imageNum, 0, metadata->getFrameCount() - 1) - } - } - std::string camName = metadata->getCamera(imgNum); - float shutter = metadata->getShutterSpeed(imgNum); - float fnumber = metadata->getFNumber(imgNum); - float iso = metadata->getISOSpeed(imgNum); - float fcomp = metadata->getExpComp(imgNum); - + const std::string camName = metadata->getCamera(); + const float shutter = metadata->getShutterSpeed(); + const float fnumber = metadata->getFNumber(); + const float iso = metadata->getISOSpeed(); + const float fcomp = metadata->getExpComp(); + // check if the WB's equalizer, temperature bias, or observer value has changed if (wbEqual < (params.wb.equal - 5e-4) || wbEqual > (params.wb.equal + 5e-4) || wbTempBias < (params.wb.tempBias - 5e-4) || wbTempBias > (params.wb.tempBias + 5e-4) || wbObserver != params.wb.observer) { wbEqual = params.wb.equal; @@ -1229,7 +1285,7 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT float red = baseImg->r (i, j) * rmi; float green = baseImg->g (i, j) * gmi; float blue = baseImg->b (i, j) * bmi; - + // avoid magenta highlights if highlight recovery is enabled if (params.toneCurve.hrenabled && red > MAXVALF && blue > MAXVALF) { baseImg->r(i, j) = baseImg->g(i, j) = baseImg->b(i, j) = CLIP((red + green + blue) / 3.f); @@ -1276,7 +1332,7 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT ipf.dehaze(baseImg, params.dehaze); ipf.ToneMapFattal02(baseImg, params.fattal, 3, 0, nullptr, 0, 0, 0); - + // perform transform int origFW; int origFH; @@ -1427,7 +1483,7 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT } } - + // luminance processing // ipf.EPDToneMap(labView,0,6); @@ -1466,6 +1522,50 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, eSensorT ipf.softLight(labView, params.softlight); + if (params.icm.workingTRC != ColorManagementParams::WorkingTrc::NONE) { + const int GW = labView->W; + const int GH = labView->H; + std::unique_ptr provis; + const float pres = 0.01f * params.icm.preser; + if (pres > 0.f && params.icm.wprim != ColorManagementParams::Primaries::DEFAULT) { + provis.reset(new LabImage(GW, GH)); + provis->CopyFrom(labView); + } + + const std::unique_ptr tmpImage1(new Imagefloat(GW, GH)); + + ipf.lab2rgb(*labView, *tmpImage1, params.icm.workingProfile); + + const float gamtone = params.icm.workingTRCGamma; + const float slotone = params.icm.workingTRCSlope; + + int illum = toUnderlying(params.icm.will); + const int prim = toUnderlying(params.icm.wprim); + + Glib::ustring prof = params.icm.workingProfile; + + cmsHTRANSFORM dummy = nullptr; + int ill = 0; + ipf.workingtrc(tmpImage1.get(), tmpImage1.get(), GW, GH, -5, prof, 2.4, 12.92310, ill, 0, dummy, true, false, false); + ipf.workingtrc(tmpImage1.get(), tmpImage1.get(), GW, GH, 5, prof, gamtone, slotone, illum, prim, dummy, false, true, true); + + ipf.rgb2lab(*tmpImage1, *labView, params.icm.workingProfile); + // labView and provis + if(provis) { + ipf.preserv(labView, provis.get(), GW, GH); + } + if(params.icm.fbw) { +#ifdef _OPENMP + #pragma omp parallel for +#endif + for (int x = 0; x < GH; x++) + for (int y = 0; y < GW; y++) { + labView->a[x][y] = 0.f; + labView->b[x][y] = 0.f; + } + } + + } if (params.colorappearance.enabled) { CurveFactory::curveLightBrightColor ( @@ -2171,7 +2271,7 @@ bool Thumbnail::readData (const Glib::ustring& fname) colorMatrix[i][j] = cm[ix++]; } } - + if (keyFile.has_key ("LiveThumbData", "ScaleGain")) { scaleGain = keyFile.get_double ("LiveThumbData", "ScaleGain"); } diff --git a/rtengine/rtthumbnail.h b/rtengine/rtthumbnail.h index 535613ca2..d9a637e2d 100644 --- a/rtengine/rtthumbnail.h +++ b/rtengine/rtthumbnail.h @@ -24,7 +24,6 @@ #include "image8.h" #include "imagefloat.h" #include "LUT.h" -#include "rawmetadatalocation.h" #include "../rtgui/threadutils.h" @@ -86,6 +85,8 @@ class Thumbnail public: bool isRaw; + int full_width; + int full_height; ~Thumbnail (); Thumbnail (); @@ -97,10 +98,9 @@ public: int getImageWidth (const procparams::ProcParams& pparams, int rheight, float &ratio); void getDimensions (int& w, int& h, double& scaleFac); - static Thumbnail* loadQuickFromRaw (const Glib::ustring& fname, rtengine::RawMetaDataLocation& rml, eSensorType &sensorType, int &w, int &h, int fixwh, bool rotate, bool inspectorMode = false, bool forHistogramMatching = false); - static Thumbnail* loadFromRaw (const Glib::ustring& fname, RawMetaDataLocation& rml, eSensorType &sensorType, int &w, int &h, int fixwh, double wbEq, StandardObserver wbObserver, bool rotate, bool forHistogramMatching = false); + static Thumbnail* loadQuickFromRaw (const Glib::ustring& fname, eSensorType &sensorType, int &w, int &h, int fixwh, bool rotate, bool inspectorMode = false, bool forHistogramMatching = false); + static Thumbnail* loadFromRaw (const Glib::ustring& fname, eSensorType &sensorType, int &w, int &h, int fixwh, double wbEq, StandardObserver wbObserver, bool rotate, const RAWParams *rawParams, bool forHistogramMatching=false); static Thumbnail* loadFromImage (const Glib::ustring& fname, int &w, int &h, int fixwh, double wbEq, StandardObserver wbObserver, bool inspectorMode = false); - static RawMetaDataLocation loadMetaDataFromRaw (const Glib::ustring& fname); void getCamWB (double& temp, double& green, StandardObserver observer); void getAutoWB (double& temp, double& green, double equal, double tempBias, StandardObserver observer); diff --git a/rtengine/settings.h b/rtengine/settings.h index c920a355d..fbbb51bbb 100644 --- a/rtengine/settings.h +++ b/rtengine/settings.h @@ -1,4 +1,5 @@ -/* +/* -*- C++ -*- + * * This file is part of RawTherapee. * * Copyright (c) 2004-2010 Gabor Horvath @@ -8,7 +9,7 @@ * 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, -itcw * + * * 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. @@ -60,6 +61,7 @@ public: Glib::ustring srgb; // filename of sRGB profile (default to the bundled one) Glib::ustring rec2020; // filename of Rec2020 profile (default to the bundled one) Glib::ustring ACESp0; // filename of ACES P0 profile (default to the bundled one) + Glib::ustring JDCmax; // filename of JDCmax profile (default to the bundled one) Glib::ustring ACESp1; // filename of ACES P1 profile (default to the bundled one) Glib::ustring DCIP3; // filename of DCIP3 profile (default to the bundled one) @@ -95,6 +97,9 @@ public: double cbdlsensi; // bool showtooltip; bool itcwb_enable; + double itcwb_deltaspec; + double itcwb_powponder; + //wavelet levels double edghi; double edglo; @@ -108,6 +113,19 @@ public: }; ThumbnailInspectorMode thumbnail_inspector_mode; + enum class XmpSidecarStyle { + STD, // FILENAME.xmp for FILENAME.ext + EXT // FILENAME.ext.xmp for FILENAME.ext + }; + XmpSidecarStyle xmp_sidecar_style; + + enum class MetadataXmpSync { + NONE, + READ, + READ_WRITE + }; + MetadataXmpSync metadata_xmp_sync; + /** Creates a new instance of Settings. * @return a pointer to the new Settings instance. */ static Settings* create(); diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 96cd68d43..2484eb554 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -32,6 +32,7 @@ #include "imagesource.h" #include "improcfun.h" #include "labimage.h" +#include "metadata.h" #include "mytime.h" #include "processingjob.h" #include "procparams.h" @@ -372,7 +373,7 @@ private: int beg_tileW = wcr * tileWskip + tileWskip / 2.f - crW / 2.f; int beg_tileH = hcr * tileHskip + tileHskip / 2.f - crH / 2.f; PreviewProps ppP(beg_tileW, beg_tileH, crW, crH, skipP); - imgsrc->getImage(currWB, tr, origCropPart, ppP, params.toneCurve, params.raw, 0); + imgsrc->getImage(currWB, tr, origCropPart, ppP, params.toneCurve, params.raw); //baseImg->getStdImage(currWB, tr, origCropPart, ppP, true, params.toneCurve); // we only need image reduced to 1/4 here @@ -596,7 +597,7 @@ private: for (int wcr = 0; wcr <= 2; wcr++) { for (int hcr = 0; hcr <= 2; hcr++) { PreviewProps ppP(coordW[wcr], coordH[hcr], crW, crH, 1); - imgsrc->getImage(currWB, tr, origCropPart, ppP, params.toneCurve, params.raw, 0); + imgsrc->getImage(currWB, tr, origCropPart, ppP, params.toneCurve, params.raw); //baseImg->getStdImage(currWB, tr, origCropPart, ppP, true, params.toneCurve); @@ -756,7 +757,7 @@ private: } baseImg = new Imagefloat(fw, fh); - imgsrc->getImage(currWB, tr, baseImg, pp, params.toneCurve, params.raw, 1); + imgsrc->getImage(currWB, tr, baseImg, pp, params.toneCurve, params.raw); if (pl) { pl->setProgress(0.50); @@ -781,7 +782,7 @@ private: if (params.toneCurve.histmatching) { if (!params.toneCurve.fromHistMatching) { - imgsrc->getAutoMatchedToneCurve(params.icm, params.wb.observer, params.toneCurve.curve); + imgsrc->getAutoMatchedToneCurve(params.icm, params.raw, params.wb.observer, params.toneCurve.curve); } if (params.toneCurve.autoexp) { @@ -928,7 +929,7 @@ private: if(params.locallab.spots.at(sp).expsharp && params.dirpyrequalizer.cbdlMethod == "bef") { if(params.locallab.spots.at(sp).shardamping < 1) { params.locallab.spots.at(sp).shardamping = 1; - } + } } } @@ -947,10 +948,10 @@ private: if (params.locallab.enabled && params.locallab.spots.size() > 0) { ipf.rgb2lab(*baseImg, *labView, params.icm.workingProfile); - + MyTime t1, t2; t1.set(); - + const std::unique_ptr reservView(new LabImage(*labView, true)); const std::unique_ptr lastorigView(new LabImage(*labView, true)); std::unique_ptr savenormtmView; @@ -1002,7 +1003,7 @@ private: LocLLmaskCurve locllmas_Curve; LocHHmaskCurve lochhmas_Curve; LocHHmaskCurve lochhhmas_Curve; - + LocwavCurve loclmasCurveblwav; LocwavCurve loclmasCurvecolwav; LocwavCurve loclmasCurve_wav; @@ -1094,7 +1095,7 @@ private: const bool lcmascieutili = locccmascieCurve.Set(params.locallab.spots.at(sp).CCmaskciecurve); const bool llmascieutili = locllmascieCurve.Set(params.locallab.spots.at(sp).LLmaskciecurve); const bool lhmascieutili = lochhmascieCurve.Set(params.locallab.spots.at(sp).HHmaskciecurve); - + const bool lcmas_utili = locccmas_Curve.Set(params.locallab.spots.at(sp).CCmask_curve); const bool llmas_utili = locllmas_Curve.Set(params.locallab.spots.at(sp).LLmask_curve); const bool lhmas_utili = lochhmas_Curve.Set(params.locallab.spots.at(sp).HHmask_curve); @@ -1158,7 +1159,7 @@ private: float meanretie; float stdretie; float fab = 1.f; - + if (params.locallab.spots.at(sp).spotMethod == "exc") { ipf.calc_ref(sp, reservView.get(), reservView.get(), 0, 0, fw, fh, 1, huerefblu, chromarefblu, lumarefblu, huere, chromare, lumare, sobelre, avge, locwavCurveden, locwavdenutili); } else { @@ -1185,8 +1186,8 @@ private: float Lnresi46 = 0.f; // No Locallab mask is shown in exported picture - ipf.Lab_Local(2, sp, shbuffer, labView, labView, reservView.get(), savenormtmView.get(), savenormretiView.get(), lastorigView.get(), fw, fh, 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve, - lllocalcurve, locallutili, + ipf.Lab_Local(2, sp, shbuffer, labView, labView, reservView.get(), savenormtmView.get(), savenormretiView.get(), lastorigView.get(), fw, fh, 0, 0, fw, fh, 1, locRETgainCurve, locRETtransCurve, + lllocalcurve, locallutili, cllocalcurve, localclutili, lclocalcurve, locallcutili, loclhCurve, lochhCurve, locchCurve, @@ -1203,12 +1204,12 @@ private: lmaskloglocalcurve, localmasklogutili, lmasklocal_curve, localmask_utili, lmaskcielocalcurve, localmaskcieutili, - cielocalcurve, localcieutili, - cielocalcurve2, localcieutili2, - jzlocalcurve, localjzutili, - czlocalcurve, localczutili, - czjzlocalcurve, localczjzutili, - + cielocalcurve, localcieutili, + cielocalcurve2, localcieutili2, + jzlocalcurve, localjzutili, + czlocalcurve, localczutili, + czjzlocalcurve, localczjzutili, + locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, lochhhmasCurve, lhhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, locccmasSHCurve, lcmasSHutili, locllmasSHCurve, llmasSHutili, lochhmasSHCurve, lhmasSHutili, locccmasvibCurve, lcmasvibutili, locllmasvibCurve, llmasvibutili, lochhmasvibCurve, lhmasvibutili, @@ -1476,8 +1477,8 @@ private: bool proedge = WaveParams.expedge; bool profin = WaveParams.expfinal; bool proton = WaveParams.exptoning; - bool pronois = WaveParams.expnoise; - + bool pronois = WaveParams.expnoise; + /* if(WaveParams.showmask) { WaveParams.showmask = false; @@ -1504,7 +1505,7 @@ private: WaveParams.expedge = false; WaveParams.expfinal = false; WaveParams.exptoning = false; - WaveParams.expnoise = false; + WaveParams.expnoise = false; } ipf.ip_wavelet(labView, labView, 2, WaveParams, wavCLVCurve, wavdenoise, wavdenoiseh, wavblcurve, waOpacityCurveRG, waOpacityCurveSH, waOpacityCurveBY, waOpacityCurveW, waOpacityCurveWL, wavclCurve, 1); @@ -1516,7 +1517,7 @@ private: WaveParams.expfinal = profin; WaveParams.exptoning = proton; WaveParams.expnoise = pronois; - + if (WaveParams.softrad > 0.f) { array2D ble(fw, fh); array2D guid(fw, fh); @@ -1571,7 +1572,7 @@ private: } delete tmpImage; } - + } if ((WaveParams.ushamethod == "sharp" || WaveParams.ushamethod == "clari") && WaveParams.expclari && WaveParams.CLmethod != "all") { @@ -1661,7 +1662,7 @@ private: labView->b[x][y] = 0.f; } } - + } //Colorappearance and tone-mapping associated @@ -1688,18 +1689,11 @@ private: if (params.colorappearance.enabled) { double adap; - int imgNum = 0; - if (imgsrc->getSensorType() == ST_BAYER) { - imgNum = params.raw.bayersensor.imageNum; - } else if (imgsrc->getSensorType() == ST_FUJI_XTRANS) { - //imgNum = params.raw.xtranssensor.imageNum; - } - - float fnum = imgsrc->getMetaData()->getFNumber(imgNum); // F number - float fiso = imgsrc->getMetaData()->getISOSpeed(imgNum) ; // ISO - float fspeed = imgsrc->getMetaData()->getShutterSpeed(imgNum) ; //speed - float fcomp = imgsrc->getMetaData()->getExpComp(imgNum); //compensation + - + const float fnum = imgsrc->getMetaData()->getFNumber(); // F number + const float fiso = imgsrc->getMetaData()->getISOSpeed() ; // ISO + const float fspeed = imgsrc->getMetaData()->getShutterSpeed() ; // Speed + const float fcomp = imgsrc->getMetaData()->getExpComp(); // Compensation + - if (fnum < 0.3f || fiso < 5.f || fspeed < 0.00001f) { adap = 2000.; @@ -1832,21 +1826,22 @@ private: readyImg = tempImage; } + Exiv2Metadata info(imgsrc->getFileName()); switch (params.metadata.mode) { - case MetaDataParams::TUNNEL: - // Sending back the whole first root, which won't necessarily be the selected frame number - // and may contain subframe depending on initial raw's hierarchy - readyImg->setMetadata(initialImage->getMetaData()->getRootExifData()); - break; - - case MetaDataParams::EDIT: - // ask for the correct frame number, but may contain subframe depending on initial raw's hierarchy - readyImg->setMetadata(initialImage->getMetaData()->getBestExifData(imgsrc, ¶ms.raw), params.exif, params.iptc); - break; - - default: // case MetaDataParams::STRIP - // nothing to do - break; + case MetaDataParams::TUNNEL: + readyImg->setMetadata(std::move(info)); + break; + case MetaDataParams::EDIT: + info.setExif(params.metadata.exif); + info.setIptc(params.metadata.iptc); + if (!(params.metadata.exifKeys.size() == 1 && params.metadata.exifKeys[0] == "*")) { + info.setExifKeys(&(params.metadata.exifKeys)); + } + readyImg->setMetadata(std::move(info)); + break; + default: // case MetaDataParams::STRIP + // nothing to do + break; } @@ -1868,11 +1863,11 @@ private: } ProfileContent pc = ICCStore::getInstance()->getContent(params.icm.outputProfile); - readyImg->setOutputProfile(pc.getData().c_str(), pc.getData().size()); + readyImg->setOutputProfile(pc.getData()); } } else { // No ICM - readyImg->setOutputProfile(nullptr, 0); + readyImg->setOutputProfile({}); } // t2.set(); diff --git a/rtengine/spot.cc b/rtengine/spot.cc index 09186a399..5ed090712 100644 --- a/rtengine/spot.cc +++ b/rtengine/spot.cc @@ -459,7 +459,7 @@ void ImProcFunctions::removeSpots (Imagefloat* img, ImageSource* imgsrc, const s } } - imgsrc->getImage(currWB, tr, srcSpotBox->getImage(), spp, params->toneCurve, params->raw, 0); + imgsrc->getImage(currWB, tr, srcSpotBox->getImage(), spp, params->toneCurve, params->raw); if (cmp) { imgsrc->convertColorSpace(srcImage, *cmp, currWB); } @@ -479,7 +479,7 @@ void ImProcFunctions::removeSpots (Imagefloat* img, ImageSource* imgsrc, const s dstImage->b(y, x) = 60000.f; } } - imgsrc->getImage(currWB, tr, dstSpotBox->getImage(), spp, params->toneCurve, params->raw, 0); + imgsrc->getImage(currWB, tr, dstSpotBox->getImage(), spp, params->toneCurve, params->raw); if (cmp) { imgsrc->convertColorSpace(dstImage, *cmp, currWB); } diff --git a/rtengine/stdimagesource.cc b/rtengine/stdimagesource.cc index 411b1de32..9363c84cb 100644 --- a/rtengine/stdimagesource.cc +++ b/rtengine/stdimagesource.cc @@ -193,7 +193,7 @@ int StdImageSource::load (const Glib::ustring &fname) return 0; } -void StdImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const ToneCurveParams &hrp, const RAWParams &raw, int opposed) +void StdImageSource::getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const ToneCurveParams &hrp, const RAWParams &raw) { // the code will use OpenMP as of now. @@ -311,11 +311,11 @@ void StdImageSource::getAutoExpHistogram (LUTu & histogram, int& histcompr) } } -void StdImageSource::WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &studgood, bool &twotimes, const WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const ColorManagementParams &cmp, const RAWParams &raw, const ToneCurveParams &hrp) +void StdImageSource::WBauto(bool extra, double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, bool &twotimes, const WBParams & wbpar, int begx, int begy, int yEn, int xEn, int cx, int cy, const ColorManagementParams &cmp, const RAWParams &raw, const ToneCurveParams &hrp) { } -void StdImageSource::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 WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw, const ToneCurveParams &hrp) +void StdImageSource::getAutoWBMultipliersitc(bool extra, double &tempref, double &greenref, double &tempitc, double &greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, 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 WBParams & wbpar, const ColorManagementParams &cmp, const RAWParams &raw, const ToneCurveParams &hrp) { if (redAWBMul != -1.) { rm = redAWBMul; @@ -324,7 +324,7 @@ void StdImageSource::getAutoWBMultipliersitc(double &tempref, double &greenref, return; } - img->getAutoWBMultipliersitc(tempref, greenref, tempitc, greenitc,studgood, begx, begy, yEn, xEn, cx, cy, bf_h, bf_w, rm, gm, bm, params->wb, params->icm, params->raw, params->toneCurve); + img->getAutoWBMultipliersitc(extra, tempref, greenref, tempitc, greenitc, temp0, delta, bia, dread, kcam, nocam, studgood, minchrom, kmin, minhist, maxhist, begx, begy, yEn, xEn, cx, cy, bf_h, bf_w, rm, gm, bm, params->wb, params->icm, params->raw, params->toneCurve); redAWBMul = rm; greenAWBMul = gm; diff --git a/rtengine/stdimagesource.h b/rtengine/stdimagesource.h index 33a5a3667..8c2a54a3b 100644 --- a/rtengine/stdimagesource.h +++ b/rtengine/stdimagesource.h @@ -58,7 +58,7 @@ public: int load (const Glib::ustring &fname) override; void getWBMults (const ColorTemp &ctemp, const procparams::RAWParams &raw, std::array& scale_mul, float &autoGainComp, float &rm, float &gm, float &bm) const override {}; - void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hrp, const procparams::RAWParams &raw, int opposed) override; + void getImage (const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const procparams::ToneCurveParams &hrp, const procparams::RAWParams &raw) override; void getrgbloc (int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, const procparams::WBParams & wbpar) override {}; ColorTemp getWB () const override { @@ -66,8 +66,8 @@ public: } void getAutoWBMultipliers (double &rm, double &gm, double &bm) override; ColorTemp getSpotWB (std::vector &red, std::vector &green, std::vector &blue, int tran, double equal, StandardObserver observer) override; - void WBauto(double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &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, const procparams::ToneCurveParams &hrp) 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, const procparams::ToneCurveParams &hrp) override; + void WBauto(bool extra, double &tempref, double &greenref, array2D &redloc, array2D &greenloc, array2D &blueloc, int bfw, int bfh, double &avg_rm, double &avg_gm, double &avg_bm, double &tempitc, double &greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, 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, const procparams::ToneCurveParams &hrp) override; + void getAutoWBMultipliersitc(bool extra, double &tempref, double &greenref, double &tempitc, double &greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, 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, const procparams::ToneCurveParams &hrp) override; eSensorType getSensorType() const override {return ST_NONE;} bool isMono() const override {return false;} diff --git a/rtengine/winutils.h b/rtengine/winutils.h index 757849dd1..9b3efbf9a 100644 --- a/rtengine/winutils.h +++ b/rtengine/winutils.h @@ -18,7 +18,7 @@ */ #pragma once -#ifdef WIN32 +#ifdef _WIN32 #include #include diff --git a/rtexif/CMakeLists.txt b/rtexif/CMakeLists.txt deleted file mode 100644 index e7ba81439..000000000 --- a/rtexif/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -add_library(rtexif STATIC - canonattribs.cc - fujiattribs.cc - kodakattribs.cc - nikonattribs.cc - olympusattribs.cc - panasonicattribs.cc - pentaxattribs.cc - rtexif.cc - sonyminoltaattribs.cc - stdattribs.cc -) - -add_dependencies(rtexif UpdateInfo) - -if(WIN32) - include_directories(${EXTRA_INCDIR} ${GLIB2_INCLUDE_DIRS} ${GLIBMM_INCLUDE_DIRS} ${GTK_INCLUDE_DIRS} ${GTKMM_INCLUDE_DIRS} ${TIFF_INCLUDE_DIRS}) - link_directories(. "${PROJECT_SOURCE_DIR}/rtexif" ${EXTRA_LIBDIR} ${GLIB2_LIBRARY_DIRS} ${GLIBMM_LIBRARY_DIRS} ${GTK_LIBRARY_DIRS} ${GTKMM_LIBRARY_DIRS} ${LENSFUN_LIBRARY_DIRS} ${TIFF_LIBRARY_DIRS}) -else() - set_target_properties(rtexif PROPERTIES COMPILE_FLAGS " -fPIC") - include_directories(${EXTRA_INCDIR} ${GLIB2_INCLUDE_DIRS} ${GLIBMM_INCLUDE_DIRS} ${GTK_INCLUDE_DIRS} ${GTKMM_INCLUDE_DIRS} ${TIFF_INCLUDE_DIRS}) - link_directories(${EXTRA_LIBDIR} ${GLIB2_LIBRARY_DIRS} ${GLIBMM_LIBRARY_DIRS} ${GTK_LIBRARY_DIRS} ${GTKMM_LIBRARY_DIRS} ${LENSFUN_LIBRARY_DIRS} ${TIFF_LIBRARY_DIRS}) -endif() - -include_directories(BEFORE "${CMAKE_CURRENT_BINARY_DIR}") - -if(BUILD_SHARED_LIBS) - install(TARGETS rtexif DESTINATION "${LIBDIR}") -endif() diff --git a/rtexif/canonattribs.cc b/rtexif/canonattribs.cc deleted file mode 100644 index 5300abe02..000000000 --- a/rtexif/canonattribs.cc +++ /dev/null @@ -1,2192 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * 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 RawTherapee. If not, see . - */ - -#include -#include - -#include "rtexif.h" - -using namespace std; - -namespace rtexif -{ - -class CAOnOffInterpreter : public Interpreter -{ -public: - std::string toString (const Tag* t) const override - { - int n = t->toInt(); - - if ( n == 0 ) { - return "OFF"; - } else if ( n == 1) { - return "ON"; - } else { - return "undef"; - } - } -}; -CAOnOffInterpreter caOnOffInterpreter; - -class CAIntSerNumInterpreter : public Interpreter -{ -public: - CAIntSerNumInterpreter () {} - std::string toString (const Tag* t) const override - { - return ""; - } -}; - -CAIntSerNumInterpreter caIntSerNumInterpreter; - -class CAApertureInterpreter : public Interpreter -{ -public: - CAApertureInterpreter () {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - double v = pow (2.0, t->toDouble() / 64.0); - - if ( v < 0. || v > 1000.) { - return "undef"; - } - - snprintf(buffer, sizeof(buffer), "%.1f", v ); - return buffer; - } -}; -CAApertureInterpreter caApertureInterpreter; - -class CAMacroModeInterpreter : public ChoiceInterpreter<> -{ -public: - CAMacroModeInterpreter() - { - choices[1] = "Macro"; - choices[2] = "Normal"; - } -}; -CAMacroModeInterpreter caMacroModeInterpreter; - -class CASelfTimerInterpreter : public Interpreter -{ -public: - std::string toString (const Tag* t) const override - { - int sec = t->toInt (0, SHORT); - - if ( !sec ) { - return "OFF"; - } - - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%.1fs %s", sec / 10., (sec & 0x4000) ? ",Custom" : ""); - return buffer; - } -}; -CASelfTimerInterpreter caSelfTimerInterpreter; - -class CAQualityInterpreter : public ChoiceInterpreter<> -{ -public: - CAQualityInterpreter() - { - choices[1] = "Economy"; - choices[2] = "Normal"; - choices[3] = "Fine"; - choices[4] = "RAW"; - choices[5] = "Superfine"; - } -}; -CAQualityInterpreter caQualityInterpreter; - -class CAFlashModeInterpreter : public ChoiceInterpreter<> -{ -public: - CAFlashModeInterpreter() - { - choices[0] = "Off"; - choices[1] = "Auto"; - choices[2] = "On"; - choices[3] = "Red-eye reduction"; - choices[4] = "Slow-sync"; - choices[5] = "Red-eye reduction (Auto)"; - choices[6] = "Red-eye reduction (On)"; - choices[16] = "External flash"; - } -}; -CAFlashModeInterpreter caFlashModeInterpreter; - -class CAContinuousDriveInterpreter : public ChoiceInterpreter<> -{ -public: - CAContinuousDriveInterpreter() - { - choices[0] = "Single"; - choices[1] = "Continuous"; - choices[2] = "Movie"; - choices[3] = "Continuous, Speed Priority"; - choices[4] = "Continuous, Low"; - choices[5] = "Continuous, High"; - choices[6] = "Silent Single"; - choices[9] = "Single, Silent"; - choices[10] = "Continuous, Silent"; - } -}; -CAContinuousDriveInterpreter caContinuousDriveInterpreter; - -class CAFocusModeInterpreter : public ChoiceInterpreter<> -{ -public: - CAFocusModeInterpreter() - { - choices[0] = "One-shot AF"; - choices[1] = "AI Servo AF"; - choices[2] = "AI Focus AF"; - choices[3] = "Manual Focus (3)"; - choices[4] = "Single"; - choices[5] = "Continuous"; - choices[6] = "Manual Focus (6)"; - choices[16] = "Pan Focus"; - choices[256] = "AF + MF"; - choices[512] = "Movie Snap Focus"; - choices[519] = "Movie Servo AF"; - } -}; -CAFocusModeInterpreter caFocusModeInterpreter; - -class CARecordModeInterpreter : public ChoiceInterpreter<> -{ -public: - CARecordModeInterpreter() - { - choices[1] = "JPEG"; - choices[2] = "CRW+THM"; - choices[3] = "AVI+THM"; - choices[4] = "TIF"; - choices[5] = "TIF+JPEG"; - choices[6] = "CR2"; - choices[7] = "CR2+JPEG"; - choices[9] = "MOV"; - choices[10] = "MP4"; - } -}; -CARecordModeInterpreter caRecordModeInterpreter; - -class CAImageSizeInterpreter : public ChoiceInterpreter<> -{ -public: - CAImageSizeInterpreter () - { - choices[0] = "Large"; - choices[1] = "Medium"; - choices[2] = "Small"; - choices[5] = "Medium 1"; - choices[6] = "Medium 2"; - choices[7] = "Medium 3"; - choices[8] = "Postcard"; - choices[9] = "Widescreen"; - choices[10] = "Medium Widescreen"; - choices[14] = "Small 1"; - choices[15] = "Small 2"; - choices[16] = "Small 3"; - choices[128] = "640x480 Movie"; - choices[129] = "Medium Movie"; - choices[130] = "Small Movie"; - choices[137] = "1280x720 Movie"; - choices[142] = "1920x1080 Movie"; - } -}; -CAImageSizeInterpreter caImageSizeInterpreter; - -class CAEasyModeInterpreter : public ChoiceInterpreter<> -{ -public: - CAEasyModeInterpreter () - { - choices[0] = "Full auto"; - choices[1] = "Manual"; - choices[2] = "Landscape"; - choices[3] = "Fast shutter"; - choices[4] = "Slow shutter"; - choices[5] = "Night"; - choices[6] = "Gray Scale"; - choices[7] = "Sepia"; - choices[8] = "Portrait"; - choices[9] = "Sports"; - choices[10] = "Macro"; - choices[11] = "Black & White"; - choices[12] = "Pan focus"; - choices[13] = "Vivid"; - choices[14] = "Neutral"; - choices[15] = "Flash Off"; - choices[16] = "Long Shutter"; - choices[17] = "Super Macro"; - choices[18] = "Foliage"; - choices[19] = "Indoor"; - choices[20] = "Fireworks"; - choices[21] = "Beach"; - choices[22] = "Underwater"; - choices[23] = "Snow"; - choices[24] = "Kids & Pets"; - choices[25] = "Night Snapshot"; - choices[26] = "Digital Macro"; - choices[27] = "My Colors"; - choices[28] = "Movie Snap"; - choices[29] = "Super Macro 2"; - choices[30] = "Color Accent"; - choices[31] = "Color Swap"; - choices[32] = "Aquarium"; - choices[33] = "ISO 3200"; - choices[34] = "ISO 6400"; - choices[35] = "Creative Light Effect"; - choices[36] = "Easy"; - choices[37] = "Quick Shot"; - choices[38] = "Creative Auto"; - choices[39] = "Zoom Blur"; - choices[40] = "Low Light"; - choices[41] = "Nostalgic"; - choices[42] = "Super Vivid"; - choices[43] = "Poster Effect"; - choices[44] = "Face Self-timer"; - choices[45] = "Smile"; - choices[46] = "Wink Self-timer"; - choices[47] = "Fisheye Effect"; - choices[48] = "Miniature Effect"; - choices[49] = "High-speed Burst"; - choices[50] = "Best Image Selection"; - choices[51] = "High Dynamic Range"; - choices[52] = "Handheld Night Scene"; - choices[53] = "Movie Digest"; - choices[54] = "Live View Control"; - choices[55] = "Discreet"; - choices[56] = "Blur Reduction"; - choices[57] = "Monochrome"; - choices[58] = "Toy Camera Effect"; - choices[59] = "Scene Intelligent Auto"; - choices[60] = "High-speed Burst HQ"; - choices[61] = "Smooth Skin"; - choices[62] = "Soft Focus"; - choices[257] = "Spotlight"; - choices[258] = "Night 2"; - choices[259] = "Night+"; - choices[260] = "Super Night"; - choices[261] = "Sunset"; - choices[263] = "Night Scene"; - choices[264] = "Surface"; - choices[265] = "Low Light 2"; - } -}; -CAEasyModeInterpreter caEasyModeInterpreter; - -class CADigitalZoomInterpreter : public ChoiceInterpreter<> -{ -public: - CADigitalZoomInterpreter() - { - choices[0] = "None"; - choices[1] = "2x"; - choices[2] = "4x"; - choices[3] = "Other"; - } -}; -CADigitalZoomInterpreter caDigitalZoomInterpreter; - -class CAMeteringModeInterpreter : public ChoiceInterpreter<> -{ -public: - CAMeteringModeInterpreter() - { - choices[0] = "Default"; - choices[1] = "Spot"; - choices[2] = "Average"; - choices[3] = "Evaluative"; - choices[4] = "Partial"; - choices[5] = "Center-weighted average"; - } -}; -CAMeteringModeInterpreter caMeteringModeInterpreter; - -class CAFocusRangeInterpreter : public ChoiceInterpreter<> -{ -public: - CAFocusRangeInterpreter() - { - choices[0] = "Manual"; - choices[1] = "Auto"; - choices[2] = "Not Known"; - choices[3] = "Macro"; - choices[4] = "Very Close"; - choices[5] = "Close"; - choices[6] = "Middle Range"; - choices[7] = "Far Range"; - choices[8] = "Pan Focus"; - choices[9] = "Super Macro"; - choices[10] = "Infinity"; - } -}; -CAFocusRangeInterpreter caFocusRangeInterpreter; - -class CAAFPointInterpreter : public ChoiceInterpreter<> -{ -public: - CAAFPointInterpreter() - { - choices[0x2005] = "Manual AF point selection "; - choices[0x3000] = "None (MF)"; - choices[0x3001] = "Auto AF point selection "; - choices[0x3002] = "Right "; - choices[0x3003] = "Center "; - choices[0x3004] = "Left "; - choices[0x4001] = "Auto AF point selection "; - choices[0x4006] = "Face Detect"; - } -}; -CAAFPointInterpreter caAFPointInterpreter; - -class CAExposureModeInterpreter : public ChoiceInterpreter<> -{ -public: - CAExposureModeInterpreter() - { - choices[0] = "Easy"; - choices[1] = "Program AE"; - choices[2] = "Shutter speed priority AE"; - choices[3] = "Aperture-priority AE"; - choices[4] = "Manual"; - choices[5] = "Depth-of-field AE"; - choices[6] = "M-Dep"; - choices[7] = "Bulb"; - } -}; -CAExposureModeInterpreter caExposureModeInterpreter; - -class CAFlashBitsInterpreter : public Interpreter -{ -public: - std::string toString (const Tag* t) const override - { - std::ostringstream s; - unsigned bits = t->toInt (0, SHORT); - - if ( bits & 0x0001 ) { - s << "Manual "; - } - - if ( bits & 0x0002 ) { - s << "TTL "; - } - - if ( bits & 0x0004 ) { - s << "A-TTL "; - } - - if ( bits & 0x0008 ) { - s << "E-TTL "; - } - - if ( bits & 0x0010 ) { - s << "FP sync enabled "; - } - - if ( bits & 0x0080 ) { - s << "2nd curtain "; - } - - if ( bits & 0x0800 ) { - s << "FP sync used "; - } - - if ( bits & 0x2000 ) { - s << "Built-in "; - } - - if ( bits & 0x4000 ) { - s << "External "; - } - - return s.str(); - } -}; -CAFlashBitsInterpreter caFlashBitsInterpreter; - -class CAFocusContinuousInterpreter : public ChoiceInterpreter<> -{ -public: - CAFocusContinuousInterpreter() - { - choices[0] = "Single"; - choices[1] = "Continuous"; - choices[8] = "Manual"; - } -}; -CAFocusContinuousInterpreter caFocusContinuousInterpreter; - -class CAAESettingsInterpreter : public ChoiceInterpreter<> -{ -public: - CAAESettingsInterpreter() - { - choices[0] = "Normal AE"; - choices[1] = "Exposure Compensation"; - choices[2] = "AE Lock"; - choices[3] = "AE Lock + Exposure Comp."; - choices[4] = "No AE"; - } -}; -CAAESettingsInterpreter caAESettingsInterpreter; - -class CAStabilizationInterpreter : public ChoiceInterpreter<> -{ -public: - CAStabilizationInterpreter() - { - choices[0] = "Off"; - choices[1] = "On"; - choices[2] = "Shoot Only"; - choices[3] = "Panning"; - choices[4] = "Dynamic"; - choices[256] = "Off (2)"; - choices[257] = "On (2)"; - choices[258] = "Shoot Only (2)"; - choices[259] = "Panning (2)"; - choices[260] = "Dynamic (2)"; - } -}; -CAStabilizationInterpreter caStabilizationInterpreter; - -class CASpotMeteringInterpreter : public ChoiceInterpreter<> -{ -public: - CASpotMeteringInterpreter() - { - choices[0] = "Center"; - choices[1] = "AF Point"; - } -}; -CASpotMeteringInterpreter caSpotMeteringInterpreter; - -class CAPhotoEffectInterpreter : public ChoiceInterpreter<> -{ -public: - CAPhotoEffectInterpreter() - { - choices[0] = "Off"; - choices[1] = "Vivid"; - choices[2] = "Neutral"; - choices[3] = "Smooth"; - choices[4] = "Sepia"; - choices[5] = "B&W"; - choices[6] = "Custom"; - choices[100] = "My Color Data"; - } -}; -CAPhotoEffectInterpreter caPhotoEffectInterpreter; - -class CAManualFlashInterpreter : public ChoiceInterpreter<> -{ -public: - CAManualFlashInterpreter() - { - choices[0] = "N/A"; - choices[0x500] = "Full"; - choices[0x502] = "Medium"; - choices[0x504] = "Low"; - choices[0x7fff] = "N/A"; - } -}; -CAManualFlashInterpreter caManualFlashInterpreter; - -class CARAWQualityInterpreter : public ChoiceInterpreter<> -{ -public: - CARAWQualityInterpreter() - { - choices[0] = "N/A"; - choices[1] = "sRAW1 (mRAW)"; - choices[2] = "sRAW2 (sRAW)"; - } -}; -CARAWQualityInterpreter caRAWQualityInterpreter; - -class CAFocalInterpreter : public Interpreter -{ -public: - std::string toString (const Tag* t) const override - { - Tag *unitTag = t->getParent()->getRoot()->findTag ("FocalUnits"); - double v = unitTag ? unitTag->toDouble() : 1.; - v = (v > 0. ? t->toDouble() / v : t->toDouble()); - - if ( v < 0. || v > 1000000.) { - return "undef"; - } - - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%.1f", v ); - return buffer; - } -}; -CAFocalInterpreter caFocalInterpreter; - -class CALensInterpreter : public IntLensInterpreter< int > -{ -public: - CALensInterpreter () - { - choices = { - {1, "Canon EF 50mm f/1.8"}, - {2, "Canon EF 28mm f/2.8 or Sigma Lens"}, - {2, "Sigma 24mm f/2.8 Super Wide II"}, - {3, "Canon EF 135mm f/2.8 Soft"}, - {4, "Canon EF 35-105mm f/3.5-4.5 or Sigma Lens"}, - {4, "Sigma UC Zoom 35-135mm f/4-5.6"}, - {5, "Canon EF 35-70mm f/3.5-4.5"}, - {6, "Canon EF 28-70mm f/3.5-4.5 or Sigma or Tokina Lens"}, - {6, "Sigma 18-50mm f/3.5-5.6 DC"}, - {6, "Sigma 18-125mm f/3.5-5.6 DC IF ASP"}, - {6, "Tokina AF 193-2 19-35mm f/3.5-4.5"}, - {6, "Sigma 28-80mm f/3.5-5.6 II Macro"}, - {6, "Sigma 28-300mm f/3.5-6.3 DG Macro"}, - {7, "Canon EF 100-300mm f/5.6L"}, - {8, "Canon EF 100-300mm f/5.6 or Sigma or Tokina Lens"}, - {8, "Sigma 70-300mm f/4-5.6 [APO] DG Macro"}, - {8, "Tokina AT-X 242 AF 24-200mm f/3.5-5.6"}, - {9, "Canon EF 70-210mm f/4"}, - {9, "Sigma 55-200mm f/4-5.6 DC"}, - {10, "Canon EF 50mm f/2.5 Macro or Sigma Lens"}, - {10, "Sigma 50mm f/2.8 EX"}, - {10, "Sigma 28mm f/1.8"}, - {10, "Sigma 105mm f/2.8 Macro EX"}, - {10, "Sigma 70mm f/2.8 EX DG Macro EF"}, - {11, "Canon EF 35mm f/2"}, - {13, "Canon EF 15mm f/2.8 Fisheye"}, - {14, "Canon EF 50-200mm f/3.5-4.5L"}, - {15, "Canon EF 50-200mm f/3.5-4.5"}, - {16, "Canon EF 35-135mm f/3.5-4.5"}, - {17, "Canon EF 35-70mm f/3.5-4.5A"}, - {18, "Canon EF 28-70mm f/3.5-4.5"}, - {20, "Canon EF 100-200mm f/4.5A"}, - {21, "Canon EF 80-200mm f/2.8L"}, - {22, "Canon EF 20-35mm f/2.8L or Tokina Lens"}, - {22, "Tokina AT-X 280 AF Pro 28-80mm f/2.8 Aspherical"}, - {23, "Canon EF 35-105mm f/3.5-4.5"}, - {24, "Canon EF 35-80mm f/4-5.6 Power Zoom"}, - {25, "Canon EF 35-80mm f/4-5.6 Power Zoom"}, - {26, "Canon EF 100mm f/2.8 Macro or Other Lens"}, - {26, "Cosina 100mm f/3.5 Macro AF"}, - {26, "Tamron SP AF 90mm f/2.8 Di Macro"}, - {26, "Tamron SP AF 180mm f/3.5 Di Macro"}, - {26, "Carl Zeiss Planar T* 50mm f/1.4"}, - {26, "Voigtlander APO Lanthar 125mm F2.5 SL Macro"}, - {26, "Carl Zeiss Planar T 85mm f/1.4 ZE"}, - {27, "Canon EF 35-80mm f/4-5.6"}, - {28, "Canon EF 80-200mm f/4.5-5.6 or Tamron Lens"}, - {28, "Tamron SP AF 28-105mm f/2.8 LD Aspherical IF"}, - {28, "Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical [IF] Macro"}, - {28, "Tamron AF 70-300mm f/4-5.6 Di LD 1:2 Macro"}, - {28, "Tamron AF Aspherical 28-200mm f/3.8-5.6"}, - {29, "Canon EF 50mm f/1.8 II"}, - {30, "Canon EF 35-105mm f/4.5-5.6"}, - {31, "Canon EF 75-300mm f/4-5.6 or Tamron Lens"}, - {31, "Tamron SP AF 300mm f/2.8 LD IF"}, - {32, "Canon EF 24mm f/2.8 or Sigma Lens"}, - {32, "Sigma 15mm f/2.8 EX Fisheye"}, - {33, "Voigtlander or Carl Zeiss Lens"}, - {33, "Voigtlander Ultron 40mm f/2 SLII Aspherical"}, - {33, "Voigtlander Color Skopar 20mm f/3.5 SLII Aspherical"}, - {33, "Voigtlander APO-Lanthar 90mm f/3.5 SLII Close Focus"}, - {33, "Carl Zeiss Distagon T* 15mm f/2.8 ZE"}, - {33, "Carl Zeiss Distagon T* 18mm f/3.5 ZE"}, - {33, "Carl Zeiss Distagon T* 21mm f/2.8 ZE"}, - {33, "Carl Zeiss Distagon T* 25mm f/2 ZE"}, - {33, "Carl Zeiss Distagon T* 28mm f/2 ZE"}, - {33, "Carl Zeiss Distagon T* 35mm f/2 ZE"}, - {33, "Carl Zeiss Distagon T* 35mm f/1.4 ZE"}, - {33, "Carl Zeiss Planar T* 50mm f/1.4 ZE"}, - {33, "Carl Zeiss Makro-Planar T* 50mm f/2 ZE"}, - {33, "Carl Zeiss Makro-Planar T* 100mm f/2 ZE"}, - {33, "Carl Zeiss Apo-Sonnar T* 135mm f/2 ZE"}, - {35, "Canon EF 35-80mm f/4-5.6"}, - {36, "Canon EF 38-76mm f/4.5-5.6"}, - {37, "Canon EF 35-80mm f/4-5.6 or Tamron Lens"}, - {37, "Tamron 70-200mm f/2.8 Di LD IF Macro"}, - {37, "Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical [IF] Macro (A20)"}, - {37, "Tamron SP AF 17-50mm f/2.8 XR Di II VC LD Aspherical [IF]"}, - {37, "Tamron AF 18-270mm f/3.5-6.3 Di II VC LD Aspherical [IF] Macro"}, - {38, "Canon EF 80-200mm f/4.5-5.6 II"}, - {39, "Canon EF 75-300mm f/4-5.6"}, - {40, "Canon EF 28-80mm f/3.5-5.6"}, - {41, "Canon EF 28-90mm f/4-5.6"}, - {42, "Canon EF 28-200mm f/3.5-5.6 or Tamron Lens"}, - {42, "Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical [IF] Macro (A20)"}, - {43, "Canon EF 28-105mm f/4-5.6"}, - {44, "Canon EF 90-300mm f/4.5-5.6"}, - {45, "Canon EF-S 18-55mm f/3.5-5.6 [II]"}, - {46, "Canon EF 28-90mm f/4-5.6"}, - {47, "Zeiss Milvus 35mm f/2 or 50mm f/2"}, - {47, "Zeiss Milvus 50mm f/2 Makro"}, - {47, "Zeiss Milvus 135mm f/2 ZE"}, - {48, "Canon EF-S 18-55mm f/3.5-5.6 IS"}, - {49, "Canon EF-S 55-250mm f/4-5.6 IS"}, - {50, "Canon EF-S 18-200mm f/3.5-5.6 IS"}, - {51, "Canon EF-S 18-135mm f/3.5-5.6 IS"}, - {52, "Canon EF-S 18-55mm f/3.5-5.6 IS II"}, - {53, "Canon EF-S 18-55mm f/3.5-5.6 III"}, - {54, "Canon EF-S 55-250mm f/4-5.6 IS II"}, - {60, "Irix 11mm f/4"}, - {63, "Irix 30mm F1.4 Dragonfly"}, - {80, "Canon TS-E 50mm f/2.8L Macro"}, - {81, "Canon TS-E 90mm f/2.8L Macro"}, - {82, "Canon TS-E 135mm f/4L Macro"}, - {94, "Canon TS-E 17mm f/4L"}, - {95, "Canon TS-E 24mm f/3.5L II"}, - {103, "Samyang AF 14mm f/2.8 EF or Rokinon Lens"}, - {103, "Rokinon SP 14mm f/2.4"}, - {103, "Rokinon AF 14mm f/2.8 EF"}, - {106, "Rokinon SP / Samyang XP 35mm f/1.2"}, - {112, "Sigma 28mm f/1.5 FF High-speed Prime or other Sigma Lens"}, - {112, "Sigma 40mm f/1.5 FF High-speed Prime"}, - {112, "Sigma 105mm f/1.5 FF High-speed Prime"}, - {117, "Tamron 35-150mm f/2.8-4.0 Di VC OSD (A043) or other Tamron Lens"}, - {117, "Tamron SP 35mm f/1.4 Di USD (F045)"}, - {124, "Canon MP-E 65mm f/2.8 1-5x Macro Photo"}, - {125, "Canon TS-E 24mm f/3.5L"}, - {126, "Canon TS-E 45mm f/2.8"}, - {127, "Canon TS-E 90mm f/2.8 or Tamron Lens"}, - {127, "Tamron 18-200mm f/3.5-6.3 Di II VC (B018)"}, - {129, "Canon EF 300mm f/2.8L USM"}, - {130, "Canon EF 50mm f/1.0L USM"}, - {131, "Canon EF 28-80mm f/2.8-4L USM or Sigma Lens"}, - {131, "Sigma 8mm f/3.5 EX DG Circular Fisheye"}, - {131, "Sigma 17-35mm f/2.8-4 EX DG Aspherical HSM"}, - {131, "Sigma 17-70mm f/2.8-4.5 DC Macro"}, - {131, "Sigma APO 50-150mm f/2.8 [II] EX DC HSM"}, - {131, "Sigma APO 120-300mm f/2.8 EX DG HSM"}, - {131, "Sigma 4.5mm f/2.8 EX DC HSM Circular Fisheye"}, - {131, "Sigma 70-200mm f/2.8 APO EX HSM"}, - {131, "Sigma 28-70mm f/2.8-4 DG"}, - {132, "Canon EF 1200mm f/5.6L USM"}, - {134, "Canon EF 600mm f/4L IS USM"}, - {135, "Canon EF 200mm f/1.8L USM"}, - {136, "Canon EF 300mm f/2.8L USM"}, - {136, "Tamron SP 15-30mm f/2.8 Di VC USD (A012)"}, - {137, "Canon EF 85mm f/1.2L USM or Sigma or Tamron Lens"}, - {137, "Sigma 18-50mm f/2.8-4.5 DC OS HSM"}, - {137, "Sigma 50-200mm f/4-5.6 DC OS HSM"}, - {137, "Sigma 18-250mm f/3.5-6.3 DC OS HSM"}, - {137, "Sigma 24-70mm f/2.8 IF EX DG HSM"}, - {137, "Sigma 18-125mm f/3.8-5.6 DC OS HSM"}, - {137, "Sigma 17-70mm f/2.8-4 DC Macro OS HSM | C"}, - {137, "Sigma 17-50mm f/2.8 OS HSM"}, - {137, "Sigma 18-200mm f/3.5-6.3 DC OS HSM [II]"}, - {137, "Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD (B008)"}, - {137, "Sigma 8-16mm f/4.5-5.6 DC HSM"}, - {137, "Tamron SP 17-50mm f/2.8 XR Di II VC (B005)"}, - {137, "Tamron SP 60mm f/2 Macro Di II (G005)"}, - {137, "Sigma 10-20mm f/3.5 EX DC HSM"}, - {137, "Tamron SP 24-70mm f/2.8 Di VC USD"}, - {137, "Sigma 18-35mm f/1.8 DC HSM"}, - {137, "Sigma 12-24mm f/4.5-5.6 DG HSM II"}, - {137, "Sigma 70-300mm f/4-5.6 DG OS"}, - {138, "Canon EF 28-80mm f/2.8-4L"}, - {139, "Canon EF 400mm f/2.8L USM"}, - {140, "Canon EF 500mm f/4.5L USM"}, - {141, "Canon EF 500mm f/4.5L USM"}, - {142, "Canon EF 300mm f/2.8L IS USM"}, - {143, "Canon EF 500mm f/4L IS USM or Sigma Lens"}, - {143, "Sigma 17-70mm f/2.8-4 DC Macro OS HSM"}, - {144, "Canon EF 35-135mm f/4-5.6 USM"}, - {145, "Canon EF 100-300mm f/4.5-5.6 USM"}, - {146, "Canon EF 70-210mm f/3.5-4.5 USM"}, - {147, "Canon EF 35-135mm f/4-5.6 USM"}, - {148, "Canon EF 28-80mm f/3.5-5.6 USM"}, - {149, "Canon EF 100mm f/2 USM"}, - {150, "Canon EF 14mm f/2.8L USM or Sigma Lens"}, - {150, "Sigma 20mm EX f/1.8"}, - {150, "Sigma 30mm f/1.4 DC HSM"}, - {150, "Sigma 24mm f/1.8 DG Macro EX"}, - {150, "Sigma 28mm f/1.8 DG Macro EX"}, - {150, "Sigma 18-35mm f/1.8 DC HSM | A"}, - {151, "Canon EF 200mm f/2.8L USM"}, - {152, "Canon EF 300mm f/4L IS USM or Sigma Lens"}, - {152, "Sigma 12-24mm f/4.5-5.6 EX DG ASPHERICAL HSM"}, - {152, "Sigma 14mm f/2.8 EX Aspherical HSM"}, - {152, "Sigma 10-20mm f/4-5.6"}, - {152, "Sigma 100-300mm f/4"}, - {152, "Sigma 300-800mm f/5.6 APO EX DG HSM"}, - {153, "Canon EF 35-350mm f/3.5-5.6L USM or Sigma or Tamron Lens"}, - {153, "Sigma 50-500mm f/4-6.3 APO HSM EX"}, - {153, "Tamron AF 28-300mm f/3.5-6.3 XR LD Aspherical [IF] Macro"}, - {153, "Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical [IF] Macro (A14)"}, - {153, "Tamron 18-250mm f/3.5-6.3 Di II LD Aspherical [IF] Macro"}, - {154, "Canon EF 20mm f/2.8 USM or Zeiss Lens"}, - {154, "Zeiss Milvus 21mm f/2.8"}, - {154, "Zeiss Milvus 15mm f/2.8 ZE"}, - {154, "Zeiss Milvus 18mm f/2.8 ZE"}, - {155, "Canon EF 85mm f/1.8 USM or Sigma Lens"}, - {155, "Sigma 14mm f/1.8 DG HSM | A"}, - {156, "Canon EF 28-105mm f/3.5-4.5 USM or Tamron Lens"}, - {156, "Tamron SP 70-300mm f/4-5.6 Di VC USD (A005)"}, - {156, "Tamron SP AF 28-105mm f/2.8 LD Aspherical IF (176D)"}, - {160, "Canon EF 20-35mm f/3.5-4.5 USM or Tamron or Tokina Lens"}, - {160, "Tamron AF 19-35mm f/3.5-4.5"}, - {160, "Tokina AT-X 124 AF Pro DX 12-24mm f/4"}, - {160, "Tokina AT-X 107 AF DX 10-17mm f/3.5-4.5 Fisheye"}, - {160, "Tokina AT-X 116 AF Pro DX 11-16mm f/2.8"}, - {160, "Tokina AT-X 11-20 F2.8 PRO DX Aspherical 11-20mm f/2.8"}, - {161, "Canon EF 28-70mm f/2.8L USM or Other Lens"}, - {161, "Sigma 24-70mm f/2.8 EX"}, - {161, "Sigma 28-70mm f/2.8 EX"}, - {161, "Sigma 24-60mm f/2.8 EX DG"}, - {161, "Tamron AF 17-50mm f/2.8 Di-II LD Aspherical"}, - {161, "Tamron 90mm f/2.8"}, - {161, "Tamron SP AF 17-35mm f/2.8-4 Di LD Aspherical IF (A05)"}, - {161, "Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical [IF] Macro"}, - {161, "Tokina AT-X 24-70mm f/2.8 PRO FX (IF)"}, - {162, "Canon EF 200mm f/2.8L USM"}, - {163, "Canon EF 300mm f/4L"}, - {164, "Canon EF 400mm f/5.6L"}, - {165, "Canon EF 70-200mm f/2.8L USM"}, - {166, "Canon EF 70-200mm f/2.8L USM + 1.4x"}, - {167, "Canon EF 70-200mm f/2.8L USM + 2x"}, - {168, "Canon EF 28mm f/1.8 USM or Sigma Lens"}, - {168, "Sigma 50-100mm f/1.8 DC HSM | A"}, - {169, "Canon EF 17-35mm f/2.8L USM or Sigma Lens"}, - {169, "Sigma 18-200mm f/3.5-6.3 DC OS"}, - {169, "Sigma 15-30mm f/3.5-4.5 EX DG Aspherical"}, - {169, "Sigma 18-50mm f/2.8 Macro"}, - {169, "Sigma 50mm f/1.4 EX DG HSM"}, - {169, "Sigma 85mm f/1.4 EX DG HSM"}, - {169, "Sigma 30mm f/1.4 EX DC HSM"}, - {169, "Sigma 35mm f/1.4 DG HSM"}, - {169, "Sigma 35mm f/1.5 FF High-Speed Prime | 017"}, - {169, "Sigma 70mm f/2.8 Macro EX DG"}, - {170, "Canon EF 200mm f/2.8L II USM or Sigma Lens"}, - {170, "Sigma 300mm f/2.8 APO EX DG HSM"}, - {170, "Sigma 800mm f/5.6 APO EX DG HSM"}, - {171, "Canon EF 300mm f/4L USM"}, - {172, "Canon EF 400mm f/5.6L USM or Sigma Lens"}, - {172, "Sigma 150-600mm f/5-6.3 DG OS HSM | S"}, - {172, "Sigma 500mm f/4.5 APO EX DG HSM"}, - {173, "Canon EF 180mm Macro f/3.5L USM or Sigma Lens"}, - {173, "Sigma 180mm EX HSM Macro f/3.5"}, - {173, "Sigma APO Macro 150mm f/2.8 EX DG HSM"}, - {173, "Sigma 10mm f/2.8 EX DC Fisheye"}, - {173, "Sigma 15mm f/2.8 EX DG Diagonal Fisheye"}, - {173, "Venus Laowa 100mm F2.8 2X Ultra Macro APO"}, - {174, "Canon EF 135mm f/2L USM or Other Lens"}, - {174, "Sigma 70-200mm f/2.8 EX DG APO OS HSM"}, - {174, "Sigma 50-500mm f/4.5-6.3 APO DG OS HSM"}, - {174, "Sigma 150-500mm f/5-6.3 APO DG OS HSM"}, - {174, "Zeiss Milvus 100mm f/2 Makro"}, - {174, "Sigma APO 50-150mm f/2.8 EX DC OS HSM"}, - {174, "Sigma APO 120-300mm f/2.8 EX DG OS HSM"}, - {174, "Sigma 120-300mm f/2.8 DG OS HSM S013"}, - {174, "Sigma 120-400mm f/4.5-5.6 APO DG OS HSM"}, - {174, "Sigma 200-500mm f/2.8 APO EX DG"}, - {175, "Canon EF 400mm f/2.8L USM"}, - {176, "Canon EF 24-85mm f/3.5-4.5 USM"}, - {177, "Canon EF 300mm f/4L IS USM"}, - {178, "Canon EF 28-135mm f/3.5-5.6 IS"}, - {179, "Canon EF 24mm f/1.4L USM"}, - {180, "Canon EF 35mm f/1.4L USM or Other Lens"}, - {180, "Sigma 50mm f/1.4 DG HSM | A"}, - {180, "Sigma 24mm f/1.4 DG HSM | A"}, - {180, "Zeiss Milvus 50mm f/1.4"}, - {180, "Zeiss Milvus 85mm f/1.4"}, - {180, "Zeiss Otus 28mm f/1.4 ZE"}, - {180, "Sigma 24mm f/1.5 FF High-Speed Prime | 017"}, - {180, "Sigma 50mm f/1.5 FF High-Speed Prime | 017"}, - {180, "Sigma 85mm f/1.5 FF High-Speed Prime | 017"}, - {180, "Tokina Opera 50mm f/1.4 FF"}, - {180, "Sigma 20mm f/1.4 DG HSM | A"}, - {181, "Canon EF 100-400mm f/4.5-5.6L IS USM + 1.4x or Sigma Lens"}, - {181, "Sigma 150-600mm f/5-6.3 DG OS HSM | S + 1.4x"}, - {182, "Canon EF 100-400mm f/4.5-5.6L IS USM + 2x or Sigma Lens"}, - {182, "Sigma 150-600mm f/5-6.3 DG OS HSM | S + 2x"}, - {183, "Canon EF 100-400mm f/4.5-5.6L IS USM or Sigma Lens"}, - {183, "Sigma 150mm f/2.8 EX DG OS HSM APO Macro"}, - {183, "Sigma 105mm f/2.8 EX DG OS HSM Macro"}, - {183, "Sigma 180mm f/2.8 EX DG OS HSM APO Macro"}, - {183, "Sigma 150-600mm f/5-6.3 DG OS HSM | C"}, - {183, "Sigma 150-600mm f/5-6.3 DG OS HSM | S"}, - {183, "Sigma 100-400mm f/5-6.3 DG OS HSM"}, - {183, "Sigma 180mm f/3.5 APO Macro EX DG IF HSM"}, - {184, "Canon EF 400mm f/2.8L USM + 2x"}, - {185, "Canon EF 600mm f/4L IS USM"}, - {186, "Canon EF 70-200mm f/4L USM"}, - {187, "Canon EF 70-200mm f/4L USM + 1.4x"}, - {188, "Canon EF 70-200mm f/4L USM + 2x"}, - {189, "Canon EF 70-200mm f/4L USM + 2.8x"}, - {190, "Canon EF 100mm f/2.8 Macro USM"}, - {191, "Canon EF 400mm f/4 DO IS or Sigma Lens"}, - {191, "Sigma 500mm f/4 DG OS HSM"}, - {193, "Canon EF 35-80mm f/4-5.6 USM"}, - {194, "Canon EF 80-200mm f/4.5-5.6 USM"}, - {195, "Canon EF 35-105mm f/4.5-5.6 USM"}, - {196, "Canon EF 75-300mm f/4-5.6 USM"}, - {197, "Canon EF 75-300mm f/4-5.6 IS USM or Sigma Lens"}, - {197, "Sigma 18-300mm f/3.5-6.3 DC Macro OS HSM"}, - {198, "Canon EF 50mm f/1.4 USM or Other Lens"}, - {198, "Zeiss Otus 55mm f/1.4 ZE"}, - {198, "Zeiss Otus 85mm f/1.4 ZE"}, - {198, "Zeiss Milvus 25mm f/1.4"}, - {198, "Zeiss Otus 100mm f/1.4"}, - {198, "Zeiss Milvus 35mm f/1.4 ZE"}, - {198, "Yongnuo YN 35mm f/2"}, - {199, "Canon EF 28-80mm f/3.5-5.6 USM"}, - {200, "Canon EF 75-300mm f/4-5.6 USM"}, - {201, "Canon EF 28-80mm f/3.5-5.6 USM"}, - {202, "Canon EF 28-80mm f/3.5-5.6 USM IV"}, - {208, "Canon EF 22-55mm f/4-5.6 USM"}, - {209, "Canon EF 55-200mm f/4.5-5.6"}, - {210, "Canon EF 28-90mm f/4-5.6 USM"}, - {211, "Canon EF 28-200mm f/3.5-5.6 USM"}, - {212, "Canon EF 28-105mm f/4-5.6 USM"}, - {213, "Canon EF 90-300mm f/4.5-5.6 USM or Tamron Lens"}, - {213, "Tamron SP 150-600mm f/5-6.3 Di VC USD (A011)"}, - {213, "Tamron 16-300mm f/3.5-6.3 Di II VC PZD Macro (B016)"}, - {213, "Tamron SP 35mm f/1.8 Di VC USD (F012)"}, - {213, "Tamron SP 45mm f/1.8 Di VC USD (F013)"}, - {214, "Canon EF-S 18-55mm f/3.5-5.6 USM"}, - {215, "Canon EF 55-200mm f/4.5-5.6 II USM"}, - {217, "Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD"}, - {220, "Yongnuo YN 50mm f/1.8"}, - {224, "Canon EF 70-200mm f/2.8L IS USM"}, - {225, "Canon EF 70-200mm f/2.8L IS USM + 1.4x"}, - {226, "Canon EF 70-200mm f/2.8L IS USM + 2x"}, - {227, "Canon EF 70-200mm f/2.8L IS USM + 2.8x"}, - {228, "Canon EF 28-105mm f/3.5-4.5 USM"}, - {229, "Canon EF 16-35mm f/2.8L USM"}, - {230, "Canon EF 24-70mm f/2.8L USM"}, - {231, "Canon EF 17-40mm f/4L USM or Sigma Lens"}, - {231, "Sigma 12-24mm f/4 DG HSM A016"}, - {232, "Canon EF 70-300mm f/4.5-5.6 DO IS USM"}, - {233, "Canon EF 28-300mm f/3.5-5.6L IS USM"}, - {234, "Canon EF-S 17-85mm f/4-5.6 IS USM or Tokina Lens"}, - {234, "Tokina AT-X 12-28 PRO DX 12-28mm f/4"}, - {235, "Canon EF-S 10-22mm f/3.5-4.5 USM"}, - {236, "Canon EF-S 60mm f/2.8 Macro USM"}, - {237, "Canon EF 24-105mm f/4L IS USM"}, - {238, "Canon EF 70-300mm f/4-5.6 IS USM"}, - {239, "Canon EF 85mm f/1.2L II USM or Rokinon Lens"}, - {239, "Rokinon SP 85mm f/1.2"}, - {240, "Canon EF-S 17-55mm f/2.8 IS USM or Sigma Lens"}, - {240, "Sigma 17-50mm f/2.8 EX DC OS HSM"}, - {241, "Canon EF 50mm f/1.2L USM"}, - {242, "Canon EF 70-200mm f/4L IS USM"}, - {243, "Canon EF 70-200mm f/4L IS USM + 1.4x"}, - {244, "Canon EF 70-200mm f/4L IS USM + 2x"}, - {245, "Canon EF 70-200mm f/4L IS USM + 2.8x"}, - {246, "Canon EF 16-35mm f/2.8L II USM"}, - {247, "Canon EF 14mm f/2.8L II USM"}, - {248, "Canon EF 200mm f/2L IS USM or Sigma Lens"}, - {248, "Sigma 24-35mm f/2 DG HSM | A"}, - {248, "Sigma 135mm f/2 FF High-Speed Prime | 017"}, - {248, "Sigma 24-35mm f/2.2 FF Zoom | 017"}, - {248, "Sigma 135mm f/1.8 DG HSM A017"}, - {249, "Canon EF 800mm f/5.6L IS USM"}, - {250, "Canon EF 24mm f/1.4L II USM or Sigma Lens"}, - {250, "Sigma 20mm f/1.4 DG HSM | A"}, - {250, "Sigma 20mm f/1.5 FF High-Speed Prime | 017"}, - {250, "Tokina Opera 16-28mm f/2.8 FF"}, - {250, "Sigma 85mm f/1.4 DG HSM A016"}, - {251, "Canon EF 70-200mm f/2.8L IS II USM"}, - {251, "Canon EF 70-200mm f/2.8L IS III USM"}, - {252, "Canon EF 70-200mm f/2.8L IS II USM + 1.4x"}, - {252, "Canon EF 70-200mm f/2.8L IS III USM + 1.4x"}, - {253, "Canon EF 70-200mm f/2.8L IS II USM + 2x"}, - {253, "Canon EF 70-200mm f/2.8L IS III USM + 2x"}, - {254, "Canon EF 100mm f/2.8L Macro IS USM or Tamron Lens"}, - {254, "Tamron SP 90mm f/2.8 Di VC USD 1:1 Macro (F017)"}, - {255, "Sigma 24-105mm f/4 DG OS HSM | A or Other Lens"}, - {255, "Sigma 180mm f/2.8 EX DG OS HSM APO Macro"}, - {255, "Tamron SP 70-200mm f/2.8 Di VC USD"}, - {368, "Sigma 14-24mm f/2.8 DG HSM | A or other Sigma Lens"}, - {368, "Sigma 20mm f/1.4 DG HSM | A"}, - {368, "Sigma 50mm f/1.4 DG HSM | A"}, - {368, "Sigma 40mm f/1.4 DG HSM | A"}, - {368, "Sigma 60-600mm f/4.5-6.3 DG OS HSM | S"}, - {368, "Sigma 28mm f/1.4 DG HSM | A"}, - {368, "Sigma 150-600mm f/5-6.3 DG OS HSM | S"}, - {368, "Sigma 85mm f/1.4 DG HSM | A"}, - {368, "Sigma 105mm f/1.4 DG HSM"}, - {368, "Sigma 14-24mm f/2.8 DG HSM"}, - {368, "Sigma 35mm f/1.4 DG HSM | A"}, - {368, "Sigma 70mm f/2.8 DG Macro"}, - {368, "Sigma 18-35mm f/1.8 DC HSM | A"}, - {368, "Sigma 24-105mm f/4 DG OS HSM | A"}, - {488, "Canon EF-S 15-85mm f/3.5-5.6 IS USM"}, - {489, "Canon EF 70-300mm f/4-5.6L IS USM"}, - {490, "Canon EF 8-15mm f/4L Fisheye USM"}, - {491, "Canon EF 300mm f/2.8L IS II USM or Tamron Lens"}, - {491, "Tamron SP 70-200mm f/2.8 Di VC USD G2 (A025)"}, - {491, "Tamron 18-400mm f/3.5-6.3 Di II VC HLD (B028)"}, - {491, "Tamron 100-400mm f/4.5-6.3 Di VC USD (A035)"}, - {491, "Tamron 70-210mm f/4 Di VC USD (A034)"}, - {491, "Tamron 70-210mm f/4 Di VC USD (A034) + 1.4x"}, - {491, "Tamron SP 24-70mm f/2.8 Di VC USD G2 (A032)"}, - {492, "Canon EF 400mm f/2.8L IS II USM"}, - {493, "Canon EF 500mm f/4L IS II USM or EF 24-105mm f4L IS USM"}, - {493, "Canon EF 24-105mm f/4L IS USM"}, - {494, "Canon EF 600mm f/4L IS II USM"}, - {495, "Canon EF 24-70mm f/2.8L II USM or Sigma Lens"}, - {495, "Sigma 24-70mm f/2.8 DG OS HSM | A"}, - {496, "Canon EF 200-400mm f/4L IS USM"}, - {499, "Canon EF 200-400mm f/4L IS USM + 1.4x"}, - {502, "Canon EF 28mm f/2.8 IS USM or Tamron Lens"}, - {502, "Tamron 35mm f/1.8 Di VC USD (F012)"}, - {503, "Canon EF 24mm f/2.8 IS USM"}, - {504, "Canon EF 24-70mm f/4L IS USM"}, - {505, "Canon EF 35mm f/2 IS USM"}, - {506, "Canon EF 400mm f/4 DO IS II USM"}, - {507, "Canon EF 16-35mm f/4L IS USM"}, - {508, "Canon EF 11-24mm f/4L USM or Tamron Lens"}, - {508, "Tamron 10-24mm f/3.5-4.5 Di II VC HLD (B023)"}, - {624, "Sigma 70-200mm f/2.8 DG OS HSM | S or other Sigma Lens"}, - {624, "Sigma 150-600mm f/5-6.3 | C"}, - {747, "Canon EF 100-400mm f/4.5-5.6L IS II USM or Tamron Lens"}, - {747, "Tamron SP 150-600mm f/5-6.3 Di VC USD G2"}, - {748, "Canon EF 100-400mm f/4.5-5.6L IS II USM + 1.4x or Tamron Lens"}, - {748, "Tamron 100-400mm f/4.5-6.3 Di VC USD A035E + 1.4x"}, - {748, "Tamron 70-210mm f/4 Di VC USD (A034) + 2x"}, - {749, "Tamron 100-400mm f/4.5-6.3 Di VC USD A035E + 2x"}, - {750, "Canon EF 35mm f/1.4L II USM or Tamron Lens"}, - {750, "Tamron SP 85mm f/1.8 Di VC USD (F016)"}, - {750, "Tamron SP 45mm f/1.8 Di VC USD (F013)"}, - {751, "Canon EF 16-35mm f/2.8L III USM"}, - {752, "Canon EF 24-105mm f/4L IS II USM"}, - {753, "Canon EF 85mm f/1.4L IS USM"}, - {754, "Canon EF 70-200mm f/4L IS II USM"}, - {757, "Canon EF 400mm f/2.8L IS III USM"}, - {758, "Canon EF 600mm f/4L IS III USM"}, - {1136, "Sigma 24-70mm f/2.8 DG OS HSM | A"}, - {4142, "Canon EF-S 18-135mm f/3.5-5.6 IS STM"}, - {4143, "Canon EF-M 18-55mm f/3.5-5.6 IS STM or Tamron Lens"}, - {4143, "Tamron 18-200mm f/3.5-6.3 Di III VC"}, - {4144, "Canon EF 40mm f/2.8 STM"}, - {4145, "Canon EF-M 22mm f/2 STM"}, - {4146, "Canon EF-S 18-55mm f/3.5-5.6 IS STM"}, - {4147, "Canon EF-M 11-22mm f/4-5.6 IS STM"}, - {4148, "Canon EF-S 55-250mm f/4-5.6 IS STM"}, - {4149, "Canon EF-M 55-200mm f/4.5-6.3 IS STM"}, - {4150, "Canon EF-S 10-18mm f/4.5-5.6 IS STM"}, - {4152, "Canon EF 24-105mm f/3.5-5.6 IS STM"}, - {4153, "Canon EF-M 15-45mm f/3.5-6.3 IS STM"}, - {4154, "Canon EF-S 24mm f/2.8 STM"}, - {4155, "Canon EF-M 28mm f/3.5 Macro IS STM"}, - {4156, "Canon EF 50mm f/1.8 STM"}, - {4157, "Canon EF-M 18-150mm f/3.5-6.3 IS STM"}, - {4158, "Canon EF-S 18-55mm f/4-5.6 IS STM"}, - {4159, "Canon EF-M 32mm f/1.4 STM"}, - {4160, "Canon EF-S 35mm f/2.8 Macro IS STM"}, - {4208, "Sigma 56mm f/1.4 DC DN | C or other Sigma Lens"}, - {4208, "Sigma 30mm F1.4 DC DN | C"}, - {36910, "Canon EF 70-300mm f/4-5.6 IS II USM"}, - {36912, "Canon EF-S 18-135mm f/3.5-5.6 IS USM"}, - {61182, "Canon RF 35mm F1.8 Macro IS STM or other Canon RF Lens"}, - {61182, "Canon RF 50mm F1.2 L USM"}, - {61182, "Canon RF 24-105mm F4 L IS USM"}, - {61182, "Canon RF 28-70mm F2 L USM"}, - {61182, "Canon RF 85mm F1.2L USM"}, - {61182, "Canon RF 85mm F1.2L USM DS"}, - {61182, "Canon RF 24-70mm F2.8L IS USM"}, - {61182, "Canon RF 15-35mm F2.8L IS USM"}, - {61182, "Canon RF 24-240mm F4-6.3 IS USM"}, - {61182, "Canon RF 70-200mm F2.8L IS USM"}, - {61182, "Canon RF 85mm F2 MACRO IS STM"}, - {61182, "Canon RF 600mm F11 IS STM"}, - {61182, "Canon RF 600mm F11 IS STM + RF1.4x"}, - {61182, "Canon RF 600mm F11 IS STM + RF2x"}, - {61182, "Canon RF 800mm F11 IS STM"}, - {61182, "Canon RF 800mm F11 IS STM + RF1.4x"}, - {61182, "Canon RF 800mm F11 IS STM + RF2x"}, - {61182, "Canon RF 24-105mm F4-7.1 IS STM"}, - {61182, "Canon RF 100-500mm F4.5-7.1L IS USM"}, - {61182, "Canon RF 100-500mm F4.5-7.1L IS USM + RF1.4x"}, - {61182, "Canon RF 100-500mm F4.5-7.1L IS USM + RF2x"}, - {61182, "Canon RF 70-200mm F4L IS USM"}, - {61182, "Canon RF 100mm F2.8L MACRO IS USM"}, - {61182, "Canon RF 50mm F1.8 STM"}, - {61182, "Canon RF 14-35mm F4L IS USM"}, - {61182, "Canon RF-S 18-45mm F4.5-6.3 IS STM"}, - {61182, "Canon RF 100-400mm F5.6-8 IS USM"}, - {61182, "Canon RF 100-400mm F5.6-8 IS USM + RF1.4x"}, - {61182, "Canon RF 100-400mm F5.6-8 IS USM + RF2x"}, - {61182, "Canon RF-S 18-150mm F3.5-6.3 IS STM"}, - {61182, "Canon RF 24mm F1.8 MACRO IS STM"}, - {61182, "Canon RF 16mm F2.8 STM"}, - {61182, "Canon RF 400mm F2.8L IS USM"}, - {61182, "Canon RF 400mm F2.8L IS USM + RF1.4x"}, - {61182, "Canon RF 400mm F2.8L IS USM + RF2x"}, - {61182, "Canon RF 600mm F4L IS USM"}, - {61182, "Canon RF 15-30mm F4.5-6.3 IS STM"}, - {61182, "Canon RF 800mm F5.6L IS USM"}, - {61182, "Canon RF 1200mm F8L IS USM"}, - {61182, "Canon RF 5.2mm F2.8L Dual Fisheye 3D VR"}, - {61491, "Canon CN-E 14mm T3.1 L F"}, - {61492, "Canon CN-E 24mm T1.5 L F"}, - {61494, "Canon CN-E 85mm T1.3 L F"}, - {61495, "Canon CN-E 135mm T2.2 L F"}, - {61496, "Canon CN-E 35mm T1.5 L F"}, - {65535, "n/a"} - }; - } - - std::string toString (const Tag* t) const override - { - int lensID = t->toInt(); - - it_t r; - size_t nFound = choices.count ( lensID ); - - if (1 == nFound) { - r = choices.find ( lensID ); - return r->second; - } - - Tag *apertureTag = t->getParent()->getRoot()->findTag ("MaxAperture"); - Tag *focalLengthTag = t->getParent()->getRoot()->findTag ("FocalLength"); - Tag *focalLengthMaxTag = t->getParent()->getRoot()->findTag ("LongFocal"); - Tag *focalLengthMinTag = t->getParent()->getRoot()->findTag ("ShortFocal"); - Tag *unitTag = t->getParent()->getRoot()->findTag ("FocalUnits"); - double maxApertureAtFocal = 0.; - double focalLength = 0.; - double focalLengthMin = 0.; - double focalLengthMax = 0.; - - if ( apertureTag ) { - maxApertureAtFocal = pow (2.0, apertureTag->toDouble() / 64.0); - } - - if ( unitTag ) { - double unit = unitTag->toDouble(); - - if ( unit == 0. ) { - unit = 1; - } - - if ( focalLengthTag ) { - focalLength = focalLengthTag->toDouble(); - } - - if ( focalLengthMinTag ) { - focalLengthMin = focalLengthMinTag->toDouble() / unit; - } - - if ( focalLengthMaxTag ) { - focalLengthMax = focalLengthMaxTag->toDouble() / unit; - } - } - - std::ostringstream s; - s << "Unknown "; - - if (focalLengthMin > 0.) { - s << focalLengthMin; - } - - if (focalLengthMax > 0. && focalLengthMax != focalLengthMin) { - s << "-" << focalLengthMax; - } - - if (focalLengthMin > 0.) { - s << "mm"; - } - - s << " (" << lensID << ")"; - - if (0 == nFound) { - return s.str(); - } - - double deltaMin = 1000.; - - std::string bestMatch (s.str()); - std::ostringstream candidates; - - for (r = choices.lower_bound (lensID); r != choices.upper_bound (lensID); r++) { - double a1, a2, f1, f2, dif; - - if ( !extractLensInfo ( r->second, f1, f2, a1, a2) ) { - continue; - } - - if ( f1 == 0. || a1 == 0.) { - continue; - } - - if ( focalLength < f1 - .5 || focalLength > f2 + 0.5 ) { - continue; - } - - if ( focalLengthMin > 0. && fabs (f1 - focalLengthMin) > 0.5 ) { - continue; - } - - if ( focalLengthMax > 0. && fabs (f2 - focalLengthMax) > 0.5 ) { - continue; - } - - if ( maxApertureAtFocal > 0.1) { - double lensAperture; - - if ( maxApertureAtFocal < a1 - 0.15 || maxApertureAtFocal > a2 + 0.15) { - continue; - } - - if ( a1 == a2 || f1 == f2) { - lensAperture = a1; - } else { - lensAperture = exp ( log (a1) + (log (a2) - log (a1)) / (log (f2) - log (f1)) * (log (focalLength) - log (f1)) ); - } - - dif = abs (lensAperture - maxApertureAtFocal); - } else { - dif = 0; - } - - if ( dif < deltaMin ) { - deltaMin = dif; - bestMatch = r->second; - } - - if ( dif < 0.15) { - if ( candidates.tellp() ) { - candidates << "\n or " << r->second; - } else { - candidates << r->second; - } - } - - } - - if ( !candidates.tellp() ) { - return bestMatch; - } else { - return candidates.str(); - } - } -}; -CALensInterpreter caLensInterpreter; - -class CAFocalTypeInterpreter : public ChoiceInterpreter<> -{ -public: - CAFocalTypeInterpreter() - { - choices[0] = "Fixed"; - choices[1] = "Fixed"; - choices[2] = "Zoom"; - } -}; -CAFocalTypeInterpreter caFocalTypeInterpreter; - -class CAFocalPlaneInterpreter : public Interpreter -{ -public: - std::string toString (const Tag* t) const override - { - int val = t->toInt(); - - if ( val < 40 ) { - return "undef"; - } - - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%.2fmm", val * 25.4 / 1000); - return buffer; - } -}; -CAFocalPlaneInterpreter caFocalPlaneInterpreter; - -class CAExposureTimeInterpreter : public Interpreter -{ -public: - std::string toString (const Tag* t) const override - { - char buffer[32]; - double d = pow (2, - t->toInt() / 32.0); - snprintf(buffer, sizeof(buffer), "%.3f", d); - return buffer; - } -}; -CAExposureTimeInterpreter caExposureTimeInterpreter; - -class CAEVInterpreter : public Interpreter -{ - std::string toString (const Tag* t) const override - { - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%.1f", t->toDouble() / 32.0 ); - return buffer; - } -}; -CAEVInterpreter caEVInterpreter; - -class CABaseISOInterpreter : public Interpreter -{ -public: - std::string toString (const Tag* t) const override - { - char buffer[32]; - int a = t->toInt(); - snprintf(buffer, sizeof(buffer), "%d", a); - return buffer; - } - double toDouble (const Tag* t, int ofs) override - { - int a = Interpreter::toInt (t, ofs); - - if (a > 1) { - double i = pow (2., double (a) / 32. - 4.) * 50.; - return i; - } else { - return 0.; - } - } - int toInt (const Tag* t, int ofs, TagType astype) override - { - int a = Interpreter::toInt (t, ofs, astype); - - if (a > 1) { - int i = static_cast(powf (2.f, static_cast(a) / 32.f - 4.f)) * 50.0 + 0.5; - return i; - } else { - return 0; - } - } -}; -CABaseISOInterpreter caBaseISOInterpreter; - -class CAToneCurveInterpreter : public ChoiceInterpreter<> -{ -public: - CAToneCurveInterpreter() - { - choices[0] = "Standard"; - choices[1] = "Manual"; - choices[2] = "Custom"; - } -}; -CAToneCurveInterpreter caToneCurveInterpreter; - -class CASharpnessFrequencyInterpreter : public ChoiceInterpreter<> -{ -public: - CASharpnessFrequencyInterpreter() - { - choices[0] = "N/A"; - choices[1] = "Lowest"; - choices[2] = "Low"; - choices[3] = "Standard"; - choices[4] = "High"; - choices[5] = "Highest"; - } -}; -CASharpnessFrequencyInterpreter caSharpnessFrequencyInterpreter; - -class CAWhiteBalanceInterpreter : public ChoiceInterpreter<> -{ -public: - CAWhiteBalanceInterpreter() - { - choices[0] = "Auto"; - choices[1] = "Daylight"; - choices[2] = "Cloudy"; - choices[3] = "Tungsten"; - choices[4] = "Fluorescent"; - choices[5] = "Flash"; - choices[6] = "Custom"; - choices[7] = "Black & White"; - choices[8] = "Shade"; - choices[9] = "Manual Temperature (Kelvin)"; - choices[10] = "PC Set1"; - choices[11] = "PC Set2"; - choices[12] = "PC Set3"; - choices[14] = "Daylight Fluorescent"; - choices[15] = "Custom 1"; - choices[16] = "Custom 2"; - choices[17] = "Underwater"; - choices[18] = "Custom 3"; - choices[19] = "Custom 4"; - choices[20] = "PC Set4"; - choices[21] = "PC Set5"; - choices[23] = "Auto (ambience priority)"; - } -}; -CAWhiteBalanceInterpreter caWhiteBalanceInterpreter; - -class CAPictureStyleInterpreter : public ChoiceInterpreter<> -{ -public: - CAPictureStyleInterpreter() - { - choices[0] = "None"; - choices[1] = "Standard"; - choices[2] = "Portrait"; - choices[3] = "High Saturation"; - choices[4] = "Adobe RGB"; - choices[5] = "Low Saturation"; - choices[6] = "CM Set 1"; - choices[7] = "CM Set 2"; - choices[0x21] = "User Def. 1"; - choices[0x22] = "User Def. 2"; - choices[0x23] = "User Def. 3"; - choices[0x41] = "PC 1"; - choices[0x42] = "PC 2"; - choices[0x43] = "PC 3"; - choices[0x81] = "Standard"; - choices[0x82] = "Portrait"; - choices[0x83] = "Landscape"; - choices[0x84] = "Neutral"; - choices[0x85] = "Faithful"; - choices[0x86] = "Monochrome"; - choices[0x87] = "Auto"; - choices[0x88] = "Fine Detail"; - } -}; -CAPictureStyleInterpreter caPictureStyleInterpreter; - -class CASlowShutterInterpreter : public ChoiceInterpreter<> -{ -public: - CASlowShutterInterpreter() - { - choices[0] = "Off"; - choices[1] = "Night Scene"; - choices[2] = "On"; - choices[3] = "None"; - } -}; -CASlowShutterInterpreter caSlowShutterInterpreter; - -class CAFlashGuideNumberInterpreter : public Interpreter -{ -public: - std::string toString (const Tag* t) const override - { - int n = t->toInt(); - - if ( n == -1) { - return "undef"; - } - - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%.0f", n / 32. ); - return buffer; - } -}; -CAFlashGuideNumberInterpreter caFlashGuideNumberInterpreter; - -class CAAFPointsInFocusInterpreter : public ChoiceInterpreter<> -{ -public: - CAAFPointsInFocusInterpreter() - { - choices[0x3000] = "None (MF)"; - choices[0x3001] = "Right"; - choices[0x3002] = "Center"; - choices[0x3003] = "Center+Right"; - choices[0x3004] = "Left"; - choices[0x3005] = "Left+Right"; - choices[0x3006] = "Left+Center"; - choices[0x3007] = "All"; - } -}; -CAAFPointsInFocusInterpreter caAFPointsInFocusInterpreter; - -class CAAutoExposureBracketingInterpreter : public ChoiceInterpreter -{ -public: - CAAutoExposureBracketingInterpreter() - { - choices[-1] = "On "; - choices[0] = "Off "; - choices[1] = "On (shot 1)"; - choices[2] = "On (shot 2)"; - choices[3] = "On (shot 3)"; - } -}; -CAAutoExposureBracketingInterpreter caAutoExposureBracketingInterpreter; - -class CAControModeInterpreter : public ChoiceInterpreter<> -{ -public: - CAControModeInterpreter() - { - choices[0] = "n/a"; - choices[1] = "Camera Local Control"; - choices[3] = "Computer Remote Control"; - } -}; -CAControModeInterpreter caControModeInterpreter; - -class CAFocusDistanceInterpreter : public Interpreter -{ -public: - std::string toString (const Tag* t) const override - { - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%.2f", t->toDouble() / 100 ); - return buffer; - } -}; -CAFocusDistanceInterpreter caFocusDistanceInterpreter; - -class CAMeasuredEVInterpreter : public Interpreter -{ -public: - std::string toString (const Tag* t) const override - { - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%.1f", t->toDouble() / 8 - 6 ); - return buffer; - } -}; -CAMeasuredEVInterpreter caMeasuredEVInterpreter; - -class CACameraTypeInterpreter : public ChoiceInterpreter<> -{ -public: - CACameraTypeInterpreter() - { - choices[248] = "EOS High-end"; - choices[250] = "Compact"; - choices[252] = "EOS Mid-range"; - choices[255] = "DV Camera"; - } -}; -CACameraTypeInterpreter caCameraTypeInterpreter; - -class CAAutoRotateInterpreter : public ChoiceInterpreter -{ -public: - CAAutoRotateInterpreter() - { - choices[-1] = "Rotated by Software"; - choices[0] = "None"; - choices[1] = "Rotate 90 CW"; - choices[2] = "Rotate 180"; - choices[3] = "Rotate 270 CW"; - } -}; -CAAutoRotateInterpreter caAutoRotateInterpreter; - -class CABracketModeInterpreter : public ChoiceInterpreter<> -{ -public: - CABracketModeInterpreter() - { - choices[0] = "Off"; - choices[1] = "AEB"; - choices[2] = "FEB"; - choices[3] = "ISO"; - choices[4] = "WB"; - } -}; -CABracketModeInterpreter caBracketModeInterpreter; - -class CARAWJpegQualityInterpreter : public ChoiceInterpreter<> -{ -public: - CARAWJpegQualityInterpreter() - { - choices[1] = "Economy"; - choices[2] = "Normal"; - choices[3] = "Fine"; - choices[4] = "RAW"; - choices[5] = "Superfine"; - choices[130] = "Normal Movie"; - choices[131] = "Movie (2)"; - } -}; -CARAWJpegQualityInterpreter caRAWJpegQualityInterpreter; - -class CAJpegSizeInterpreter : public ChoiceInterpreter<> -{ -public: - CAJpegSizeInterpreter() - { - choices[0] = "Large"; - choices[1] = "Medium"; - choices[2] = "Small"; - choices[5] = "Medium 1"; - choices[6] = "Medium 2"; - choices[7] = "Medium 3"; - choices[8] = "Postcard"; - choices[9] = "Widescreen"; - choices[10] = "Medium Widescreen"; - choices[14] = "Small 1"; - choices[15] = "Small 2"; - choices[16] = "Small 3"; - choices[128] = "640x480 Movie"; - choices[129] = "Medium Movie"; - choices[130] = "Small Movie"; - choices[137] = "1280x720 Movie"; - choices[142] = "1920x1080 Movie"; - } -}; -CAJpegSizeInterpreter caJpegSizeInterpreter; - -class CAWBBracketModeInterpreter : public ChoiceInterpreter<> -{ -public: - CAWBBracketModeInterpreter() - { - choices[0] = "Off"; - choices[1] = "On (shift AB)"; - choices[2] = "On (shift GM)"; - } -}; -CAWBBracketModeInterpreter caWBBracketModeInterpreter; - -class CAFilterEffectInterpreter : public ChoiceInterpreter<> -{ -public: - CAFilterEffectInterpreter() - { - choices[0] = "None"; - choices[1] = "Yellow"; - choices[2] = "Orange"; - choices[3] = "Red"; - choices[4] = "Green"; - } -}; -CAFilterEffectInterpreter caFilterEffectInterpreter; - -class CAToningEffectInterpreter : public ChoiceInterpreter<> -{ -public: - CAToningEffectInterpreter() - { - choices[0] = "None"; - choices[1] = "Sepia"; - choices[2] = "Blue"; - choices[3] = "Purple"; - choices[4] = "Green"; - } -}; -CAToningEffectInterpreter caToningEffectInterpreter; - -class CAFileNumberInterpreter : public Interpreter -{ -public: - std::string toString (const Tag* t) const override - { - unsigned long val = t->toInt (0, LONG); - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%ld", ((val & 0xffc0) >> 6) * 10000 + ((val >> 16) & 0xff) + ((val & 0x3f) << 8) ); - return buffer; - } -}; -CAFileNumberInterpreter caFileNumberInterpreter; - -// CanonModelID -class CAModelIDInterpreter : public ChoiceInterpreter<> -{ -public: - CAModelIDInterpreter () - { - choices[1042] = "EOS M50 / Kiss M"; - choices[2049] = "PowerShot SX740 HS"; - choices[2052] = "PowerShot G5 X Mark II"; - choices[2053] = "PowerShot SX70 HS"; - choices[2056] = "PowerShot G7 X Mark III"; - choices[2065] = "EOS M6 Mark II"; - choices[2066] = "EOS M200"; - choices[16842752] = "PowerShot A30"; - choices[17039360] = "PowerShot S300 / Digital IXUS 300 / IXY Digital 300"; - choices[17170432] = "PowerShot A20"; - choices[17301504] = "PowerShot A10"; - choices[17367040] = "PowerShot S110 / Digital IXUS v / IXY Digital 200"; - choices[17825792] = "PowerShot G2"; - choices[17891328] = "PowerShot S40"; - choices[17956864] = "PowerShot S30"; - choices[18022400] = "PowerShot A40"; - choices[18087936] = "EOS D30"; - choices[18153472] = "PowerShot A100"; - choices[18219008] = "PowerShot S200 / Digital IXUS v2 / IXY Digital 200a"; - choices[18284544] = "PowerShot A200"; - choices[18350080] = "PowerShot S330 / Digital IXUS 330 / IXY Digital 300a"; - choices[18415616] = "PowerShot G3"; - choices[18939904] = "PowerShot S45"; - choices[19070976] = "PowerShot SD100 / Digital IXUS II / IXY Digital 30"; - choices[19136512] = "PowerShot S230 / Digital IXUS v3 / IXY Digital 320"; - choices[19202048] = "PowerShot A70"; - choices[19267584] = "PowerShot A60"; - choices[19333120] = "PowerShot S400 / Digital IXUS 400 / IXY Digital 400"; - choices[19464192] = "PowerShot G5"; - choices[19922944] = "PowerShot A300"; - choices[19988480] = "PowerShot S50"; - choices[20185088] = "PowerShot A80"; - choices[20250624] = "PowerShot SD10 / Digital IXUS i / IXY Digital L"; - choices[20316160] = "PowerShot S1 IS"; - choices[20381696] = "PowerShot Pro1"; - choices[20447232] = "PowerShot S70"; - choices[20512768] = "PowerShot S60"; - choices[20971520] = "PowerShot G6"; - choices[21037056] = "PowerShot S500 / Digital IXUS 500 / IXY Digital 500"; - choices[21102592] = "PowerShot A75"; - choices[21233664] = "PowerShot SD110 / Digital IXUS IIs / IXY Digital 30a"; - choices[21299200] = "PowerShot A400"; - choices[21430272] = "PowerShot A310"; - choices[21561344] = "PowerShot A85"; - choices[22151168] = "PowerShot S410 / Digital IXUS 430 / IXY Digital 450"; - choices[22216704] = "PowerShot A95"; - choices[22282240] = "PowerShot SD300 / Digital IXUS 40 / IXY Digital 50"; - choices[22347776] = "PowerShot SD200 / Digital IXUS 30 / IXY Digital 40"; - choices[22413312] = "PowerShot A520"; - choices[22478848] = "PowerShot A510"; - choices[22609920] = "PowerShot SD20 / Digital IXUS i5 / IXY Digital L2"; - choices[23330816] = "PowerShot S2 IS"; - choices[23396352] = "PowerShot SD430 / Digital IXUS Wireless / IXY Digital Wireless"; - choices[23461888] = "PowerShot SD500 / Digital IXUS 700 / IXY Digital 600"; - choices[23494656] = "EOS D60"; - choices[24117248] = "PowerShot SD30 / Digital IXUS i Zoom / IXY Digital L3"; - choices[24379392] = "PowerShot A430"; - choices[24444928] = "PowerShot A410"; - choices[24510464] = "PowerShot S80"; - choices[24641536] = "PowerShot A620"; - choices[24707072] = "PowerShot A610"; - choices[25165824] = "PowerShot SD630 / Digital IXUS 65 / IXY Digital 80"; - choices[25231360] = "PowerShot SD450 / Digital IXUS 55 / IXY Digital 60"; - choices[25296896] = "PowerShot TX1"; - choices[25624576] = "PowerShot SD400 / Digital IXUS 50 / IXY Digital 55"; - choices[25690112] = "PowerShot A420"; - choices[25755648] = "PowerShot SD900 / Digital IXUS 900 Ti / IXY Digital 1000"; - choices[26214400] = "PowerShot SD550 / Digital IXUS 750 / IXY Digital 700"; - choices[26345472] = "PowerShot A700"; - choices[26476544] = "PowerShot SD700 IS / Digital IXUS 800 IS / IXY Digital 800 IS"; - choices[26542080] = "PowerShot S3 IS"; - choices[26607616] = "PowerShot A540"; - choices[26673152] = "PowerShot SD600 / Digital IXUS 60 / IXY Digital 70"; - choices[26738688] = "PowerShot G7"; - choices[26804224] = "PowerShot A530"; - choices[33554432] = "PowerShot SD800 IS / Digital IXUS 850 IS / IXY Digital 900 IS"; - choices[33619968] = "PowerShot SD40 / Digital IXUS i7 / IXY Digital L4"; - choices[33685504] = "PowerShot A710 IS"; - choices[33751040] = "PowerShot A640"; - choices[33816576] = "PowerShot A630"; - choices[34144256] = "PowerShot S5 IS"; - choices[34603008] = "PowerShot A460"; - choices[34734080] = "PowerShot SD850 IS / Digital IXUS 950 IS / IXY Digital 810 IS"; - choices[34799616] = "PowerShot A570 IS"; - choices[34865152] = "PowerShot A560"; - choices[34930688] = "PowerShot SD750 / Digital IXUS 75 / IXY Digital 90"; - choices[34996224] = "PowerShot SD1000 / Digital IXUS 70 / IXY Digital 10"; - choices[35127296] = "PowerShot A550"; - choices[35192832] = "PowerShot A450"; - choices[35848192] = "PowerShot G9"; - choices[35913728] = "PowerShot A650 IS"; - choices[36044800] = "PowerShot A720 IS"; - choices[36241408] = "PowerShot SX100 IS"; - choices[36700160] = "PowerShot SD950 IS / Digital IXUS 960 IS / IXY Digital 2000 IS"; - choices[36765696] = "PowerShot SD870 IS / Digital IXUS 860 IS / IXY Digital 910 IS"; - choices[36831232] = "PowerShot SD890 IS / Digital IXUS 970 IS / IXY Digital 820 IS"; - choices[37093376] = "PowerShot SD790 IS / Digital IXUS 90 IS / IXY Digital 95 IS"; - choices[37158912] = "PowerShot SD770 IS / Digital IXUS 85 IS / IXY Digital 25 IS"; - choices[37224448] = "PowerShot A590 IS"; - choices[37289984] = "PowerShot A580"; - choices[37879808] = "PowerShot A470"; - choices[37945344] = "PowerShot SD1100 IS / Digital IXUS 80 IS / IXY Digital 20 IS"; - choices[38141952] = "PowerShot SX1 IS"; - choices[38207488] = "PowerShot SX10 IS"; - choices[38273024] = "PowerShot A1000 IS"; - choices[38338560] = "PowerShot G10"; - choices[38862848] = "PowerShot A2000 IS"; - choices[38928384] = "PowerShot SX110 IS"; - choices[38993920] = "PowerShot SD990 IS / Digital IXUS 980 IS / IXY Digital 3000 IS"; - choices[39059456] = "PowerShot SD880 IS / Digital IXUS 870 IS / IXY Digital 920 IS"; - choices[39124992] = "PowerShot E1"; - choices[39190528] = "PowerShot D10"; - choices[39256064] = "PowerShot SD960 IS / Digital IXUS 110 IS / IXY Digital 510 IS"; - choices[39321600] = "PowerShot A2100 IS"; - choices[39387136] = "PowerShot A480"; - choices[39845888] = "PowerShot SX200 IS"; - choices[39911424] = "PowerShot SD970 IS / Digital IXUS 990 IS / IXY Digital 830 IS"; - choices[39976960] = "PowerShot SD780 IS / Digital IXUS 100 IS / IXY Digital 210 IS"; - choices[40042496] = "PowerShot A1100 IS"; - choices[40108032] = "PowerShot SD1200 IS / Digital IXUS 95 IS / IXY Digital 110 IS"; - choices[40894464] = "PowerShot G11"; - choices[40960000] = "PowerShot SX120 IS"; - choices[41025536] = "PowerShot S90"; - choices[41222144] = "PowerShot SX20 IS"; - choices[41287680] = "PowerShot SD980 IS / Digital IXUS 200 IS / IXY Digital 930 IS"; - choices[41353216] = "PowerShot SD940 IS / Digital IXUS 120 IS / IXY Digital 220 IS"; - choices[41943040] = "PowerShot A495"; - choices[42008576] = "PowerShot A490"; - choices[42074112] = "PowerShot A3100/A3150 IS"; - choices[42139648] = "PowerShot A3000 IS"; - choices[42205184] = "PowerShot SD1400 IS / IXUS 130 / IXY 400F"; - choices[42270720] = "PowerShot SD1300 IS / IXUS 105 / IXY 200F"; - choices[42336256] = "PowerShot SD3500 IS / IXUS 210 / IXY 10S"; - choices[42401792] = "PowerShot SX210 IS"; - choices[42467328] = "PowerShot SD4000 IS / IXUS 300 HS / IXY 30S"; - choices[42532864] = "PowerShot SD4500 IS / IXUS 1000 HS / IXY 50S"; - choices[43122688] = "PowerShot G12"; - choices[43188224] = "PowerShot SX30 IS"; - choices[43253760] = "PowerShot SX130 IS"; - choices[43319296] = "PowerShot S95"; - choices[43515904] = "PowerShot A3300 IS"; - choices[43581440] = "PowerShot A3200 IS"; - choices[50331648] = "PowerShot ELPH 500 HS / IXUS 310 HS / IXY 31S"; - choices[50397184] = "PowerShot Pro90 IS"; - choices[50397185] = "PowerShot A800"; - choices[50462720] = "PowerShot ELPH 100 HS / IXUS 115 HS / IXY 210F"; - choices[50528256] = "PowerShot SX230 HS"; - choices[50593792] = "PowerShot ELPH 300 HS / IXUS 220 HS / IXY 410F"; - choices[50659328] = "PowerShot A2200"; - choices[50724864] = "PowerShot A1200"; - choices[50790400] = "PowerShot SX220 HS"; - choices[50855936] = "PowerShot G1 X"; - choices[50921472] = "PowerShot SX150 IS"; - choices[51380224] = "PowerShot ELPH 510 HS / IXUS 1100 HS / IXY 51S"; - choices[51445760] = "PowerShot S100 (new)"; - choices[51511296] = "PowerShot ELPH 310 HS / IXUS 230 HS / IXY 600F"; - choices[51576832] = "PowerShot SX40 HS"; - choices[51642368] = "IXY 32S"; - choices[51773440] = "PowerShot A1300"; - choices[51838976] = "PowerShot A810"; - choices[51904512] = "PowerShot ELPH 320 HS / IXUS 240 HS / IXY 420F"; - choices[51970048] = "PowerShot ELPH 110 HS / IXUS 125 HS / IXY 220F"; - choices[52428800] = "PowerShot D20"; - choices[52494336] = "PowerShot A4000 IS"; - choices[52559872] = "PowerShot SX260 HS"; - choices[52625408] = "PowerShot SX240 HS"; - choices[52690944] = "PowerShot ELPH 530 HS / IXUS 510 HS / IXY 1"; - choices[52756480] = "PowerShot ELPH 520 HS / IXUS 500 HS / IXY 3"; - choices[52822016] = "PowerShot A3400 IS"; - choices[52887552] = "PowerShot A2400 IS"; - choices[52953088] = "PowerShot A2300"; - choices[53608448] = "PowerShot S100V"; - choices[53673984] = "PowerShot G15"; - choices[53739520] = "PowerShot SX50 HS"; - choices[53805056] = "PowerShot SX160 IS"; - choices[53870592] = "PowerShot S110 (new)"; - choices[53936128] = "PowerShot SX500 IS"; - choices[54001664] = "PowerShot N"; - choices[54067200] = "IXUS 245 HS / IXY 430F"; - choices[54525952] = "PowerShot SX280 HS"; - choices[54591488] = "PowerShot SX270 HS"; - choices[54657024] = "PowerShot A3500 IS"; - choices[54722560] = "PowerShot A2600"; - choices[54788096] = "PowerShot SX275 HS"; - choices[54853632] = "PowerShot A1400"; - choices[54919168] = "PowerShot ELPH 130 IS / IXUS 140 / IXY 110F"; - choices[54984704] = "PowerShot ELPH 115/120 IS / IXUS 132/135 / IXY 90F/100F"; - choices[55115776] = "PowerShot ELPH 330 HS / IXUS 255 HS / IXY 610F"; - choices[55640064] = "PowerShot A2500"; - choices[55836672] = "PowerShot G16"; - choices[55902208] = "PowerShot S120"; - choices[55967744] = "PowerShot SX170 IS"; - choices[56098816] = "PowerShot SX510 HS"; - choices[56164352] = "PowerShot S200 (new)"; - choices[56623104] = "IXY 620F"; - choices[56688640] = "PowerShot N100"; - choices[56885248] = "PowerShot G1 X Mark II"; - choices[56950784] = "PowerShot D30"; - choices[57016320] = "PowerShot SX700 HS"; - choices[57081856] = "PowerShot SX600 HS"; - choices[57147392] = "PowerShot ELPH 140 IS / IXUS 150 / IXY 130"; - choices[57212928] = "PowerShot ELPH 135 / IXUS 145 / IXY 120"; - choices[57671680] = "PowerShot ELPH 340 HS / IXUS 265 HS / IXY 630"; - choices[57737216] = "PowerShot ELPH 150 IS / IXUS 155 / IXY 140"; - choices[57933824] = "EOS M3"; - choices[57999360] = "PowerShot SX60 HS"; - choices[58064896] = "PowerShot SX520 HS"; - choices[58130432] = "PowerShot SX400 IS"; - choices[58195968] = "PowerShot G7 X"; - choices[58261504] = "PowerShot N2"; - choices[58720256] = "PowerShot SX530 HS"; - choices[58851328] = "PowerShot SX710 HS"; - choices[58916864] = "PowerShot SX610 HS"; - choices[58982400] = "EOS M10"; - choices[59047936] = "PowerShot G3 X"; - choices[59113472] = "PowerShot ELPH 165 HS / IXUS 165 / IXY 160"; - choices[59179008] = "PowerShot ELPH 160 / IXUS 160"; - choices[59244544] = "PowerShot ELPH 350 HS / IXUS 275 HS / IXY 640"; - choices[59310080] = "PowerShot ELPH 170 IS / IXUS 170"; - choices[59834368] = "PowerShot SX410 IS"; - choices[59965440] = "PowerShot G9 X"; - choices[60030976] = "EOS M5"; - choices[60096512] = "PowerShot G5 X"; - choices[60227584] = "PowerShot G7 X Mark II"; - choices[60293120] = "EOS M100"; - choices[60358656] = "PowerShot ELPH 360 HS / IXUS 285 HS / IXY 650"; - choices[67174400] = "PowerShot SX540 HS"; - choices[67239936] = "PowerShot SX420 IS"; - choices[67305472] = "PowerShot ELPH 190 IS / IXUS 180 / IXY 190"; - choices[67371008] = "PowerShot G1"; - choices[67371009] = "PowerShot ELPH 180 IS / IXUS 175 / IXY 180"; - choices[67436544] = "PowerShot SX720 HS"; - choices[67502080] = "PowerShot SX620 HS"; - choices[67567616] = "EOS M6"; - choices[68157440] = "PowerShot G9 X Mark II"; - choices[68485120] = "PowerShot ELPH 185 / IXUS 185 / IXY 200"; - choices[68550656] = "PowerShot SX430 IS"; - choices[68616192] = "PowerShot SX730 HS"; - choices[68681728] = "PowerShot G1 X Mark III"; - choices[100925440] = "PowerShot S100 / Digital IXUS / IXY Digital"; - choices[1074255475] = "DC19/DC21/DC22"; - choices[1074255476] = "XH A1"; - choices[1074255477] = "HV10"; - choices[1074255478] = "MD130/MD140/MD150/MD160/ZR850"; - choices[1074255735] = "DC50"; - choices[1074255736] = "HV20"; - choices[1074255737] = "DC211"; - choices[1074255738] = "HG10"; - choices[1074255739] = "HR10"; - choices[1074255741] = "MD255/ZR950"; - choices[1074255900] = "HF11"; - choices[1074255992] = "HV30"; - choices[1074255996] = "XH A1S"; - choices[1074255998] = "DC301/DC310/DC311/DC320/DC330"; - choices[1074255999] = "FS100"; - choices[1074256000] = "HF10"; - choices[1074256002] = "HG20/HG21"; - choices[1074256165] = "HF21"; - choices[1074256166] = "HF S11"; - choices[1074256248] = "HV40"; - choices[1074256263] = "DC410/DC411/DC420"; - choices[1074256264] = "FS19/FS20/FS21/FS22/FS200"; - choices[1074256265] = "HF20/HF200"; - choices[1074256266] = "HF S10/S100"; - choices[1074256526] = "HF R10/R16/R17/R18/R100/R106"; - choices[1074256527] = "HF M30/M31/M36/M300/M306"; - choices[1074256528] = "HF S20/S21/S200"; - choices[1074256530] = "FS31/FS36/FS37/FS300/FS305/FS306/FS307"; - choices[1074257056] = "EOS C300"; - choices[1074257321] = "HF G25"; - choices[1074257844] = "XC10"; - choices[1074258371] = "EOS C200"; - choices[2147483649] = "EOS-1D"; - choices[2147484007] = "EOS-1DS"; - choices[2147484008] = "EOS 10D"; - choices[2147484009] = "EOS-1D Mark III"; - choices[2147484016] = "EOS Digital Rebel / 300D / Kiss Digital"; - choices[2147484020] = "EOS-1D Mark II"; - choices[2147484021] = "EOS 20D"; - choices[2147484022] = "EOS Digital Rebel XSi / 450D / Kiss X2"; - choices[2147484040] = "EOS-1Ds Mark II"; - choices[2147484041] = "EOS Digital Rebel XT / 350D / Kiss Digital N"; - choices[2147484048] = "EOS 40D"; - choices[2147484179] = "EOS 5D"; - choices[2147484181] = "EOS-1Ds Mark III"; - choices[2147484184] = "EOS 5D Mark II"; - choices[2147484185] = "WFT-E1"; - choices[2147484210] = "EOS-1D Mark II N"; - choices[2147484212] = "EOS 30D"; - choices[2147484214] = "EOS Digital Rebel XTi / 400D / Kiss Digital X"; - choices[2147484225] = "WFT-E2"; - choices[2147484230] = "WFT-E3"; - choices[2147484240] = "EOS 7D"; - choices[2147484242] = "EOS Rebel T1i / 500D / Kiss X3"; - choices[2147484244] = "EOS Rebel XS / 1000D / Kiss F"; - choices[2147484257] = "EOS 50D"; - choices[2147484265] = "EOS-1D X"; - choices[2147484272] = "EOS Rebel T2i / 550D / Kiss X4"; - choices[2147484273] = "WFT-E4"; - choices[2147484275] = "WFT-E5"; - choices[2147484289] = "EOS-1D Mark IV"; - choices[2147484293] = "EOS 5D Mark III"; - choices[2147484294] = "EOS Rebel T3i / 600D / Kiss X5"; - choices[2147484295] = "EOS 60D"; - choices[2147484296] = "EOS Rebel T3 / 1100D / Kiss X50"; - choices[2147484297] = "EOS 7D Mark II"; - choices[2147484311] = "WFT-E2 II"; - choices[2147484312] = "WFT-E4 II"; - choices[2147484417] = "EOS Rebel T4i / 650D / Kiss X6i"; - choices[2147484418] = "EOS 6D"; - choices[2147484452] = "EOS-1D C"; - choices[2147484453] = "EOS 70D"; - choices[2147484454] = "EOS Rebel T5i / 700D / Kiss X7i"; - choices[2147484455] = "EOS Rebel T5 / 1200D / Kiss X70 / Hi"; - choices[2147484456] = "EOS-1D X Mark II"; - choices[2147484465] = "EOS M"; - choices[2147484486] = "EOS Rebel SL1 / 100D / Kiss X7"; - choices[2147484487] = "EOS Rebel T6s / 760D / 8000D"; - choices[2147484489] = "EOS 5D Mark IV"; - choices[2147484496] = "EOS 80D"; - choices[2147484501] = "EOS M2"; - choices[2147484546] = "EOS 5DS"; - choices[2147484563] = "EOS Rebel T6i / 750D / Kiss X8i"; - choices[2147484673] = "EOS 5DS R"; - choices[2147484676] = "EOS Rebel T6 / 1300D / Kiss X80"; - choices[2147484677] = "EOS Rebel T7i / 800D / Kiss X9i"; - choices[2147484678] = "EOS 6D Mark II"; - choices[2147484680] = "EOS 77D / 9000D"; - choices[2147484695] = "EOS Rebel SL2 / 200D / Kiss X9"; - choices[2147484705] = "EOS R5"; - choices[2147484706] = "EOS Rebel T100 / 4000D / 3000D"; - choices[2147484708] = "EOS R"; - choices[2147484712] = "EOS-1D X Mark III"; - choices[2147484722] = "EOS Rebel T7 / 2000D / 1500D / Kiss X90"; - choices[2147484723] = "EOS RP"; - choices[2147484725] = "EOS Rebel T8i / 850D / X10i"; - choices[2147484726] = "EOS SL3 / 250D / Kiss X10"; - choices[2147484727] = "EOS 90D"; - choices[2147484752] = "EOS R3"; - choices[2147484755] = "EOS R6"; - choices[2147484772] = "EOS R7"; - choices[2147484773] = "EOS R10"; - choices[2147484775] = "PowerShot ZOOM"; - choices[2147484776] = "EOS M50 Mark II / Kiss M2"; - choices[2147484960] = "EOS D2000C"; - choices[2147485024] = "EOS D6000C"; - } -}; -CAModelIDInterpreter caModelIDInterpreter; - -class CAPanoramaDirectionInterpreter : public ChoiceInterpreter<> -{ -public: - CAPanoramaDirectionInterpreter() - { - choices[0] = "Left to Right"; - choices[1] = "Right to Left"; - choices[2] = "Bottom to Top"; - choices[3] = "Top to Bottom"; - choices[4] = "2x2 Matrix (Clockwise)"; - } -}; -CAPanoramaDirectionInterpreter caPanoramaDirectionInterpreter; - -class CAAspectRatioInterpreter : public ChoiceInterpreter<> -{ -public: - CAAspectRatioInterpreter() - { - choices[0] = "3:2"; - choices[1] = "1:1"; - choices[2] = "4:3"; - choices[7] = "16:9"; - choices[8] = "4:5"; - } - -}; -CAAspectRatioInterpreter caAspectRatioInterpreter; - -const TagAttrib canonCameraSettingsAttribs[] = { - {0, AC_WRITE, 0, nullptr, 1, AUTO, "MacroMode", &caMacroModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "SelfTimer", &caSelfTimerInterpreter}, - {0, AC_WRITE, 0, nullptr, 3, AUTO, "Quality", &caQualityInterpreter}, - {0, AC_WRITE, 0, nullptr, 4, AUTO, "CanonFlashMode", &caFlashModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 5, AUTO, "ContinuousDrive", &caContinuousDriveInterpreter}, - {0, AC_WRITE, 0, nullptr, 7, AUTO, "FocusMode", &caFocusModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 9, AUTO, "RecordMode", &caRecordModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 10, AUTO, "CanonImageSize", &caImageSizeInterpreter}, - {0, AC_WRITE, 0, nullptr, 11, AUTO, "EasyMode", &caEasyModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 12, AUTO, "DigitalZoom", &caDigitalZoomInterpreter}, - {0, AC_WRITE, 0, nullptr, 13, AUTO, "Contrast", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 14, AUTO, "Saturation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 15, AUTO, "Sharpness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 16, AUTO, "CameraISO", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 17, AUTO, "MeteringMode", &caMeteringModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 18, AUTO, "FocusRange", &caFocusRangeInterpreter}, - {0, AC_WRITE, 0, nullptr, 19, AUTO, "AFPoint", &caAFPointInterpreter}, - {0, AC_WRITE, 0, nullptr, 20, AUTO, "CanonExposureMode", &caExposureModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 22, AUTO, "LensID", &caLensInterpreter}, - {0, AC_WRITE, 0, nullptr, 23, AUTO, "LongFocal", &caFocalInterpreter}, - {0, AC_WRITE, 0, nullptr, 24, AUTO, "ShortFocal", &caFocalInterpreter}, - {0, AC_WRITE, 0, nullptr, 25, AUTO, "FocalUnits", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 26, AUTO, "MaxAperture", &caApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 27, AUTO, "MinAperture", &caApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 28, AUTO, "FlashActivity", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 29, AUTO, "FlashBits", &caFlashBitsInterpreter}, - {0, AC_WRITE, 0, nullptr, 32, AUTO, "FocusContinuous", &caFocusContinuousInterpreter}, - {0, AC_WRITE, 0, nullptr, 33, AUTO, "AESetting", &caAESettingsInterpreter}, - {0, AC_WRITE, 0, nullptr, 34, AUTO, "ImageStabilization", &caStabilizationInterpreter}, - {0, AC_WRITE, 0, nullptr, 35, AUTO, "DisplayAperture", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 36, AUTO, "ZoomSourceWidth", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 37, AUTO, "ZoomTargetWidth", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 39, AUTO, "SpotMeteringMode", &caSpotMeteringInterpreter}, - {0, AC_WRITE, 0, nullptr, 40, AUTO, "PhotoEffect", &caPhotoEffectInterpreter}, - {0, AC_WRITE, 0, nullptr, 41, AUTO, "ManualFlashOutput", &caManualFlashInterpreter}, - {0, AC_WRITE, 0, nullptr, 42, AUTO, "ColorTone", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 46, AUTO, "SRAWQuality", &caRAWQualityInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib canonFocalLengthAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0, AUTO, "FocalType", &caFocalTypeInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "FocalLength", &caFocalInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "FocalPlaneXSize", &caFocalPlaneInterpreter}, - {0, AC_WRITE, 0, nullptr, 3, AUTO, "FocalPlaneYSize", &caFocalPlaneInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib canonShotInfoAttribs[] = { - {0, AC_WRITE, 0, nullptr, 1, AUTO, "AutoISO", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "BaseISO", &caBaseISOInterpreter}, - {0, AC_WRITE, 0, nullptr, 3, AUTO, "MeasuredEV", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 4, AUTO, "TargetAperture", &caApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 5, AUTO, "TargetExposureTime", &caExposureTimeInterpreter}, - {0, AC_WRITE, 0, nullptr, 6, AUTO, "ExposureCompensation", &caEVInterpreter}, - {0, AC_WRITE, 0, nullptr, 7, AUTO, "WhiteBalance", &caWhiteBalanceInterpreter}, - {0, AC_WRITE, 0, nullptr, 8, AUTO, "SlowShutter", &caSlowShutterInterpreter}, - {0, AC_WRITE, 0, nullptr, 9, AUTO, "SequenceNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 10, AUTO, "OpticalZoomCode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 13, AUTO, "FlashGuideNumber", &caFlashGuideNumberInterpreter}, - {0, AC_WRITE, 0, nullptr, 14, AUTO, "AFPointsInFocus", &caAFPointsInFocusInterpreter}, - {0, AC_WRITE, 0, nullptr, 15, AUTO, "FlashExposureComp", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 16, AUTO, "AutoExposureBracketing", &caAutoExposureBracketingInterpreter}, - {0, AC_WRITE, 0, nullptr, 17, AUTO, "AEBBracketValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 18, AUTO, "ControlMode", &caControModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 21, AUTO, "FNumber", &caApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 22, AUTO, "ExposureTime", &caExposureTimeInterpreter}, - {0, AC_WRITE, 0, nullptr, 23, AUTO, "MeasuredEV2", &caMeasuredEVInterpreter}, - {0, AC_WRITE, 0, nullptr, 24, AUTO, "BulbDuration", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 26, AUTO, "CameraType", &caCameraTypeInterpreter}, - {0, AC_WRITE, 0, nullptr, 27, AUTO, "AutoRotate", &caAutoRotateInterpreter}, - {0, AC_WRITE, 0, nullptr, 28, AUTO, "NDFilter", &caOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 29, AUTO, "Self-timer2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 33, AUTO, "FlashOutput", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr}, -}; - -const TagAttrib canonFileInfoAttribs[] = { - {0, AC_WRITE, 0, nullptr, 1, AUTO, "FileNumber", &caFileNumberInterpreter}, - {0, AC_WRITE, 0, nullptr, 3, AUTO, "BracketMode", &caBracketModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 4, AUTO, "BracketValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 5, AUTO, "BracketShotNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 6, AUTO, "RawJpgQuality", &caRAWJpegQualityInterpreter}, - {0, AC_WRITE, 0, nullptr, 7, AUTO, "RawJpgSize", &caJpegSizeInterpreter}, - {0, AC_WRITE, 0, nullptr, 8, AUTO, "NoiseReduction", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 9, AUTO, "WBBracketMode", &caWBBracketModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 12, AUTO, "WBBracketValueAB", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 13, AUTO, "WBBracketValueGM", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 14, AUTO, "FilterEffect", &caFilterEffectInterpreter}, - {0, AC_WRITE, 0, nullptr, 15, AUTO, "ToningEffect", &caToningEffectInterpreter}, - {0, AC_WRITE, 0, nullptr, 19, AUTO, "LiveViewShooting", &caOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 20, AUTO, "FocusDistanceUpper", &caFocusDistanceInterpreter}, - {0, AC_WRITE, 0, nullptr, 21, AUTO, "FocusDistanceLower", &caFocusDistanceInterpreter}, - {0, AC_WRITE, 0, nullptr, 25, AUTO, "FlashExposureLock", &caOnOffInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr}, -}; - -const TagAttrib canonProcessingInfoAttribs[] = { - {0, AC_WRITE, 0, nullptr, 1, AUTO, "ToneCurve", &caToneCurveInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "Sharpness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 3, AUTO, "SharpnessFrequency", &caSharpnessFrequencyInterpreter}, - {0, AC_WRITE, 0, nullptr, 4, AUTO, "SensorRedLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 5, AUTO, "SensorBlueLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 6, AUTO, "WhiteBalanceRed", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 7, AUTO, "WhiteBalanceBlue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 8, AUTO, "WhiteBalance", &caWhiteBalanceInterpreter}, - {0, AC_WRITE, 0, nullptr, 9, AUTO, "ColorTemperature", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 10, AUTO, "PictureStyle", &caPictureStyleInterpreter}, - {0, AC_WRITE, 0, nullptr, 11, AUTO, "DigitalGain", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 12, AUTO, "WBShiftAB", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 13, AUTO, "WBShiftGM", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr}, -}; - -const TagAttrib canonPanoramaInfoAttribs[] = { - {0, AC_WRITE, 0, nullptr, 2, AUTO, "PanoramaFrameNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 5, AUTO, "PanoramaDirection", &caPanoramaDirectionInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr}, -}; - -const TagAttrib canonCropInfoAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0, AUTO, "CropLeftMargin", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "CropRightMargin", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "CropTopMargin", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 3, AUTO, "CropBottomMargin", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr}, -}; - -const TagAttrib canonAspectInfoAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0, AUTO, "AspectRatio", &caAspectRatioInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "CroppedImageWidth", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "CroppedImageHeight", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr}, -}; - -const TagAttrib canonMicroAdjustAttrib[] = { - {0, AC_WRITE, 0, nullptr, 1, AUTO, "AFMicroAdjActive", &caOnOffInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 2, AUTO, "", nullptr}, -}; - -const TagAttrib canonAttribs[] = { - {0, AC_WRITE, 0, canonCameraSettingsAttribs, 0x0001, AUTO, "CanonCameraSettings", &stdInterpreter}, - {0, AC_WRITE, 0, canonFocalLengthAttribs, 0x0002, AUTO, "CanonFocalLength", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0003, AUTO, "CanonFlashInfo", &stdInterpreter}, - {0, AC_WRITE, 0, canonShotInfoAttribs, 0x0004, AUTO, "CanonShotInfo", &stdInterpreter}, - {0, AC_WRITE, 0, canonPanoramaInfoAttribs, 0x0005, AUTO, "CanonPanorama", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0006, AUTO, "CanonImageType", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0007, AUTO, "CanonFirmwareVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0008, AUTO, "FileNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0009, AUTO, "OwnerName", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000a, AUTO, "ColorInfoD30", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000c, AUTO, "SerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000d, AUTO, "CanonCameraInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000e, AUTO, "CanonFileLength", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000f, AUTO, "CustomFunctions", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0010, AUTO, "CanonModelID", &caModelIDInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0012, AUTO, "CanonAFInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0015, AUTO, "SerialNumberFormat", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001c, AUTO, "DateStampMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001d, AUTO, "MyColors", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001e, AUTO, "FirmwareRevision", &stdInterpreter}, - {0, AC_NEW, 0, nullptr, 0x0024, AUTO, "FaceDetect1", &stdInterpreter}, - {0, AC_NEW, 0, nullptr, 0x0025, AUTO, "FaceDetect2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0026, AUTO, "CanonAFInfo2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0083, AUTO, "OriginalDecisionData", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0090, AUTO, "CustomFunctions1D", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0091, AUTO, "PersonalFunctions", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0092, AUTO, "PersonalFunctionValues", &stdInterpreter}, - {0, AC_WRITE, 0, canonFileInfoAttribs, 0x0093, AUTO, "CanonFileInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0094, AUTO, "AFPointsInFocus1D", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0095, AUTO, "LensType", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0096, AUTO, "InternalSerialNumber", &caIntSerNumInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0097, AUTO, "DustRemovalData", &stdInterpreter}, - {0, AC_WRITE, 0, canonCropInfoAttribs, 0x0098, AUTO, "CropInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0099, AUTO, "CustomFunctions2", &stdInterpreter}, - {0, AC_WRITE, 0, canonAspectInfoAttribs, 0x009a, AUTO, "AspectInfo", &stdInterpreter}, - {0, AC_WRITE, 0, canonProcessingInfoAttribs, 0x00a0, AUTO, "ProcessingInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00a1, AUTO, "ToneCurveTable", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00a2, AUTO, "SharpnessTable", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00a3, AUTO, "SharpnessFreqTable", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00a4, AUTO, "WhiteBalanceTable", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00a9, AUTO, "ColorBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00aa, AUTO, "MeasuredColor", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00ae, AUTO, "ColorTemperature", &stdInterpreter}, - {0, AC_NEW, 0, nullptr, 0x00b0, AUTO, "CanonFlags", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00b1, AUTO, "ModifiedInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00b2, AUTO, "ToneCurveMatching", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00b3, AUTO, "WhiteBalanceMatching", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00b4, AUTO, "ColorSpace", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x00b6, AUTO, "PreviewImageInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00d0, AUTO, "VRDOffset", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00e0, AUTO, "SensorInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x4001, AUTO, "ColorBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x4002, AUTO, "UnknownBlock1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x4003, AUTO, "ColorInfo", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x4005, AUTO, "UnknownBlock2", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x4008, AUTO, "BlackLevel", &stdInterpreter}, - {1, AC_WRITE, 0, canonMicroAdjustAttrib, 0x4013, AUTO, "AFMicroAdj", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; -} - diff --git a/rtexif/fujiattribs.cc b/rtexif/fujiattribs.cc deleted file mode 100644 index ffbf3a0be..000000000 --- a/rtexif/fujiattribs.cc +++ /dev/null @@ -1,313 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * 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 RawTherapee. If not, see . - */ - -#include "rtexif.h" - -namespace rtexif -{ - -class FAOnOffInterpreter : public ChoiceInterpreter<> -{ -public: - FAOnOffInterpreter () - { - choices[0] = "Off"; - choices[1] = "On"; - } -}; -FAOnOffInterpreter faOnOffInterpreter; - -class FASharpnessInterpreter : public ChoiceInterpreter<> -{ -public: - FASharpnessInterpreter () - { - choices[1] = "Soft"; - choices[2] = "Soft2"; - choices[3] = "Normal"; - choices[4] = "Hard"; - choices[5] = "Hard2"; - choices[0x82] = "Medium Soft"; - choices[0x84] = "Medium Hard"; - choices[0x8000] = "Film Simulation"; - choices[0xffff] = "n/a"; - } -}; -FASharpnessInterpreter faSharpnessInterpreter; - -class FAWhiteBalanceInterpreter : public ChoiceInterpreter<> -{ -public: - FAWhiteBalanceInterpreter () - { - choices[0] = "Auto"; - choices[0x100] = "Daylight"; - choices[0x200] = "Cloudy"; - choices[0x300] = "Daylight Fluorescent"; - choices[0x301] = "Day White Fluorescent"; - choices[0x302] = "White Fluorescent"; - choices[0x303] = "Warm White Fluorescent"; - choices[0x304] = "Living Room Warm White Fluorescent"; - choices[0x400] = "Incandescent"; - choices[0x500] = "Flash"; - choices[0x600] = "Underwater"; - choices[0xf00] = "Custom"; - choices[0xf01] = "Custom2"; - choices[0xf02] = "Custom3"; - choices[0xf03] = "Custom4"; - choices[0xf04] = "Custom5"; - choices[0xff0] = "Kelvin"; - } -}; -FAWhiteBalanceInterpreter faWhiteBalanceInterpreter; - -class FASaturationInterpreter : public ChoiceInterpreter<> -{ -public: - FASaturationInterpreter () - { - choices[0] = "Normal"; - choices[128] = "Medium High"; - choices[256] = "High"; - choices[384] = "Medium Low"; - choices[512] = "Low"; - choices[768] = "None (B&W)"; - choices[769] = "B&W Red Filter"; - choices[770] = "B&W Yellow Filter"; - choices[771] = "B&W Green Filter"; - choices[784] = "B&W Sepia"; - choices[1024] = "Low 2"; - choices[1280] = "Acros"; - choices[1281] = "Acros Red Filter"; - choices[1282] = "Acros Yellow Filter"; - choices[1283] = "Acros Green Filter"; - choices[32768] = "Film Simulation"; - } -}; -FASaturationInterpreter faSaturationInterpreter; - -class FAContrastInterpreter : public ChoiceInterpreter<> -{ -public: - FAContrastInterpreter () - { - choices[0] = "Normal"; - choices[0x80] = "Medium High"; - choices[0x100] = "High"; - choices[0x180] = "Medium Low"; - choices[0x200] = "Low"; - choices[0x8000] = "Film Simulation"; - } -}; -FAContrastInterpreter faContrastInterpreter; - -class FAContrast2Interpreter : public ChoiceInterpreter<> -{ -public: - FAContrast2Interpreter () - { - choices[0] = "Normal"; - choices[0x100] = "High"; - choices[0x300] = "Low"; - } -}; -FAContrast2Interpreter faContrast2Interpreter; - -class FANoiseReductionInterpreter : public ChoiceInterpreter<> -{ -public: - FANoiseReductionInterpreter () - { - choices[0x40] = "Low"; - choices[0x80] = "Normal"; - choices[0x100] = "n/a"; - } -}; -FANoiseReductionInterpreter faNoiseReductionInterpreter; - -class FAFlashInterpreter : public ChoiceInterpreter<> -{ -public: - // FujiFlashMode - FAFlashInterpreter () - { - choices[0] = "Auto"; - choices[1] = "On"; - choices[2] = "Off"; - choices[3] = "Red-eye reduction"; - choices[4] = "External"; - } -}; -FAFlashInterpreter faFlashInterpreter; - -class FAFocusModeInterpreter : public ChoiceInterpreter<> -{ -public: - FAFocusModeInterpreter () - { - choices[0] = "Auto"; - choices[1] = "Manual"; - } -}; -FAFocusModeInterpreter faFocusModeInterpreter; - -class FAColorModeInterpreter : public ChoiceInterpreter<> -{ -public: - FAColorModeInterpreter () - { - choices[0] = "Standard"; - choices[0x10] = "Chrome"; - choices[0x30] = "B & W"; - } -}; -FAColorModeInterpreter faColorModeInterpreter; - -class FADynamicRangeInterpreter : public ChoiceInterpreter<> -{ -public: - FADynamicRangeInterpreter () - { - choices[1] = "Standard"; - choices[3] = "Wide"; - } -}; -FADynamicRangeInterpreter faDynamicRangeInterpreter; - -class FAFilmModeInterpreter : public ChoiceInterpreter<> -{ -public: - FAFilmModeInterpreter () - { - choices[0x0] = "F0/Standard (Provia)"; - choices[0x100] = "F1/Studio Portrait"; - choices[0x110] = "F1a/Studio Portrait Enhanced Saturation"; - choices[0x120] = "F1b/Studio Portrait Smooth Skin Tone (Astia)"; - choices[0x130] = "F1c/Studio Portrait Increased Sharpness"; - choices[0x200] = "F2/Fujichrome (Velvia)"; - choices[0x300] = "F3/Studio Portrait Ex"; - choices[0x400] = "F4/Velvia"; - choices[0x500] = "Pro Neg. Std"; - choices[0x501] = "Pro Neg. Hi"; - choices[0x600] = "Classic Chrome"; - } -}; -FAFilmModeInterpreter faFilmModeInterpreter; - -class FADRSettingInterpreter : public ChoiceInterpreter<> -{ -public: - // DynamicRangeSetting - FADRSettingInterpreter () - { - choices[0x0] = "Auto (100-400%)"; - choices[0x1] = "Manual"; - choices[0x100] = "Standard (100%)"; - choices[0x200] = "Wide1 (230%)"; - choices[0x201] = "Wide2 (400%)"; - choices[0x8000] = "Film Simulation"; - } -}; -FADRSettingInterpreter faDRSettingInterpreter; - -class FAPictureModeInterpreter : public ChoiceInterpreter<> -{ -public: - FAPictureModeInterpreter () - { - choices[0x0] = "Auto"; - choices[0x1] = "Portrait"; - choices[0x2] = "Landscape"; - choices[0x3] = "Macro"; - choices[0x4] = "Sports"; - choices[0x5] = "Night Scene"; - choices[0x6] = "Program AE"; - choices[0x7] = "Natural Light"; - choices[0x8] = "Anti-blur"; - choices[0x9] = "Beach & Snow"; - choices[0xa] = "Sunset"; - choices[0xb] = "Museum"; - choices[0xc] = "Party"; - choices[0xd] = "Flower"; - choices[0xe] = "Text"; - choices[0xf] = "Natural Light & Flash"; - choices[0x10] = "Beach"; - choices[0x11] = "Snow"; - choices[0x12] = "Fireworks"; - choices[0x13] = "Underwater"; - choices[0x14] = "Portrait with Skin Correction"; - choices[0x16] = "Panorama"; - choices[0x17] = "Night (tripod)"; - choices[0x18] = "Pro Low-light"; - choices[0x19] = "Pro Focus"; - choices[0x1a] = "Portrait 2"; - choices[0x1b] = "Dog Face Detection"; - choices[0x1c] = "Cat Face Detection"; - choices[0x40] = "Advanced Filter"; - choices[0x100] = "Aperture-priority AE"; - choices[0x200] = "Shutter speed priority AE"; - choices[0x300] = "Manual"; - } -}; -FAPictureModeInterpreter faPictureModeInterpreter; - - - -const TagAttrib fujiAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "Version", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0010, AUTO, "InternalSerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1000, AUTO, "Quality", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1001, AUTO, "Sharpness", &faSharpnessInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1002, AUTO, "WhiteBalance", &faWhiteBalanceInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1003, AUTO, "Saturation", &faSaturationInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1004, AUTO, "Contrast", &faContrastInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1005, AUTO, "ColorTemperature", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1006, AUTO, "Contrast2", &faContrast2Interpreter}, - {0, AC_WRITE, 0, nullptr, 0x100a, AUTO, "WhiteBalanceFineTune", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x100b, AUTO, "NoiseReduction", &faNoiseReductionInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1010, AUTO, "FujiFlashMode", &faFlashInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1011, AUTO, "FlashExposureComp", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1020, AUTO, "Macro", &faOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1021, AUTO, "FocusMode", &faFocusModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1023, AUTO, "FocusPixel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1030, AUTO, "SlowSync", &faOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1031, AUTO, "PictureMode", &faPictureModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1100, AUTO, "AutoBracketing", &faOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1101, AUTO, "SequenceNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1210, AUTO, "ColorMode", &faColorModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1300, AUTO, "BlurWarning", &faOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1301, AUTO, "FocusWarning", &faOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1302, AUTO, "ExposureWarning", &faOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1400, AUTO, "DynamicRange", &faDynamicRangeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1401, AUTO, "FilmMode", &faFilmModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1402, AUTO, "DynamicRangeSetting", &faDRSettingInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1403, AUTO, "DevelopmentDynamicRange", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1404, AUTO, "MinFocalLength", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1405, AUTO, "MaxFocalLength", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1406, AUTO, "MaxApertureAtMinFocal", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1407, AUTO, "MaxApertureAtMaxFocal", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x140b, AUTO, "AutoDynamicRange", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x4100, AUTO, "FacesDetected", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8000, AUTO, "FileSource", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8002, AUTO, "OrderNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8003, AUTO, "FrameNumber", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; -} - diff --git a/rtexif/kodakattribs.cc b/rtexif/kodakattribs.cc deleted file mode 100644 index c89ca2298..000000000 --- a/rtexif/kodakattribs.cc +++ /dev/null @@ -1,162 +0,0 @@ -/* - * This file is part of RawTherapee. - */ - -#include -#include "rtexif.h" - -namespace rtexif -{ - - -void parseKodakIfdTextualInfo (Tag *textualInfo, Tag* exif_) -{ - // parse TextualInfo and copy values into corresponding standard Exif - if (textualInfo->getType() != ASCII) { - return; - } - - TagDirectory *exif = exif_->getDirectory(); - char *value = (char *)textualInfo->getValue(); - - char *p = value; - char *pc, *plf; - - while ((pc = strchr (p, ':')) != nullptr && (plf = strchr (pc, '\n')) != nullptr) { - while (*p == ' ') { - p++; - } - - size_t len = pc - p; - - while (len > 1 && p[len - 1] == ' ') { - len--; - } - - std::string key = std::string (p, len); - ++pc; - - while (*pc == ' ') { - pc++; - } - - len = plf - pc; - - while (len > 1 && pc[len - 1] == ' ') { - len--; - } - - std::string val = std::string (pc, len); - p = ++plf; - - // we pick out a few select tags here - Tag *t; - - if (key == "Lens") { - // Proback645 may have "Lens" but not "Focal Length" - float flen = atof (val.c_str()); - - if (flen != 0.f) { - t = new Tag (exif, lookupAttrib (exifAttribs, "FocalLength")); - t->initRational (flen * 32, 32); - exif->replaceTag (t); - } - } else if (key == "Focal Length") { - float flen = atof (val.c_str()); - - if (flen != 0.f) { - t = new Tag (exif, lookupAttrib (exifAttribs, "FocalLength")); - t->initRational (flen * 32, 32); - exif->replaceTag (t); - } - } else if (key == "Aperture") { - float aperture = atof (&val.c_str()[1]); - - if (aperture != 0.f) { - t = new Tag (exif, lookupAttrib (exifAttribs, "FNumber")); - t->initRational ((int) (aperture * 10), 10); - exif->replaceTag (t); - } - } else if (key == "Exposure Bias" || key == "Compensation") { - float bias = 0.0; - - if (val != "Off") { - bias = atof (val.c_str()); - } - - t = new Tag (exif, lookupAttrib (exifAttribs, "ExposureBiasValue")); - t->initRational ((int) (bias * 1000), 1000); - exif->replaceTag (t); - } else if (key == "ISO Speed") { - t = new Tag (exif, lookupAttrib (exifAttribs, "ISOSpeedRatings")); - t->initInt (atoi (val.c_str()), SHORT); - exif->replaceTag (t); - } else if (key == "Shutter") { - const char *p1 = strchr (val.c_str(), '/'); - int a, b; - - if (p1 == nullptr) { - a = atoi (val.c_str()); - b = 1; - } else { - a = atoi (val.c_str()); - b = atoi (&p1[1]); - } - t = new Tag (exif, lookupAttrib (exifAttribs, "ExposureTime")); - t->initRational (a, b); - exif->replaceTag (t); - - const float ssv = -log2 ((float)a / std::max((float)b, 0.0001f)); // convert to APEX value, avoid division by zero - t = new Tag (exif, lookupAttrib (exifAttribs, "ShutterSpeedValue")); - t->initRational (1000000 * ssv, 1000000); - exif->replaceTag (t); - } else if (key == "Flash Fired") { - t = new Tag (exif, lookupAttrib (exifAttribs, "Flash")); - - if (val == "No") { - t->initInt (0, SHORT); - } else { - // not sure if "Flash Fired" is only yes/no, only seen "No" in test pictures - t->initInt (1, SHORT); - } - - exif->replaceTag (t); - } else if (key == "White balance") { // yes should be small 'b' int 'balance'. - t = new Tag (exif, lookupAttrib (exifAttribs, "Flash")); - t->initInt ((val == "Auto") ? 0 : 1, SHORT); - exif->replaceTag (t); - } - } -} - -// table not complete, not all proprietary Kodak tags are known -const TagAttrib kodakIfdAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0001, AUTO, "UnknownEV?", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0003, AUTO, "ExposureValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x03e9, AUTO, "OriginalFileName", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x03eb, AUTO, "SensorLeftBorder", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x03ec, AUTO, "SensorTopBorder", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x03ed, AUTO, "SensorImageWidth", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x03ee, AUTO, "SensorImageHeight", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x03f1, AUTO, "TextualInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x03fc, AUTO, "WhiteBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x03fd, AUTO, "Processing", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0401, AUTO, "Time", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0414, AUTO, "NCDFileInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0846, AUTO, "ColorTemperature", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0852, AUTO, "WB_RGBMul0", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0853, AUTO, "WB_RGBMul1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0854, AUTO, "WB_RGBMul2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0855, AUTO, "WB_RGBMul3", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x085c, AUTO, "WB_RGBCoeffs0", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x085d, AUTO, "WB_RGBCoeffs1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x085e, AUTO, "WB_RGBCoeffs2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x085f, AUTO, "WB_RGBCoeffs3", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0ce5, AUTO, "FirmwareVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1391, AUTO, "ToneCurveFileName", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1784, AUTO, "ISO", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr } -}; - -} - diff --git a/rtexif/nikonattribs.cc b/rtexif/nikonattribs.cc deleted file mode 100644 index 83aec22f6..000000000 --- a/rtexif/nikonattribs.cc +++ /dev/null @@ -1,1254 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * 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 RawTherapee. If not, see . - */ - -#include -#include -#include -#include -#include "rtexif.h" - -using namespace std; - -namespace rtexif -{ - -class NAISOInterpreter : public Interpreter -{ -public: - NAISOInterpreter () {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%d", t->toInt (2)); - return buffer; - } -}; -NAISOInterpreter naISOInterpreter; - -class NAISOInfoISOInterpreter : public Interpreter -{ -public: - NAISOInfoISOInterpreter () {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - int a = t->toInt(); - snprintf(buffer, sizeof(buffer), "%d", a); - return buffer; - } - double toDouble (const Tag* t, int ofs) override - { - int a = t->getValue()[ofs]; - - if (a > 1) { - double i = pow (2., double (a) / 12. - 5.) * 100.; - return i; - } else { - return 0.; - } - } - int toInt (const Tag* t, int ofs, TagType astype) override - { - int a = t->getValue()[ofs]; - - if (a > 1) { - int i = static_cast(powf(2.f, float (a) / 12.f - 5.f)) * 100.0 + 0.5; - return i; - } else { - return 0; - } - } -}; -NAISOInfoISOInterpreter naISOInfoISOInterpreter; - -class NAISOExpansionInterpreter : public Interpreter -{ -public: - NAISOExpansionInterpreter () {} - std::string toString (const Tag* t) const override - { - int a = t->toInt(); - - // unclear if this interpretation is correct! - switch (a) { - case 0x0: - return "Off"; - - case 0x101: - return "Hi 0.3"; - - case 0x102: - return "Hi 0.5"; - - case 0x103: - return "Hi 0.7"; - - case 0x104: - return "Hi 1.0"; - - case 0x105: - return "Hi 1.3"; - - case 0x106: - return "Hi 1.5"; - - case 0x107: - return "Hi 1.7"; - - case 0x108: - return "Hi 2.0"; - - case 0x201: - return "Lo 0.3"; - - case 0x202: - return "Lo 0.5"; - - case 0x203: - return "Lo 0.7"; - - case 0x204: - return "Lo 1.0"; - - default: { - char buffer[32]; - snprintf(buffer, sizeof(buffer), "0x%04X", a); - return buffer; - } - } - } -}; -NAISOExpansionInterpreter naISOExpansionInterpreter; - -class NALensTypeInterpreter : public Interpreter -{ -public: - NALensTypeInterpreter () {} - std::string toString (const Tag* t) const override - { - int a = t->toInt(); - std::ostringstream str; - str << "MF = " << ((a & 1) ? "Yes" : "No") << std::endl; - str << "D = " << ((a & 2) ? "Yes" : "No") << std::endl; - str << "G = " << ((a & 4) ? "Yes" : "No") << std::endl; - str << "VR = " << ((a & 8) ? "Yes" : "No"); - return str.str(); - } -}; -NALensTypeInterpreter naLensTypeInterpreter; - -class NAFlashModeInterpreter : public ChoiceInterpreter<> -{ -public: - NAFlashModeInterpreter () - { - choices[0x0] = "Did Not Fire"; - choices[0x1] = "Fired, Manual"; - choices[0x3] = "Not Ready"; - choices[0x7] = "Fired, External"; - choices[0x8] = "Fired, Commander Mode"; - choices[0x9] = "Fired, TTL Mode"; - } -}; -NAFlashModeInterpreter naFlashModeInterpreter; - -class NAHiISONRInterpreter : public ChoiceInterpreter<> -{ -public: - // HighISONoiseReduction - NAHiISONRInterpreter () - { - choices[0x0] = "Off"; - choices[0x1] = "Minimal"; - choices[0x2] = "Low"; - choices[0x3] = "Medium Low"; - choices[0x4] = "Normal"; - choices[0x5] = "Medium High"; - choices[0x6] = "High"; - } -}; -NAHiISONRInterpreter naHiISONRInterpreter; - -class NAShootingModeInterpreter : public Interpreter -{ -public: - NAShootingModeInterpreter () {} - std::string toString (const Tag* t) const override - { - int a = t->toInt(); - std::ostringstream str; - str << "Continuous = " << ((a & 1) ? "Yes" : "No") << std::endl; - str << "Delay = " << ((a & 2) ? "Yes" : "No") << std::endl; - str << "PC Control = " << ((a & 4) ? "Yes" : "No") << std::endl; - str << "White-Balance Bracketing = " << ((a & 8) ? "Yes" : "No") << std::endl; - str << "Exposure Bracketing = " << ((a & 16) ? "Yes" : "No") << std::endl; - str << "Auto ISO = " << ((a & 32) ? "Yes" : "No") << std::endl; - str << "IR Control = " << ((a & 64) ? "Yes" : "No"); - return str.str(); - } -}; -NAShootingModeInterpreter naShootingModeInterpreter; - -class NAAFInfoInterpreter : public Interpreter -{ - std::map amchoices; - std::map afpchoices; -public: - // AFAreaMode - NAAFInfoInterpreter () - { - amchoices[0x0] = "Single Area"; - amchoices[0x1] = "Dynamic Area"; - amchoices[0x2] = "Dynamic Area (closest subject)"; - amchoices[0x3] = "Group Dynamic"; - amchoices[0x4] = "Single Area (wide)"; - amchoices[0x5] = "Dynamic Area (wide)"; - // AFPoint - afpchoices[0x0] = "Center"; - afpchoices[0x1] = "Top"; - afpchoices[0x2] = "Bottom"; - afpchoices[0x3] = "Mid-left"; - afpchoices[0x4] = "Mid-right"; - afpchoices[0x5] = "Upper-left"; - afpchoices[0x6] = "Upper-right"; - afpchoices[0x7] = "Lower-left"; - afpchoices[0x8] = "Lower-right"; - afpchoices[0x9] = "Far Left"; - afpchoices[0xa] = "Far Right"; - } - std::string toString (const Tag* t) const override - { - const auto get_from_choices = - [](const std::map& choices, int index) -> std::string - { - const std::map::const_iterator choice = choices.find(index); - - if (choice != choices.end()) { - return choice->second; - } - - return {}; - }; - - int am = t->toInt (0, BYTE); - int afp = t->toInt (1, BYTE); - int aff = t->toInt (2, SHORT); - std::ostringstream str; - str << "AFAreaMode = " << get_from_choices(amchoices, am) << std::endl; - str << "AFAreaMode = " << get_from_choices(afpchoices, afp) << std::endl; - - std::ostringstream af; - - if (aff) { - for (size_t i = 0; i < afpchoices.size(); ++i) { - if (aff & (1 << i)) { - if (!af.str().empty()) { - af << ", "; - } - af << afpchoices.at(i); - } - } - } - - str << "AFPointsInFocus = " << (af.str().empty() ? "None" : af.str()); - return str.str(); - } -}; -NAAFInfoInterpreter naAFInfoInterpreter; - -class NALensDataInterpreter : public Interpreter -{ - static const std::map lenses; - -public: - std::string toString (const Tag* t) const override - { - - static const unsigned char xlat[2][256] = { - { - 0xc1, 0xbf, 0x6d, 0x0d, 0x59, 0xc5, 0x13, 0x9d, 0x83, 0x61, 0x6b, 0x4f, 0xc7, 0x7f, 0x3d, 0x3d, - 0x53, 0x59, 0xe3, 0xc7, 0xe9, 0x2f, 0x95, 0xa7, 0x95, 0x1f, 0xdf, 0x7f, 0x2b, 0x29, 0xc7, 0x0d, - 0xdf, 0x07, 0xef, 0x71, 0x89, 0x3d, 0x13, 0x3d, 0x3b, 0x13, 0xfb, 0x0d, 0x89, 0xc1, 0x65, 0x1f, - 0xb3, 0x0d, 0x6b, 0x29, 0xe3, 0xfb, 0xef, 0xa3, 0x6b, 0x47, 0x7f, 0x95, 0x35, 0xa7, 0x47, 0x4f, - 0xc7, 0xf1, 0x59, 0x95, 0x35, 0x11, 0x29, 0x61, 0xf1, 0x3d, 0xb3, 0x2b, 0x0d, 0x43, 0x89, 0xc1, - 0x9d, 0x9d, 0x89, 0x65, 0xf1, 0xe9, 0xdf, 0xbf, 0x3d, 0x7f, 0x53, 0x97, 0xe5, 0xe9, 0x95, 0x17, - 0x1d, 0x3d, 0x8b, 0xfb, 0xc7, 0xe3, 0x67, 0xa7, 0x07, 0xf1, 0x71, 0xa7, 0x53, 0xb5, 0x29, 0x89, - 0xe5, 0x2b, 0xa7, 0x17, 0x29, 0xe9, 0x4f, 0xc5, 0x65, 0x6d, 0x6b, 0xef, 0x0d, 0x89, 0x49, 0x2f, - 0xb3, 0x43, 0x53, 0x65, 0x1d, 0x49, 0xa3, 0x13, 0x89, 0x59, 0xef, 0x6b, 0xef, 0x65, 0x1d, 0x0b, - 0x59, 0x13, 0xe3, 0x4f, 0x9d, 0xb3, 0x29, 0x43, 0x2b, 0x07, 0x1d, 0x95, 0x59, 0x59, 0x47, 0xfb, - 0xe5, 0xe9, 0x61, 0x47, 0x2f, 0x35, 0x7f, 0x17, 0x7f, 0xef, 0x7f, 0x95, 0x95, 0x71, 0xd3, 0xa3, - 0x0b, 0x71, 0xa3, 0xad, 0x0b, 0x3b, 0xb5, 0xfb, 0xa3, 0xbf, 0x4f, 0x83, 0x1d, 0xad, 0xe9, 0x2f, - 0x71, 0x65, 0xa3, 0xe5, 0x07, 0x35, 0x3d, 0x0d, 0xb5, 0xe9, 0xe5, 0x47, 0x3b, 0x9d, 0xef, 0x35, - 0xa3, 0xbf, 0xb3, 0xdf, 0x53, 0xd3, 0x97, 0x53, 0x49, 0x71, 0x07, 0x35, 0x61, 0x71, 0x2f, 0x43, - 0x2f, 0x11, 0xdf, 0x17, 0x97, 0xfb, 0x95, 0x3b, 0x7f, 0x6b, 0xd3, 0x25, 0xbf, 0xad, 0xc7, 0xc5, - 0xc5, 0xb5, 0x8b, 0xef, 0x2f, 0xd3, 0x07, 0x6b, 0x25, 0x49, 0x95, 0x25, 0x49, 0x6d, 0x71, 0xc7 - }, - { - 0xa7, 0xbc, 0xc9, 0xad, 0x91, 0xdf, 0x85, 0xe5, 0xd4, 0x78, 0xd5, 0x17, 0x46, 0x7c, 0x29, 0x4c, - 0x4d, 0x03, 0xe9, 0x25, 0x68, 0x11, 0x86, 0xb3, 0xbd, 0xf7, 0x6f, 0x61, 0x22, 0xa2, 0x26, 0x34, - 0x2a, 0xbe, 0x1e, 0x46, 0x14, 0x68, 0x9d, 0x44, 0x18, 0xc2, 0x40, 0xf4, 0x7e, 0x5f, 0x1b, 0xad, - 0x0b, 0x94, 0xb6, 0x67, 0xb4, 0x0b, 0xe1, 0xea, 0x95, 0x9c, 0x66, 0xdc, 0xe7, 0x5d, 0x6c, 0x05, - 0xda, 0xd5, 0xdf, 0x7a, 0xef, 0xf6, 0xdb, 0x1f, 0x82, 0x4c, 0xc0, 0x68, 0x47, 0xa1, 0xbd, 0xee, - 0x39, 0x50, 0x56, 0x4a, 0xdd, 0xdf, 0xa5, 0xf8, 0xc6, 0xda, 0xca, 0x90, 0xca, 0x01, 0x42, 0x9d, - 0x8b, 0x0c, 0x73, 0x43, 0x75, 0x05, 0x94, 0xde, 0x24, 0xb3, 0x80, 0x34, 0xe5, 0x2c, 0xdc, 0x9b, - 0x3f, 0xca, 0x33, 0x45, 0xd0, 0xdb, 0x5f, 0xf5, 0x52, 0xc3, 0x21, 0xda, 0xe2, 0x22, 0x72, 0x6b, - 0x3e, 0xd0, 0x5b, 0xa8, 0x87, 0x8c, 0x06, 0x5d, 0x0f, 0xdd, 0x09, 0x19, 0x93, 0xd0, 0xb9, 0xfc, - 0x8b, 0x0f, 0x84, 0x60, 0x33, 0x1c, 0x9b, 0x45, 0xf1, 0xf0, 0xa3, 0x94, 0x3a, 0x12, 0x77, 0x33, - 0x4d, 0x44, 0x78, 0x28, 0x3c, 0x9e, 0xfd, 0x65, 0x57, 0x16, 0x94, 0x6b, 0xfb, 0x59, 0xd0, 0xc8, - 0x22, 0x36, 0xdb, 0xd2, 0x63, 0x98, 0x43, 0xa1, 0x04, 0x87, 0x86, 0xf7, 0xa6, 0x26, 0xbb, 0xd6, - 0x59, 0x4d, 0xbf, 0x6a, 0x2e, 0xaa, 0x2b, 0xef, 0xe6, 0x78, 0xb6, 0x4e, 0xe0, 0x2f, 0xdc, 0x7c, - 0xbe, 0x57, 0x19, 0x32, 0x7e, 0x2a, 0xd0, 0xb8, 0xba, 0x29, 0x00, 0x3c, 0x52, 0x7d, 0xa8, 0x49, - 0x3b, 0x2d, 0xeb, 0x25, 0x49, 0xfa, 0xa3, 0xaa, 0x39, 0xa7, 0xc5, 0xa7, 0x50, 0x11, 0x36, 0xfb, - 0xc6, 0x67, 0x4a, 0xf5, 0xa5, 0x12, 0x65, 0x7e, 0xb0, 0xdf, 0xaf, 0x4e, 0xb3, 0x61, 0x7f, 0x2f - } - }; - - int ver = (t->toInt (0, BYTE) - '0') * 1000 + (t->toInt (1, BYTE) - '0') * 100 + (t->toInt (2, BYTE) - '0') * 10 + (t->toInt (3, BYTE) - '0'); - - std::ostringstream ld; - ld << "Version = " << ver << std::endl; - - int lenstype = t->getParent()->getTag (0x0083)->toInt (0, BYTE); - - std::ostringstream lid; - lid.setf (std::ios_base::hex, std::ios_base::basefield); - lid.setf (std::ios_base::uppercase); - - Tag *modelTag = t->getParent()->getRoot()->findTag ("Model"); - std::string model ( modelTag ? modelTag->valueToString() : ""); - int lidoffs = 7; - bool d100 = false; - - if (model.substr (0, 10) == "NIKON D100" || model.substr (0, 9) == "NIKON D1X") { - lidoffs = 0; - d100 = true; - } else if ( ver < 204) { - lidoffs = 7; - d100 = false; - } else { - lidoffs = 8; - d100 = false; - } - - unsigned char buffer[16]; - - if (d100) { - memcpy (buffer, t->getValue() + 6, 7); - } else { - memcpy (buffer, t->getValue() + 4, 16); - } - - if (ver >= 201) { - const unsigned char* serval = t->getParent()->getTag (0x001d)->getValue (); - int serial = 0; - - for (int i = 0; serval[i]; i++) { - serial = serial * 10 + (isdigit (serval[i]) ? serval[i] - '0' : serval[i] % 10); - } - - const unsigned char* scval = t->getParent()->getTag (0x00a7)->getValue (); - int key = 0; - - for (int i = 0; i < 4; i++) { - key ^= scval[i]; - } - - unsigned char ci = xlat[0][serial & 0xff]; - unsigned char cj = xlat[1][key]; - unsigned char ck = 0x60; - - for (int i = 0; i < 16; i++) { - buffer[i] ^= (cj += ci * ck++); - } - } - - std::string EffectiveMaxApertureString; - - if (!d100) { - int EffectiveMaxApertureValue; - - if ( ver < 204 ) { - ld << "ExitPupilPosition = " << (int) buffer[0] << std::endl; - ld << "AFAperture = " << (int) buffer[1] << std::endl; - ld << "FocusPosition = " << (int) buffer[4] << std::endl; - ld << "FocusDistance = " << (int) buffer[5] << std::endl; - ld << "FocalLength = " << (int) buffer[6] << std::endl; - EffectiveMaxApertureValue = (int) buffer[14]; - } else { - ld << "ExitPupilPosition = " << (int) buffer[0] << std::endl; - ld << "AFAperture = " << (int) buffer[1] << std::endl; - ld << "FocusPosition = " << (int) buffer[4] << std::endl; - ld << "FocusDistance = " << (int) buffer[6] << std::endl; - ld << "FocalLength = " << (int) buffer[7] << std::endl; - EffectiveMaxApertureValue = (int) buffer[15]; - } - - switch (EffectiveMaxApertureValue) { - case 0x8: - EffectiveMaxApertureString = "1.2"; - break; - - case 0xc: - EffectiveMaxApertureString = "1.4"; - break; - - case 0x14: - EffectiveMaxApertureString = "1.8"; - break; - - case 0x18: - EffectiveMaxApertureString = "2.0"; - break; - - case 0x20: - EffectiveMaxApertureString = "2.5"; - break; - - case 0x24: - EffectiveMaxApertureString = "2.8"; - break; - - case 0x2a: - EffectiveMaxApertureString = "3.3"; - break; - - case 0x2c: - EffectiveMaxApertureString = "3.5"; - break; - - case 0x30: - EffectiveMaxApertureString = "4.0"; - break; - - case 0x34: - EffectiveMaxApertureString = "4.5"; - break; - - case 0x38: - EffectiveMaxApertureString = "5.0"; - break; - - case 0x3c: - EffectiveMaxApertureString = "5.6"; - break; - - case 0x40: - EffectiveMaxApertureString = "6.3"; - break; - - case 0x44: - EffectiveMaxApertureString = "7.1"; - break; - - case 0x48: - EffectiveMaxApertureString = "8.0"; - break; - - case 0x4e: - EffectiveMaxApertureString = "9.5"; - break; - - case 0x54: - EffectiveMaxApertureString = "11.0"; - break; - - case 0x5a: - EffectiveMaxApertureString = "13.0"; - break; - - case 0x5e: - EffectiveMaxApertureString = "15.0"; - break; - - case 0x60: - EffectiveMaxApertureString = "16.0"; - break; - - case 0x66: - EffectiveMaxApertureString = "19.0"; - break; - - case 0x6c: - EffectiveMaxApertureString = "22.0"; - break; - - default : - EffectiveMaxApertureString = ""; - } - - ld << "EffectiveMaxAperture = " << EffectiveMaxApertureString << std::endl; - } - - for (int i = 0; i < 7; i++) { - lid << std::setw (2) << std::setfill ('0') << (int)buffer[lidoffs + i] << ' '; - } - - lid << std::setw (2) << std::setfill ('0') << lenstype; - - std::map::const_iterator r = lenses.find (lid.str()); - - if (r != lenses.end()) { - if (r == lenses.begin() && !EffectiveMaxApertureString.empty()) { // first entry is for unchipped lenses - Tag *FLTag = t->getParent()->getRoot()->findTag ("FocalLength"); - ld << "Lens = MF "; - - if(FLTag) { - ld << FLTag->valueToString () << "mm"; - } else { - ld << "0mm"; - } - - ld << " f/" << EffectiveMaxApertureString; - } else { - ld << "Lens = " << r->second; - } - } else { - ld << "Lens = Unknown, ID=" << lid.str(); - } - - return ld.str(); - } - -}; -NALensDataInterpreter naLensDataInterpreter; -const std::map NALensDataInterpreter::lenses = { - /* - * The Nikon LensID is constructed as a Composite tag from the raw hex values of 8 other tags: - * LensIDNumber, LensFStops, MinFocalLength, MaxFocalLength, MaxApertureAtMinFocal, MaxApertureAtMaxFocal, MCUVersion and LensType, in that order. - */ - {"00 00 00 00 00 00 00 01", "Manual Lens No CPU"}, - {"00 00 00 00 00 00 E1 12", "TC-17E II"}, - {"00 00 00 00 00 00 F1 0C", "TC-14E [II] or Sigma APO Tele Converter 1.4x EX DG or Kenko Teleplus PRO 300 DG 1.4x"}, - {"00 00 00 00 00 00 F2 18", "TC-20E [II] or Sigma APO Tele Converter 2x EX DG or Kenko Teleplus PRO 300 DG 2.0x"}, - {"00 00 48 48 53 53 00 01", "Loreo 40mm f/11-22 3D Lens in a Cap 9005"}, - {"00 36 1C 2D 34 3C 00 06", "Tamron SP AF 11-18mm f/4.5-5.6 Di II LD Aspherical (IF) (A13)"}, - {"00 3C 1F 37 30 30 00 06", "Tokina AT-X 124 AF PRO DX (AF 12-24mm f/4)"}, - {"00 3C 2B 44 30 30 00 06", "Tokina AT-X 17-35 f/4 PRO FX (AF 17-35mm f/4)"}, - {"00 3C 5C 80 30 30 00 0E", "Tokina AT-X 70-200 f/4 FX VCM-S (AF 70-200mm f/4)"}, - {"00 3E 80 A0 38 3F 00 02", "Tamron SP AF 200-500mm f/5-6.3 Di LD (IF) (A08)"}, - {"00 3F 2D 80 2B 40 00 06", "Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) (A14)"}, - {"00 3F 2D 80 2C 40 00 06", "Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14)"}, - {"00 3F 80 A0 38 3F 00 02", "Tamron SP AF 200-500mm f/5-6.3 Di (A08)"}, - {"00 40 11 11 2C 2C 00 00", "Samyang 8mm f/3.5 Fish-Eye"}, - {"00 40 18 2B 2C 34 00 06", "Tokina AT-X 107 AF DX Fisheye (AF 10-17mm f/3.5-4.5)"}, - {"00 40 2A 72 2C 3C 00 06", "Tokina AT-X 16.5-135 DX (AF 16.5-135mm f/3.5-5.6)"}, - {"00 40 2B 2B 2C 2C 00 02", "Tokina AT-X 17 AF PRO (AF 17mm f/3.5)"}, - {"00 40 2D 2D 2C 2C 00 00", "Carl Zeiss Distagon T* 3.5/18 ZF.2"}, - {"00 40 2D 80 2C 40 00 06", "Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14NII)"}, - {"00 40 2D 88 2C 40 00 06", "Tamron AF 18-250mm f/3.5-6.3 Di II LD Aspherical (IF) Macro (A18NII)"}, - {"00 40 2D 88 2C 40 62 06", "Tamron AF 18-250mm f/3.5-6.3 Di II LD Aspherical (IF) Macro (A18)"}, - {"00 40 31 31 2C 2C 00 00", "Voigtlander Color Skopar 20mm f/3.5 SLII Aspherical"}, - {"00 40 37 80 2C 3C 00 02", "Tokina AT-X 242 AF (AF 24-200mm f/3.5-5.6)"}, - {"00 40 64 64 2C 2C 00 00", "Voigtlander APO-Lanthar 90mm f/3.5 SLII Close Focus"}, - {"00 44 60 98 34 3C 00 02", "Tokina AT-X 840 D (AF 80-400mm f/4.5-5.6)"}, - {"00 47 10 10 24 24 00 00", "Fisheye Nikkor 8mm f/2.8 AiS"}, - {"00 47 25 25 24 24 00 02", "Tamron SP AF 14mm f/2.8 Aspherical (IF) (69E)"}, - {"00 47 3C 3C 24 24 00 00", "Nikkor 28mm f/2.8 AiS"}, - {"00 47 44 44 24 24 00 06", "Tokina AT-X M35 PRO DX (AF 35mm f/2.8 Macro)"}, - {"00 47 53 80 30 3C 00 06", "Tamron AF 55-200mm f/4-5.6 Di II LD (A15)"}, - {"00 48 1C 29 24 24 00 06", "Tokina AT-X 116 PRO DX (AF 11-16mm f/2.8)"}, - {"00 48 27 27 24 24 00 00", "Carl Zeiss Distagon T* 2.8/15 ZF.2"}, - {"00 48 29 3C 24 24 00 06", "Tokina AT-X 16-28 AF PRO FX (AF 16-28mm f/2.8)"}, - {"00 48 29 50 24 24 00 06", "Tokina AT-X 165 PRO DX (AF 16-50mm f/2.8)"}, - {"00 48 32 32 24 24 00 00", "Carl Zeiss Distagon T* 2.8/21 ZF.2"}, - {"00 48 37 5C 24 24 00 06", "Tokina AT-X 24-70 f/2.8 PRO FX (AF 24-70mm f/2.8)"}, - {"00 48 3C 3C 24 24 00 00", "Voigtlander Color Skopar 28mm f/2.8 SL II"}, - {"00 48 3C 60 24 24 00 02", "Tokina AT-X 280 AF PRO (AF 28-80mm f/2.8)"}, - {"00 48 3C 6A 24 24 00 02", "Tamron SP AF 28-105mm f/2.8 LD Aspherical IF (176D)"}, - {"00 48 50 50 18 18 00 00", "Nikkor H 50mm f/2"}, - {"00 48 50 72 24 24 00 06", "Tokina AT-X 535 PRO DX (AF 50-135mm f/2.8)"}, - {"00 48 5C 80 30 30 00 0E", "Tokina AT-X 70-200 f/4 FX VCM-S (AF 70-200mm f/4)"}, - {"00 48 5C 8E 30 3C 00 06", "Tamron AF 70-300mm f/4-5.6 Di LD Macro 1:2 (A17NII)"}, - {"00 48 68 68 24 24 00 00", "Series E 100mm f/2.8"}, - {"00 48 80 80 30 30 00 00", "Nikkor 200mm f/4 AiS"}, - {"00 49 30 48 22 2B 00 02", "Tamron SP AF 20-40mm f/2.7-3.5 (166D)"}, - {"00 4C 6A 6A 20 20 00 00", "Nikkor 105mm f/2.5 AiS"}, - {"00 4C 7C 7C 2C 2C 00 02", "Tamron SP AF 180mm f/3.5 Di Model (B01)"}, - {"00 53 2B 50 24 24 00 06", "Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical (IF) (A16)"}, - {"00 54 2B 50 24 24 00 06", "Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical (IF) (A16NII)"}, - {"00 54 38 38 18 18 00 00", "Carl Zeiss Distagon T* 2/25 ZF.2"}, - {"00 54 3C 3C 18 18 00 00", "Carl Zeiss Distagon T* 2/28 ZF.2"}, - {"00 54 44 44 0C 0C 00 00", "Carl Zeiss Distagon T* 1.4/35 ZF.2"}, - {"00 54 44 44 18 18 00 00", "Carl Zeiss Distagon T* 2/35 ZF.2"}, - {"00 54 48 48 18 18 00 00", "Voigtlander Ultron 40mm f/2 SLII Aspherical"}, - {"00 54 50 50 0C 0C 00 00", "Carl Zeiss Planar T* 1.4/50 ZF.2"}, - {"00 54 50 50 18 18 00 00", "Carl Zeiss Makro-Planar T* 2/50 ZF.2"}, - {"00 54 53 53 0C 0C 00 00", "Zeiss Otus 1.4/55"}, - {"00 54 55 55 0C 0C 00 00", "Voigtlander Nokton 58mm f/1.4 SLII"}, - {"00 54 56 56 30 30 00 00", "Coastal Optical Systems 60mm 1:4 UV-VIS-IR Macro Apo"}, - {"00 54 62 62 0C 0C 00 00", "Carl Zeiss Planar T* 1.4/85 ZF.2"}, - {"00 54 68 68 18 18 00 00", "Carl Zeiss Makro-Planar T* 2/100 ZF.2"}, - {"00 54 68 68 24 24 00 02", "Tokina AT-X M100 AF PRO D (AF 100mm f/2.8 Macro)"}, - {"00 54 72 72 18 18 00 00", "Carl Zeiss Apo Sonnar T* 2/135 ZF.2"}, - {"00 54 8E 8E 24 24 00 02", "Tokina AT-X 300 AF PRO (AF 300mm f/2.8)"}, - {"00 57 50 50 14 14 00 00", "Nikkor 50mm f/1.8 AI"}, - {"00 58 64 64 20 20 00 00", "Soligor C/D Macro MC 90mm f/2.5"}, - {"01 00 00 00 00 00 02 00", "TC-16A"}, - {"01 00 00 00 00 00 08 00", "TC-16A"}, - {"01 54 62 62 0C 0C 00 00", "Zeiss Otus 1.4/85"}, - {"01 58 50 50 14 14 02 00", "AF Nikkor 50mm f/1.8"}, - {"01 58 50 50 14 14 05 00", "AF Nikkor 50mm f/1.8"}, - {"02 2F 98 98 3D 3D 02 00", "Sigma APO 400mm f/5.6"}, - {"02 34 A0 A0 44 44 02 00", "Sigma APO 500mm f/7.2"}, - {"02 37 5E 8E 35 3D 02 00", "Sigma 75-300mm f/4.5-5.6 APO"}, - {"02 37 A0 A0 34 34 02 00", "Sigma APO 500mm f/4.5"}, - {"02 3A 37 50 31 3D 02 00", "Sigma 24-50mm f/4-5.6 UC"}, - {"02 3A 5E 8E 32 3D 02 00", "Sigma 75-300mm f/4.0-5.6"}, - {"02 3B 44 61 30 3D 02 00", "Sigma 35-80mm f/4-5.6"}, - {"02 3B 5C 82 30 3C 02 00", "Sigma Zoom-K 70-210mm f/4-5.6"}, - {"02 3C B0 B0 3C 3C 02 00", "Sigma APO 800mm f/5.6"}, - {"02 3F 24 24 2C 2C 02 00", "Sigma 14mm f/3.5"}, - {"02 3F 3C 5C 2D 35 02 00", "Sigma 28-70mm f/3.5-4.5 UC"}, - {"02 40 44 5C 2C 34 02 00", "Exakta AF 35-70mm 1:3.5-4.5 MC"}, - {"02 40 44 73 2B 36 02 00", "Sigma 35-135mm f/3.5-4.5 a"}, - {"02 40 5C 82 2C 35 02 00", "Sigma APO 70-210mm f/3.5-4.5"}, - {"02 42 44 5C 2A 34 02 00", "AF Zoom-Nikkor 35-70mm f/3.3-4.5"}, - {"02 42 44 5C 2A 34 08 00", "AF Zoom-Nikkor 35-70mm f/3.3-4.5"}, - {"02 46 37 37 25 25 02 00", "Sigma 24mm f/2.8 Super Wide II Macro"}, - {"02 46 3C 5C 25 25 02 00", "Sigma 28-70mm f/2.8"}, - {"02 46 5C 82 25 25 02 00", "Sigma 70-210mm f/2.8 APO"}, - {"02 48 50 50 24 24 02 00", "Sigma Macro 50mm f/2.8"}, - {"02 48 65 65 24 24 02 00", "Sigma Macro 90mm f/2.8"}, - {"03 43 5C 81 35 35 02 00", "Soligor AF C/D Zoom UMCS 70-210mm 1:4.5"}, - {"03 48 5C 81 30 30 02 00", "AF Zoom-Nikkor 70-210mm f/4"}, - {"03 54 68 68 0C 0C 00 00", "Zeiss Otus 1.4/100"}, - {"04 48 3C 3C 24 24 03 00", "AF Nikkor 28mm f/2.8"}, - {"05 54 50 50 0C 0C 04 00", "AF Nikkor 50mm f/1.4"}, - {"06 3F 68 68 2C 2C 06 00", "Cosina AF 100mm f/3.5 Macro"}, - {"06 54 53 53 24 24 06 00", "AF Micro-Nikkor 55mm f/2.8"}, - {"07 36 3D 5F 2C 3C 03 00", "Cosina AF Zoom 28-80mm f/3.5-5.6 MC Macro"}, - {"07 3E 30 43 2D 35 03 00", "Soligor AF Zoom 19-35mm 1:3.5-4.5 MC"}, - {"07 40 2F 44 2C 34 03 02", "Tamron AF 19-35mm f/3.5-4.5 (A10)"}, - {"07 40 30 45 2D 35 03 02", "Tamron AF 19-35mm f/3.5-4.5 (A10)"}, - {"07 40 30 45 2D 35 03 02", "Voigtlander Ultragon 19-35mm f/3.5-4.5 VMV"}, - {"07 40 3C 5C 2C 35 03 00", "Tokina AF 270 II (AF 28-70mm f/3.5-4.5)"}, - {"07 40 3C 62 2C 34 03 00", "AF Zoom-Nikkor 28-85mm f/3.5-4.5"}, - {"07 46 2B 44 24 30 03 02", "Tamron SP AF 17-35mm f/2.8-4 Di LD Aspherical (IF) (A05)"}, - {"07 46 3D 6A 25 2F 03 00", "Cosina AF Zoom 28-105mm f/2.8-3.8 MC"}, - {"07 47 3C 5C 25 35 03 00", "Tokina AF 287 SD (AF 28-70mm f/2.8-4.5)"}, - {"07 48 3C 5C 24 24 03 00", "Tokina AT-X 287 AF (AF 28-70mm f/2.8)"}, - {"08 40 44 6A 2C 34 04 00", "AF Zoom-Nikkor 35-105mm f/3.5-4.5"}, - {"09 48 37 37 24 24 04 00", "AF Nikkor 24mm f/2.8"}, - {"0A 48 8E 8E 24 24 03 00", "AF Nikkor 300mm f/2.8 IF-ED"}, - {"0A 48 8E 8E 24 24 05 00", "AF Nikkor 300mm f/2.8 IF-ED N"}, - {"0B 3E 3D 7F 2F 3D 0E 00", "Tamron AF 28-200mm f/3.8-5.6 (71D)"}, - {"0B 3E 3D 7F 2F 3D 0E 02", "Tamron AF 28-200mm f/3.8-5.6D (171D)"}, - {"0B 48 7C 7C 24 24 05 00", "AF Nikkor 180mm f/2.8 IF-ED"}, - {"0D 40 44 72 2C 34 07 00", "AF Zoom-Nikkor 35-135mm f/3.5-4.5"}, - {"0E 48 5C 81 30 30 05 00", "AF Zoom-Nikkor 70-210mm f/4"}, - {"0E 4A 31 48 23 2D 0E 02", "Tamron SP AF 20-40mm f/2.7-3.5 (166D)"}, - {"0F 58 50 50 14 14 05 00", "AF Nikkor 50mm f/1.8 N"}, - {"10 3D 3C 60 2C 3C D2 02", "Tamron AF 28-80mm f/3.5-5.6 Aspherical (177D)"}, - {"10 48 8E 8E 30 30 08 00", "AF Nikkor 300mm f/4 IF-ED"}, - {"11 48 44 5C 24 24 08 00", "AF Zoom-Nikkor 35-70mm f/2.8"}, - {"11 48 44 5C 24 24 15 00", "AF Zoom-Nikkor 35-70mm f/2.8"}, - {"12 36 5C 81 35 3D 09 00", "Cosina AF Zoom 70-210mm f/4.5-5.6 MC Macro"}, - {"12 36 69 97 35 42 09 00", "Soligor AF Zoom 100-400mm 1:4.5-6.7 MC"}, - {"12 38 69 97 35 42 09 02", "Promaster Spectrum 7 100-400mm f/4.5-6.7"}, - {"12 39 5C 8E 34 3D 08 02", "Cosina AF Zoom 70-300mm f/4.5-5.6 MC Macro"}, - {"12 3B 68 8D 3D 43 09 02", "Cosina AF Zoom 100-300mm f/5.6-6.7 MC Macro"}, - {"12 3B 98 98 3D 3D 09 00", "Tokina AT-X 400 AF SD (AF 400mm f/5.6)"}, - {"12 3D 3C 80 2E 3C DF 02", "Tamron AF 28-200mm f/3.8-5.6 AF Aspherical LD (IF) (271D)"}, - {"12 44 5E 8E 34 3C 09 00", "Tokina AF 730 (AF 75-300mm f/4.5-5.6)"}, - {"12 48 5C 81 30 3C 09 00", "AF Nikkor 70-210mm f/4-5.6"}, - {"12 4A 5C 81 31 3D 09 00", "Soligor AF C/D Auto Zoom+Macro 70-210mm 1:4-5.6 UMCS"}, - {"13 42 37 50 2A 34 0B 00", "AF Zoom-Nikkor 24-50mm f/3.3-4.5"}, - {"14 48 60 80 24 24 0B 00", "AF Zoom-Nikkor 80-200mm f/2.8 ED"}, - {"14 48 68 8E 30 30 0B 00", "Tokina AT-X 340 AF (AF 100-300mm f/4)"}, - {"14 54 60 80 24 24 0B 00", "Tokina AT-X 828 AF (AF 80-200mm f/2.8)"}, - {"15 4C 62 62 14 14 0C 00", "AF Nikkor 85mm f/1.8"}, - {"17 3C A0 A0 30 30 0F 00", "Nikkor 500mm f/4 P ED IF"}, - {"17 3C A0 A0 30 30 11 00", "Nikkor 500mm f/4 P ED IF"}, - {"18 40 44 72 2C 34 0E 00", "AF Zoom-Nikkor 35-135mm f/3.5-4.5 N"}, - {"1A 54 44 44 18 18 11 00", "AF Nikkor 35mm f/2"}, - {"1B 44 5E 8E 34 3C 10 00", "AF Zoom-Nikkor 75-300mm f/4.5-5.6"}, - {"1C 48 30 30 24 24 12 00", "AF Nikkor 20mm f/2.8"}, - {"1D 42 44 5C 2A 34 12 00", "AF Zoom-Nikkor 35-70mm f/3.3-4.5 N"}, - {"1E 54 56 56 24 24 13 00", "AF Micro-Nikkor 60mm f/2.8"}, - {"1E 5D 64 64 20 20 13 00", "Tamron SP AF 90mm f/2.5 (52E)"}, - {"1F 54 6A 6A 24 24 14 00", "AF Micro-Nikkor 105mm f/2.8"}, - {"20 3C 80 98 3D 3D 1E 02", "Tamron AF 200-400mm f/5.6 LD IF (75D)"}, - {"20 48 60 80 24 24 15 00", "AF Zoom-Nikkor 80-200mm f/2.8 ED"}, - {"20 5A 64 64 20 20 14 00", "Tamron SP AF 90mm f/2.5 Macro (152E)"}, - {"21 40 3C 5C 2C 34 16 00", "AF Zoom-Nikkor 28-70mm f/3.5-4.5"}, - {"21 56 8E 8E 24 24 14 00", "Tamron SP AF 300mm f/2.8 LD-IF (60E)"}, - {"22 48 72 72 18 18 16 00", "AF DC-Nikkor 135mm f/2"}, - {"22 53 64 64 24 24 E0 02", "Tamron SP AF 90mm f/2.8 Macro 1:1 (72E)"}, - {"23 30 BE CA 3C 48 17 00", "Zoom-Nikkor 1200-1700mm f/5.6-8 P ED IF"}, - {"24 44 60 98 34 3C 1A 02", "Tokina AT-X 840 AF-II (AF 80-400mm f/4.5-5.6)"}, - {"24 48 60 80 24 24 1A 02", "AF Zoom-Nikkor 80-200mm f/2.8D ED"}, - {"24 54 60 80 24 24 1A 02", "Tokina AT-X 828 AF PRO (AF 80-200mm f/2.8)"}, - {"25 44 44 8E 34 42 1B 02", "Tokina AF 353 (AF 35-300mm f/4.5-6.7)"}, - {"25 48 3C 5C 24 24 1B 02", "Tokina AT-X 270 AF PRO II (AF 28-70mm f/2.6-2.8)"}, - {"25 48 3C 5C 24 24 1B 02", "Tokina AT-X 287 AF PRO SV (AF 28-70mm f/2.8)"}, - {"25 48 44 5C 24 24 1B 02", "AF Zoom-Nikkor 35-70mm f/2.8D"}, - {"25 48 44 5C 24 24 3A 02", "AF Zoom-Nikkor 35-70mm f/2.8D"}, - {"25 48 44 5C 24 24 52 02", "AF Zoom-Nikkor 35-70mm f/2.8D"}, - {"26 3C 54 80 30 3C 1C 06", "Sigma 55-200mm f/4-5.6 DC"}, - {"26 3C 5C 82 30 3C 1C 02", "Sigma 70-210mm f/4-5.6 UC-II"}, - {"26 3C 5C 8E 30 3C 1C 02", "Sigma 70-300mm f/4-5.6 DG Macro"}, - {"26 3C 98 98 3C 3C 1C 02", "Sigma APO Tele Macro 400mm f/5.6"}, - {"26 3D 3C 80 2F 3D 1C 02", "Sigma 28-300mm f/3.8-5.6 Aspherical"}, - {"26 3E 3C 6A 2E 3C 1C 02", "Sigma 28-105mm f/3.8-5.6 UC-III Aspherical IF"}, - {"26 40 27 3F 2C 34 1C 02", "Sigma 15-30mm f/3.5-4.5 EX DG Aspherical DF"}, - {"26 40 2D 44 2B 34 1C 02", "Sigma 18-35mm f/3.5-4.5 Aspherical"}, - {"26 40 2D 50 2C 3C 1C 06", "Sigma 18-50mm f/3.5-5.6 DC"}, - {"26 40 2D 70 2B 3C 1C 06", "Sigma 18-125mm f/3.5-5.6 DC"}, - {"26 40 2D 80 2C 40 1C 06", "Sigma 18-200mm f/3.5-6.3 DC"}, - {"26 40 37 5C 2C 3C 1C 02", "Sigma 24-70mm f/3.5-5.6 Aspherical HF"}, - {"26 40 3C 5C 2C 34 1C 02", "AF Zoom-Nikkor 28-70mm f/3.5-4.5D"}, - {"26 40 3C 60 2C 3C 1C 02", "Sigma 28-80mm f/3.5-5.6 Mini Zoom Macro II Aspherical"}, - {"26 40 3C 65 2C 3C 1C 02", "Sigma 28-90mm f/3.5-5.6 Macro"}, - {"26 40 3C 80 2B 3C 1C 02", "Sigma 28-200mm f/3.5-5.6 Compact Aspherical Hyperzoom Macro"}, - {"26 40 3C 80 2C 3C 1C 02", "Sigma 28-200mm f/3.5-5.6 Compact Aspherical Hyperzoom Macro"}, - {"26 40 3C 8E 2C 40 1C 02", "Sigma 28-300mm f/3.5-6.3 Macro"}, - {"26 40 7B A0 34 40 1C 02", "Sigma APO 170-500mm f/5-6.3 Aspherical RF"}, - {"26 41 3C 8E 2C 40 1C 02", "Sigma 28-300mm f/3.5-6.3 DG Macro"}, - {"26 44 73 98 34 3C 1C 02", "Sigma 135-400mm f/4.5-5.6 APO Aspherical"}, - {"26 45 68 8E 34 42 1C 02", "Sigma 100-300mm f/4.5-6.7 DL"}, - {"26 48 11 11 30 30 1C 02", "Sigma 8mm f/4 EX Circular Fisheye"}, - {"26 48 27 27 24 24 1C 02", "Sigma 15mm f/2.8 EX Diagonal Fisheye"}, - {"26 48 2D 50 24 24 1C 06", "Sigma 18-50mm f/2.8 EX DC"}, - {"26 48 31 49 24 24 1C 02", "Sigma 20-40mm f/2.8"}, - {"26 48 37 56 24 24 1C 02", "Sigma 24-60mm f/2.8 EX DG"}, - {"26 48 3C 5C 24 24 1C 06", "Sigma 28-70mm f/2.8 EX DG"}, - {"26 48 3C 5C 24 30 1C 02", "Sigma 28-70mm f/2.8-4 DG"}, - {"26 48 3C 6A 24 30 1C 02", "Sigma 28-105mm f/2.8-4 Aspherical"}, - {"26 48 8E 8E 30 30 1C 02", "Sigma APO Tele Macro 300mm f/4"}, - {"26 54 2B 44 24 30 1C 02", "Sigma 17-35mm f/2.8-4 EX Aspherical"}, - {"26 54 37 5C 24 24 1C 02", "Sigma 24-70mm f/2.8 EX DG Macro"}, - {"26 54 37 73 24 34 1C 02", "Sigma 24-135mm f/2.8-4.5"}, - {"26 54 3C 5C 24 24 1C 02", "Sigma 28-70mm f/2.8 EX"}, - {"26 58 31 31 14 14 1C 02", "Sigma 20mm f/1.8 EX DG Aspherical RF"}, - {"26 58 37 37 14 14 1C 02", "Sigma 24mm f/1.8 EX DG Aspherical Macro"}, - {"26 58 3C 3C 14 14 1C 02", "Sigma 28mm f/1.8 EX DG Aspherical Macro"}, - {"27 48 8E 8E 24 24 1D 02", "AF-I Nikkor 300mm f/2.8D IF-ED"}, - {"27 48 8E 8E 24 24 E1 02", "AF-I Nikkor 300mm f/2.8D IF-ED + TC-17E"}, - {"27 48 8E 8E 24 24 F1 02", "AF-I Nikkor 300mm f/2.8D IF-ED + TC-14E"}, - {"27 48 8E 8E 24 24 F2 02", "AF-I Nikkor 300mm f/2.8D IF-ED + TC-20E"}, - {"27 48 8E 8E 30 30 1D 02", "Tokina AT-X 304 AF (AF 300mm f/4.0)"}, - {"27 54 8E 8E 24 24 1D 02", "Tamron SP AF 300mm f/2.8 LD-IF (360E)"}, - {"28 3C A6 A6 30 30 1D 02", "AF-I Nikkor 600mm f/4D IF-ED"}, - {"28 3C A6 A6 30 30 E1 02", "AF-I Nikkor 600mm f/4D IF-ED + TC-17E"}, - {"28 3C A6 A6 30 30 F1 02", "AF-I Nikkor 600mm f/4D IF-ED + TC-14E"}, - {"28 3C A6 A6 30 30 F2 02", "AF-I Nikkor 600mm f/4D IF-ED + TC-20E"}, - {"2A 54 3C 3C 0C 0C 26 02", "AF Nikkor 28mm f/1.4D"}, - {"2B 3C 44 60 30 3C 1F 02", "AF Zoom-Nikkor 35-80mm f/4-5.6D"}, - {"2C 48 6A 6A 18 18 27 02", "AF DC-Nikkor 105mm f/2D"}, - {"2D 48 80 80 30 30 21 02", "AF Micro-Nikkor 200mm f/4D IF-ED"}, - {"2E 48 5C 82 30 3C 22 02", "AF Nikkor 70-210mm f/4-5.6D"}, - {"2E 48 5C 82 30 3C 28 02", "AF Nikkor 70-210mm f/4-5.6D"}, - {"2F 40 30 44 2C 34 29 02", "Tokina AF 235 II (AF 20-35mm f/3.5-4.5)"}, - {"2F 40 30 44 2C 34 29 02", "Tokina AF 193 (AF 19-35mm f/3.5-4.5)"}, - {"2F 48 30 44 24 24 29 02", "AF Zoom-Nikkor 20-35mm f/2.8D IF"}, - {"2F 48 30 44 24 24 29 02", "Tokina AT-X 235 AF PRO (AF 20-35mm f/2.8)"}, - {"30 48 98 98 24 24 24 02", "AF-I Nikkor 400mm f/2.8D IF-ED"}, - {"30 48 98 98 24 24 E1 02", "AF-I Nikkor 400mm f/2.8D IF-ED + TC-17E"}, - {"30 48 98 98 24 24 F1 02", "AF-I Nikkor 400mm f/2.8D IF-ED + TC-14E"}, - {"30 48 98 98 24 24 F2 02", "AF-I Nikkor 400mm f/2.8D IF-ED + TC-20E"}, - {"31 54 56 56 24 24 25 02", "AF Micro-Nikkor 60mm f/2.8D"}, - {"32 53 64 64 24 24 35 02", "Tamron SP AF 90mm f/2.8 [Di] Macro 1:1 (172E/272E)"}, - {"32 54 50 50 24 24 35 02", "Sigma Macro 50mm f/2.8 EX DG"}, - {"32 54 6A 6A 24 24 35 02", "AF Micro-Nikkor 105mm f/2.8D"}, - {"32 54 6A 6A 24 24 35 02", "Sigma Macro 105mm f/2.8 EX DG"}, - {"33 48 2D 2D 24 24 31 02", "AF Nikkor 18mm f/2.8D"}, - {"33 54 3C 5E 24 24 62 02", "Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro (A09)"}, - {"34 48 29 29 24 24 32 02", "AF Fisheye Nikkor 16mm f/2.8D"}, - {"35 3C A0 A0 30 30 33 02", "AF-I Nikkor 500mm f/4D IF-ED"}, - {"35 3C A0 A0 30 30 E1 02", "AF-I Nikkor 500mm f/4D IF-ED + TC-17E"}, - {"35 3C A0 A0 30 30 F1 02", "AF-I Nikkor 500mm f/4D IF-ED + TC-14E"}, - {"35 3C A0 A0 30 30 F2 02", "AF-I Nikkor 500mm f/4D IF-ED + TC-20E"}, - {"36 48 37 37 24 24 34 02", "AF Nikkor 24mm f/2.8D"}, - {"37 48 30 30 24 24 36 02", "AF Nikkor 20mm f/2.8D"}, - {"38 4C 62 62 14 14 37 02", "AF Nikkor 85mm f/1.8D"}, - {"3A 40 3C 5C 2C 34 39 02", "AF Zoom-Nikkor 28-70mm f/3.5-4.5D"}, - {"3B 48 44 5C 24 24 3A 02", "AF Zoom-Nikkor 35-70mm f/2.8D N"}, - {"3C 48 60 80 24 24 3B 02", "AF Zoom-Nikkor 80-200mm f/2.8D ED"}, - {"3D 3C 44 60 30 3C 3E 02", "AF Zoom-Nikkor 35-80mm f/4-5.6D"}, - {"3E 48 3C 3C 24 24 3D 02", "AF Nikkor 28mm f/2.8D"}, - {"3F 40 44 6A 2C 34 45 02", "AF Zoom-Nikkor 35-105mm f/3.5-4.5D"}, - {"41 48 7C 7C 24 24 43 02", "AF Nikkor 180mm f/2.8D IF-ED"}, - {"42 54 44 44 18 18 44 02", "AF Nikkor 35mm f/2D"}, - {"43 54 50 50 0C 0C 46 02", "AF Nikkor 50mm f/1.4D"}, - {"44 44 60 80 34 3C 47 02", "AF Zoom-Nikkor 80-200mm f/4.5-5.6D"}, - {"45 3D 3C 60 2C 3C 48 02", "Tamron AF 28-80mm f/3.5-5.6 Aspherical (177D)"}, - {"45 40 3C 60 2C 3C 48 02", "AF Zoom-Nikkor 28-80mm f/3.5-5.6D"}, - {"45 41 37 72 2C 3C 48 02", "Tamron SP AF 24-135mm f/3.5-5.6 AD Aspherical (IF) Macro (190D)"}, - {"46 3C 44 60 30 3C 49 02", "AF Zoom-Nikkor 35-80mm f/4-5.6D N"}, - {"47 42 37 50 2A 34 4A 02", "AF Zoom-Nikkor 24-50mm f/3.3-4.5D"}, - {"48 38 1F 37 34 3C 4B 06", "Sigma 12-24mm f/4.5-5.6 EX DG Aspherical HSM"}, - {"48 3C 19 31 30 3C 4B 06", "Sigma 10-20mm f/4-5.6 EX DC HSM"}, - {"48 3C 50 A0 30 40 4B 02", "Sigma 50-500mm f/4-6.3 EX APO RF HSM"}, - {"48 3C 8E B0 3C 3C 4B 02", "Sigma APO 300-800mm f/5.6 EX DG HSM"}, - {"48 3C B0 B0 3C 3C 4B 02", "Sigma APO 800mm f/5.6 EX HSM"}, - {"48 44 A0 A0 34 34 4B 02", "Sigma APO 500mm f/4.5 EX HSM"}, - {"48 48 24 24 24 24 4B 02", "Sigma 14mm f/2.8 EX Aspherical HSM"}, - {"48 48 2B 44 24 30 4B 06", "Sigma 17-35mm f/2.8-4 EX DG Aspherical HSM"}, - {"48 48 68 8E 30 30 4B 02", "Sigma APO 100-300mm f/4 EX IF HSM"}, - {"48 48 76 76 24 24 4B 06", "Sigma APO Macro 150mm f/2.8 EX DG HSM"}, - {"48 48 8E 8E 24 24 4B 02", "AF-S Nikkor 300mm f/2.8D IF-ED"}, - {"48 48 8E 8E 24 24 E1 02", "AF-S Nikkor 300mm f/2.8D IF-ED + TC-17E"}, - {"48 48 8E 8E 24 24 F1 02", "AF-S Nikkor 300mm f/2.8D IF-ED + TC-14E"}, - {"48 48 8E 8E 24 24 F2 02", "AF-S Nikkor 300mm f/2.8D IF-ED + TC-20E"}, - {"48 4C 7C 7C 2C 2C 4B 02", "Sigma APO Macro 180mm f/3.5 EX DG HSM"}, - {"48 4C 7D 7D 2C 2C 4B 02", "Sigma APO Macro 180mm f/3.5 EX DG HSM"}, - {"48 54 3E 3E 0C 0C 4B 06", "Sigma 30mm f/1.4 EX DC HSM"}, - {"48 54 5C 80 24 24 4B 02", "Sigma 70-200mm f/2.8 EX APO IF HSM"}, - {"48 54 6F 8E 24 24 4B 02", "Sigma APO 120-300mm f/2.8 EX DG HSM"}, - {"48 54 8E 8E 24 24 4B 02", "Sigma APO 300mm f/2.8 EX DG HSM"}, - {"49 3C A6 A6 30 30 4C 02", "AF-S Nikkor 600mm f/4D IF-ED"}, - {"49 3C A6 A6 30 30 E1 02", "AF-S Nikkor 600mm f/4D IF-ED + TC-17E"}, - {"49 3C A6 A6 30 30 F1 02", "AF-S Nikkor 600mm f/4D IF-ED + TC-14E"}, - {"49 3C A6 A6 30 30 F2 02", "AF-S Nikkor 600mm f/4D IF-ED + TC-20E"}, - {"4A 40 11 11 2C 0C 4D 02", "Samyang 8mm f/3.5 Fish-Eye CS"}, - {"4A 48 1E 1E 24 0C 4D 02", "Samyang 12mm f/2.8 ED AS NCS Fish-Eye"}, - {"4A 48 24 24 24 0C 4D 02", "Samyang 10mm f/2.8 ED AS NCS CS"}, - {"4A 48 24 24 24 0C 4D 02", "Samyang AE 14mm f/2.8 ED AS IF UMC"}, - {"4A 4C 24 24 1E 6C 4D 06", "Samyang 14mm f/2.4 Premium"}, - {"4A 54 29 29 18 0C 4D 02", "Samyang 16mm f/2.0 ED AS UMC CS"}, - {"4A 54 62 62 0C 0C 4D 02", "AF Nikkor 85mm f/1.4D IF"}, - {"4A 58 30 30 14 0C 4D 02", "Rokinon 20mm f/1.8 ED AS UMC"}, - {"4A 60 36 36 0C 0C 4D 02", "Samyang 24mm f/1.4 ED AS UMC"}, - {"4A 60 44 44 0C 0C 4D 02", "Samyang 35mm f/1.4 AS UMC"}, - {"4A 60 62 62 0C 0C 4D 02", "Samyang AE 85mm f/1.4 AS IF UMC"}, - {"4B 3C A0 A0 30 30 4E 02", "AF-S Nikkor 500mm f/4D IF-ED"}, - {"4B 3C A0 A0 30 30 E1 02", "AF-S Nikkor 500mm f/4D IF-ED + TC-17E"}, - {"4B 3C A0 A0 30 30 F1 02", "AF-S Nikkor 500mm f/4D IF-ED + TC-14E"}, - {"4B 3C A0 A0 30 30 F2 02", "AF-S Nikkor 500mm f/4D IF-ED + TC-20E"}, - {"4C 40 37 6E 2C 3C 4F 02", "AF Zoom-Nikkor 24-120mm f/3.5-5.6D IF"}, - {"4D 3E 3C 80 2E 3C 62 02", "Tamron AF 28-200mm f/3.8-5.6 XR Aspherical (IF) Macro (A03N)"}, - {"4D 40 3C 80 2C 3C 62 02", "AF Zoom-Nikkor 28-200mm f/3.5-5.6D IF"}, - {"4D 41 3C 8E 2B 40 62 02", "Tamron AF 28-300mm f/3.5-6.3 XR Di LD Aspherical (IF) (A061)"}, - {"4D 41 3C 8E 2C 40 62 02", "Tamron AF 28-300mm f/3.5-6.3 XR LD Aspherical (IF) (185D)"}, - {"4E 48 72 72 18 18 51 02", "AF DC-Nikkor 135mm f/2D"}, - {"4F 40 37 5C 2C 3C 53 06", "IX-Nikkor 24-70mm f/3.5-5.6"}, - {"50 48 56 7C 30 3C 54 06", "IX-Nikkor 60-180mm f/4-5.6"}, - {"52 54 44 44 18 18 00 00", "Zeiss Milvus 35mm f/2"}, - {"53 48 60 80 24 24 57 02", "AF Zoom-Nikkor 80-200mm f/2.8D ED"}, - {"53 48 60 80 24 24 60 02", "AF Zoom-Nikkor 80-200mm f/2.8D ED"}, - {"53 54 50 50 0C 0C 00 00", "Zeiss Milvus 50mm f/1.4"}, - {"54 44 5C 7C 34 3C 58 02", "AF Zoom-Micro Nikkor 70-180mm f/4.5-5.6D ED"}, - {"54 44 5C 7C 34 3C 61 02", "AF Zoom-Micro Nikkor 70-180mm f/4.5-5.6D ED"}, - {"54 54 50 50 18 18 00 00", "Zeiss Milvus 50mm f/2 Macro"}, - {"55 54 62 62 0C 0C 00 00", "Zeiss Milvus 85mm f/1.4"}, - {"56 3C 5C 8E 30 3C 1C 02", "Sigma 70-300mm f/4-5.6 APO Macro Super II"}, - {"56 48 5C 8E 30 3C 5A 02", "AF Zoom-Nikkor 70-300mm f/4-5.6D ED"}, - {"56 54 68 68 18 18 00 00", "Zeiss Milvus 100mm f/2 Macro"}, - {"59 48 98 98 24 24 5D 02", "AF-S Nikkor 400mm f/2.8D IF-ED"}, - {"59 48 98 98 24 24 E1 02", "AF-S Nikkor 400mm f/2.8D IF-ED + TC-17E"}, - {"59 48 98 98 24 24 F1 02", "AF-S Nikkor 400mm f/2.8D IF-ED + TC-14E"}, - {"59 48 98 98 24 24 F2 02", "AF-S Nikkor 400mm f/2.8D IF-ED + TC-20E"}, - {"5A 3C 3E 56 30 3C 5E 06", "IX-Nikkor 30-60mm f/4-5.6"}, - {"5B 44 56 7C 34 3C 5F 06", "IX-Nikkor 60-180mm f/4.5-5.6"}, - {"5D 48 3C 5C 24 24 63 02", "AF-S Zoom-Nikkor 28-70mm f/2.8D IF-ED"}, - {"5E 48 60 80 24 24 64 02", "AF-S Zoom-Nikkor 80-200mm f/2.8D IF-ED"}, - {"5F 40 3C 6A 2C 34 65 02", "AF Zoom-Nikkor 28-105mm f/3.5-4.5D IF"}, - {"60 40 3C 60 2C 3C 66 02", "AF Zoom-Nikkor 28-80mm f/3.5-5.6D"}, - {"61 44 5E 86 34 3C 67 02", "AF Zoom-Nikkor 75-240mm f/4.5-5.6D"}, - {"63 48 2B 44 24 24 68 02", "AF-S Nikkor 17-35mm f/2.8D IF-ED"}, - {"64 00 62 62 24 24 6A 02", "PC Micro-Nikkor 85mm f/2.8D"}, - {"65 44 60 98 34 3C 6B 0A", "AF VR Zoom-Nikkor 80-400mm f/4.5-5.6D ED"}, - {"66 40 2D 44 2C 34 6C 02", "AF Zoom-Nikkor 18-35mm f/3.5-4.5D IF-ED"}, - {"67 48 37 62 24 30 6D 02", "AF Zoom-Nikkor 24-85mm f/2.8-4D IF"}, - {"67 54 37 5C 24 24 1C 02", "Sigma 24-70mm f/2.8 EX DG Macro"}, - {"68 42 3C 60 2A 3C 6E 06", "AF Zoom-Nikkor 28-80mm f/3.3-5.6G"}, - {"69 47 5C 8E 30 3C 00 02", "Tamron AF 70-300mm f/4-5.6 Di LD Macro 1:2 (A17N)"}, - {"69 48 5C 8E 30 3C 6F 02", "Tamron AF 70-300mm f/4-5.6 LD Macro 1:2 (572D/772D)"}, - {"69 48 5C 8E 30 3C 6F 06", "AF Zoom-Nikkor 70-300mm f/4-5.6G"}, - {"6A 48 8E 8E 30 30 70 02", "AF-S Nikkor 300mm f/4D IF-ED"}, - {"6B 48 24 24 24 24 71 02", "AF Nikkor ED 14mm f/2.8D"}, - {"6D 48 8E 8E 24 24 73 02", "AF-S Nikkor 300mm f/2.8D IF-ED II"}, - {"6E 48 98 98 24 24 74 02", "AF-S Nikkor 400mm f/2.8D IF-ED II"}, - {"6F 3C A0 A0 30 30 75 02", "AF-S Nikkor 500mm f/4D IF-ED II"}, - {"70 3C A6 A6 30 30 76 02", "AF-S Nikkor 600mm f/4D IF-ED II"}, - {"71 48 64 64 24 24 00 00", "Voigtlander APO-Skopar 90mm f/2.8 SL IIs"}, - {"72 48 4C 4C 24 24 77 00", "Nikkor 45mm f/2.8 P"}, - {"74 40 37 62 2C 34 78 06", "AF-S Zoom-Nikkor 24-85mm f/3.5-4.5G IF-ED"}, - {"75 40 3C 68 2C 3C 79 06", "AF Zoom-Nikkor 28-100mm f/3.5-5.6G"}, - {"76 58 50 50 14 14 7A 02", "AF Nikkor 50mm f/1.8D"}, - {"77 44 60 98 34 3C 7B 0E", "Sigma 80-400mm f/4.5-5.6 APO DG D OS"}, - {"77 44 61 98 34 3C 7B 0E", "Sigma 80-400mm f/4.5-5.6 EX OS"}, - {"77 48 5C 80 24 24 7B 0E", "AF-S VR Zoom-Nikkor 70-200mm f/2.8G IF-ED"}, - {"78 40 37 6E 2C 3C 7C 0E", "AF-S VR Zoom-Nikkor 24-120mm f/3.5-5.6G IF-ED"}, - {"79 40 11 11 2C 2C 1C 06", "Sigma 8mm f/3.5 EX Circular Fisheye"}, - {"79 40 3C 80 2C 3C 7F 06", "AF Zoom-Nikkor 28-200mm f/3.5-5.6G IF-ED"}, - {"79 48 3C 5C 24 24 1C 06", "Sigma 28-70mm f/2.8 EX DG"}, - {"79 48 5C 5C 24 24 1C 06", "Sigma Macro 70mm f/2.8 EX DG"}, - {"79 54 31 31 0C 0C 4B 06", "Sigma 20mm f/1.4 DG HSM | A"}, - {"7A 3B 53 80 30 3C 4B 06", "Sigma 55-200mm f/4-5.6 DC HSM"}, - {"7A 3C 1F 37 30 30 7E 06", "AF-S DX Zoom-Nikkor 12-24mm f/4G IF-ED"}, - {"7A 3C 1F 37 30 30 7E 06", "Tokina AT-X 124 AF PRO DX II (AF 12-24mm f/4)"}, - {"7A 3C 1F 3C 30 30 7E 06", "Tokina AT-X 12-28 PRO DX (AF 12-28mm f/4)"}, - {"7A 40 2D 50 2C 3C 4B 06", "Sigma 18-50mm f/3.5-5.6 DC HSM"}, - {"7A 40 2D 80 2C 40 4B 0E", "Sigma 18-200mm f/3.5-6.3 DC OS HSM"}, - {"7A 47 2B 5C 24 34 4B 06", "Sigma 17-70mm f/2.8-4.5 DC Macro Asp. IF HSM"}, - {"7A 47 50 76 24 24 4B 06", "Sigma 50-150mm f/2.8 EX APO DC HSM"}, - {"7A 48 1C 29 24 24 7E 06", "Tokina AT-X 116 PRO DX II (AF 11-16mm f/2.8)"}, - {"7A 48 1C 30 24 24 7E 06", "Tokina AT-X 11-20 f/2.8 PRO DX (AF 11-20mm f/2.8)"}, - {"7A 48 2B 5C 24 34 4B 06", "Sigma 17-70mm f/2.8-4.5 DC Macro Asp. IF HSM"}, - {"7A 48 2D 50 24 24 4B 06", "Sigma 18-50mm f/2.8 EX DC Macro"}, - {"7A 48 5C 80 24 24 4B 06", "Sigma 70-200mm f/2.8 EX APO DG Macro HSM II"}, - {"7A 54 6E 8E 24 24 4B 02", "Sigma APO 120-300mm f/2.8 EX DG HSM"}, - {"7B 48 37 44 18 18 4B 06", "Sigma 24-35mm f/2.0 DG HSM | A"}, - {"7B 48 80 98 30 30 80 0E", "AF-S VR Zoom-Nikkor 200-400mm f/4G IF-ED"}, - {"7C 54 2B 50 24 24 00 06", "Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical (IF) (A16)"}, - {"7D 48 2B 53 24 24 82 06", "AF-S DX Zoom-Nikkor 17-55mm f/2.8G IF-ED"}, - {"7F 40 2D 5C 2C 34 84 06", "AF-S DX Zoom-Nikkor 18-70mm f/3.5-4.5G IF-ED"}, - {"7F 48 2B 5C 24 34 1C 06", "Sigma 17-70mm f/2.8-4.5 DC Macro Asp. IF"}, - {"7F 48 2D 50 24 24 1C 06", "Sigma 18-50mm f/2.8 EX DC Macro"}, - {"80 48 1A 1A 24 24 85 06", "AF DX Fisheye-Nikkor 10.5mm f/2.8G ED"}, - {"80 48 1C 29 24 24 7A 06", "Tokina atx-i 11-16mm f/2.8 CF"}, - {"81 34 76 A6 38 40 4B 0E", "Sigma 150-600mm f/5-6.3 DG OS HSM | S"}, - {"81 54 80 80 18 18 86 0E", "AF-S VR Nikkor 200mm f/2G IF-ED"}, - {"82 34 76 A6 38 40 4B 0E", "Sigma 150-600mm f/5-6.3 DG OS HSM | C"}, - {"82 48 8E 8E 24 24 87 0E", "AF-S VR Nikkor 300mm f/2.8G IF-ED"}, - {"83 00 B0 B0 5A 5A 88 04", "FSA-L2, EDG 65, 800mm f/13 G"}, - {"87 2C 2D 8E 2C 40 4B 0E", "Sigma 18-300mm f/3.5-6.3 DC Macro HSM"}, - {"88 54 50 50 0C 0C 4B 06", "Sigma 50mm f/1.4 DG HSM | A"}, - {"89 30 2D 80 2C 40 4B 0E", "Sigma 18-200mm f/3.5-6.3 DC Macro OS HS | C"}, - {"89 3C 53 80 30 3C 8B 06", "AF-S DX Zoom-Nikkor 55-200mm f/4-5.6G ED"}, - {"8A 3C 37 6A 30 30 4B 0E", "Sigma 24-105mm f/4 DG OS HSM"}, - {"8A 54 6A 6A 24 24 8C 0E", "AF-S VR Micro-Nikkor 105mm f/2.8G IF-ED"}, - {"8B 40 2D 80 2C 3C 8D 0E", "AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED"}, - {"8B 40 2D 80 2C 3C FD 0E", "AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED [II]"}, - {"8B 48 1C 30 24 24 85 06", "Tokina AT-X 11-20 f/2.8 PRO DX (AF 11-20mm f/2.8)"}, - {"8B 4C 2D 44 14 14 4B 06", "Sigma 18-35mm f/1.8 DC HSM"}, - {"8C 40 2D 53 2C 3C 8E 06", "AF-S DX Zoom-Nikkor 18-55mm f/3.5-5.6G ED"}, - {"8C 48 29 3C 24 24 86 06", "Tokina opera 16-28mm f/2.8 FF"}, - {"8D 44 5C 8E 34 3C 8F 0E", "AF-S VR Zoom-Nikkor 70-300mm f/4.5-5.6G IF-ED"}, - {"8D 48 6E 8E 24 24 4B 0E", "Sigma 120-300mm f/2.8 DG OS HSM Sports"}, - {"8E 3C 2B 5C 24 30 4B 0E", "Sigma 17-70mm f/2.8-4 DC Macro OS HSM | C"}, - {"8F 40 2D 72 2C 3C 91 06", "AF-S DX Zoom-Nikkor 18-135mm f/3.5-5.6G IF-ED"}, - {"8F 48 2B 50 24 24 4B 0E", "Sigma 17-50mm f/2.8 EX DC OS HSM"}, - {"90 3B 53 80 30 3C 92 0E", "AF-S DX VR Zoom-Nikkor 55-200mm f/4-5.6G IF-ED"}, - {"90 40 2D 80 2C 40 4B 0E", "Sigma 18-200mm f/3.5-6.3 II DC OS HSM"}, - {"91 54 44 44 0C 0C 4B 06", "Sigma 35mm f/1.4 DG HSM"}, - {"92 2C 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"}, - {"92 48 24 37 24 24 94 06", "AF-S Zoom-Nikkor 14-24mm f/2.8G ED"}, - {"93 48 37 5C 24 24 95 06", "AF-S Zoom-Nikkor 24-70mm f/2.8G ED"}, - {"94 40 2D 53 2C 3C 96 06", "AF-S DX Zoom-Nikkor 18-55mm f/3.5-5.6G ED II"}, - {"94 48 7C 7C 24 24 4B 0E", "Sigma APO Macro 180mm f/2.8 EX DG OS HSM"}, - {"95 00 37 37 2C 2C 97 06", "PC-E Nikkor 24mm f/3.5D ED"}, - {"95 4C 37 37 2C 2C 97 02", "PC-E Nikkor 24mm f/3.5D ED"}, - {"96 38 1F 37 34 3C 4B 06", "Sigma 12-24mm f/4.5-5.6 II DG HSM"}, - {"96 48 98 98 24 24 98 0E", "AF-S VR Nikkor 400mm f/2.8G ED"}, - {"97 3C A0 A0 30 30 99 0E", "AF-S VR Nikkor 500mm f/4G ED"}, - {"97 48 6A 6A 24 24 4B 0E", "Sigma Macro 105mm f/2.8 EX DG OS HSM"}, - {"98 3C A6 A6 30 30 9A 0E", "AF-S VR Nikkor 600mm f/4G ED"}, - {"98 48 50 76 24 24 4B 0E", "Sigma 50-150mm f/2.8 EX APO DC OS HSM"}, - {"99 40 29 62 2C 3C 9B 0E", "AF-S DX VR Zoom-Nikkor 16-85mm f/3.5-5.6G ED"}, - {"99 48 76 76 24 24 4B 0E", "Sigma APO Macro 150mm f/2.8 EX DG OS HSM"}, - {"9A 40 2D 53 2C 3C 9C 0E", "AF-S DX VR Zoom-Nikkor 18-55mm f/3.5-5.6G"}, - {"9A 4C 50 50 14 14 9C 06", "Yongnuo YN50mm f/1.8N"}, - {"9B 00 4C 4C 24 24 9D 06", "PC-E Micro Nikkor 45mm f/2.8D ED"}, - {"9B 54 4C 4C 24 24 9D 02", "PC-E Micro Nikkor 45mm f/2.8D ED"}, - {"9B 54 62 62 0C 0C 4B 06", "Sigma 85mm f/1.4 EX DG HSM"}, - {"9C 48 5C 80 24 24 4B 0E", "Sigma 70-200mm f/2.8 EX DG OS HSM"}, - {"9C 54 56 56 24 24 9E 06", "AF-S Micro Nikkor 60mm f/2.8G ED"}, - {"9D 00 62 62 24 24 9F 06", "PC-E Micro Nikkor 85mm f/2.8D"}, - {"9D 48 2B 50 24 24 4B 0E", "Sigma 17-50mm f/2.8 EX DC OS HSM"}, - {"9D 54 62 62 24 24 9F 02", "PC-E Micro Nikkor 85mm f/2.8D"}, - {"9E 38 11 29 34 3C 4B 06", "Sigma 8-16mm f/4.5-5.6 DC HSM"}, - {"9E 40 2D 6A 2C 3C A0 0E", "AF-S DX VR Zoom-Nikkor 18-105mm f/3.5-5.6G ED"}, - {"9F 37 50 A0 34 40 4B 0E", "Sigma 50-500mm f/4.5-6.3 DG OS HSM"}, - {"9F 48 48 48 24 24 A1 06", "Yongnuo YN40mm f/2.8N"}, - {"9F 54 68 68 18 18 A2 06", "Yongnuo YN100mm f/2N"}, - {"9F 58 44 44 14 14 A1 06", "AF-S DX Nikkor 35mm f/1.8G"}, - {"A0 37 5C 8E 34 3C A2 06", "Sony FE 70-300mm f/4.5-5.6 G OSS"}, - {"A0 40 2D 53 2C 3C CA 0E", "AF-P DX Nikkor 18-55mm f/3.5-5.6G VR"}, - {"A0 40 2D 53 2C 3C CA 8E", "AF-P DX Nikkor 18-55mm f/3.5-5.6G"}, - {"A0 40 2D 74 2C 3C BB 0E", "AF-S DX Nikkor 18-140mm f/3.5-5.6G ED VR"}, - {"A0 48 2A 5C 24 30 4B 0E", "Sigma 17-70mm f/2.8-4 DC Macro OS HSM"}, - {"A0 54 50 50 0C 0C A2 06", "AF-S Nikkor 50mm f/1.4G"}, - {"A0 56 44 44 14 14 A2 06", "Sony FE 35mm f/1.8"}, - {"A1 40 18 37 2C 34 A3 06", "AF-S DX Nikkor 10-24mm f/3.5-4.5G ED"}, - {"A1 40 2D 53 2C 3C CB 86", "AF-P DX Nikkor 18-55mm f/3.5-5.6G"}, - {"A1 41 19 31 2C 2C 4B 06", "Sigma 10-20mm f/3.5 EX DC HSM"}, - {"A1 48 6E 8E 24 24 DB 4E", "AF-S Nikkor 120-300mm f/2.8E FL ED SR VR"}, - {"A1 54 55 55 0C 0C BC 06", "AF-S Nikkor 58mm f/1.4G"}, - {"A2 38 5C 8E 34 40 CD 86", "AF-P DX Nikkor 70-300mm f/4.5-6.3G VR"}, - {"A2 40 2D 53 2C 3C BD 0E", "AF-S DX Nikkor 18-55mm f/3.5-5.6G VR II"}, - {"A2 48 5C 80 24 24 A4 0E", "AF-S Nikkor 70-200mm f/2.8G ED VR II"}, - {"A3 38 5C 8E 34 40 CE 0E", "AF-P DX Nikkor 70-300mm f/4.5-6.3G ED"}, - {"A3 38 5C 8E 34 40 CE 8E", "AF-P DX Nikkor 70-300mm f/4.5-6.3G ED VR"}, - {"A3 3C 29 44 30 30 A5 0E", "AF-S Nikkor 16-35mm f/4G ED VR"}, - {"A3 3C 5C 8E 30 3C 4B 0E", "Sigma 70-300mm f/4-5.6 DG OS"}, - {"A4 40 2D 8E 2C 40 BF 0E", "AF-S DX Nikkor 18-300mm f/3.5-6.3G ED VR"}, - {"A4 47 2D 50 24 34 4B 0E", "Sigma 18-50mm f/2.8-4.5 DC OS HSM"}, - {"A4 48 5C 80 24 24 CF 0E", "AF-S Nikkor 70-200mm f/2.8E FL ED VR"}, - {"A4 48 5C 80 24 24 CF 4E", "AF-S Nikkor 70-200mm f/2.8E FL ED VR"}, - {"A4 54 37 37 0C 0C A6 06", "AF-S Nikkor 24mm f/1.4G ED"}, - {"A5 40 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC OS HSM"}, - {"A5 40 3C 8E 2C 3C A7 0E", "AF-S Nikkor 28-300mm f/3.5-5.6G ED VR"}, - {"A5 4C 44 44 14 14 C0 06", "AF-S Nikkor 35mm f/1.8G ED"}, - {"A5 54 6A 6A 0C 0C D0 06", "AF-S Nikkor 105mm f/1.4E ED"}, - {"A5 54 6A 6A 0C 0C D0 46", "AF-S Nikkor 105mm f/1.4E ED"}, - {"A6 48 2F 2F 30 30 D1 06", "PC Nikkor 19mm f/4E ED"}, - {"A6 48 2F 2F 30 30 D1 46", "PC Nikkor 19mm f/4E ED"}, - {"A6 48 37 5C 24 24 4B 06", "Sigma 24-70mm f/2.8 IF EX DG HSM"}, - {"A6 48 8E 8E 24 24 A8 0E", "AF-S Nikkor 300mm f/2.8G IF-ED VR II"}, - {"A6 48 98 98 24 24 C1 0E", "AF-S Nikkor 400mm f/2.8E FL ED VR"}, - {"A7 3C 53 80 30 3C C2 0E", "AF-S DX Nikkor 55-200mm f/4-5.6G ED VR II"}, - {"A7 40 11 26 2C 34 D2 06", "AF-S Fisheye Nikkor 8-15mm f/3.5-4.5E ED"}, - {"A7 40 11 26 2C 34 D2 46", "AF-S Fisheye Nikkor 8-15mm f/3.5-4.5E ED"}, - {"A7 49 80 A0 24 24 4B 06", "Sigma APO 200-500mm f/2.8 EX DG"}, - {"A7 4B 62 62 2C 2C A9 0E", "AF-S DX Micro Nikkor 85mm f/3.5G ED VR"}, - {"A8 38 18 30 34 3C D3 0E", "AF-P DX Nikkor 10-20mm f/4.5-5.6G VR"}, - {"A8 38 18 30 34 3C D3 8E", "AF-P DX Nikkor 10-20mm f/4.5-5.6G VR"}, - {"A8 48 80 98 30 30 AA 0E", "AF-S Zoom-Nikkor 200-400mm f/4G IF-ED VR II"}, - {"A8 48 8E 8E 30 30 C3 0E", "AF-S Nikkor 300mm f/4E PF ED VR"}, - {"A8 48 8E 8E 30 30 C3 4E", "AF-S Nikkor 300mm f/4E PF ED VR"}, - {"A9 48 7C 98 30 30 D4 0E", "AF-S Nikkor 180-400mm f/4E TC1.4 FL ED VR"}, - {"A9 48 7C 98 30 30 D4 4E", "AF-S Nikkor 180-400mm f/4E TC1.4 FL ED VR"}, - {"A9 4C 31 31 14 14 C4 06", "AF-S Nikkor 20mm f/1.8G ED"}, - {"A9 54 80 80 18 18 AB 0E", "AF-S Nikkor 200mm f/2G ED VR II"}, - {"AA 3C 37 6E 30 30 AC 0E", "AF-S Nikkor 24-120mm f/4G ED VR"}, - {"AA 48 37 5C 24 24 C5 0E", "AF-S Nikkor 24-70mm f/2.8E ED VR"}, - {"AA 48 37 5C 24 24 C5 4E", "AF-S Nikkor 24-70mm f/2.8E ED VR"}, - {"AA 48 88 A4 3C 3C D5 0E", "AF-S Nikkor 180-400mm f/4E TC1.4 FL ED VR + 1.4x TC"}, - {"AA 48 88 A4 3C 3C D5 4E", "AF-S Nikkor 180-400mm f/4E TC1.4 FL ED VR + 1.4x TC"}, - {"AB 3C A0 A0 30 30 C6 4E", "AF-S Nikkor 500mm f/4E FL ED VR"}, - {"AB 44 5C 8E 34 3C D6 0E", "AF-P Nikkor 70-300mm f/4.5-5.6E ED VR"}, - {"AB 44 5C 8E 34 3C D6 4E", "AF-P Nikkor 70-300mm f/4.5-5.6E ED VR"}, - {"AB 44 5C 8E 34 3C D6 CE", "AF-P Nikkor 70-300mm f/4.5-5.6E ED VR"}, - {"AC 38 53 8E 34 3C AE 0E", "AF-S DX Nikkor 55-300mm f/4.5-5.6G ED VR"}, - {"AC 3C A6 A6 30 30 C7 4E", "AF-S Nikkor 600mm f/4E FL ED VR"}, - {"AC 54 3C 3C 0C 0C D7 06", "AF-S Nikkor 28mm f/1.4E ED"}, - {"AC 54 3C 3C 0C 0C D7 46", "AF-S Nikkor 28mm f/1.4E ED"}, - {"AD 3C 2D 8E 2C 3C AF 0E", "AF-S DX Nikkor 18-300mm f/3.5-5.6G ED VR"}, - {"AD 3C A0 A0 3C 3C D8 0E", "AF-S Nikkor 500mm f/5.6E PF ED VR"}, - {"AD 3C A0 A0 3C 3C D8 4E", "AF-S Nikkor 500mm f/5.6E PF ED VR"}, - {"AD 48 28 60 24 30 C8 0E", "AF-S DX Nikkor 16-80mm f/2.8-4E ED VR"}, - {"AD 48 28 60 24 30 C8 4E", "AF-S DX Nikkor 16-80mm f/2.8-4E ED VR"}, - {"AE 3C 80 A0 3C 3C C9 0E", "AF-S Nikkor 200-500mm f/5.6E ED VR"}, - {"AE 3C 80 A0 3C 3C C9 4E", "AF-S Nikkor 200-500mm f/5.6E ED VR"}, - {"AE 54 62 62 0C 0C B0 06", "AF-S Nikkor 85mm f/1.4G"}, - {"AF 4C 37 37 14 14 CC 06", "AF-S Nikkor 24mm f/1.8G ED"}, - {"AF 54 44 44 0C 0C B1 06", "AF-S Nikkor 35mm f/1.4G"}, - {"B0 4C 50 50 14 14 B2 06", "AF-S Nikkor 50mm f/1.8G"}, - {"B1 48 48 48 24 24 B3 06", "AF-S DX Micro Nikkor 40mm f/2.8G"}, - {"B2 48 5C 80 30 30 B4 0E", "AF-S Nikkor 70-200mm f/4G ED VR"}, - {"B3 4C 62 62 14 14 B5 06", "AF-S Nikkor 85mm f/1.8G"}, - {"B4 40 37 62 2C 34 B6 0E", "AF-S Zoom-Nikkor 24-85mm f/3.5-4.5G IF-ED VR"}, - {"B5 4C 3C 3C 14 14 B7 06", "AF-S Nikkor 28mm f/1.8G"}, - {"B6 3C B0 B0 3C 3C B8 0E", "AF-S VR Nikkor 800mm f/5.6E FL ED"}, - {"B6 3C B0 B0 3C 3C B8 4E", "AF-S VR Nikkor 800mm f/5.6E FL ED"}, - {"B6 48 37 56 24 24 1C 02", "Sigma 24-60mm f/2.8 EX DG"}, - {"B7 44 60 98 34 3C B9 0E", "AF-S Nikkor 80-400mm f/4.5-5.6G ED VR"}, - {"B8 40 2D 44 2C 34 BA 06", "AF-S Nikkor 18-35mm f/3.5-4.5G ED"}, - {"BB 48 5C 80 24 24 4B 4E", "Sigma 70-200mm f/2.8 DG OS HSM | S"}, - {"BF 3C 1B 1B 30 30 01 04", "Irix 11mm f/4 Firefly"}, - {"BF 4E 26 26 1E 1E 01 04", "Irix 15mm f/2.4 Firefly"}, - {"C1 48 24 37 24 24 4B 46", "Sigma 14-24mm f/2.8 DG HSM | A"}, - {"C2 4C 24 24 14 14 4B 06", "Sigma 14mm f/1.8 DG HSM | A"}, - {"C3 34 68 98 38 40 4B 4E", "Sigma 100-400mm f/5-6.3 DG OS HSM | C"}, - {"C4 4C 73 73 14 14 4B 46", "Sigma 135mm f/1.8 DG HSM | A"}, - {"C8 54 44 44 0D 0D DF 46", "Tamron SP 35mm f/1.4 Di USD (F045)"}, - {"C8 54 62 62 0C 0C 4B 06", "Sigma 85mm f/1.4 DG HSM | A"}, - {"C8 54 62 62 0C 0C 4B 46", "Sigma 85mm f/1.4 DG HSM | A"}, - {"C9 3C 44 76 25 31 DF 4E", "Tamron 35-150mm f/2.8-4 Di VC OSD (A043)"}, - {"C9 48 37 5C 24 24 4B 4E", "Sigma 24-70mm f/2.8 DG OS HSM | A"}, - {"CA 3C 1F 37 30 30 4B 46", "Sigma 12-24mm f/4 DG HSM | A"}, - {"CA 48 27 3E 24 24 DF 4E", "Tamron SP 15-30mm f/2.8 Di VC USD G2 (A041)"}, - {"CB 3C 2B 44 24 31 DF 46", "Tamron 17-35mm f/2.8-4 Di OSD (A037)"}, - {"CC 44 68 98 34 41 DF 0E", "Tamron 100-400mm f/4.5-6.3 Di VC USD"}, - {"CC 4C 50 68 14 14 4B 06", "Sigma 50-100mm f/1.8 DC HSM | A"}, - {"CD 3D 2D 70 2E 3C 4B 0E", "Sigma 18-125mm f/3.8-5.6 DC OS HSM"}, - {"CE 34 76 A0 38 40 4B 0E", "Sigma 150-500mm f/5-6.3 DG OS APO HSM"}, - {"CE 47 37 5C 25 25 DF 4E", "Tamron SP 24-70mm f/2.8 Di VC USD G2 (A032)"}, - {"CF 38 6E 98 34 3C 4B 0E", "Sigma APO 120-400mm f/4.5-5.6 DG OS HSM"}, - {"CF 47 5C 8E 31 3D DF 0E", "Tamron SP 70-300mm f/4-5.6 Di VC USD (A030)"}, - {"D2 3C 8E B0 3C 3C 4B 02", "Sigma APO 300-800mm f/5.6 EX DG HSM"}, - {"DB 40 11 11 2C 2C 1C 06", "Sigma 8mm f/3.5 EX DG Circular Fisheye"}, - {"DC 48 19 19 24 24 4B 06", "Sigma 10mm f/2.8 EX DC HSM Fisheye"}, - {"DE 54 50 50 0C 0C 4B 06", "Sigma 50mm f/1.4 EX DG HSM"}, - {"E0 3C 5C 8E 30 3C 4B 06", "Sigma 70-300mm f/4-5.6 APO DG Macro HSM"}, - {"E0 40 2D 98 2C 41 DF 4E", "Tamron 18-400mm f/3.5-6.3 Di II VC HLD (B028)"}, - {"E1 40 19 36 2C 35 DF 4E", "Tamron 10-24mm f/3.5-4.5 Di II VC HLD (B023)"}, - {"E1 58 37 37 14 14 1C 02", "Sigma 24mm f/1.8 EX DG Aspherical Macro"}, - {"E2 47 5C 80 24 24 DF 4E", "Tamron SP 70-200mm f/2.8 Di VC USD G2 (A025)"}, - {"E3 40 76 A6 38 40 DF 0E", "Tamron SP 150-600mm f/5-6.3 Di VC USD G2 (A022)"}, - {"E3 40 76 A6 38 40 DF 4E", "Tamron SP 150-600mm f/5-6.3 Di VC USD G2"}, - {"E3 54 50 50 24 24 35 02", "Sigma Macro 50mm f/2.8 EX DG"}, - {"E4 54 64 64 24 24 DF 0E", "Tamron SP 90mm f/2.8 Di VC USD Macro 1:1 (F017)"}, - {"E5 4C 62 62 14 14 C9 4E", "Tamron SP 85mm f/1.8 Di VC USD (F016)"}, - {"E5 54 6A 6A 24 24 35 02", "Sigma Macro 105mm f/2.8 EX DG"}, - {"E6 40 2D 80 2C 40 DF 0E", "Tamron 18-200mm f/3.5-6.3 Di II VC (B018)"}, - {"E6 41 3C 8E 2C 40 1C 02", "Sigma 28-300mm f/3.5-6.3 DG Macro"}, - {"E7 4C 4C 4C 14 14 DF 0E", "Tamron SP 45mm f/1.8 Di VC USD (F013)"}, - {"E8 4C 44 44 14 14 DF 0E", "Tamron SP 35mm f/1.8 Di VC USD (F012)"}, - {"E9 48 27 3E 24 24 DF 0E", "Tamron SP 15-30mm f/2.8 Di VC USD (A012)"}, - {"E9 54 37 5C 24 24 1C 02", "Sigma 24-70mm f/2.8 EX DG Macro"}, - {"EA 40 29 8E 2C 40 DF 0E", "Tamron 16-300mm f/3.5-6.3 Di II VC PZD (B016)"}, - {"EA 48 27 27 24 24 1C 02", "Sigma 15mm f/2.8 EX Diagonal Fisheye"}, - {"EB 40 76 A6 38 40 DF 0E", "Tamron SP AF 150-600mm f/5-6.3 VC USD (A011)"}, - {"EC 3E 3C 8E 2C 40 DF 0E", "Tamron 28-300mm f/3.5-6.3 Di VC PZD A010"}, - {"ED 40 2D 80 2C 40 4B 0E", "Sigma 18-200mm f/3.5-6.3 DC OS HSM"}, - {"EE 48 5C 80 24 24 4B 06", "Sigma 70-200mm f/2.8 EX APO DG Macro HSM II"}, - {"F0 38 1F 37 34 3C 4B 06", "Sigma 12-24mm f/4.5-5.6 EX DG Aspherical HSM"}, - {"F0 3F 2D 8A 2C 40 DF 0E", "Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD (B008)"}, - {"F1 44 A0 A0 34 34 4B 02", "Sigma APO 500mm f/4.5 EX DG HSM"}, - {"F1 47 5C 8E 30 3C DF 0E", "Tamron SP 70-300mm f/4-5.6 Di VC USD (A005)"}, - {"F3 48 68 8E 30 30 4B 02", "Sigma APO 100-300mm f/4 EX IF HSM"}, - {"F3 54 2B 50 24 24 84 0E", "Tamron SP AF 17-50mm f/2.8 XR Di II VC LD Aspherical (IF) (B005)"}, - {"F4 4C 7C 7C 2C 2C 4B 02", "Sigma APO Macro 180mm f/3.5 EX DG HSM"}, - {"F4 54 56 56 18 18 84 06", "Tamron SP AF 60mm f/2.0 Di II Macro 1:1 (G005)"}, - {"F5 40 2C 8A 2C 40 40 0E", "Tamron AF 18-270mm f/3.5-6.3 Di II VC LD Aspherical (IF) Macro (B003)"}, - {"F5 48 76 76 24 24 4B 06", "Sigma APO Macro 150mm f/2.8 EX DG HSM"}, - {"F6 3F 18 37 2C 34 84 06", "Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical (IF) (B001)"}, - {"F6 3F 18 37 2C 34 DF 06", "Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical (IF) (B001)"}, - {"F6 48 2D 50 24 24 4B 06", "Sigma 18-50mm f/2.8 EX DC Macro"}, - {"F7 53 5C 80 24 24 40 06", "Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)"}, - {"F7 53 5C 80 24 24 84 06", "Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)"}, - {"F8 54 3E 3E 0C 0C 4B 06", "Sigma 30mm f/1.4 EX DC HSM"}, - {"F8 54 64 64 24 24 DF 06", "Tamron SP AF 90mm f/2.8 Di Macro 1:1 (272NII)"}, - {"F8 55 64 64 24 24 84 06", "Tamron SP AF 90mm f/2.8 Di Macro 1:1 (272NII)"}, - {"F9 3C 19 31 30 3C 4B 06", "Sigma 10-20mm f/4-5.6 EX DC HSM"}, - {"F9 40 3C 8E 2C 40 40 0E", "Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical (IF) Macro (A20)"}, - {"FA 54 3C 5E 24 24 84 06", "Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro (A09NII)"}, - {"FA 54 3C 5E 24 24 DF 06", "Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical (IF) Macro (A09NII)"}, - {"FA 54 6E 8E 24 24 4B 02", "Sigma APO 120-300mm f/2.8 EX DG HSM"}, - {"FB 54 2B 50 24 24 84 06", "Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical (IF) (A16NII)"}, - {"FB 54 8E 8E 24 24 4B 02", "Sigma APO 300mm f/2.8 EX DG HSM"}, - {"FC 40 2D 80 2C 40 DF 06", "Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical (IF) Macro (A14NII)"}, - {"FD 47 50 76 24 24 4B 06", "Sigma 50-150mm f/2.8 EX APO DC HSM II"}, - {"FE 47 00 00 24 24 4B 06", "Sigma 4.5mm f/2.8 EX DC HSM Circular Fisheye"}, - {"FE 48 37 5C 24 24 DF 0E", "Tamron SP 24-70mm f/2.8 Di VC USD (A007)"}, - {"FE 53 5C 80 24 24 84 06", "Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)"}, - {"FE 54 5C 80 24 24 DF 0E", "Tamron SP 70-200mm f/2.8 Di VC USD (A009)"}, - {"FE 54 64 64 24 24 DF 0E", "Tamron SP 90mm f/2.8 Di VC USD Macro 1:1 (F004)"}, - {"FF 40 2D 80 2C 40 4B 06", "Sigma 18-200mm f/3.5-6.3 DC"}, - - // There are cases where one lens uses multiple IDs which change based on the focal length or aperture. - // These IDs cannot be listed using ExifTool, and so must be entered manually below. - // #4135 - - {"92 2B 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"}, // (210mm) - {"92 2C 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"}, // (185mm) - {"92 2D 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"}, // (155mm) - {"92 2E 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"}, // (130mm) - {"92 2F 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"}, // (105mm) - {"92 30 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"}, // (90mm) - {"92 32 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"}, // (75mm) - {"92 33 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"}, // (62mm) - {"92 35 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"}, // (52mm) - {"92 37 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"}, // (44mm) - {"92 39 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"}, // (38mm) - {"92 3A 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"}, // (32mm) - {"92 3E 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"}, // (22mm) - {"92 40 2D 88 2C 40 4B 0E", "Sigma 18-250mm f/3.5-6.3 DC Macro OS HSM"} // (18mm) -}; - -const TagAttrib nikonISOInfoAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "ISO", &naISOInfoISOInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0004, SHORT, "ISOExpansion", &naISOExpansionInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0006, AUTO, "ISO2", &naISOInfoISOInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000a, SHORT, "ISOExpansion2", &naISOExpansionInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib nikon2Attribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0002, AUTO, "Unknown", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0003, AUTO, "Quality", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0004, AUTO, "ColorMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0005, AUTO, "ImageAdjustment", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0006, AUTO, "ISOSpeed", &naISOInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0007, AUTO, "WhiteBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0008, AUTO, "Focus", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0009, AUTO, "Unknown", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000a, AUTO, "DigitalZoom", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000b, AUTO, "AuxiliaryLens", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0f00, AUTO, "Unknown", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib nikon3Attribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0001, AUTO, "MakerNoteVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0002, AUTO, "ISOSpeed", &naISOInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0003, AUTO, "ColorMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0004, AUTO, "Quality", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0005, AUTO, "WhiteBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0006, AUTO, "Sharpness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0007, AUTO, "FocusMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0008, AUTO, "FlashSetting", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0009, AUTO, "FlashType", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000b, AUTO, "WhiteBalanceFineTune", &stdInterpreter}, - {0, AC_NEW, 0, nullptr, 0x000c, AUTO, "ColorBalance1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000d, AUTO, "ProgramShift", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000e, AUTO, "ExposureDifference", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000f, AUTO, "ISOSelection", &naISOInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0010, AUTO, "DataDump", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x0011, AUTO, "NikonPreview", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0012, AUTO, "FlashExposureComp", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0013, AUTO, "ISOSetting", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0016, AUTO, "ImageBoundary", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0018, AUTO, "FlashExposureBracketValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0019, AUTO, "ExposureBracketValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001a, AUTO, "ImageProcessing", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001b, AUTO, "CropHiSpeed", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001d, AUTO, "SerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001e, AUTO, "ColorSpace", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0020, AUTO, "ImageAuthentication", &stdInterpreter}, - {0, AC_WRITE, 0, nikonISOInfoAttribs, 0x0025, AUTO, "ISOInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0080, AUTO, "ImageAdjustment", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0081, AUTO, "ToneComp", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0082, AUTO, "AuxiliaryLens", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0083, AUTO, "LensType", &naLensTypeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0084, AUTO, "Lens", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0085, AUTO, "ManualFocusDistance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0086, AUTO, "DigitalZoom", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0087, AUTO, "FlashMode", &naFlashModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0088, AUTO, "AFInfo", &naAFInfoInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0089, AUTO, "ShootingMode", &naShootingModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x008a, AUTO, "AutoBracketRelease", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x008b, AUTO, "LensFStops", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x008c, AUTO, "NEFCurve1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x008d, AUTO, "ColorHue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x008f, AUTO, "SceneMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0090, AUTO, "LightSource", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0091, AUTO, "ShotInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0092, AUTO, "HueAdjustment", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0094, AUTO, "Saturation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0095, AUTO, "NoiseReduction", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0096, AUTO, "NEFCurve2", &stdInterpreter}, - {0, AC_NEW, 0, nullptr, 0x0097, AUTO, "ColorBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0098, AUTO, "LensData", &naLensDataInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0099, AUTO, "RawImageCenter", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x009a, AUTO, "SensorPixelSize", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00a0, AUTO, "SerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00a2, AUTO, "ImageDataSize", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00a5, AUTO, "ImageCount", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00a6, AUTO, "DeletedImageCount", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00a7, AUTO, "ShutterCount", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00a9, AUTO, "ImageOptimization", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00aa, AUTO, "Saturation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00ab, AUTO, "VariProgram", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00ac, AUTO, "ImageStabilization", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00ad, AUTO, "AFResponse", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00b0, AUTO, "MultiExposure", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00b1, AUTO, "HighISONoiseReduction", &naHiISONRInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0e00, AUTO, "PrintIM", &stdInterpreter}, - {0, AC_DONTWRITE, 0, nullptr, 0x0e01, AUTO, "NikonCaptureData", &stdInterpreter}, - {0, AC_DONTWRITE, 0, nullptr, 0x0e09, AUTO, "NikonCaptureVersion", &stdInterpreter}, - {0, AC_DONTWRITE, 0, nullptr, 0x0e0e, AUTO, "NikonCaptureOffsets", &stdInterpreter}, - {0, AC_DONTWRITE, 0, nullptr, 0x0e10, AUTO, "NikonScanIFD", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -} diff --git a/rtexif/olympusattribs.cc b/rtexif/olympusattribs.cc deleted file mode 100644 index 63ce6bb43..000000000 --- a/rtexif/olympusattribs.cc +++ /dev/null @@ -1,859 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * 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 RawTherapee. If not, see . - */ - -#include -#include -#include -#include - -#include "rtexif.h" - -namespace rtexif -{ - -class OLOnOffInterpreter : public Interpreter -{ -public: - OLOnOffInterpreter () {} - std::string toString (const Tag* t) const override - { - if (t->toInt() == 0) { - return "Off"; - } else { - return "On"; - } - } -}; -OLOnOffInterpreter olOnOffInterpreter; - -class OLYesNoInterpreter : public Interpreter -{ -public: - OLYesNoInterpreter () {} - std::string toString (const Tag* t) const override - { - if (t->toInt() == 0) { - return "No"; - } else { - return "Yes"; - } - } -}; -OLYesNoInterpreter olYesNoInterpreter; - -class OLApertureInterpreter : public Interpreter -{ -public: - OLApertureInterpreter () {} - std::string toString (const Tag* t) const override - { - std::ostringstream str; - str.precision (2); - str << pow (2, t->toInt() / 512.0); - return str.str(); - } -}; -OLApertureInterpreter olApertureInterpreter; - -class OLLensTypeInterpreter : public Interpreter -{ - std::map lenses; -public: - OLLensTypeInterpreter () - { - lenses["00 01 00"] = "Olympus Zuiko Digital ED 50mm f/2.0 Macro"; - lenses["00 01 01"] = "Olympus Zuiko Digital 40-150mm f/3.5-4.5"; - lenses["00 01 10"] = "Olympus M.Zuiko Digital ED 14-42mm f/3.5-5.6"; - lenses["00 02 00"] = "Olympus Zuiko Digital ED 150mm f/2.0"; - lenses["00 02 10"] = "Olympus M.Zuiko Digital 17mm f/2.8 Pancake"; - lenses["00 03 00"] = "Olympus Zuiko Digital ED 300mm f/2.8"; - lenses["00 03 10"] = "Olympus M.Zuiko Digital ED 14-150mm f/4.0-5.6 [II]"; - lenses["00 04 10"] = "Olympus M.Zuiko Digital ED 9-18mm f/4.0-5.6"; - lenses["00 05 00"] = "Olympus Zuiko Digital 14-54mm f/2.8-3.5"; - lenses["00 05 01"] = "Olympus Zuiko Digital Pro ED 90-250mm f/2.8"; - lenses["00 05 10"] = "Olympus M.Zuiko Digital ED 14-42mm f/3.5-5.6 L"; - lenses["00 06 00"] = "Olympus Zuiko Digital ED 50-200mm f/2.8-3.5"; - lenses["00 06 01"] = "Olympus Zuiko Digital ED 8mm f/3.5 Fisheye"; - lenses["00 06 10"] = "Olympus M.Zuiko Digital ED 40-150mm f/4.0-5.6"; - lenses["00 07 00"] = "Olympus Zuiko Digital 11-22mm f/2.8-3.5"; - lenses["00 07 01"] = "Olympus Zuiko Digital 18-180mm f/3.5-6.3"; - lenses["00 07 10"] = "Olympus M.Zuiko Digital ED 12mm f/2.0"; - lenses["00 08 01"] = "Olympus Zuiko Digital 70-300mm f/4.0-5.6"; - lenses["00 08 10"] = "Olympus M.Zuiko Digital ED 75-300mm f/4.8-6.7"; - lenses["00 09 10"] = "Olympus M.Zuiko Digital 14-42mm f/3.5-5.6 II"; - lenses["00 10 01"] = "Kenko Tokina Reflex 300mm f/6.3 MF Macro"; - lenses["00 10 10"] = "Olympus M.Zuiko Digital ED 12-50mm f/3.5-6.3 EZ"; - lenses["00 11 10"] = "Olympus M.Zuiko Digital 45mm f/1.8"; - lenses["00 12 10"] = "Olympus M.Zuiko Digital ED 60mm f/2.8 Macro"; - lenses["00 13 10"] = "Olympus M.Zuiko Digital 14-42mm f/3.5-5.6 II R"; - lenses["00 14 10"] = "Olympus M.Zuiko Digital ED 40-150mm f/4.0-5.6 R"; - lenses["00 15 00"] = "Olympus Zuiko Digital ED 7-14mm f/4.0"; - lenses["00 15 10"] = "Olympus M.Zuiko Digital ED 75mm f/1.8"; - lenses["00 16 10"] = "Olympus M.Zuiko Digital 17mm f/1.8"; - lenses["00 17 00"] = "Olympus Zuiko Digital Pro ED 35-100mm f/2.0"; - lenses["00 18 00"] = "Olympus Zuiko Digital 14-45mm f/3.5-5.6"; - lenses["00 18 10"] = "Olympus M.Zuiko Digital ED 75-300mm f/4.8-6.7 II"; - lenses["00 19 10"] = "Olympus M.Zuiko Digital ED 12-40mm f/2.8 Pro"; - lenses["00 20 00"] = "Olympus Zuiko Digital 35mm f/3.5 Macro"; - lenses["00 20 10"] = "Olympus M.Zuiko Digital ED 40-150mm f/2.8 Pro"; - lenses["00 21 10"] = "Olympus M.Zuiko Digital ED 14-42mm f/3.5-5.6 EZ"; - lenses["00 22 00"] = "Olympus Zuiko Digital 17.5-45mm f/3.5-5.6"; - lenses["00 22 10"] = "Olympus M.Zuiko Digital 25mm f/1.8"; - lenses["00 23 00"] = "Olympus Zuiko Digital ED 14-42mm f/3.5-5.6"; - lenses["00 23 10"] = "Olympus M.Zuiko Digital ED 7-14mm f/2.8 Pro"; - lenses["00 24 00"] = "Olympus Zuiko Digital ED 40-150mm f/4.0-5.6"; - lenses["00 24 10"] = "Olympus M.Zuiko Digital ED 300mm f/4.0 IS Pro"; - lenses["00 25 10"] = "Olympus M.Zuiko Digital ED 8mm f/1.8 Fisheye Pro"; - lenses["00 26 10"] = "Olympus M.Zuiko Digital ED 12-100mm f/4.0 IS Pro"; - lenses["00 27 10"] = "Olympus M.Zuiko Digital ED 30mm f/3.5 Macro"; - lenses["00 28 10"] = "Olympus M.Zuiko Digital ED 25mm f/1.2 Pro"; - lenses["00 29 10"] = "Olympus M.Zuiko Digital ED 17mm f/1.2 Pro"; - lenses["00 30 00"] = "Olympus Zuiko Digital ED 50-200mm f/2.8-3.5 SWD"; - lenses["00 30 10"] = "Olympus M.Zuiko Digital ED 45mm f/1.2 Pro"; - lenses["00 31 00"] = "Olympus Zuiko Digital ED 12-60mm f/2.8-4.0 SWD"; - lenses["00 32 00"] = "Olympus Zuiko Digital ED 14-35mm f/2.0 SWD"; - lenses["00 32 10"] = "Olympus M.Zuiko Digital ED 12-200mm f/3.5-6.3"; - lenses["00 33 00"] = "Olympus Zuiko Digital 25mm f/2.8"; - lenses["00 33 10"] = "Olympus M.Zuiko Digital 150-400mm f/4.5 TC1.25x IS Pro"; - lenses["00 34 00"] = "Olympus Zuiko Digital ED 9-18mm f/4.0-5.6"; - lenses["00 34 10"] = "Olympus M.Zuiko Digital ED 12-45mm f/4.0 Pro"; - lenses["00 35 00"] = "Olympus Zuiko Digital 14-54mm f/2.8-3.5 II"; - lenses["00 35 10"] = "Olympus M.Zuiko 100-400mm f/5.0-6.3"; - lenses["00 36 10"] = "Olympus M.Zuiko Digital ED 8-25mm f/4 Pro"; - lenses["01 01 00"] = "Sigma 18-50mm f/3.5-5.6 DC"; - lenses["01 01 10"] = "Sigma 30mm f/2.8 EX DN"; - lenses["01 02 00"] = "Sigma 55-200mm f/4.0-5.6 DC"; - lenses["01 02 10"] = "Sigma 19mm f/2.8 EX DN"; - lenses["01 03 00"] = "Sigma 18-125mm f/3.5-5.6 DC"; - lenses["01 03 10"] = "Sigma 30mm f/2.8 DN | A"; - lenses["01 04 00"] = "Sigma 18-125mm f/3.5-5.6 DC"; - lenses["01 04 10"] = "Sigma 19mm f/2.8 DN | A"; - lenses["01 05 00"] = "Sigma 30mm f/1.4 EX DC HSM"; - lenses["01 05 10"] = "Sigma 60mm f/2.8 DN | A"; - lenses["01 06 00"] = "Sigma APO 50-500mm f/4.0-6.3 EX DG HSM"; - lenses["01 06 10"] = "Sigma 30mm f/1.4 DC DN | C"; - lenses["01 07 00"] = "Sigma Macro 105mm f/2.8 EX DG"; - lenses["01 07 10"] = "Sigma 16mm f/1.4 DC DN | C (017)"; - lenses["01 08 00"] = "Sigma APO Macro 150mm f/2.8 EX DG HSM"; - lenses["01 09 00"] = "Sigma 18-50mm f/2.8 EX DC Macro"; - lenses["01 10 00"] = "Sigma 24mm f/1.8 EX DG Aspherical Macro"; - lenses["01 11 00"] = "Sigma APO 135-400mm f/4.5-5.6 DG"; - lenses["01 12 00"] = "Sigma APO 300-800mm f/5.6 EX DG HSM"; - lenses["01 13 00"] = "Sigma 30mm f/1.4 EX DC HSM"; - lenses["01 14 00"] = "Sigma APO 50-500mm f/4.0-6.3 EX DG HSM"; - lenses["01 15 00"] = "Sigma 10-20mm f/4.0-5.6 EX DC HSM"; - lenses["01 16 00"] = "Sigma APO 70-200mm f/2.8 II EX DG Macro HSM"; - lenses["01 17 00"] = "Sigma 50mm f/1.4 EX DG HSM"; - lenses["02 01 00"] = "Leica D Vario Elmarit 14-50mm f/2.8-3.5 Asph."; - lenses["02 01 10"] = "Lumix G Vario 14-45mm f/3.5-5.6 Asph. Mega OIS"; - lenses["02 02 00"] = "Leica D Summilux 25mm f/1.4 Asph."; - lenses["02 02 10"] = "Lumix G Vario 45-200mm f/4.0-5.6 Mega OIS"; - lenses["02 03 00"] = "Leica D Vario Elmar 14-50mm f/3.8-5.6 Asph. Mega OIS"; - lenses["02 03 01"] = "Leica D Vario Elmar 14-50mm f/3.8-5.6 Asph."; - lenses["02 03 10"] = "Lumix G Vario HD 14-140mm f/4.0-5.8 Asph. Mega OIS"; - lenses["02 04 00"] = "Leica D Vario Elmar 14-150mm f/3.5-5.6"; - lenses["02 04 10"] = "Lumix G Vario 7-14mm f/4.0 Asph."; - lenses["02 05 10"] = "Lumix G 20mm f/1.7 Asph."; - lenses["02 06 10"] = "Leica DG Macro-Elmarit 45mm f/2.8 Asph. Mega OIS"; - lenses["02 07 10"] = "Lumix G Vario 14-42mm f/3.5-5.6 Asph. Mega OIS"; - lenses["02 08 10"] = "Lumix G Fisheye 8mm f/3.5"; - lenses["02 09 10"] = "Lumix G Vario 100-300mm f/4.0-5.6 Mega OIS"; - lenses["02 10 10"] = "Lumix G 14mm f/2.5 Asph."; - lenses["02 11 10"] = "Lumix G 12.5mm f/12 3D"; - lenses["02 12 10"] = "Leica DG Summilux 25mm f/1.4 Asph."; - lenses["02 13 10"] = "Lumix G X Vario PZ 45-175mm f/4.0-5.6 Asph. Power OIS"; - lenses["02 14 10"] = "Lumix G X Vario PZ 14-42mm f/3.5-5.6 Asph. Power OIS"; - lenses["02 15 10"] = "Lumix G X Vario 12-35mm f/2.8 Asph. Power OIS"; - lenses["02 16 10"] = "Lumix G Vario 45-150mm f/4.0-5.6 Asph. Mega OIS"; - lenses["02 17 10"] = "Lumix G X Vario 35-100mm f/2.8 Power OIS"; - lenses["02 18 10"] = "Lumix G Vario 14-42mm f/3.5-5.6 II Asph. Mega OIS"; - lenses["02 19 10"] = "Lumix G Vario 14-140mm f/3.5-5.6 Asph. Power OIS"; - lenses["02 20 10"] = "Lumix G Vario 12-32mm f/3.5-5.6 Asph. Mega OIS"; - lenses["02 21 10"] = "Leica DG Nocticron 42.5mm f/1.2 Asph. Power OIS"; - lenses["02 22 10"] = "Leica DG Summilux 15mm f/1.7 Asph."; - lenses["02 23 10"] = "Lumix G Vario 35-100mm f/4.0-5.6 Asph. Mega OIS"; - lenses["02 24 10"] = "Lumix G Macro 30mm f/2.8 Asph. Mega OIS"; - lenses["02 25 10"] = "Lumix G 42.5mm f/1.7 Asph. Power OIS"; - lenses["02 26 10"] = "Lumix G 25mm f/1.7 Asph."; - lenses["02 27 10"] = "Leica DG Vario-Elmar 100-400mm f/4.0-6.3 Asph. Power OIS"; - lenses["02 28 10"] = "Lumix G Vario 12-60mm f/3.5-5.6 Asph. Power OIS"; - lenses["02 29 10"] = "Leica DG Summilux 12mm f/1.4 Asph."; - lenses["02 30 10"] = "Leica DG Vario-Elmarit 12-60mm f/2.8-4 Asph. Power OIS"; - lenses["02 31 10"] = "Lumix G Vario 45-200mm f/4.0-5.6 II"; - lenses["02 32 10"] = "Lumix G Vario 100-300mm f/4.0-5.6 II"; - lenses["02 33 10"] = "Lumix G X Vario 12-35mm f/2.8 II Asph. Power OIS"; - lenses["02 34 10"] = "Lumix G Vario 35-100mm f/2.8 II"; - lenses["02 35 10"] = "Leica DG Vario-Elmarit 8-18mm f/2.8-4 Asph."; - lenses["02 36 10"] = "Leica DG Elmarit 200mm f/2.8 Power OIS"; - lenses["02 37 10"] = "Leica DG Vario-Elmarit 50-200mm f/2.8-4 Asph. Power OIS"; - lenses["02 38 10"] = "Leica DG Vario-Summilux 10-25mm f/1.7 Asph."; - lenses["02 40 10"] = "Leica DG Vario-Summilux 25-50mm f/1.7 Asph."; - lenses["03 01 00"] = "Leica D Vario Elmarit 14-50mm f/2.8-3.5 Asph."; - lenses["03 02 00"] = "Leica D Summilux 25mm f/1.4 Asph."; - lenses["05 01 10"] = "Tamron 14-150mm f/3.5-5.8 Di III"; - lenses["024 01 10"] = "Venus Optics Laowa 50mm f/2.8 2x Macro"; - } - std::string toString (const Tag* t) const override - { - std::ostringstream lid; - lid.setf (std::ios_base::hex, std::ios_base::basefield); - lid.setf (std::ios_base::uppercase); - lid << std::setw (2) << std::setfill ('0') << t->toInt (0) << ' '; //maker - lid << std::setw (2) << std::setfill ('0') << t->toInt (2) << ' '; //model - lid << std::setw (2) << std::setfill ('0') << t->toInt (3); // submodel - - std::map::const_iterator r = lenses.find (lid.str()); - - if (r != lenses.end()) { - return r->second; - } else { - return "Unknown"; - } - } -}; -OLLensTypeInterpreter olLensTypeInterpreter; - -class OLFlashTypeInterpreter : public ChoiceInterpreter<> -{ -public: - OLFlashTypeInterpreter () - { - choices[0] = "None"; - choices[2] = "Simple E-System"; - choices[3] = "E-System"; - } -}; -OLFlashTypeInterpreter olFlashTypeInterpreter; - -class OLExposureModeInterpreter : public ChoiceInterpreter<> -{ -public: - OLExposureModeInterpreter () - { - choices[1] = "Manual"; - choices[2] = "Program"; - choices[3] = "Aperture-priority AE"; - choices[4] = "Shutter speed priority AE"; - choices[5] = "Program-shift"; - } -}; -OLExposureModeInterpreter olExposureModeInterpreter; - -class OLMeteringModeInterpreter : public ChoiceInterpreter<> -{ -public: - OLMeteringModeInterpreter () - { - choices[2] = "Center-weighted average"; - choices[3] = "Spot"; - choices[5] = "ESP"; - choices[261] = "Pattern+AF"; - choices[515] = "Spot+Highlight control"; - choices[1027] = "Spot+Shadow control"; - } -}; -OLMeteringModeInterpreter olMeteringModeInterpreter; - -class OLFocusModeInterpreter : public ChoiceInterpreter<> -{ -public: - OLFocusModeInterpreter () - { - choices[0] = "Single AF"; - choices[1] = "Sequential shooting AF"; - choices[2] = "Continuous AF"; - choices[3] = "Multi AF"; - choices[4] = "Face detect"; - choices[10] = "MF"; - } -}; -OLFocusModeInterpreter olFocusModeInterpreter; - -class OLWhitebalance2Interpreter : public ChoiceInterpreter<> -{ -public: - OLWhitebalance2Interpreter () - { - choices[0] = "Auto"; - choices[1] = "Auto (Keep Warm Color Off)"; - choices[16] = "7500K (Fine Weather with Shade)"; - choices[17] = "6000K (Cloudy)"; - choices[18] = "5300K (Fine Weather)"; - choices[20] = "3000K (Tungsten light)"; - choices[21] = "3600K (Tungsten light-like)"; - choices[22] = "Auto Setup"; - choices[23] = "5500K (Flash)"; - choices[33] = "6600K (Daylight fluorescent)"; - choices[34] = "4500K (Neutral white fluorescent)"; - choices[35] = "4000K (Cool white fluorescent)"; - choices[36] = "White Fluorescent"; - choices[48] = "3600K (Tungsten light-like)"; - choices[67] = "Underwater"; - choices[256] = "One Touch WB 1"; - choices[257] = "One Touch WB 2"; - choices[258] = "One Touch WB 3"; - choices[259] = "One Touch WB 4"; - choices[512] = "Custom WB 1"; - choices[513] = "Custom WB 2"; - choices[514] = "Custom WB 3"; - choices[515] = "Custom WB 4"; - } -}; -OLWhitebalance2Interpreter olWhitebalance2Interpreter; - -class OLSceneModeInterpreter : public ChoiceInterpreter<> -{ -public: - OLSceneModeInterpreter () - { - choices[0] = "Standard"; - choices[6] = "Auto"; - choices[7] = "Sport"; - choices[8] = "Portrait"; - choices[9] = "Landscape+Portrait"; - choices[10] = "Landscape"; - choices[11] = "Night Scene"; - choices[12] = "Self Portrait"; - choices[13] = "Panorama"; - choices[14] = "2 in 1"; - choices[15] = "Movie"; - choices[16] = "Landscape+Portrait"; - choices[17] = "Night+Portrait"; - choices[18] = "Indoor"; - choices[19] = "Fireworks"; - choices[20] = "Sunset"; - choices[21] = "Beauty Skin"; - choices[22] = "Macro"; - choices[23] = "Super Macro"; - choices[24] = "Food"; - choices[25] = "Documents"; - choices[26] = "Museum"; - choices[27] = "Shoot & Select"; - choices[28] = "Beach & Snow"; - choices[29] = "Self Portrait+Timer"; - choices[30] = "Candle"; - choices[31] = "Available Light"; - choices[32] = "Behind Glass"; - choices[33] = "My Mode"; - choices[34] = "Pet"; - choices[35] = "Underwater Wide1"; - choices[36] = "Underwater Macro"; - choices[37] = "Shoot & Select1"; - choices[38] = "Shoot & Select2"; - choices[39] = "High Key"; - choices[40] = "Digital Image Stabilization"; - choices[41] = "Auction"; - choices[42] = "Beach"; - choices[43] = "Snow"; - choices[44] = "Underwater Wide2"; - choices[45] = "Low Key"; - choices[46] = "Children"; - choices[47] = "Vivid"; - choices[48] = "Nature Macro"; - choices[49] = "Underwater Snapshot"; - choices[50] = "Shooting Guide"; - choices[54] = "Face Portrait"; - choices[57] = "Bulb"; - choices[59] = "Smile Shot"; - choices[60] = "Quick Shutter"; - choices[63] = "Slow Shutter"; - choices[64] = "Bird Watching"; - choices[65] = "Multiple Exposure"; - choices[66] = "e-Portrait"; - choices[67] = "Soft Background Shot"; - choices[142] = "Hand-held Starlight"; - choices[154] = "HDR"; - } -}; -OLSceneModeInterpreter olSceneModeInterpreter; - -class OLPictureModeBWFilterInterpreter : public ChoiceInterpreter<> -{ -public: - OLPictureModeBWFilterInterpreter () - { - choices[0] = "n/a"; - choices[1] = "Neutral"; - choices[2] = "Yellow"; - choices[3] = "Orange"; - choices[4] = "Red"; - choices[5] = "Green"; - } -}; -OLPictureModeBWFilterInterpreter olPictureModeBWFilterInterpreter; - -class OLPictureModeToneInterpreter : public ChoiceInterpreter<> -{ -public: - OLPictureModeToneInterpreter () - { - choices[0] = "n/a"; - choices[1] = "Neutral"; - choices[2] = "Sepia"; - choices[3] = "Blue"; - choices[4] = "Purple"; - choices[5] = "Green"; - } -}; -OLPictureModeToneInterpreter olPictureModeToneInterpreter; - -class OLImageQuality2Interpreter : public ChoiceInterpreter<> -{ -public: - OLImageQuality2Interpreter () - { - choices[1] = "SQ"; - choices[2] = "HQ"; - choices[3] = "SHQ"; - choices[4] = "RAW"; - choices[5] = "SQ (5)"; - } -}; -OLImageQuality2Interpreter olImageQuality2Interpreter; - -class OLDevEngineInterpreter : public ChoiceInterpreter<> -{ -public: - // RawDevEngine - OLDevEngineInterpreter () - { - choices[0] = "High Speed"; - choices[1] = "High Function"; - choices[2] = "Advanced High Speed"; - choices[3] = "Advanced High Function"; - } -}; -OLDevEngineInterpreter olDevEngineInterpreter; - -class OLPictureModeInterpreter : public ChoiceInterpreter<> -{ -public: - OLPictureModeInterpreter () - { - choices[1] = "Vivid"; - choices[2] = "Natural"; - choices[3] = "Muted"; - choices[4] = "Portrait"; - choices[5] = "i-Enhance"; - choices[7] = "Color Creator"; - choices[9] = "Color Profile 1"; - choices[10] = "Color Profile 2"; - choices[11] = "Color Profile 3"; - choices[12] = "Monochrome Profile 1"; - choices[13] = "Monochrome Profile 2"; - choices[14] = "Monochrome Profile 3"; - choices[256] = "Monotone"; - choices[512] = "Sepia"; - } -}; -OLPictureModeInterpreter olPictureModeInterpreter; - -class OLColorSpaceInterpreter : public ChoiceInterpreter<> -{ -public: - OLColorSpaceInterpreter () - { - choices[0] = "sRGB"; - choices[1] = "Adobe RGB"; - choices[2] = "Pro Photo RGB"; - } -}; -OLColorSpaceInterpreter olColorSpaceInterpreter; - -class OLNoiseFilterInterpreter : public Interpreter -{ -public: - OLNoiseFilterInterpreter () {} - std::string toString (const Tag* t) const override - { - int a = t->toInt (0); - int b = t->toInt (2); - int c = t->toInt (4); - - if (a == -1 && b == -2 && c == 1) { - return "Low"; - } else if (a == -2 && b == -2 && c == 1) { - return "Off"; - } else if (a == 0 && b == -2 && c == 1) { - return "Standard"; - } else if (a == 1 && b == -2 && c == 1) { - return "High"; - } else { - return "Unknown"; - } - } -}; -OLNoiseFilterInterpreter olNoiseFilterInterpreter; - -class OLFlashModeInterpreter : public Interpreter -{ -public: - OLFlashModeInterpreter () {} - std::string toString (const Tag* t) const override - { - std::ostringstream str; - int a = t->toInt (); - str << "Flash Used = " << ((a & 1) ? "Yes" : "No") << std::endl; - str << "Fill-in = " << ((a & 2) ? "On" : "Off") << std::endl; - str << "Red-eye = " << ((a & 4) ? "On" : "Off") << std::endl; - str << "Slow-sync = " << ((a & 8) ? "On" : "Off") << std::endl; - str << "Forced On = " << ((a & 16) ? "On" : "Off") << std::endl; - str << "2nd Curtain = " << ((a & 32) ? "On" : "Off"); - return str.str(); - } -}; -OLFlashModeInterpreter olFlashModeInterpreter; - -class OLNoiseReductionInterpreter : public Interpreter -{ -public: - OLNoiseReductionInterpreter () {} - std::string toString (const Tag* t) const override - { - std::ostringstream str; - int a = t->toInt (); - str << "Noise Reduction = " << ((a & 1) ? "On" : "Off") << std::endl; - str << "Noise Filter = " << ((a & 2) ? "On" : "Off") << std::endl; - str << "Noise Filter (ISO Boost) = " << ((a & 4) ? "On" : "Off") << std::endl; - str << "Auto = " << ((a & 8) ? "On" : "Off"); - return str.str(); - } -}; -OLNoiseReductionInterpreter olNoiseReductionInterpreter; - -class OLFlashModelInterpreter : public ChoiceInterpreter<> -{ -public: - OLFlashModelInterpreter () - { - choices[0] = "None"; - choices[1] = "FL-20"; - choices[2] = "FL-50"; - choices[3] = "RF-11"; - choices[4] = "TF-22"; - choices[5] = "FL-36"; - choices[6] = "FL-50R"; - choices[7] = "FL-36R"; - choices[9] = "FL-14"; - choices[11] = "FL-600R"; - } -}; -OLFlashModelInterpreter olFlashModelInterpreter; - -const TagAttrib olyFocusInfoAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "FocusInfoVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0209, AUTO, "AutoFocus", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0210, AUTO, "SceneDetect", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0211, AUTO, "SceneArea", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0212, AUTO, "SceneDetectData", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0300, AUTO, "ZoomStepCount", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0301, AUTO, "FocusStepCount", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0303, AUTO, "FocusStepInfinity", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0304, AUTO, "FocusStepNear", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0305, AUTO, "FocusDistance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0308, AUTO, "AFPoint", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1201, AUTO, "ExternalFlash", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1203, AUTO, "ExternalFlashGuideNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1204, AUTO, "ExternalFlashBounce", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1205, AUTO, "ExternalFlashZoom", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1208, AUTO, "InternalFlash", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1209, AUTO, "ManualFlash", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1500, AUTO, "SensorTemperature", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1600, AUTO, "ImageStabilization", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib olyImageProcessingAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "ImageProcessingVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0100, AUTO, "WB_RBLevels", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0102, AUTO, "WB_RBLevels3000K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0103, AUTO, "WB_RBLevels3300K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0104, AUTO, "WB_RBLevels3600K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0105, AUTO, "WB_RBLevels3900K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0106, AUTO, "WB_RBLevels4000K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0107, AUTO, "WB_RBLevels4300K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0108, AUTO, "WB_RBLevels4500K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0109, AUTO, "WB_RBLevels4800K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010a, AUTO, "WB_RBLevels5300K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010b, AUTO, "WB_RBLevels6000K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010c, AUTO, "WB_RBLevels6600K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010d, AUTO, "WB_RBLevels7500K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010e, AUTO, "WB_RBLevelsCWB1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010f, AUTO, "WB_RBLevelsCWB2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0110, AUTO, "WB_RBLevelsCWB3", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0111, AUTO, "WB_RBLevelsCWB4", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0113, AUTO, "WB_GLevel3000K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0114, AUTO, "WB_GLevel3300K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0115, AUTO, "WB_GLevel3600K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0116, AUTO, "WB_GLevel3900K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0117, AUTO, "WB_GLevel4000K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0118, AUTO, "WB_GLevel4300K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0119, AUTO, "WB_GLevel4500K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x011a, AUTO, "WB_GLevel4800K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x011b, AUTO, "WB_GLevel5300K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x011c, AUTO, "WB_GLevel6000K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x011d, AUTO, "WB_GLevel6600K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x011e, AUTO, "WB_GLevel7500K", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x011f, AUTO, "WB_GLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0200, AUTO, "ColorMatrix", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0300, AUTO, "Enhancer", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0301, AUTO, "EnhancerValues", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0310, AUTO, "CoringFilter", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0311, AUTO, "CoringValues", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0600, AUTO, "BlackLevel2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0610, AUTO, "GainBase", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0611, AUTO, "ValidBits", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0612, AUTO, "CropLeft", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0613, AUTO, "CropTop", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0614, AUTO, "CropWidth", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0615, AUTO, "CropHeight", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1010, AUTO, "NoiseReduction2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1011, AUTO, "DistortionCorrection2", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1012, AUTO, "ShadingCompensation2", &olOnOffInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x1103, AUTO, "UnknownBlock", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1200, AUTO, "FaceDetect", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1201, AUTO, "FaceDetectArea", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib olyRawDevelopmentAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "RawDevVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0100, AUTO, "RawDevExposureBiasValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0101, AUTO, "RawDevWhiteBalanceValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0102, AUTO, "RawDevWBFineAdjustment", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0103, AUTO, "RawDevGrayPoint", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0104, AUTO, "RawDevSaturationEmphasis", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0105, AUTO, "RawDevMemoryColorEmphasis", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0106, AUTO, "RawDevContrastValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0107, AUTO, "RawDevSharpnessValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0108, AUTO, "RawDevColorSpace", &olColorSpaceInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0109, AUTO, "RawDevEngine", &olDevEngineInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010a, AUTO, "RawDevNoiseReduction", &olNoiseReductionInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010b, AUTO, "RawDevEditStatus", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010c, AUTO, "RawDevSettings", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib olyRawDevelopment2Attribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "RawDevVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0100, AUTO, "RawDevExposureBiasValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0101, AUTO, "RawDevWhiteBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0102, AUTO, "RawDevWhiteBalanceValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0103, AUTO, "RawDevWBFineAdjustment", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0104, AUTO, "RawDevGrayPoint", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0105, AUTO, "RawDevContrastValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0106, AUTO, "RawDevSharpnessValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0107, AUTO, "RawDevSaturationEmphasis", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0108, AUTO, "RawDevMemoryColorEmphasis", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0109, AUTO, "RawDevColorSpace", &olColorSpaceInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010a, AUTO, "RawDevNoiseReduction", &olNoiseReductionInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010b, AUTO, "RawDevEngine", &olDevEngineInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010c, AUTO, "RawDevPictureMode", &olPictureModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010d, AUTO, "RawDevPMSaturation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010e, AUTO, "RawDevPMContrast", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010f, AUTO, "RawDevPMSharpness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0110, AUTO, "RawDevPM_BWFilter", &olPictureModeBWFilterInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0111, AUTO, "RawDevPMPictureTone", &olPictureModeToneInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0112, AUTO, "RawDevGradation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0113, AUTO, "RawDevSaturation3", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0119, AUTO, "RawDevAutoGradation", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0120, AUTO, "RawDevPMNoiseFilter", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib olyCameraSettingsAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "CameraSettingsVersion", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x0100, AUTO, "PreviewImageValid", &olYesNoInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x0101, AUTO, "PreviewImageStart", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x0102, AUTO, "PreviewImageLength", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0200, AUTO, "ExposureMode", &olExposureModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0201, AUTO, "AELock", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0202, AUTO, "MeteringMode", &olMeteringModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0300, AUTO, "MacroMode", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0301, AUTO, "FocusMode", &olFocusModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0302, AUTO, "FocusProcess", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0303, AUTO, "AFSearch", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0304, AUTO, "AFAreas", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0400, AUTO, "FlashMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0401, AUTO, "FlashExposureComp", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0500, AUTO, "WhiteBalance2", &olWhitebalance2Interpreter}, - {0, AC_WRITE, 0, nullptr, 0x0501, AUTO, "WhiteBalanceTemperature", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0502, AUTO, "WhiteBalanceBracket", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0503, AUTO, "CustomSaturation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0504, AUTO, "ModifiedSaturation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0505, AUTO, "ContrastSetting", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0506, AUTO, "SharpnessSetting", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0507, AUTO, "ColorSpace", &olColorSpaceInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0509, AUTO, "SceneMode", &olSceneModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x050a, AUTO, "NoiseReduction", &olNoiseReductionInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x050b, AUTO, "DistortionCorrection", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x050c, AUTO, "ShadingCompensation", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x050d, AUTO, "CompressionFactor", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x050f, AUTO, "Gradation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0520, AUTO, "PictureMode", &olPictureModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0521, AUTO, "PictureModeSaturation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0522, AUTO, "PictureModeHue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0523, AUTO, "PictureModeContrast", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0524, AUTO, "PictureModeSharpness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0525, AUTO, "PictureModeBWFilter", &olPictureModeBWFilterInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0526, AUTO, "PictureModeTone", &olPictureModeToneInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0527, AUTO, "NoiseFilter", &olNoiseFilterInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0600, AUTO, "DriveMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0601, AUTO, "PanoramaMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0603, AUTO, "ImageQuality2", &olImageQuality2Interpreter}, - {0, AC_WRITE, 0, nullptr, 0x0900, AUTO, "ManometerPressure", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0901, AUTO, "ManometerReading", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0902, AUTO, "ExtendedWBDetect", &olOnOffInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib olyEquipmentAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "EquipmentVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0100, AUTO, "CameraType2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0101, AUTO, "SerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0102, AUTO, "InternalSerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0103, AUTO, "FocalPlaneDiagonal", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0104, AUTO, "BodyFirmwareVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0201, AUTO, "LensType", &olLensTypeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0202, AUTO, "LensSerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0204, AUTO, "LensFirmwareVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0205, AUTO, "MaxApertureAtMinFocal", &olApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0206, AUTO, "MaxApertureAtMaxFocal", &olApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0207, AUTO, "MinFocalLength", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0208, AUTO, "MaxFocalLength", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x020a, AUTO, "MaxApertureAtCurrentFocal", &olApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x020b, AUTO, "LensProperties", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0301, AUTO, "Extender", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0302, AUTO, "ExtenderSerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0303, AUTO, "ExtenderModel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0304, AUTO, "ExtenderFirmwareVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1000, AUTO, "FlashType", &olFlashTypeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1001, AUTO, "FlashModel", &olFlashModelInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1002, AUTO, "FlashFirmwareVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1003, AUTO, "FlashSerialNumber", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib olympusAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0104, AUTO, "BodyFirmwareVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0200, AUTO, "SpecialMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0201, AUTO, "Quality", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0202, AUTO, "Macro", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0203, AUTO, "BWMode", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0204, AUTO, "DigitalZoom", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0205, AUTO, "FocalPlaneDiagonal", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0206, AUTO, "LensDistortionParams", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0207, AUTO, "CameraType", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x0208, AUTO, "TextInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0209, AUTO, "CameraID", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x020b, AUTO, "EpsonImageWidth", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x020c, AUTO, "EpsonImageHeight", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x020d, AUTO, "EpsonSoftware", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0280, AUTO, "PreviewImage", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0300, AUTO, "PreCaptureFrames", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0301, AUTO, "WhiteBoard", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0302, AUTO, "OneTouchWB", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0303, AUTO, "WhiteBalanceBracket", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0304, AUTO, "WhiteBalanceBias", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0403, AUTO, "SceneMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0404, AUTO, "SerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0405, AUTO, "Firmware", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x0e00, AUTO, "PrintIM", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0f00, AUTO, "DataDump", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0f01, AUTO, "DataDump2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1000, AUTO, "ShutterSpeedValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1001, AUTO, "ISOValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1002, AUTO, "ApertureValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1003, AUTO, "BrightnessValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1004, AUTO, "FlashMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1005, AUTO, "FlashDevice", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1006, AUTO, "ExposureCompensation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1007, AUTO, "SensorTemperature", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1008, AUTO, "LensTemperature", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1009, AUTO, "LightCondition", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x100a, AUTO, "FocusRange", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x100b, AUTO, "FocusMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x100c, AUTO, "ManualFocusDistance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x100d, AUTO, "ZoomStepCount", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x100e, AUTO, "FocusStepCount", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x100f, AUTO, "Sharpness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1010, AUTO, "FlashChargeLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1011, AUTO, "ColorMatrix", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1012, AUTO, "BlackLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1013, AUTO, "ColorTemperatureBG", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1014, AUTO, "ColorTemperatureRG", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1015, AUTO, "WBMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1017, AUTO, "RedBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1018, AUTO, "BlueBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1019, AUTO, "ColorMatrixNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x101a, AUTO, "SerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x101b, AUTO, "ExternalFlashAE1_0", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x101c, AUTO, "ExternalFlashAE2_0", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x101d, AUTO, "InternalFlashAE1_0", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x101e, AUTO, "InternalFlashAE2_0", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x101f, AUTO, "ExternalFlashAE1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1020, AUTO, "ExternalFlashAE2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1021, AUTO, "InternalFlashAE1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1022, AUTO, "InternalFlashAE2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1023, AUTO, "FlashExposureComp", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1024, AUTO, "InternalFlashTable", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1025, AUTO, "ExternalFlashGValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1026, AUTO, "ExternalFlashBounce", &olYesNoInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1027, AUTO, "ExternalFlashZoom", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1028, AUTO, "ExternalFlashMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1029, AUTO, "Contrast", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x102a, AUTO, "SharpnessFactor", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x102b, AUTO, "ColorControl", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x102c, AUTO, "ValidBits", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x102d, AUTO, "CoringFilter", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x102e, AUTO, "OlympusImageWidth", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x102f, AUTO, "OlympusImageHeight", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1030, AUTO, "SceneDetect", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1031, AUTO, "SceneArea", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1033, AUTO, "SceneDetectData", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1034, AUTO, "CompressionRatio", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x1035, AUTO, "PreviewImageValid", &olYesNoInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x1036, AUTO, "PreviewImageStart", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x1037, AUTO, "PreviewImageLength", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1038, AUTO, "AFResult", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x1039, AUTO, "CCDScanMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x103a, AUTO, "NoiseReduction", &olOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x103b, AUTO, "InfinityLensStep", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x103c, AUTO, "NearLensStep", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x103d, AUTO, "LightValueCenter", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x103e, AUTO, "LightValuePeriphery", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x103f, AUTO, "FieldCount", &stdInterpreter}, - {0, AC_WRITE, 0, olyEquipmentAttribs, 0x2010, AUTO, "Equipment", &stdInterpreter}, - {0, AC_WRITE, 0, olyCameraSettingsAttribs, 0x2020, AUTO, "CameraSettings", &stdInterpreter}, - {0, AC_WRITE, 0, olyRawDevelopmentAttribs, 0x2030, AUTO, "RawDevelopment", &stdInterpreter}, - {0, AC_WRITE, 0, olyRawDevelopment2Attribs, 0x2031, AUTO, "RawDev2", &stdInterpreter}, - {0, AC_WRITE, 0, olyImageProcessingAttribs, 0x2040, AUTO, "ImageProcessing", &stdInterpreter}, - {0, AC_WRITE, 0, olyFocusInfoAttribs, 0x2050, AUTO, "FocusInfo", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x2100, AUTO, "Olympus2100", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x2300, AUTO, "Olympus2300", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x2400, AUTO, "Olympus2400", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x2500, AUTO, "Olympus2500", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x2600, AUTO, "Olympus2600", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x2700, AUTO, "Olympus2700", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x2800, AUTO, "Olympus2800", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x2900, AUTO, "Olympus2900", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x3000, AUTO, "RawInfo", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; -} diff --git a/rtexif/panasonicattribs.cc b/rtexif/panasonicattribs.cc deleted file mode 100644 index 4ebcf2447..000000000 --- a/rtexif/panasonicattribs.cc +++ /dev/null @@ -1,138 +0,0 @@ -/* - * This file is part of RawTherapee. - */ - -#include -#include "rtexif.h" - -namespace rtexif -{ - -// TODO: write interpreters - -const TagAttrib panasonicAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0001, AUTO, "Quality", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0002, AUTO, "FirmwareVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0003, AUTO, "WhiteBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0007, AUTO, "FocusMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000f, AUTO, "AFMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001a, AUTO, "ImageStabilization", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001c, AUTO, "Macro", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001f, AUTO, "ShootingMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0020, AUTO, "Audio", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0023, AUTO, "WhiteBalanceBias", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0024, AUTO, "FlashBias", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0025, AUTO, "InternalSerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0026, AUTO, "ExifVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0028, AUTO, "ColorEffect", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0029, AUTO, "TimeSincePowerOn", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x002a, AUTO, "BurstMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x002b, AUTO, "SequenceNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x002c, AUTO, "Contrast", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x002d, AUTO, "NoiseReduction", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x002e, AUTO, "SelfTimer", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0030, AUTO, "Rotation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0031, AUTO, "AFAssistLamp", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0032, AUTO, "ColorMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0033, AUTO, "BabyAge1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0034, AUTO, "OpticalZoomMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0035, AUTO, "ConversionLens", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0036, AUTO, "TravelDay", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0039, AUTO, "Contrast", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x003a, AUTO, "WorldTimeLocation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x003b, AUTO, "TextStamp1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x003c, AUTO, "ProgramISO", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x003d, AUTO, "AdvancedSceneType", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x003e, AUTO, "TextStamp2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x003f, AUTO, "FacesDetected", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0040, AUTO, "Saturation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0041, AUTO, "Sharpness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0042, AUTO, "FilmMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0044, AUTO, "ColorTempKelvin", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0045, AUTO, "BracketSettings", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0046, AUTO, "WBAdjustAB", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0047, AUTO, "WBAdjustGM", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0048, AUTO, "FlashCurtain", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0049, AUTO, "LongShutterNoiseReduction", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x004b, AUTO, "ImageWidth", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x004c, AUTO, "ImageHeight", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x004d, AUTO, "AFPointPosition", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x004e, AUTO, "FaceDetInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0051, AUTO, "LensType", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0052, AUTO, "LensSerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0053, AUTO, "AccessoryType", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0054, AUTO, "AccessorySerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0059, AUTO, "Transform1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x005d, AUTO, "IntelligentExposure", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0060, AUTO, "LensFirmwareVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0061, AUTO, "FaceRecInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0062, AUTO, "FlashWarning", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0065, AUTO, "Title", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0066, AUTO, "BabyName", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0067, AUTO, "Location", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0069, AUTO, "Country", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x006b, AUTO, "State", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x006d, AUTO, "City", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x006f, AUTO, "Landmark", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0070, AUTO, "IntelligentResolution", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0077, AUTO, "BurstSheed", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0079, AUTO, "IntelligentDRange", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x007c, AUTO, "ClearRetouch", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0080, AUTO, "City2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0086, AUTO, "ManometerPressure", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0089, AUTO, "PhotoStyle", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x008a, AUTO, "ShadingCompensation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x008c, AUTO, "AccelerometerZ", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x008d, AUTO, "AccelerometerX", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x008e, AUTO, "AccelerometerY", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x008f, AUTO, "CameraOrientation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0090, AUTO, "RollAngle", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0091, AUTO, "PitchAngle", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0093, AUTO, "SweepPanoramaDirection", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0094, AUTO, "PanoramaFieldOfView", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0096, AUTO, "TimerRecording", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x009d, AUTO, "InternalNDFilter", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x009e, AUTO, "HDR", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x009f, AUTO, "ShutterType", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00a3, AUTO, "ClearRetouchValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x00ab, AUTO, "TouchAE", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0e00, AUTO, "PrintIM", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8000, AUTO, "MakerNoteVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8001, AUTO, "SceneMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8004, AUTO, "WBRedLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8005, AUTO, "WBGreenLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8006, AUTO, "WBBlueLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8007, AUTO, "FlashFired", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8008, AUTO, "TextStamp3", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8009, AUTO, "TextStamp4", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8010, AUTO, "BabyAge2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8012, AUTO, "Transform2", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr } -}; - -const TagAttrib panasonicRawAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0001, AUTO, "Version", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0002, AUTO, "SensorWidth", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0003, AUTO, "SensorHeight", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0004, AUTO, "SensorTopBorder", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0005, AUTO, "SensorLeftBorder", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0006, AUTO, "ImageHeight", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0007, AUTO, "ImageWidth", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0011, AUTO, "RedBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0012, AUTO, "BlueBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0017, AUTO, "ISOSpeed", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0024, AUTO, "WBRedLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0025, AUTO, "WBGreenLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0026, AUTO, "WBBlueLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x002e, AUTO, "PreviewImage", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010f, AUTO, "Make", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0110, AUTO, "Model", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0111, AUTO, "StripOffsets", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0112, AUTO, "Orientation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0116, AUTO, "RowsPerStrip", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0117, AUTO, "StripByteCounts", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0118, AUTO, "RawDataOffset", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr } -}; - -} diff --git a/rtexif/pentaxattribs.cc b/rtexif/pentaxattribs.cc deleted file mode 100644 index bf17941f8..000000000 --- a/rtexif/pentaxattribs.cc +++ /dev/null @@ -1,2226 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * 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 RawTherapee. If not, see . - */ - -#include -#include -#include /* memcpy() */ -#include -#include - -#include "rtexif.h" - -namespace rtexif -{ - - -class PAQualityInterpreter : public ChoiceInterpreter<> -{ -public: - PAQualityInterpreter () - { - choices[0] = "Good"; - choices[1] = "Better"; - choices[2] = "Best"; - choices[3] = "TIFF"; - choices[4] = "RAW"; - choices[5] = "Premium"; - choices[6] = "RAW (HDR enabled)"; - choices[7] = "RAW (pixel shift enabled)"; - choices[8] = "RAW (pixel shift handheld mode enabled)"; - choices[65535] = "n/a"; - } -}; -PAQualityInterpreter paQualityInterpreter; - -class PAOnOffInterpreter : public ChoiceInterpreter<> -{ -public: - PAOnOffInterpreter () - { - choices[0] = "Off"; - choices[1] = "On"; - } -}; -PAOnOffInterpreter paOnOffInterpreter; - -class PAShakeReductionInterpreter : public ChoiceInterpreter<> -{ -public: - PAShakeReductionInterpreter () - { - choices[ 0] = "Off"; - choices[ 1] = "On"; - choices[ 4] = "On (4)"; - choices[ 5] = "On but Disabled"; - choices[ 6] = "On (Video)"; - choices[ 7] = "On (7)"; - choices[ 15] = "On (15)"; - choices[ 39] = "On (mode 2)"; - choices[135] = "On (135)"; - choices[167] = "On (mode 1)"; - } -}; -PAShakeReductionInterpreter paShakeReductionInterpreter; - -class PAShakeReduction2Interpreter : public ChoiceInterpreter<> -{ -public: - // ShakeReduction - PAShakeReduction2Interpreter () - { - choices[ 0] = "Off"; - choices[ 1] = "On"; - choices[ 4] = "Off (AA simulation off)"; - choices[ 5] = "On but Disabled"; - choices[ 6] = "On (Video)"; - choices[ 7] = "On (AA simulation off)"; - choices[12] = "Off (AA simulation type 1)"; - choices[15] = "On (AA simulation type 1)"; - choices[20] = "Off (AA simulation type 2)"; - choices[23] = "On (AA simulation type 2)"; - } -}; -PAShakeReduction2Interpreter paShakeReduction2Interpreter; - -class PAPictureModeInterpreter : public ChoiceInterpreter<> -{ -public: - PAPictureModeInterpreter () - { - choices[0] = "Program"; - choices[1] = "Shutter Speed Priority"; - choices[2] = "Program AE"; - choices[3] = "Manual"; - choices[5] = "Portrait"; - choices[6] = "Landscape"; - choices[8] = "Sport"; - choices[9] = "Night Scene"; - choices[11] = "Soft"; - choices[12] = "Surf & Snow"; - choices[13] = "Candlelight"; - choices[14] = "Autumn"; - choices[15] = "Macro"; - choices[17] = "Fireworks"; - choices[18] = "Text"; - choices[19] = "Panorama"; - choices[20] = "3-D"; - choices[21] = "Black & White"; - choices[22] = "Sepia"; - choices[23] = "Red"; - choices[24] = "Pink"; - choices[25] = "Purple"; - choices[26] = "Blue"; - choices[27] = "Green"; - choices[28] = "Yellow"; - choices[30] = "Self Portrait"; - choices[31] = "Illustrations"; - choices[33] = "Digital Filter"; - choices[35] = "Night Scene Portrait"; - choices[37] = "Museum"; - choices[38] = "Food"; - choices[39] = "Underwater"; - choices[40] = "Green Mode"; - choices[49] = "Light Pet"; - choices[50] = "Dark Pet"; - choices[51] = "Medium Pet"; - choices[53] = "Underwater"; - choices[54] = "Candlelight"; - choices[55] = "Natural Skin Tone"; - choices[56] = "Synchro Sound Record"; - choices[58] = "Frame Composite"; - choices[59] = "Report"; - choices[60] = "Kids"; - choices[61] = "Blur Reduction"; - choices[63] = "Panorama 2"; - choices[65] = "Half-length Portrait"; - choices[66] = "Portrait 2"; - choices[74] = "Digital Microscope"; - choices[75] = "Blue Sky"; - choices[80] = "Miniature"; - choices[81] = "HDR"; - choices[83] = "Fisheye"; - choices[85] = "Digital Filter 4"; - choices[221] = "P"; - choices[255] = "PICT"; - } -}; -PAPictureModeInterpreter paPictureModeInterpreter; - -class PASceneModeInterpreter : public ChoiceInterpreter<> -{ -public: - PASceneModeInterpreter () - { - choices[0] = "Off"; - choices[1] = "HDR"; - choices[4] = "Auto PICT"; - choices[5] = "Portrait"; - choices[6] = "Landscape"; - choices[7] = "Macro"; - choices[8] = "Sport"; - choices[9] = "Night Scene Portrait"; - choices[10] = "No Flash"; - choices[11] = "Night Scene"; - choices[12] = "Surf & Snow"; - choices[14] = "Sunset"; - choices[15] = "Kids"; - choices[16] = "Pet"; - choices[17] = "Candlelight"; - choices[18] = "Museum"; - choices[20] = "Food"; - choices[21] = "Stage Lighting"; - choices[22] = "Night Snap"; - choices[25] = "Night Scene HDR"; - choices[26] = "Blue Sky"; - choices[27] = "Forest"; - choices[29] = "Backlight Silhouette"; - } -}; -PASceneModeInterpreter paSceneModeInterpreter; - -class PAAEProgramModeInterpreter : public ChoiceInterpreter<> -{ -public: - PAAEProgramModeInterpreter () - { - choices[0] = "M, P or TAv"; - choices[1] = "Av, B or X"; - choices[2] = "Tv"; - choices[3] = "Sv or Green Mode"; - choices[8] = "Hi-speed Program"; - choices[11] = "Hi-speed Program (P-Shift)"; - choices[16] = "DOF Program"; - choices[19] = "DOF Program (P-Shift)"; - choices[24] = "MTF Program"; - choices[27] = "MTF Program (P-Shift)"; - choices[35] = "Standard"; - choices[43] = "Portrait"; - choices[51] = "Landscape"; - choices[59] = "Macro"; - choices[67] = "Sport"; - choices[75] = "Night Scene Portrait"; - choices[83] = "No Flash"; - choices[91] = "Night Scene"; - choices[99] = "Surf & Snow"; - choices[104] = "Night Snap"; - choices[107] = "Text"; - choices[115] = "Sunset"; - choices[123] = "Kids"; - choices[131] = "Pet"; - choices[139] = "Candlelight"; - choices[144] = "SCN"; - choices[147] = "Museum"; - choices[160] = "Program"; - choices[184] = "Shallow DOF Program"; - choices[216] = "HDR"; - } -}; -PAAEProgramModeInterpreter paAEProgramModeInterpreter; - -class PAFlashModeInterpreter : public ChoiceInterpreter<> -{ -public: - PAFlashModeInterpreter () - { - choices[0] = "Auto, Did not fire"; - choices[1] = "Off, Did not fire"; - choices[2] = "On, Did not fire"; - choices[3] = "Auto, Did not fire, Red-eye reduction"; - choices[5] = "On, Did not fire, Wireless (Master)"; - choices[256] = "Auto, Fired"; - choices[258] = "On, Fired"; - choices[259] = "Auto, Fired, Red-eye reduction"; - choices[260] = "On, Red-eye reduction"; - choices[261] = "On, Wireless (Master)"; - choices[262] = "On, Wireless (Control)"; - choices[264] = "On, Soft"; - choices[265] = "On, Slow-sync"; - choices[266] = "On, Slow-sync, Red-eye reduction"; - choices[267] = "On, Trailing-curtain Sync"; - } -}; -PAFlashModeInterpreter paFlashModeInterpreter; - -class PAFocusModeInterpreter : public ChoiceInterpreter<> -{ -public: - PAFocusModeInterpreter () - { - choices[0] = "Normal"; - choices[1] = "Macro"; - choices[2] = "Infinity"; - choices[3] = "Manual"; - choices[4] = "Super Macro"; - choices[5] = "Pan Focus"; - choices[16] = "AF-S (Focus-priority)"; - choices[17] = "AF-C (Focus-priority)"; - choices[18] = "AF-A (Focus-priority)"; - choices[32] = "Contrast-detect (Focus-priority)"; - choices[33] = "Tracking Contrast-detect (Focus-priority)"; - choices[272] = "AF-S (Release-priority)"; - choices[273] = "AF-C (Release-priority)"; - choices[274] = "AF-A (Release-priority)"; - choices[288] = "Contrast-detect (Release-priority)"; - } -}; -PAFocusModeInterpreter paFocusModeInterpreter; - -class PAAFPointInterpreter : public ChoiceInterpreter<> -{ -public: - // AFPointSelected - PAAFPointInterpreter () - { - choices[0] = "None"; - choices[1] = "Upper-left"; - choices[2] = "Top"; - choices[3] = "Upper-right"; - choices[4] = "Left"; - choices[5] = "Mid-left"; - choices[6] = "Center"; - choices[7] = "Mid-right"; - choices[8] = "Right"; - choices[9] = "Lower-left"; - choices[10] = "Bottom"; - choices[11] = "Lower-right"; - choices[65531] = "AF Select"; - choices[65532] = "Face Detect AF"; - choices[65533] = "Automatic Tracking AF"; - choices[65534] = "Fixed Center"; - choices[65535] = "Auto"; - } -}; -PAAFPointInterpreter paAFPointInterpreter; - -class PAAFFocusInterpreter : public ChoiceInterpreter<> -{ -public: - // AFPointsInFocus - PAAFFocusInterpreter () - { - choices[0] = "Fixed Center or Multiple"; - choices[1] = "Top-left"; - choices[2] = "Top-center"; - choices[3] = "Top-right"; - choices[4] = "Left"; - choices[5] = "Center"; - choices[6] = "Right"; - choices[7] = "Bottom-left"; - choices[8] = "Bottom-center"; - choices[9] = "Bottom-right"; - choices[65535] = "None"; - } -}; -PAAFFocusInterpreter paAFFocusInterpreter; - -class PAISOInterpreter : public ChoiceInterpreter<> -{ -public: - PAISOInterpreter () - { - choices[3] = "50"; - choices[4] = "64"; - choices[5] = "80"; - choices[6] = "100"; - choices[7] = "125"; - choices[8] = "160"; - choices[9] = "200"; - choices[10] = "250"; - choices[11] = "320"; - choices[12] = "400"; - choices[13] = "500"; - choices[14] = "640"; - choices[15] = "800"; - choices[16] = "1000"; - choices[17] = "1250"; - choices[18] = "1600"; - choices[19] = "2000"; - choices[20] = "2500"; - choices[21] = "3200"; - choices[22] = "4000"; - choices[23] = "5000"; - choices[24] = "6400"; - choices[25] = "8000"; - choices[26] = "10000"; - choices[27] = "12800"; - choices[28] = "16000"; - choices[29] = "20000"; - choices[30] = "25600"; - choices[31] = "32000"; - choices[32] = "40000"; - choices[33] = "51200"; - choices[34] = "64000"; - choices[35] = "80000"; - choices[36] = "102400"; - choices[37] = "128000"; - choices[38] = "160000"; - choices[39] = "204800"; - choices[40] = "256000"; - choices[41] = "320000"; - choices[42] = "409600"; - choices[43] = "512000"; - choices[44] = "640000"; - choices[45] = "819200"; - choices[50] = "50"; - choices[100] = "100"; - choices[200] = "200"; - choices[258] = "50"; - choices[259] = "70"; - choices[260] = "100"; - choices[261] = "140"; - choices[262] = "200"; - choices[263] = "280"; - choices[264] = "400"; - choices[265] = "560"; - choices[266] = "800"; - choices[267] = "1100"; - choices[268] = "1600"; - choices[269] = "2200"; - choices[270] = "3200"; - choices[271] = "4500"; - choices[272] = "6400"; - choices[273] = "9000"; - choices[274] = "12800"; - choices[275] = "18000"; - choices[276] = "25600"; - choices[277] = "36000"; - choices[278] = "51200"; - choices[400] = "400"; - choices[800] = "800"; - choices[1600] = "1600"; - choices[3200] = "3200"; - } -}; -PAISOInterpreter paISOInterpreter; - -class PAFNumberInterpreter: public Interpreter -{ -public: - PAFNumberInterpreter () {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - double v = t->toDouble() / 10; - - if ( v < 0. || v > 1000. ) { - return "undef"; - } - - snprintf(buffer, sizeof(buffer), "%.1f", v ); - return buffer; - } -}; -PAFNumberInterpreter paFNumberInterpreter; - -class PAMeteringModeInterpreter : public ChoiceInterpreter<> -{ -public: - PAMeteringModeInterpreter () - { - choices[0] = "Multi-segment"; - choices[1] = "Center-weighted average"; - choices[2] = "Spot"; - } -}; -PAMeteringModeInterpreter paMeteringModeInterpreter; - -class PAWhiteBalanceInterpreter : public ChoiceInterpreter<> -{ -public: - PAWhiteBalanceInterpreter () - { - choices[0] = "Auto"; - choices[1] = "Daylight"; - choices[2] = "Shade"; - choices[3] = "Fluorescent"; - choices[4] = "Tungsten"; - choices[5] = "Manual"; - choices[6] = "Daylight Fluorescent"; - choices[7] = "Day White Fluorescent"; - choices[8] = "White Fluorescent"; - choices[9] = "Flash"; - choices[10] = "Cloudy"; - choices[11] = "Warm White Fluorescent"; - choices[14] = "Multi Auto"; - choices[15] = "Color Temperature Enhancement"; - choices[17] = "Kelvin"; - choices[65534] = "Unknown"; - choices[65535] = "User-Selected"; - } -}; -PAWhiteBalanceInterpreter paWhiteBalanceInterpreter; - -class PAWhiteBalanceModeInterpreter : public ChoiceInterpreter<> -{ -public: - PAWhiteBalanceModeInterpreter () - { - choices[1] = "Auto (Daylight)"; - choices[2] = "Auto (Shade)"; - choices[3] = "Auto (Flash)"; - choices[4] = "Auto (Tungsten)"; - choices[6] = "Auto (Daylight Fluorescent)"; - choices[7] = "Auto (Day White Fluorescent)"; - choices[8] = "Auto (White Fluorescent)"; - choices[10] = "Auto (Cloudy)"; - choices[65534] = "Unknown"; - choices[65535] = "User-Selected"; - } -}; -PAWhiteBalanceModeInterpreter paWhiteBalanceModeInterpreter; - -class PASaturationInterpreter : public ChoiceInterpreter<> -{ -public: - PASaturationInterpreter () - { - choices[0] = "-2 (low)"; - choices[1] = "0 (normal)"; - choices[2] = "+2 (high)"; - choices[3] = "-1 (med low)"; - choices[4] = "+1 (med high)"; - choices[5] = "-3 (very low)"; - choices[6] = "+3 (very high)"; - choices[7] = "-4 (minimum)"; - choices[8] = "+4 (maximum)"; - choices[65535] = "None"; - } -}; -PASaturationInterpreter paSaturationInterpreter; - -class PAContrastInterpreter : public ChoiceInterpreter<> -{ -public: - PAContrastInterpreter () - { - choices[0] = "-2 (low)"; - choices[1] = "0 (normal)"; - choices[2] = "+2 (high)"; - choices[3] = "-1 (med low)"; - choices[4] = "+1 (med high)"; - choices[5] = "-3 (very low)"; - choices[6] = "+3 (very high)"; - choices[7] = "-4 (minimum)"; - choices[8] = "+4 (maximum)"; - choices[65535] = "n/a"; - } -}; -PAContrastInterpreter paContrastInterpreter; - -class PASharpnessInterpreter : public ChoiceInterpreter<> -{ -public: - PASharpnessInterpreter () - { - choices[0] = "-2 (soft)"; - choices[1] = "0 (normal)"; - choices[2] = "+2 (hard)"; - choices[3] = "-1 (med soft)"; - choices[4] = "+1 (med hard)"; - choices[5] = "-3 (very soft)"; - choices[6] = "+3 (very hard)"; - choices[7] = "-4 (minimum)"; - choices[8] = "+4 (maximum)"; - } -}; -PASharpnessInterpreter paSharpnessInterpreter; - -class PAPictureModeInterpreter2: public ChoiceInterpreter<> -{ -public: - PAPictureModeInterpreter2() - { - choices[256 * 0 + 0] = "Program"; - choices[256 * 0 + 1] = "Hi-speed Program"; - choices[256 * 0 + 2] = "DOF Program"; - choices[256 * 0 + 3] = "MTF Program"; - choices[256 * 0 + 4] = "Standard"; - choices[256 * 0 + 5] = "Portrait"; - choices[256 * 0 + 6] = "Landscape"; - choices[256 * 0 + 7] = "Macro"; - choices[256 * 0 + 8] = "Sport"; - choices[256 * 0 + 9] = "Night Scene Portrait"; - choices[256 * 0 + 10] = "No Flash"; - choices[256 * 0 + 11] = "Night Scene"; - choices[256 * 0 + 12] = "Surf & Snow"; - choices[256 * 0 + 13] = "Text"; - choices[256 * 0 + 14] = "Sunset"; - choices[256 * 0 + 15] = "Kids"; - choices[256 * 0 + 16] = "Pet"; - choices[256 * 0 + 17] = "Candlelight"; - choices[256 * 0 + 18] = "Museum"; - choices[256 * 0 + 19] = "Food"; - choices[256 * 0 + 20] = "Stage Lighting"; - choices[256 * 0 + 21] = "Night Snap"; - choices[256 * 0 + 23] = "Blue Sky"; - choices[256 * 0 + 24] = "Sunset"; - choices[256 * 0 + 26] = "Night Scene HDR"; - choices[256 * 0 + 27] = "HDR"; - choices[256 * 0 + 28] = "Quick Macro"; - choices[256 * 0 + 29] = "Forest"; - choices[256 * 0 + 30] = "Backlight Silhouette"; - choices[256 * 1 + 4] = "Auto PICT (Standard)"; - choices[256 * 1 + 5] = "Auto PICT (Portrait)"; - choices[256 * 1 + 6] = "Auto PICT (Landscape)"; - choices[256 * 1 + 7] = "Auto PICT (Macro)"; - choices[256 * 1 + 8] = "Auto PICT (Sport)"; - choices[256 * 2 + 0] = "Program (HyP)"; - choices[256 * 2 + 1] = "Hi-speed Program (HyP)"; - choices[256 * 2 + 2] = "DOF Program (HyP)"; - choices[256 * 2 + 3] = "MTF Program (HyP)"; - choices[256 * 2 + 22] = "Shallow DOF (HyP)"; - choices[256 * 3 + 0] = "Green Mode"; - choices[256 * 4 + 0] = "Shutter Speed Priority"; - choices[256 * 5 + 0] = "Aperture Priority"; - choices[256 * 6 + 0] = "Program Tv Shift"; - choices[256 * 7 + 0] = "Program Av Shift"; - choices[256 * 8 + 0] = "Manual"; - choices[256 * 9 + 0] = "Bulb"; - choices[256 * 10 + 0] = "Aperture Priority, Off-Auto-Aperture"; - choices[256 * 11 + 0] = "Manual, Off-Auto-Aperture"; - choices[256 * 12 + 0] = "Bulb, Off-Auto-Aperture"; - choices[256 * 13 + 0] = "Shutter & Aperture Priority AE"; - choices[256 * 15 + 0] = "Sensitivity Priority AE"; - choices[256 * 16 + 0] = "Flash X-Sync Speed AE"; - choices[256 * 18 + 0] = "Auto Program (Normal)"; - choices[256 * 18 + 1] = "Auto Program (Hi-speed)"; - choices[256 * 18 + 2] = "Auto Program (DOF)"; - choices[256 * 18 + 3] = "Auto Program (MTF)"; - choices[256 * 18 + 22] = "Auto Program (Shallow DOF)"; - choices[256 * 20 + 22] = "Blur Control"; - choices[256 * 254 + 0] = "Video"; - choices[256 * 255 + 0] = "Video (Auto Aperture)"; - choices[256 * 255 + 4] = "Video (4)"; - } - std::string toString (const Tag* t) const override - { - int c = 256 * t->toInt (0, BYTE) + t->toInt (1, BYTE); - const ChoicesIterator r = choices.find (c); - - if (r != choices.end()) { - std::ostringstream s; - s << r->second; - - if ( t->toInt (1, BYTE) == 0 ) { - s << "\n1/2 EV steps"; - } else { - s << "\n1/3 EV steps"; - } - - return s.str(); - } else { - char buffer[1024]; - t->toString (buffer, sizeof(buffer)); - return std::string (buffer); - } - } -}; -PAPictureModeInterpreter2 paPictureModeInterpreter2; - -class PADriveModeInterpreter : public ChoiceInterpreter<> -{ - std::map choices1; - std::map choices2; - std::map choices3; -public: - PADriveModeInterpreter() - { - choices[0] = "Single-frame"; - choices[1] = "Continuous"; - choices[2] = "Continuous (Lo)"; - choices[3] = "Burst"; - choices[4] = "Continuous (Medium)"; - choices[255] = "Video"; - choices1[0] = "No Timer"; - choices1[1] = "Self-timer (12 s)"; - choices1[2] = "Self-timer (2 s)"; - choices1[15] = "Video"; - choices1[16] = "Mirror Lock-up"; - choices1[255] = "n/a"; - choices2[0] = "Shutter Button"; - choices2[1] = "Remote Control (3 s delay)"; - choices2[2] = "Remote Control"; - choices2[4] = "Remote Continuous Shooting"; - choices3[0] = "Single Exposure"; - choices3[1] = "Multiple Exposure"; - choices3[15] = "Interval Movie"; - choices3[16] = "HDR"; - choices3[32] = "HDR Strong 1"; - choices3[48] = "HDR Strong 2"; - choices3[64] = "HDR Strong 3"; - choices3[224] = "HDR Auto"; - choices3[255] = "Video"; - } - std::string toString (const Tag* t) const override - { - const ChoicesIterator r = choices.find (t->toInt (0, BYTE)); - std::map::const_iterator r1 = choices1.find (t->toInt (1, BYTE)); - std::map::const_iterator r2 = choices2.find (t->toInt (2, BYTE)); - std::map::const_iterator r3 = choices3.find (t->toInt (3, BYTE)); - std::ostringstream s; - s << ((r != choices.end()) ? r->second : ""); - s << ((r1 != choices1.end()) ? r1->second : "") << " "; - s << ((r2 != choices2.end()) ? r2->second : "") << " "; - s << ((r3 != choices3.end()) ? r3->second : "") << " "; - return s.str(); - } -}; -PADriveModeInterpreter paDriveModeInterpreter; - -class PAColorSpaceInterpreter: public ChoiceInterpreter<> -{ -public: - PAColorSpaceInterpreter() - { - choices[0] = "sRGB"; - choices[1] = "Adobe RGB"; - } -}; -PAColorSpaceInterpreter paColorSpaceInterpreter; - -class PALensTypeInterpreter final: public IntLensInterpreter< int > -{ -public: - PALensTypeInterpreter () - { - choices.insert (p_t (256 * 0 + 0, "M-42 or No Lens")); - choices.insert (p_t (256 * 1 + 0, "K or M Lens")); - choices.insert (p_t (256 * 2 + 0, "A Series Lens")); - choices.insert (p_t (256 * 3 + 0, "Sigma")); - choices.insert (p_t (256 * 3 + 17, "smc PENTAX-FA SOFT 85mm f/2.8")); - choices.insert (p_t (256 * 3 + 18, "smc PENTAX-F 1.7X AF ADAPTER")); - choices.insert (p_t (256 * 3 + 19, "smc PENTAX-F 24-50mm f/4")); - choices.insert (p_t (256 * 3 + 20, "smc PENTAX-F 35-80mm f/4-5.6")); - choices.insert (p_t (256 * 3 + 21, "smc PENTAX-F 80-200mm f/4.7-5.6")); - choices.insert (p_t (256 * 3 + 22, "smc PENTAX-F FISH-EYE 17-28mm f/3.5-4.5")); - choices.insert (p_t (256 * 3 + 23, "smc PENTAX-F 100-300mm f/4.5-5.6 or Sigma Lens")); - choices.insert (p_t (256 * 3 + 23, "Sigma AF 28-300mm f/3.5-5.6 DL IF")); - choices.insert (p_t (256 * 3 + 23, "Sigma AF 28-300mm f/3.5-6.3 DG IF Macro")); - choices.insert (p_t (256 * 3 + 23, "Tokina 80-200mm f/2.8 ATX-Pro")); - choices.insert (p_t (256 * 3 + 24, "smc PENTAX-F 35-135mm f/3.5-4.5")); - choices.insert (p_t (256 * 3 + 25, "smc PENTAX-F 35-105mm f/4-5.6 or Sigma or Tokina Lens")); - choices.insert (p_t (256 * 3 + 25, "Sigma 55-200mm f/4-5.6 DC")); - choices.insert (p_t (256 * 3 + 25, "Sigma AF 28-300mm f/3.5-5.6 DL IF")); - choices.insert (p_t (256 * 3 + 25, "Sigma AF 28-300mm f/3.5-6.3 DL IF")); - choices.insert (p_t (256 * 3 + 25, "Sigma AF 28-300mm f/3.5-6.3 DG IF Macro")); - choices.insert (p_t (256 * 3 + 25, "Tokina 80-200mm f/2.8 ATX-Pro")); - choices.insert (p_t (256 * 3 + 26, "smc PENTAX-F* 250-600mm f/5.6 ED[IF]")); - choices.insert (p_t (256 * 3 + 27, "smc PENTAX-F 28-80mm f/3.5-4.5 or Tokina Lens")); - choices.insert (p_t (256 * 3 + 27, "Tokina AT-X Pro AF 28-70mm f/2.6-2.8")); - choices.insert (p_t (256 * 3 + 28, "smc PENTAX-F 35-70mm f/3.5-4.5 or Tokina Lens")); - choices.insert (p_t (256 * 3 + 28, "Tokina 19-35mm f/3.5-4.5 AF")); - choices.insert (p_t (256 * 3 + 28, "Tokina AT-X AF 400mm f/5.6")); - choices.insert (p_t (256 * 3 + 29, "PENTAX-F 28-80mm f/3.5-4.5 or Sigma or Tokina Lens")); - choices.insert (p_t (256 * 3 + 29, "Sigma AF 18-125mm f/3.5-5.6 DC")); - choices.insert (p_t (256 * 3 + 29, "Tokina AT-X PRO 28-70mm f/2.6-2.8")); - choices.insert (p_t (256 * 3 + 30, "PENTAX-F 70-200mm f/4-5.6")); - choices.insert (p_t (256 * 3 + 31, "smc PENTAX-F 70-210mm f/4-5.6 or Tokina or Takumar Lens")); - choices.insert (p_t (256 * 3 + 31, "Tokina AF 730 75-300mm f/4.5-5.6")); - choices.insert (p_t (256 * 3 + 31, "Takumar-F 70-210mm f/4-5.6")); - choices.insert (p_t (256 * 3 + 32, "smc PENTAX-F 50mm f/1.4")); - choices.insert (p_t (256 * 3 + 33, "smc PENTAX-F 50mm f/1.7")); - choices.insert (p_t (256 * 3 + 34, "smc PENTAX-F 135mm f/2.8 [IF]")); - choices.insert (p_t (256 * 3 + 35, "smc PENTAX-F 28mm f/2.8")); - choices.insert (p_t (256 * 3 + 36, "Sigma 20mm f/1.8 EX DG Aspherical RF")); - choices.insert (p_t (256 * 3 + 38, "smc PENTAX-F* 300mm f/4.5 ED[IF]")); - choices.insert (p_t (256 * 3 + 39, "smc PENTAX-F* 600mm f/4 ED[IF]")); - choices.insert (p_t (256 * 3 + 40, "smc PENTAX-F Macro 100mm f/2.8")); - choices.insert (p_t (256 * 3 + 41, "smc PENTAX-F Macro 50mm f/2.8 or Sigma Lens")); - choices.insert (p_t (256 * 3 + 41, "Sigma 50mm f/2.8 Macro")); - choices.insert (p_t (256 * 3 + 42, "Sigma 300mm f/2.8 EX DG APO IF")); - choices.insert (p_t (256 * 3 + 44, "Sigma or Tamron Lens (3 44)")); - choices.insert (p_t (256 * 3 + 44, "Sigma AF 10-20mm f/4-5.6 EX DC")); - choices.insert (p_t (256 * 3 + 44, "Sigma 12-24mm f/4.5-5.6 EX DG")); - choices.insert (p_t (256 * 3 + 44, "Sigma 17-70mm f/2.8-4.5 DC Macro")); - choices.insert (p_t (256 * 3 + 44, "Sigma 18-50mm f/3.5-5.6 DC")); - choices.insert (p_t (256 * 3 + 44, "Sigma 17-35mm f/2.8-4 EX DG")); - choices.insert (p_t (256 * 3 + 44, "Tamron 35-90mm f/4-5.6 AF")); - choices.insert (p_t (256 * 3 + 44, "Sigma AF 18-35mm f/3.5-4.5 Aspherical")); - choices.insert (p_t (256 * 3 + 46, "Sigma or Samsung Lens (3 46)")); - choices.insert (p_t (256 * 3 + 46, "Sigma APO 70-200mm f/2.8 EX")); - choices.insert (p_t (256 * 3 + 46, "Sigma EX APO 100-300mm f/4 IF")); - choices.insert (p_t (256 * 3 + 46, "Samsung/Schneider D-XENON 50-200mm f/4-5.6 ED")); - choices.insert (p_t (256 * 3 + 50, "smc PENTAX-FA 28-70mm f/4 AL")); - choices.insert (p_t (256 * 3 + 51, "Sigma 28mm f/1.8 EX DG Aspherical Macro")); - choices.insert (p_t (256 * 3 + 52, "smc PENTAX-FA 28-200mm f/3.8-5.6 AL[IF] or Tamron Lens")); - choices.insert (p_t (256 * 3 + 52, "Tamron AF LD 28-200mm f/3.8-5.6 [IF] Aspherical (171D)")); - choices.insert (p_t (256 * 3 + 53, "smc PENTAX-FA 28-80mm f/3.5-5.6 AL")); - choices.insert (p_t (256 * 3 + 247, "smc PENTAX-DA FISH-EYE 10-17mm f/3.5-4.5 ED[IF]")); - choices.insert (p_t (256 * 3 + 248, "smc PENTAX-DA 12-24mm f/4 ED AL[IF]")); - choices.insert (p_t (256 * 3 + 250, "smc PENTAX-DA 50-200mm f/4-5.6 ED")); - choices.insert (p_t (256 * 3 + 251, "smc PENTAX-DA 40mm f/2.8 Limited")); - choices.insert (p_t (256 * 3 + 252, "smc PENTAX-DA 18-55mm f/3.5-5.6 AL")); - choices.insert (p_t (256 * 3 + 253, "smc PENTAX-DA 14mm f/2.8 ED[IF]")); - choices.insert (p_t (256 * 3 + 254, "smc PENTAX-DA 16-45mm f/4 ED AL")); - choices.insert (p_t (256 * 3 + 255, "Sigma Lens (3 255)")); - choices.insert (p_t (256 * 3 + 255, "Sigma 18-200mm f/3.5-6.3 DC")); - choices.insert (p_t (256 * 3 + 255, "Sigma DL-II 35-80mm f/4-5.6")); - choices.insert (p_t (256 * 3 + 255, "Sigma DL Zoom 75-300mm f/4-5.6")); - choices.insert (p_t (256 * 3 + 255, "Sigma DF EX Aspherical 28-70mm f/2.8")); - choices.insert (p_t (256 * 3 + 255, "Sigma AF Tele 400mm f/5.6 Multi-coated")); - choices.insert (p_t (256 * 3 + 255, "Sigma 24-60mm f/2.8 EX DG")); - choices.insert (p_t (256 * 3 + 255, "Sigma 70-300mm f/4-5.6 Macro")); - choices.insert (p_t (256 * 3 + 255, "Sigma 55-200mm f/4-5.6 DC")); - choices.insert (p_t (256 * 3 + 255, "Sigma 18-50mm f/2.8 EX DC")); - choices.insert (p_t (256 * 4 + 1, "smc PENTAX-FA SOFT 28mm f/2.8")); - choices.insert (p_t (256 * 4 + 2, "smc PENTAX-FA 80-320mm f/4.5-5.6")); - choices.insert (p_t (256 * 4 + 3, "smc PENTAX-FA 43mm f/1.9 Limited")); - choices.insert (p_t (256 * 4 + 6, "smc PENTAX-FA 35-80mm f/4-5.6")); - choices.insert (p_t (256 * 4 + 8, "Irix 150mm f/2.8 Macro")); - choices.insert (p_t (256 * 4 + 9, "Irix 11mm f/4 Firefly")); - choices.insert (p_t (256 * 4 + 10, "Irix 15mm f/2.4")); - choices.insert (p_t (256 * 4 + 12, "smc PENTAX-FA 50mm f/1.4")); - choices.insert (p_t (256 * 4 + 15, "smc PENTAX-FA 28-105mm f/4-5.6 [IF]")); - choices.insert (p_t (256 * 4 + 16, "Tamron AF 80-210mm f/4-5.6 (178D)")); - choices.insert (p_t (256 * 4 + 19, "Tamron SP AF 90mm f/2.8 (172E)")); - choices.insert (p_t (256 * 4 + 20, "smc PENTAX-FA 28-80mm f/3.5-5.6")); - choices.insert (p_t (256 * 4 + 21, "Cosina AF 100-300mm f/5.6-6.7")); - choices.insert (p_t (256 * 4 + 22, "Tokina 28-80mm f/3.5-5.6")); - choices.insert (p_t (256 * 4 + 23, "smc PENTAX-FA 20-35mm f/4 AL")); - choices.insert (p_t (256 * 4 + 24, "smc PENTAX-FA 77mm f/1.8 Limited")); - choices.insert (p_t (256 * 4 + 25, "Tamron SP AF 14mm f/2.8")); - choices.insert (p_t (256 * 4 + 26, "smc PENTAX-FA Macro 100mm f/3.5 or Cosina Lens")); - choices.insert (p_t (256 * 4 + 26, "Cosina 100mm f/3.5 Macro")); - choices.insert (p_t (256 * 4 + 27, "Tamron AF 28-300mm f/3.5-6.3 LD Aspherical[IF] Macro (185D/285D)")); - choices.insert (p_t (256 * 4 + 28, "smc PENTAX-FA 35mm f/2 AL")); - choices.insert (p_t (256 * 4 + 29, "Tamron AF 28-200mm f/3.8-5.6 LD Super II Macro (371D)")); - choices.insert (p_t (256 * 4 + 34, "smc PENTAX-FA 24-90mm f/3.5-4.5 AL[IF]")); - choices.insert (p_t (256 * 4 + 35, "smc PENTAX-FA 100-300mm f/4.7-5.8")); - choices.insert (p_t (256 * 4 + 36, "Tamron AF 70-300mm f/4-5.6 LD Macro 1:2")); - choices.insert (p_t (256 * 4 + 37, "Tamron SP AF 24-135mm f/3.5-5.6 AD AL (190D)")); - choices.insert (p_t (256 * 4 + 38, "smc PENTAX-FA 28-105mm f/3.2-4.5 AL[IF]")); - choices.insert (p_t (256 * 4 + 39, "smc PENTAX-FA 31mm f/1.8 AL Limited")); - choices.insert (p_t (256 * 4 + 41, "Tamron AF 28-200mm Super Zoom f/3.8-5.6 Aspherical XR [IF] Macro (A03)")); - choices.insert (p_t (256 * 4 + 43, "smc PENTAX-FA 28-90mm f/3.5-5.6")); - choices.insert (p_t (256 * 4 + 44, "smc PENTAX-FA J 75-300mm f/4.5-5.8 AL")); - choices.insert (p_t (256 * 4 + 45, "Tamron Lens (4 45)")); - choices.insert (p_t (256 * 4 + 45, "Tamron 28-300mm f/3.5-6.3 Ultra zoom XR")); - choices.insert (p_t (256 * 4 + 45, "Tamron AF 28-300mm f/3.5-6.3 XR Di LD Aspherical [IF] Macro")); - choices.insert (p_t (256 * 4 + 46, "smc PENTAX-FA J 28-80mm f/3.5-5.6 AL")); - choices.insert (p_t (256 * 4 + 47, "smc PENTAX-FA J 18-35mm f/4-5.6 AL")); - choices.insert (p_t (256 * 4 + 49, "Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical [IF] Macro")); - choices.insert (p_t (256 * 4 + 51, "smc PENTAX-D FA 50mm f/2.8 Macro")); - choices.insert (p_t (256 * 4 + 52, "smc PENTAX-D FA 100mm f/2.8 Macro")); - choices.insert (p_t (256 * 4 + 55, "Samsung/Schneider D-XENOGON 35mm f/2")); - choices.insert (p_t (256 * 4 + 56, "Samsung/Schneider D-XENON 100mm f/2.8 Macro")); - choices.insert (p_t (256 * 4 + 75, "Tamron SP AF 70-200mm f/2.8 Di LD [IF] Macro (A001)")); - choices.insert (p_t (256 * 4 + 214, "smc PENTAX-DA 35mm f/2.4 AL")); - choices.insert (p_t (256 * 4 + 229, "smc PENTAX-DA 18-55mm f/3.5-5.6 AL II")); - choices.insert (p_t (256 * 4 + 230, "Tamron SP AF 17-50mm f/2.8 XR Di II")); - choices.insert (p_t (256 * 4 + 231, "smc PENTAX-DA 18-250mm f/3.5-6.3 ED AL [IF]")); - choices.insert (p_t (256 * 4 + 237, "Samsung/Schneider D-XENOGON 10-17mm f/3.5-4.5")); - choices.insert (p_t (256 * 4 + 239, "Samsung/Schneider D-XENON 12-24mm f/4 ED AL [IF]")); - choices.insert (p_t (256 * 4 + 242, "smc PENTAX-DA* 16-50mm f/2.8 ED AL [IF] SDM (SDM unused)")); - choices.insert (p_t (256 * 4 + 243, "smc PENTAX-DA 70mm f/2.4 Limited")); - choices.insert (p_t (256 * 4 + 244, "smc PENTAX-DA 21mm f/3.2 AL Limited")); - choices.insert (p_t (256 * 4 + 245, "Samsung/Schneider D-XENON 50-200mm f/4-5.6")); - choices.insert (p_t (256 * 4 + 246, "Samsung/Schneider D-XENON 18-55mm f/3.5-5.6")); - choices.insert (p_t (256 * 4 + 247, "smc PENTAX-DA FISH-EYE 10-17mm f/3.5-4.5 ED[IF]")); - choices.insert (p_t (256 * 4 + 248, "smc PENTAX-DA 12-24mm f/4 ED AL [IF]")); - choices.insert (p_t (256 * 4 + 249, "Tamron XR DiII 18-200mm f/3.5-6.3 (A14)")); - choices.insert (p_t (256 * 4 + 250, "smc PENTAX-DA 50-200mm f/4-5.6 ED")); - choices.insert (p_t (256 * 4 + 251, "smc PENTAX-DA 40mm f/2.8 Limited")); - choices.insert (p_t (256 * 4 + 252, "smc PENTAX-DA 18-55mm f/3.5-5.6 AL")); - choices.insert (p_t (256 * 4 + 253, "smc PENTAX-DA 14mm f/2.8 ED[IF]")); - choices.insert (p_t (256 * 4 + 254, "smc PENTAX-DA 16-45mm f/4 ED AL")); - choices.insert (p_t (256 * 5 + 1, "smc PENTAX-FA* 24mm f/2 AL[IF]")); - choices.insert (p_t (256 * 5 + 2, "smc PENTAX-FA 28mm f/2.8 AL")); - choices.insert (p_t (256 * 5 + 3, "smc PENTAX-FA 50mm f/1.7")); - choices.insert (p_t (256 * 5 + 4, "smc PENTAX-FA 50mm f/1.4")); - choices.insert (p_t (256 * 5 + 5, "smc PENTAX-FA* 600mm f/4 ED[IF]")); - choices.insert (p_t (256 * 5 + 6, "smc PENTAX-FA* 300mm f/4.5 ED[IF]")); - choices.insert (p_t (256 * 5 + 7, "smc PENTAX-FA 135mm f/2.8 [IF]")); - choices.insert (p_t (256 * 5 + 8, "smc PENTAX-FA Macro 50mm f/2.8")); - choices.insert (p_t (256 * 5 + 9, "smc PENTAX-FA Macro 100mm f/2.8")); - choices.insert (p_t (256 * 5 + 10, "smc PENTAX-FA* 85mm f/1.4 [IF]")); - choices.insert (p_t (256 * 5 + 11, "smc PENTAX-FA* 200mm f/2.8 ED[IF]")); - choices.insert (p_t (256 * 5 + 12, "smc PENTAX-FA 28-80mm f/3.5-4.7")); - choices.insert (p_t (256 * 5 + 13, "smc PENTAX-FA 70-200mm f/4-5.6")); - choices.insert (p_t (256 * 5 + 14, "smc PENTAX-FA* 250-600mm f/5.6 ED[IF]")); - choices.insert (p_t (256 * 5 + 15, "smc PENTAX-FA 28-105mm f/4-5.6")); - choices.insert (p_t (256 * 5 + 16, "smc PENTAX-FA 100-300mm f/4.5-5.6")); - choices.insert (p_t (256 * 5 + 98, "smc PENTAX-FA 100-300mm f/4.5-5.6")); - choices.insert (p_t (256 * 6 + 1, "smc PENTAX-FA* 85mm f/1.4 [IF]")); - choices.insert (p_t (256 * 6 + 2, "smc PENTAX-FA* 200mm f/2.8 ED[IF]")); - choices.insert (p_t (256 * 6 + 3, "smc PENTAX-FA* 300mm f/2.8 ED[IF]")); - choices.insert (p_t (256 * 6 + 4, "smc PENTAX-FA* 28-70mm f/2.8 AL")); - choices.insert (p_t (256 * 6 + 5, "smc PENTAX-FA* 80-200mm f/2.8 ED[IF]")); - choices.insert (p_t (256 * 6 + 6, "smc PENTAX-FA* 28-70mm f/2.8 AL")); - choices.insert (p_t (256 * 6 + 7, "smc PENTAX-FA* 80-200mm f/2.8 ED[IF]")); - choices.insert (p_t (256 * 6 + 8, "smc PENTAX-FA 28-70mm f/4AL")); - choices.insert (p_t (256 * 6 + 9, "smc PENTAX-FA 20mm f/2.8")); - choices.insert (p_t (256 * 6 + 10, "smc PENTAX-FA* 400mm f/5.6 ED[IF]")); - choices.insert (p_t (256 * 6 + 13, "smc PENTAX-FA* 400mm f/5.6 ED[IF]")); - choices.insert (p_t (256 * 6 + 14, "smc PENTAX-FA* Macro 200mm f/4 ED[IF]")); - choices.insert (p_t (256 * 7 + 0, "smc PENTAX-DA 21mm f/3.2 AL Limited")); - choices.insert (p_t (256 * 7 + 58, "smc PENTAX-D FA Macro 100mm f/2.8 WR")); - choices.insert (p_t (256 * 7 + 75, "Tamron SP AF 70-200mm f/2.8 Di LD [IF] Macro (A001)")); - choices.insert (p_t (256 * 7 + 201, "smc Pentax-DA L 50-200mm f/4-5.6 ED WR")); - choices.insert (p_t (256 * 7 + 202, "smc PENTAX-DA L 18-55mm f/3.5-5.6 AL WR")); - choices.insert (p_t (256 * 7 + 203, "HD PENTAX-DA 55-300mm f/4-5.8 ED WR")); - choices.insert (p_t (256 * 7 + 204, "HD PENTAX-DA 15mm f/4 ED AL Limited")); - choices.insert (p_t (256 * 7 + 205, "HD PENTAX-DA 35mm f/2.8 Macro Limited")); - choices.insert (p_t (256 * 7 + 206, "HD PENTAX-DA 70mm f/2.4 Limited")); - choices.insert (p_t (256 * 7 + 207, "HD PENTAX-DA 21mm f/3.2 ED AL Limited")); - choices.insert (p_t (256 * 7 + 208, "HD PENTAX-DA 40mm f/2.8 Limited")); - choices.insert (p_t (256 * 7 + 212, "smc PENTAX-DA 50mm f/1.8")); - choices.insert (p_t (256 * 7 + 213, "smc PENTAX-DA 40mm f/2.8 XS")); - choices.insert (p_t (256 * 7 + 214, "smc PENTAX-DA 35mm f/2.4 AL")); - choices.insert (p_t (256 * 7 + 216, "smc PENTAX-DA L 55-300mm f/4-5.8 ED")); - choices.insert (p_t (256 * 7 + 217, "smc PENTAX-DA 50-200mm f/4-5.6 ED WR")); - choices.insert (p_t (256 * 7 + 218, "smc PENTAX-DA 18-55mm f/3.5-5.6 AL WR")); - choices.insert (p_t (256 * 7 + 220, "Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical [IF]")); - choices.insert (p_t (256 * 7 + 221, "smc PENTAX-DA L 50-200mm f/4-5.6 ED")); - choices.insert (p_t (256 * 7 + 222, "smc PENTAX-DA L 18-55mm f/3.5-5.6")); - choices.insert (p_t (256 * 7 + 223, "Samsung/Schneider D-XENON 18-55mm f/3.5-5.6 II")); - choices.insert (p_t (256 * 7 + 224, "smc PENTAX-DA 15mm f/4 ED AL Limited")); - choices.insert (p_t (256 * 7 + 225, "Samsung/Schneider D-XENON 18-250mm f/3.5-6.3")); - choices.insert (p_t (256 * 7 + 226, "smc PENTAX-DA* 55mm f/1.4 SDM (SDM unused)")); - choices.insert (p_t (256 * 7 + 227, "smc PENTAX-DA* 60-250mm f/4 [IF] SDM (SDM unused)")); - choices.insert (p_t (256 * 7 + 228, "Samsung 16-45mm f/4 ED")); - choices.insert (p_t (256 * 7 + 229, "smc PENTAX-DA 18-55mm f/3.5-5.6 AL II")); - choices.insert (p_t (256 * 7 + 230, "Tamron AF 17-50mm f/2.8 XR Di-II LD (Model A16)")); - choices.insert (p_t (256 * 7 + 231, "smc PENTAX-DA 18-250mm f/3.5-6.3 ED AL [IF]")); - choices.insert (p_t (256 * 7 + 233, "smc PENTAX-DA 35mm f/2.8 Macro Limited")); - choices.insert (p_t (256 * 7 + 234, "smc PENTAX-DA* 300mm f/4 ED [IF] SDM (SDM unused)")); - choices.insert (p_t (256 * 7 + 235, "smc PENTAX-DA* 200mm f/2.8 ED [IF] SDM (SDM unused)")); - choices.insert (p_t (256 * 7 + 236, "smc PENTAX-DA 55-300mm f/4-5.8 ED")); - choices.insert (p_t (256 * 7 + 238, "Tamron AF 18-250mm f/3.5-6.3 Di II LD Aspherical [IF] Macro")); - choices.insert (p_t (256 * 7 + 241, "smc PENTAX-DA* 50-135mm f/2.8 ED [IF] SDM (SDM unused)")); - choices.insert (p_t (256 * 7 + 242, "smc PENTAX-DA* 16-50mm f/2.8 ED AL [IF] SDM (SDM unused)")); - choices.insert (p_t (256 * 7 + 243, "smc PENTAX-DA 70mm f/2.4 Limited")); - choices.insert (p_t (256 * 7 + 244, "smc PENTAX-DA 21mm f/3.2 AL Limited")); - choices.insert (p_t (256 * 8 + 0, "Sigma 50-150mm f/2.8 II APO EX DC HSM")); - choices.insert (p_t (256 * 8 + 3, "Sigma 18-125mm f/3.8-5.6 DC HSM")); - choices.insert (p_t (256 * 8 + 4, "Sigma 50mm f/1.4 EX DG HSM")); - choices.insert (p_t (256 * 8 + 6, "Sigma 4.5mm f/2.8 EX DC Fisheye")); - choices.insert (p_t (256 * 8 + 7, "Sigma 24-70mm f/2.8 IF EX DG HSM")); - choices.insert (p_t (256 * 8 + 8, "Sigma 18-250mm f/3.5-6.3 DC OS HSM")); - choices.insert (p_t (256 * 8 + 11, "Sigma 10-20mm f/3.5 EX DC HSM")); - choices.insert (p_t (256 * 8 + 12, "Sigma 70-300mm f/4-5.6 DG OS")); - choices.insert (p_t (256 * 8 + 13, "Sigma 120-400mm f/4.5-5.6 APO DG OS HSM")); - choices.insert (p_t (256 * 8 + 14, "Sigma 17-70mm f/2.8-4.0 DC Macro OS HSM")); - choices.insert (p_t (256 * 8 + 15, "Sigma 150-500mm f/5-6.3 APO DG OS HSM")); - choices.insert (p_t (256 * 8 + 16, "Sigma 70-200mm f/2.8 EX DG Macro HSM II")); - choices.insert (p_t (256 * 8 + 17, "Sigma 50-500mm f/4.5-6.3 DG OS HSM")); - choices.insert (p_t (256 * 8 + 18, "Sigma 8-16mm f/4.5-5.6 DC HSM")); - choices.insert (p_t (256 * 8 + 20, "Sigma 18-50mm f/2.8-4.5 DC HSM")); - choices.insert (p_t (256 * 8 + 21, "Sigma 17-50mm f/2.8 EX DC OS HSM")); - choices.insert (p_t (256 * 8 + 22, "Sigma 85mm f/1.4 EX DG HSM")); - choices.insert (p_t (256 * 8 + 23, "Sigma 70-200mm f/2.8 APO EX DG OS HSM")); - choices.insert (p_t (256 * 8 + 24, "Sigma 17-70mm f/2.8-4 DC Macro OS HSM")); - choices.insert (p_t (256 * 8 + 25, "Sigma 17-50mm f/2.8 EX DC HSM")); - choices.insert (p_t (256 * 8 + 27, "Sigma 18-200mm f/3.5-6.3 II DC HSM")); - choices.insert (p_t (256 * 8 + 28, "Sigma 18-250mm f/3.5-6.3 DC Macro HSM")); - choices.insert (p_t (256 * 8 + 29, "Sigma 35mm f/1.4 DG HSM")); - choices.insert (p_t (256 * 8 + 30, "Sigma 17-70mm f/2.8-4 DC Macro HSM | C")); - choices.insert (p_t (256 * 8 + 31, "Sigma 18-35mm f/1.8 DC HSM")); - choices.insert (p_t (256 * 8 + 32, "Sigma 30mm f/1.4 DC HSM | A")); - choices.insert (p_t (256 * 8 + 33, "Sigma 18-200mm f/3.5-6.3 DC Macro HSM")); - choices.insert (p_t (256 * 8 + 34, "Sigma 18-300mm f/3.5-6.3 DC Macro HSM")); - choices.insert (p_t (256 * 8 + 59, "HD PENTAX-D FA 150-450mm f/4.5-5.6 ED DC AW")); - choices.insert (p_t (256 * 8 + 60, "HD PENTAX-D FA* 70-200mm f/2.8 ED DC AW")); - choices.insert (p_t (256 * 8 + 61, "HD PENTAX-D FA 28-105mm f/3.5-5.6 ED DC WR")); - choices.insert (p_t (256 * 8 + 62, "HD PENTAX-D FA 24-70mm f/2.8 ED SDM WR")); - choices.insert (p_t (256 * 8 + 63, "HD PENTAX-D FA 15-30mm f/2.8 ED SDM WR")); - choices.insert (p_t (256 * 8 + 64, "HD PENTAX-D FA* 50mm f/1.4 SDM AW")); - choices.insert (p_t (256 * 8 + 65, "HD PENTAX-D FA 70-210mm f/4 ED SDM WR")); - choices.insert (p_t (256 * 8 + 66, "HD PENTAX-D FA 85mm f/1.4 ED SDM AW")); - choices.insert (p_t (256 * 8 + 67, "HD PENTAX-D FA 21mm f/2.4 ED Limited DC WR")); - choices.insert (p_t (256 * 8 + 195, "HD PENTAX DA* 16-50mm f/2.8 ED PLM AW")); - choices.insert (p_t (256 * 8 + 196, "HD PENTAX-DA* 11-18mm f/2.8 ED DC AW")); - choices.insert (p_t (256 * 8 + 197, "HD PENTAX-DA 55-300mm f/4.5-6.3 ED PLM WR RE")); - choices.insert (p_t (256 * 8 + 198, "smc PENTAX-DA L 18-50mm f/4-5.6 DC WR RE")); - choices.insert (p_t (256 * 8 + 199, "HD PENTAX-DA 18-50mm f/4-5.6 DC WR RE")); - choices.insert (p_t (256 * 8 + 200, "HD PENTAX-DA 16-85mm f/3.5-5.6 ED DC WR")); - choices.insert (p_t (256 * 8 + 209, "HD PENTAX-DA 20-40mm f/2.8-4 ED Limited DC WR")); - choices.insert (p_t (256 * 8 + 210, "smc PENTAX-DA 18-270mm f/3.5-6.3 ED SDM")); - choices.insert (p_t (256 * 8 + 211, "HD PENTAX-DA 560mm f/5.6 ED AW")); - choices.insert (p_t (256 * 8 + 215, "smc PENTAX-DA 18-135mm f/3.5-5.6 ED AL [IF] DC WR")); - choices.insert (p_t (256 * 8 + 226, "smc PENTAX-DA* 55mm f/1.4 SDM")); - choices.insert (p_t (256 * 8 + 227, "smc PENTAX-DA* 60-250mm f/4 [IF] SDM")); - choices.insert (p_t (256 * 8 + 232, "smc PENTAX-DA 17-70mm f/4 AL [IF] SDM")); - choices.insert (p_t (256 * 8 + 234, "smc PENTAX-DA* 300mm f/4 ED [IF] SDM")); - choices.insert (p_t (256 * 8 + 235, "smc PENTAX-DA* 200mm f/2.8 ED [IF] SDM")); - choices.insert (p_t (256 * 8 + 241, "smc PENTAX-DA* 50-135mm f/2.8 ED [IF] SDM")); - choices.insert (p_t (256 * 8 + 242, "smc PENTAX-DA* 16-50mm f/2.8 ED AL [IF] SDM")); - choices.insert (p_t (256 * 8 + 255, "Sigma Lens (8 255)")); - choices.insert (p_t (256 * 8 + 255, "Sigma 70-200mm f/2.8 EX DG Macro HSM II")); - choices.insert (p_t (256 * 8 + 255, "Sigma 150-500mm f/5-6.3 DG APO [OS] HSM")); - choices.insert (p_t (256 * 8 + 255, "Sigma 50-150mm f/2.8 II APO EX DC HSM")); - choices.insert (p_t (256 * 8 + 255, "Sigma 4.5mm f/2.8 EX DC HSM Circular Fisheye")); - choices.insert (p_t (256 * 8 + 255, "Sigma 50-200mm f/4-5.6 DC OS")); - choices.insert (p_t (256 * 8 + 255, "Sigma 24-70mm f/2.8 EX DG HSM")); - choices.insert (p_t (256 * 9 + 0, "645 Manual Lens")); - choices.insert (p_t (256 * 10 + 0, "645 A Series Lens")); - choices.insert (p_t (256 * 11 + 1, "smc PENTAX-FA 645 75mm f/2.8")); - choices.insert (p_t (256 * 11 + 2, "smc PENTAX-FA 645 45mm f/2.8")); - choices.insert (p_t (256 * 11 + 3, "smc PENTAX-FA* 645 300mm f/4 ED [IF]")); - choices.insert (p_t (256 * 11 + 4, "smc PENTAX-FA 645 45-85mm f/4.5")); - choices.insert (p_t (256 * 11 + 5, "smc PENTAX-FA 645 400mm f/5.6 ED [IF]")); - choices.insert (p_t (256 * 11 + 7, "smc PENTAX-FA 645 Macro 120mm f/4")); - choices.insert (p_t (256 * 11 + 8, "smc PENTAX-FA 645 80-160mm f/4.5")); - choices.insert (p_t (256 * 11 + 9, "smc PENTAX-FA 645 200mm f/4 [IF]")); - choices.insert (p_t (256 * 11 + 10, "smc PENTAX-FA 645 150mm f/2.8 [IF]")); - choices.insert (p_t (256 * 11 + 11, "smc PENTAX-FA 645 35mm f/3.5 AL [IF]")); - choices.insert (p_t (256 * 11 + 12, "smc PENTAX-FA 645 300mm f/5.6 ED [IF]")); - choices.insert (p_t (256 * 11 + 14, "smc PENTAX-FA 645 55-110mm f/5.6")); - choices.insert (p_t (256 * 11 + 16, "smc PENTAX-FA 645 33-55mm f/4.5 AL")); - choices.insert (p_t (256 * 11 + 17, "smc PENTAX-FA 645 150-300mm f/5.6 ED [IF]")); - choices.insert (p_t (256 * 11 + 21, "HD PENTAX-D FA 645 35mm f/3.5 AL [IF]")); - choices.insert (p_t (256 * 13 + 18, "smc PENTAX-D FA 645 55mm f/2.8 AL [IF] SDM AW")); - choices.insert (p_t (256 * 13 + 19, "smc PENTAX-D FA 645 25mm f/4 AL [IF] SDM AW")); - choices.insert (p_t (256 * 13 + 20, "HD PENTAX-D FA 645 90mm f/2.8 ED AW SR")); - choices.insert (p_t (256 * 13 + 253, "HD PENTAX-DA 645 28-45mm f/4.5 ED AW SR")); - choices.insert (p_t (256 * 13 + 254, "smc PENTAX-DA 645 25mm f/4 AL [IF] SDM AW")); - choices.insert (p_t (256 * 21 + 0, "Pentax Q Manual Lens")); - choices.insert (p_t (256 * 21 + 1, "01 Standard Prime 8.5mm f/1.9")); - choices.insert (p_t (256 * 21 + 2, "02 Standard Zoom 5-15mm f/2.8-4.5")); - choices.insert (p_t (256 * 21 + 6, "06 Telephoto Zoom 15-45mm f/2.8")); - choices.insert (p_t (256 * 21 + 7, "07 Mount Shield 11.5mm f/9")); - choices.insert (p_t (256 * 21 + 8, "08 Wide Zoom 3.8-5.9mm f/3.7-4")); - choices.insert (p_t (256 * 21 + 233, "Adapter Q for K-mount Lens")); - choices.insert (p_t (256 * 22 + 3, "03 Fish-eye 3.2mm f/5.6")); - choices.insert (p_t (256 * 22 + 4, "04 Toy Lens Wide 6.3mm f/7.1")); - choices.insert (p_t (256 * 22 + 5, "05 Toy Lens Telephoto 18mm f/8")); - choices.insert (p_t (256 * 31 + 1, "GR Lens")); - } - std::string toString (const Tag* t) const override - { - double *liArray = nullptr; - double maxApertureAtFocal = 0.; - double focalLength = 0.; - int lensID = 256 * t->toInt (0, BYTE) + t->toInt (1, BYTE); - TagDirectory *root = t->getParent()->getRoot(); - - if (root) { - - Tag *t1; - t1 = root->findTag ("FocalLength"); // Should get tag 0x920A (rational64u) from the standard Exif tag list - - if ( t1) { - focalLength = t1->toDouble(); // Focal Length - } - - t1 = root->findTag ("MaxAperture"); - - if (t1) { - double maxAperture = t1->toDouble(); // MaxApertureValue at focal Length - - if (maxAperture != 0.) { - maxApertureAtFocal = maxAperture; - } else { - t1 = root->findTag ("NominalMaxAperture"); - - if (t1) { - maxApertureAtFocal = t1->toDouble(); - } - } - } - - t1 = root->getTagP ("LensInfo"); - - if (t1) { - liArray = t1->toDoubleArray(); - } - - // Focal length below 10mm are set to 0 by the camera in the standard Exif tag, so we'll look into the makernotes - // This value will have decimals, which reflects more precision... or imprecision, due to the packed form of this value, who knows? - if (focalLength == 0.) { - rtexif::TagDirectory* mnote = root->findTag ("MakerNote")->getDirectory(); - rtexif::Tag* flt = mnote->getTagP ("LensInfo/FocalLength"); - - if (flt) { - focalLength = flt->toDouble (); - } else if ((flt = mnote->getTagP ("FocalLength"))) { - focalLength = flt->toDouble(); - } - } - } - - std::string retval = guess ( lensID, focalLength, maxApertureAtFocal, liArray); - - if (liArray) { - delete [] liArray; - } - - return retval; - } -}; -PALensTypeInterpreter paLensTypeInterpreter; - -class PASRResultInterpreter: public Interpreter -{ -public: - PASRResultInterpreter() { } - std::string toString (const Tag* t) const override - { - std::ostringstream str; - int b = t->toInt (0, BYTE); - - if (!b) { - str << "Not stabilized"; - } else if (b & 1) { - str << "Stabilized"; - } else if (b & 64) { - str << "Not Ready"; - } - - return str.str(); - } -}; -PASRResultInterpreter paSRResultInterpreter; - -class PAHighISONoiseInterpreter: public ChoiceInterpreter<> -{ -public: - // HighISONoiseReduction - PAHighISONoiseInterpreter() - { - choices[0] = "Off"; - choices[1] = "Weakest"; - choices[2] = "Weak"; - choices[3] = "Strong"; - choices[4] = "Medium"; - choices[255] = "Auto"; - } -}; -PAHighISONoiseInterpreter paHighISONoiseInterpreter; - -class PAMonochromeFilterEffectInterpreter: public ChoiceInterpreter<> -{ -public: - PAMonochromeFilterEffectInterpreter() - { - choices[1] = "Green"; - choices[2] = "Yellow"; - choices[3] = "Orange"; - choices[4] = "Red"; - choices[5] = "Magenta"; - choices[6] = "Blue"; - choices[7] = "Cyan"; - choices[8] = "Infrared"; - choices[65535] = "None"; - } -}; -PAMonochromeFilterEffectInterpreter paMonochromeFilterEffectInterpreter; - -class PAMonochromeToningInterpreter: public ChoiceInterpreter<> -{ -public: - PAMonochromeToningInterpreter() - { - choices[0] = "-4"; - choices[1] = "-3"; - choices[2] = "-2"; - choices[3] = "-1"; - choices[4] = "0"; - choices[5] = "1"; - choices[6] = "2"; - choices[7] = "3"; - choices[8] = "4"; - choices[65535] = "None"; - } -}; -PAMonochromeToningInterpreter paMonochromeToningInterpreter; - -class PAShadowCorrectionInterpreter: public ChoiceInterpreter<> -{ -public: - PAShadowCorrectionInterpreter() - { - choices[ 0 ] = "Off"; - choices[ 1 ] = "On"; - choices[ 2 ] = "Auto 2"; - choices[ 1 << 8 | 1 ] = "Weak"; - choices[ 1 << 8 | 2 ] = "Normal"; - choices[ 1 << 8 | 3 ] = "Strong"; - choices[ 2 << 8 | 4 ] = "Auto"; - } - - std::string toString (const Tag* t) const override - { - int idx = 0; - - if (t->getCount() == 1) { - idx = t->toInt (0, BYTE); - } else if (t->getCount() == 2) { - idx = t->toInt (0, BYTE) << 8 | t->toInt (1, BYTE); - } - - const ChoicesIterator r = choices.find (idx); - std::ostringstream s; - s << ((r != choices.end()) ? r->second : "n/a"); - return s.str(); - } -}; -PAShadowCorrectionInterpreter paShadowCorrectionInterpreter; - -class PAISOAutoParametersInterpreter: public ChoiceInterpreter<> -{ -public: - PAISOAutoParametersInterpreter() - { - choices[1] = "Slow"; - choices[2] = "Standard"; - choices[3] = "Fast"; - } - std::string toString (const Tag* t) const override - { - const ChoicesIterator r = choices.find (t->toInt (0, BYTE)); - std::ostringstream s; - s << ((r != choices.end()) ? r->second : "n/a"); - return s.str(); - } -}; -PAISOAutoParametersInterpreter paISOAutoParametersInterpreter; - -class PABleachBypassToningInterpreter: public ChoiceInterpreter<> -{ -public: - PABleachBypassToningInterpreter() - { - choices[1] = "Green"; - choices[2] = "Yellow"; - choices[3] = "Orange"; - choices[4] = "Red"; - choices[5] = "Magenta"; - choices[6] = "Purple"; - choices[7] = "Blue"; - choices[8] = "Cyan"; - choices[65535] = "Off"; - } -}; -PABleachBypassToningInterpreter paBleachBypassToningInterpreter; - -class PABlurControlInterpreter: public ChoiceInterpreter<> -{ -public: - PABlurControlInterpreter() - { - choices[0] = "Off"; - choices[1] = "Low"; - choices[2] = "Medium"; - choices[3] = "High"; - } - std::string toString (const Tag* t) const override - { - const ChoicesIterator r = choices.find (t->toInt (0, BYTE)); - std::ostringstream s; - s << ((r != choices.end()) ? r->second : "n/a"); - return s.str(); - } -}; -PABlurControlInterpreter paBlurControlInterpreter; - -class PAHDRInterpreter: public ChoiceInterpreter<> -{ - std::map choices1; - std::map choices2; -public: - PAHDRInterpreter() - { - choices[0] = "Off"; - choices[1] = "HDR Auto"; - choices[2] = "HDR 1"; - choices[3] = "HDR 2"; - choices[4] = "HDR 3"; - choices[5] = "Advanced"; - - choices1[0] = "Auto-align Off"; - choices1[1] = "Auto-align On"; - - choices2[0] = "n/a"; - choices2[4] = "1 EV"; - choices2[8] = "2 EV"; - choices2[12] = "3 EV"; - } - std::string toString (const Tag* t) const override - { - const ChoicesIterator r = choices.find (t->toInt (0, BYTE)); - std::map::const_iterator r1 = choices1.find (t->toInt (1, BYTE)); - std::map::const_iterator r2 = choices2.find (t->toInt (2, BYTE)); - std::ostringstream s; - s << ((r != choices.end() ) ? r->second : "") << std::endl; - s << ((r1 != choices1.end()) ? r1->second : "") << std::endl; - s << ((r2 != choices2.end()) ? r2->second : ""); - return s.str(); - } -}; -PAHDRInterpreter paHDRInterpreter; - -class PACrossProcessInterpreter: public ChoiceInterpreter<> -{ -public: - PACrossProcessInterpreter() - { - choices[ 0] = "Off"; - choices[ 1] = "Randow"; - choices[ 2] = "Preset 1"; - choices[ 3] = "Preset 2"; - choices[ 4] = "Preset 3"; - choices[33] = "Favorite 1"; - choices[34] = "Favorite 2"; - choices[35] = "Favorite 3"; - } -}; -PACrossProcessInterpreter paCrossProcessInterpreter; - -class PAPowerSourceInterpreter: public ChoiceInterpreter<> -{ -public: - PAPowerSourceInterpreter() - { - choices[2] = "Body Battery"; - choices[3] = "Grip Battery "; - choices[4] = "External Power Supply"; - } -}; -PAPowerSourceInterpreter paPowerSourceInterpreter; - -class PALensModelQInterpreter: public Interpreter -{ -public: - PALensModelQInterpreter() {} - std::string toString (const Tag* t) const override - { - char buffer[31]; - buffer[0] = 0; // - return buffer; // TODO: how to get the string content!? - -// // normal path below (copy the content of the string), but has to be bug fixed -// memcpy (buffer, t->getValue(), 30); -// buffer[30] = 0; -// return buffer; - } -}; -PALensModelQInterpreter paLensModelQInterpreter; - -class PALensInfoQInterpreter: public Interpreter -{ -public: - PALensInfoQInterpreter() {} - std::string toString (const Tag* t) const override - { - char buffer[21]; - buffer[0] = 0; - return buffer; // TODO: how to get the string content!? - -// // normal path below (copy the content of the string), but has to be bug fixed -// memcpy (buffer, t->getValue(), 20); -// buffer[20] = 0; -// return buffer; - } -}; -PALensInfoQInterpreter paLensInfoQInterpreter; - -class PAFlashExposureCompInterpreter: public Interpreter -{ -public: - PAFlashExposureCompInterpreter() {} - std::string toString (const Tag* t) const override - { - int a; - - if (t->getCount() == 1) { - a = t->toInt (0, SLONG) / 256; // int32u - } else { - a = t->toInt (0, SBYTE) / 6; // int8u[2] - } - - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%d", a ); - return buffer; - } - double toDouble (const Tag* t, int ofs) override - { - int a; - - if (t->getCount() == 1) { - a = t->toInt (0, SLONG) / 256; // int32u - } else { - a = t->toInt (0, SBYTE) / 6; // int8u[2] - } - - return double (a); - } -}; -PAFlashExposureCompInterpreter paFlashExposureCompInterpreter; - -class PAFocalLengthInterpreter: public Interpreter -{ -public: - PAFocalLengthInterpreter() {} - std::string toString (const Tag* t) const override - { - double a = double (t->toInt (0, LONG)); - - if (a > 1.) { - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%.2f", a / 100. ); - return buffer; - } else { - return "n/a"; - } - } - double toDouble (const Tag* t, int ofs) override - { - double a = double (t->toInt (0, LONG)); - - if (a > 1.) { - return a / 100.; - } else { - return 0.; - } - } -}; -PAFocalLengthInterpreter paFocalLengthInterpreter; - -class PALensDataFocalLengthInterpreter: public Interpreter -{ -public: - PALensDataFocalLengthInterpreter() {} - std::string toString (const Tag* t) const override - { - int a = t->toInt (0, BYTE); - double b = static_cast(10 * (a >> 2)) * std::pow(4.0, static_cast((a & 0x03) - 2)); - - if (b > 1.0) { - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%.2f", b ); - return buffer; - } else { - return "n/a"; - } - } - double toDouble (const Tag* t, int ofs) override - { - int a = t->toInt (ofs, BYTE); - double b = static_cast(10 * (a >> 2)) * std::pow(4.0, static_cast((a & 0x03) - 2)); - - if (b > 1.0) { - return b; - } else { - return 0.; - } - } -}; -PALensDataFocalLengthInterpreter paLensDataFocalLengthInterpreter; - -class PAISOfInterpreter: public Interpreter -{ -public: - PAISOfInterpreter() {} - std::string toString (const Tag* t) const override - { - int a = t->toInt (0, BYTE); - char buffer[32]; - double v = 100.*exp (double (a - 32) * log (2.) / 8.); - snprintf(buffer, sizeof(buffer), "%.1f", v ); - return buffer; - } - double toDouble (const Tag* t, int ofs) override - { - int a = t->toInt (0, BYTE); - return 100.*exp (double (a - 32) * log (2.) / 8.); - } -}; -PAISOfInterpreter paISOfInterpreter; - -class PAMaxApertureInterpreter: public Interpreter -{ -public: - PAMaxApertureInterpreter() {} - std::string toString (const Tag* t) const override - { - int a = t->toInt (0, BYTE); - a &= 0x7F; - - if (a > 1) { - char buffer[32]; - double v = pow (2.0, (a - 1) / 32.0); - - if ( v < 0. || v > 1000. ) { - return "undef"; - } - - snprintf(buffer, sizeof(buffer), "%.1f", v ); - return buffer; - } else { - return "n/a"; - } - } - double toDouble (const Tag* t, int ofs) override - { - int a = t->toInt (0, BYTE); - a &= 0x7F; - - if (a > 1) { - return pow (2.0, double (a - 1) / 32.0); - } else { - return 0.; - } - } -}; -PAMaxApertureInterpreter paMaxApertureInterpreter; - -class PAAEXvInterpreter: public Interpreter -{ -public: - PAAEXvInterpreter() {} - std::string toString (const Tag* t) const override - { - int a = t->toInt (0, BYTE); - char buffer[32]; - double v = double (a - 64) / 8.; - snprintf(buffer, sizeof(buffer), "%.1f", v ); - return buffer; - } - double toDouble (const Tag* t, int ofs) override - { - int a = t->toInt (0, BYTE); - return double (a - 64) / 8.; - } -}; -PAAEXvInterpreter paAEXvInterpreter; - -class PAAEBXvInterpreter: public Interpreter -{ -public: - PAAEBXvInterpreter() {} - std::string toString (const Tag* t) const override - { - int a = t->toInt (0, SBYTE); - char buffer[32]; - double v = double (a) / 8.; - snprintf(buffer, sizeof(buffer), "%.1f", v ); - return buffer; - } - double toDouble (const Tag* t, int ofs) override - { - int a = t->toInt (0, SBYTE); - return double (a) / 8.; - } -}; -PAAEBXvInterpreter paAEBXvInterpreter; - -class PAApertureInterpreter: public Interpreter -{ -public: - PAApertureInterpreter() {} - std::string toString (const Tag* t) const override - { - int a = t->toInt (0, BYTE); - char buffer[32]; - double v = exp ((double (a) - 68.) * log (2.) / 16.); - snprintf(buffer, sizeof(buffer), "%.1f", v ); - return buffer; - } - double toDouble (const Tag* t, int ofs) override - { - int a = t->toInt (0, BYTE); - return exp ((double (a) - 68.) * log (2.) / 16.); - } -}; -PAApertureInterpreter paApertureInterpreter; - -class PAExposureTimeInterpreter: public Interpreter -{ -public: - PAExposureTimeInterpreter() {} - std::string toString (const Tag* t) const override - { - int a = t->toInt (0, BYTE); - char buffer[32]; - double v = 24.*exp (- (double (a) - 32.) * log (2.) / 8.); - snprintf(buffer, sizeof(buffer), "%.6f", v ); - return buffer; - } - double toDouble (const Tag* t, int ofs) override - { - int a = t->toInt (0, BYTE); - return 24.*exp (- (double (a) - 32.) * log (2.) / 8.); - } -}; -PAExposureTimeInterpreter paExposureTimeInterpreter; - -class PANominalMinApertureInterpreter: public Interpreter -{ -public: - PANominalMinApertureInterpreter() {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - int a = t->toInt (0, BYTE); - int mina = a & 0x0F; - snprintf(buffer, sizeof(buffer), "%.1f", double (int (pow (2.0, double (mina + 10) / 4.0) + 0.2))); - return buffer; - } - double toDouble (const Tag* t, int ofs) override - { - int a = t->toInt (0, BYTE) & 0x0F; - return double (int (pow (2.0, double (a + 10) / 4.0) + 0.2)); - } -}; -PANominalMinApertureInterpreter paNominalMinApertureInterpreter; - -class PANominalMaxApertureInterpreter: public Interpreter -{ -public: - PANominalMaxApertureInterpreter() {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - int a = t->toInt (0, BYTE); - int maxa = (a & 0xF0) >> 4; - snprintf(buffer, sizeof(buffer), "%.1f", double (int (pow (2.0, double (maxa) / 4.0) + 0.2)) ); - return buffer; - } - double toDouble (const Tag* t, int ofs) override - { - int a = ( t->toInt (0, BYTE) & 0xF0) >> 4; - return double (int (pow (2.0, double (a) / 4.0) + 0.2)); - } -}; -PANominalMaxApertureInterpreter paNominalMaxApertureInterpreter; - -class PAFlashStatusInterpreter: public ChoiceInterpreter<> -{ -public: - PAFlashStatusInterpreter() - { - choices[0] = "Off"; - choices[1] = "Off (1)"; - choices[2] = "External, Did not fire"; - choices[6] = "External, Fired"; - choices[8] = "Internal, Did not fire (0x08)"; - choices[9] = "Internal, Did not fire"; - choices[13] = "Internal, Fired"; - } -}; -PAFlashStatusInterpreter paFlashStatusInterpreter; - -class PAInternalFlashModeInterpreter: public ChoiceInterpreter<> -{ -public: - PAInternalFlashModeInterpreter() - { - choices[0] = "n/a - Off-Auto-Aperture"; - choices[134] = "Fired, Wireless (Control)"; - choices[149] = "Fired, Wireless (Master)"; - choices[192] = "Fired"; - choices[193] = "Fired, Red-eye reduction"; - choices[194] = "Fired, Auto"; - choices[195] = "Fired, Auto, Red-eye reduction"; - choices[198] = "Fired, Wireless (Control), Fired normally not as control"; - choices[200] = "Fired, Slow-sync"; - choices[201] = "Fired, Slow-sync, Red-eye reduction"; - choices[202] = "Fired, Trailing-curtain Sync"; - choices[240] = "Did not fire, Normal"; - choices[241] = "Did not fire, Red-eye reduction"; - choices[242] = "Did not fire, Auto"; - choices[243] = "Did not fire, Auto, Red-eye reduction"; - choices[244] = "Did not fire, (Unknown 0xf4)"; - choices[245] = "Did not fire, Wireless (Master)"; - choices[246] = "Did not fire, Wireless (Control)"; - choices[248] = "Did not fire, Slow-sync"; - choices[249] = "Did not fire, Slow-sync, Red-eye reduction"; - choices[250] = "Did not fire, Trailing-curtain Sync"; - } -}; -PAInternalFlashModeInterpreter paInternalFlashModeInterpreter; - -class PAExternalFlashModeInterpreter: public ChoiceInterpreter<> -{ -public: - PAExternalFlashModeInterpreter() - { - choices[0] = "n/a - Off-Auto-Aperture"; - choices[63] = "Off"; - choices[64] = "On, Auto"; - choices[191] = "On, Flash Problem"; - choices[192] = "On, Manual"; - choices[196] = "On, P-TTL Auto"; - choices[197] = "On, Contrast-control Sync"; - choices[198] = "On, High-speed Sync"; - choices[204] = "On, Wireless"; - choices[205] = "On, Wireless, High-speed Sync"; - choices[240] = "Not Connected"; - } -}; -PAExternalFlashModeInterpreter paExternalFlashModeInterpreter; - -class PAExternalFlashExposureCompInterpreter: public ChoiceInterpreter<> -{ -public: - PAExternalFlashExposureCompInterpreter() - { - choices[0] = "n/a"; - choices[144] = "n/a (Manual Mode)"; - choices[164] = "-3.0"; - choices[167] = "-2.5"; - choices[168] = "-2.0"; - choices[171] = "-1.5"; - choices[172] = "-1.0"; - choices[175] = "-0.5"; - choices[176] = "0.0"; - choices[179] = "0.5"; - choices[180] = "1.0"; - } -}; -PAExternalFlashExposureCompInterpreter paExternalFlashExposureCompInterpreter; - -class PAExternalFlashBounceInterpreter: public ChoiceInterpreter<> -{ -public: - PAExternalFlashBounceInterpreter() - { - choices[0] = "n/a"; - choices[16] = "Direct"; - choices[48] = "Bonce"; - } -}; -PAExternalFlashBounceInterpreter paExternalFlashBounceInterpreter; - -class PAExternalFlashGNInterpreter: public Interpreter -{ -public: - PAExternalFlashGNInterpreter() {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - int b = t->toInt (0, BYTE) & 0x1F; - snprintf(buffer, sizeof(buffer), "%.0f", pow (2., b / 16. + 4) ); - return buffer; - } -}; -PAExternalFlashGNInterpreter paExternalFlashGNInterpreter; - -class PAEVStepsInterpreter: public Interpreter -{ -public: - PAEVStepsInterpreter() {} - std::string toString (const Tag* t) const override - { - std::ostringstream str; - - if ( t->toInt (0, BYTE) & 0x20 ) { - str << "1/3 EV steps"; - } else { - str << "1/2 EV steps"; - } - - return str.str(); - } -}; -PAEVStepsInterpreter paEVStepsInterpreter; - -class PAEDialinInterpreter: public Interpreter -{ -public: - PAEDialinInterpreter() {} - std::string toString (const Tag* t) const override - { - std::ostringstream str; - - if ( t->toInt (0, BYTE) & 0x40 ) { - str << "P Shift"; - } else { - str << "Tv or Av"; - } - - return str.str(); - } -}; -PAEDialinInterpreter paEDialinInterpreter; - -class PAApertureRingUseInterpreter: public Interpreter -{ -public: - PAApertureRingUseInterpreter() {} - std::string toString (const Tag* t) const override - { - std::ostringstream str; - - if ( t->toInt (0, BYTE) & 0x80 ) { - str << "Permitted"; - } else { - str << "Prohibited"; - } - - return str.str(); - } -}; -PAApertureRingUseInterpreter paApertureRingUseInterpreter; - -class PAFlashOptionInterpreter: public ChoiceInterpreter<> -{ -public: - PAFlashOptionInterpreter() - { - choices[0] = "Normal"; - choices[1] = "Red-eye reduction"; - choices[2] = "Auto"; - choices[3] = "Auto, Red-eye reduction"; - choices[5] = "Wireless (Master)"; - choices[6] = "Wireless (Control)"; - choices[8] = "Slow-sync"; - choices[9] = "Slow-sync, Red-eye reduction"; - choices[10] = "Trailing-curtain Sync"; - } - std::string toString (const Tag* t) const override - { - const ChoicesIterator r = choices.find (t->toInt (0, BYTE) >> 4); - - if (r != choices.end()) { - return r->second; - } else { - char buffer[1024]; - t->toString (buffer, sizeof(buffer)); - return std::string (buffer); - } - } -}; -PAFlashOptionInterpreter paFlashOptionInterpreter; - -class PAMeteringMode2Interpreter: public Interpreter -{ -public: - PAMeteringMode2Interpreter() {} - std::string toString (const Tag* t) const override - { - std::ostringstream str; - int v = (t->toInt (0, BYTE) & 0xF); - - if (!v) { - str << "Multi-segment"; - } else if (v & 1) { - str << "Center-weighted average"; - } else if (v & 2) { - str << "Spot"; - } - - return str.str(); - } -}; -PAMeteringMode2Interpreter paMeteringMode2Interpreter; - -class PAExposureBracketStepSizeInterpreter: public ChoiceInterpreter<> -{ -public: - PAExposureBracketStepSizeInterpreter() - { - choices[3] = "0.3"; - choices[4] = "0.5"; - choices[5] = "0.7"; - choices[8] = "1.0"; - choices[11] = "1.3"; - choices[12] = "1.5"; - choices[13] = "1.7"; - choices[16] = "2.0"; - } -}; -PAExposureBracketStepSizeInterpreter paExposureBracketStepSizeInterpreter; - -class PAPictureMode2Interpreter: public ChoiceInterpreter<> -{ -public: - PAPictureMode2Interpreter() - { - choices[0] = "Scene Mode"; - choices[1] = "Auto PICT"; - choices[2] = "Program AE"; - choices[3] = "Green Mode"; - choices[4] = "Shutter Speed Priority"; - choices[5] = "Aperture Priority"; - choices[6] = "Program Tv Shift"; - choices[7] = "Program Av Shift"; - choices[8] = "Manual"; - choices[9] = "Bulb"; - choices[10] = "Aperture Priority, Off-Auto-Aperture"; - choices[11] = "Manual, Off-Auto-Aperture"; - choices[12] = "Bulb, Off-Auto-Aperture"; - choices[13] = "Shutter & Aperture Priority AE"; - choices[15] = "Sensitivity Priority AE"; - choices[16] = "Flash X-Sync Speed AE"; - } -}; -PAPictureMode2Interpreter paPictureMode2Interpreter; - -class PAProgramLineInterpreter: public Interpreter -{ -public: - PAProgramLineInterpreter() {} - std::string toString (const Tag* t) const override - { - std::ostringstream str; - int c = t->toInt (0, BYTE); - - switch (c & 0xf) { - case 0: - str << "Manual"; - break; - - case 1: - str << "AF-S"; - break; - - case 2: - str << "AF-C"; - break; - - case 3: - str << "AF-A"; - break; - } - - if ( (c & 0xF0) == 0) { - str << ", Point Selection Auto"; - } else if ( c & 0x20 ) { - str << ", Fixed Center Point Selected"; - } else if ( c & 0x10 ) { - str << ", Point Selected"; - } - - return str.str(); - } -}; -PAProgramLineInterpreter paProgramLineInterpreter; - -class PAAFModeInterpreter: public Interpreter -{ -public: - PAAFModeInterpreter() {} - std::string toString (const Tag* t) const override - { - switch (t->toInt (0, BYTE) & 0x3) { - case 0: - return "Normal"; - - case 1: - return "Hi Speed"; - - case 2: - return "Depth"; - - case 3: - return "MTF"; - } - - return"Normal"; - } - -}; -PAAFModeInterpreter paAFModeInterpreter; - -class PAAFPointSelectedInterpreter: public Interpreter -{ -public: - PAAFPointSelectedInterpreter() {} - std::string toString (const Tag* t) const override - { - int c = t->toInt (0, SHORT); - - if ( !c ) { - return "Auto"; - } else { - const char *ps[] = {"Upper-left", "Top", "Upper-right", "Left", "Mid-left", "Center", "Mid-right", "Right", "Lower-left", "Bottom", "Lower-right"}; - - for ( int iBit = 0; iBit < 11; iBit++) - if ( c & (1 << iBit) ) { - return ps[iBit]; - } - - return "n/a"; - } - } -}; -PAAFPointSelectedInterpreter paAFPointSelectedInterpreter; - -class PADriveMode2Interpreter: public Interpreter -{ -public: - PADriveMode2Interpreter() {} - std::string toString (const Tag* t) const override - { - int c = t->toInt (0, BYTE); - - if ( !c ) { - return "Single-frame"; - } else if ( c & 0x01) { - return "Continuous"; - } else if ( c & 0x02) { - return "Continuous (Lo)"; - } else if ( c & 0x04) { - return "Self-timer (12 s)"; - } else if ( c & 0x08) { - return "Self-timer (2 s)"; - } else if ( c & 0x10 ) { - return "Remote Control (3 s delay)"; - } else if ( c & 0x20) { - return "Remote Control"; - } else if ( c & 0x40) { - return "Exposure Bracket"; - } else if ( c & 0x80) { - return "Multiple Exposure"; - } else { - return "Unknown"; - } - } -}; -PADriveMode2Interpreter paDriveMode2Interpreter; - -const TagAttrib pentaxAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "PentaxVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0001, AUTO, "PentaxModelType", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0002, AUTO, "PreviewImageSize", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0003, AUTO, "PreviewImageLength", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0004, AUTO, "PreviewImageStart", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0005, AUTO, "PentaxModelID", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0006, AUTO, "Date", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0007, AUTO, "Time", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0008, AUTO, "Quality", &paQualityInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0009, AUTO, "PentaxImageSize", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000b, AUTO, "PictureMode", &paPictureModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000c, AUTO, "FlashMode", &paFlashModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000d, AUTO, "FocusMode", &paFocusModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000e, AUTO, "AFPointSelected", &paAFPointInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000f, AUTO, "AFPointsInFocus", &paAFFocusInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0010, AUTO, "FocusPosition", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0012, AUTO, "ExposureTime", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0013, AUTO, "FNumber", &paFNumberInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0014, AUTO, "ISO", &paISOInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0015, AUTO, "LightReading", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0016, AUTO, "ExposureCompensation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0017, AUTO, "MeteringMode", &paMeteringModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0018, AUTO, "AutoBracketing", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0019, AUTO, "WhiteBalance", &paWhiteBalanceInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001a, AUTO, "WhiteBalanceMode", &paWhiteBalanceModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001b, AUTO, "BlueBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001c, AUTO, "RedBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001d, AUTO, "FocalLength", &paFocalLengthInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001e, AUTO, "DigitalZoom", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001f, AUTO, "Saturation", &paSaturationInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0020, AUTO, "Contrast", &paContrastInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0021, AUTO, "Sharpness", &paSharpnessInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0022, AUTO, "WorldTimeLocation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0023, AUTO, "HometownCity", &stdInterpreter}, - {0, AC_NEW, 0, nullptr, 0x0024, AUTO, "DestinationCity", &stdInterpreter}, - {0, AC_NEW, 0, nullptr, 0x0025, AUTO, "HometownDST", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0026, AUTO, "DestinationDST", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0027, AUTO, "DSPFirmwareVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0028, AUTO, "CPUFirmwareVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0029, AUTO, "FrameNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x002d, AUTO, "EffectiveLV", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0032, AUTO, "ImageProcessing", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0033, AUTO, "PictureMode", &paPictureModeInterpreter2}, - {0, AC_WRITE, 0, nullptr, 0x0034, AUTO, "DriveMode", &paDriveModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0037, AUTO, "ColorSpace", &paColorSpaceInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0038, AUTO, "ImageAreaOffset", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0039, AUTO, "RawImageSize", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x003c, AUTO, "AFPointsInFocus", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x003e, AUTO, "PreviewImageBorders", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x003f, AUTO, "LensType", &paLensTypeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0040, AUTO, "SensitivityAdjust", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0041, AUTO, "ImageProcessingCount", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0047, AUTO, "CameraTemperature", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0048, AUTO, "AELock", &paOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0049, AUTO, "NoiseReduction", &paOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x004d, AUTO, "FlashExposureComp", &paFlashExposureCompInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x004f, AUTO, "ImageTone", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0050, AUTO, "ColorTemperature", &stdInterpreter}, - {0, AC_WRITE, 0, pentaxSRInfoAttribs, 0x005c, AUTO, "ShakeReductionInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x005d, AUTO, "ShutterCount", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0069, AUTO, "DynamicRangeExpansion", &paOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0071, AUTO, "HighISONoiseReduction", &paHighISONoiseInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0072, AUTO, "AFAdjustment", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0073, AUTO, "MonochromeFilterEffect", &paMonochromeFilterEffectInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0074, AUTO, "MonochromeToning", &paMonochromeToningInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0076, AUTO, "FaceDetect", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0077, AUTO, "FaceDetectFrameSize", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0079, AUTO, "ShadowCorrection", &paShadowCorrectionInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x007a, AUTO, "ISOAutoParameters", &paISOAutoParametersInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x007b, AUTO, "CrossProcess", &paCrossProcessInterpreter}, - {0, AC_WRITE, 0, pentaxLensCorrAttribs, 0x007d, AUTO, "LensCorr", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x007f, AUTO, "BleachBypassToning", &paBleachBypassToningInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0082, AUTO, "BlurControl", &paBlurControlInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0085, AUTO, "HDR", &paHDRInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0088, AUTO, "NeutralDensityFilter", &paOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x008b, AUTO, "ISO", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0200, AUTO, "BlackPoint", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0201, AUTO, "WhitePoint", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0203, AUTO, "ColorMatrixA", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0204, AUTO, "ColorMatrixB", &stdInterpreter}, - {0, AC_WRITE, 0, pentaxCameraSettingsAttribs, 0x0205, AUTO, "CameraSettings", &stdInterpreter}, - {0, AC_WRITE, 0, pentaxAEInfoAttribs, 0x0206, AUTO, "AEInfo", &stdInterpreter}, - {0, AC_WRITE, 0, pentaxLensDataAttribs, 0x0207, AUTO, "LensInfo", &stdInterpreter}, - {0, AC_WRITE, 0, pentaxFlashInfoAttribs, 0x0208, AUTO, "FlashInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0209, AUTO, "AEMeteringSegments", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x020a, AUTO, "FlashADump", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x020b, AUTO, "FlashBDump", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x020d, AUTO, "WB_RGGBLevelsDaylight", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x020e, AUTO, "WB_RGGBLevelsShade", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x020f, AUTO, "WB_RGGBLevelsCloudy", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0210, AUTO, "WB_RGGBLevelsTungsten", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0211, AUTO, "WB_RGGBLevelsFluorescentD", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0212, AUTO, "WB_RGGBLevelsFluorescentN", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0213, AUTO, "WB_RGGBLevelsFluorescentW", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0214, AUTO, "WB_RGGBLevelsFlash", &stdInterpreter}, - {0, AC_WRITE, 0, pentaxCameraInfoAttribs, 0x0215, AUTO, "CameraInfo", &stdInterpreter}, - {0, AC_WRITE, 0, pentaxBatteryInfoAttribs, 0x0216, AUTO, "BatteryInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x021f, AUTO, "AFInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0222, AUTO, "ColorInfo", &stdInterpreter}, - {0, AC_WRITE, 0, pentaxLensInfoQAttribs, 0x0239, AUTO, "LensInfoQ", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x03fe, AUTO, "DataDump", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x03ff, AUTO, "UnknownInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0402, AUTO, "ToneCurve", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0403, AUTO, "ToneCurves", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0e00, AUTO, "PrintIM", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib pentaxSRInfoAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0, AUTO, "SRResult", &paSRResultInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "ShakeReduction", &paShakeReductionInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "SRHalfPressTime", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 3, AUTO, "SRFocalLength", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib pentaxSRInfo2Attribs[] = { - {0, AC_WRITE, 0, nullptr, 0, AUTO, "SRResult", &paSRResultInterpreter}, // assuming it's the same interpreter, but that's not sure - {0, AC_WRITE, 0, nullptr, 1, AUTO, "ShakeReduction", &paShakeReduction2Interpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib pentaxLensDataAttribs[] = { - {0, AC_WRITE, 0, nullptr, 9, AUTO, "FocalLength", &paLensDataFocalLengthInterpreter}, - {0, AC_WRITE, 0, nullptr, 10, AUTO, "NominalMaxAperture", &paNominalMaxApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 10, AUTO, "NominalMinAperture", &paNominalMinApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 14, AUTO, "MaxAperture", &paMaxApertureInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib pentaxLensInfoQAttribs[] = { - {0, AC_WRITE, 0, nullptr, 12, AUTO, "LensModel", &paLensModelQInterpreter}, - {0, AC_WRITE, 0, nullptr, 42, AUTO, "LensInfo", &paLensInfoQInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib pentaxLensCorrAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0, AUTO, "DistortionCorrection", &paOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "ChromaticAberrationCorrection", &paOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "VignettingCorrection", &paOnOffInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib pentaxCameraSettingsAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0, AUTO, "PictureMode2", &paPictureMode2Interpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "ProgramLine", &paProgramLineInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "EVSteps", &paEVStepsInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "E-DialinProgram", &paEDialinInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "ApertureRing", &paApertureRingUseInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "FlashOptions", &paFlashOptionInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "MeteringMode2", &paMeteringMode2Interpreter}, - {0, AC_WRITE, 0, nullptr, 3, AUTO, "AFMode", &paAFModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 4, AUTO, "AFPointSelected2", &paAFPointSelectedInterpreter}, - {0, AC_WRITE, 0, nullptr, 7, AUTO, "DriveMode2", &paDriveMode2Interpreter}, - {0, AC_WRITE, 0, nullptr, 8, AUTO, "ExposureBracketStepSize", &paExposureBracketStepSizeInterpreter}, - {0, AC_WRITE, 0, nullptr, 9, AUTO, "BracketShotNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 10, AUTO, "WhiteBalanceSet", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib pentaxAEInfoAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0, AUTO, "AEExposureTime", &paExposureTimeInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "AEAperture", &paApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "AE_ISO", &paISOfInterpreter}, - {0, AC_WRITE, 0, nullptr, 3, AUTO, "AEXv", &paAEXvInterpreter}, - {0, AC_WRITE, 0, nullptr, 4, SBYTE, "AEBXv", &paAEBXvInterpreter}, - {0, AC_WRITE, 0, nullptr, 5, AUTO, "AEMinExposureTime", &paExposureTimeInterpreter}, - {0, AC_WRITE, 0, nullptr, 6, AUTO, "AEProgramMode", &paAEProgramModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 9, AUTO, "AEMaxAperture", &paApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 10, AUTO, "AEMaxAperture2", &paApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 11, AUTO, "AEMinAperture", &paApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 12, AUTO, "AEMeteringMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 14, SBYTE, "FlashExposureCompSet", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib pentaxAEInfo2Attribs[] = { - {0, AC_WRITE, 0, nullptr, 2, AUTO, "AEExposureTime", &paExposureTimeInterpreter}, - {0, AC_WRITE, 0, nullptr, 3, AUTO, "AEAperture", &paApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 4, AUTO, "AE_ISO", &paISOfInterpreter}, - {0, AC_WRITE, 0, nullptr, 5, AUTO, "AEXv", &paAEXvInterpreter}, - {0, AC_WRITE, 0, nullptr, 6, SBYTE, "AEBXv", &paAEBXvInterpreter}, - {0, AC_WRITE, 0, nullptr, 8, SBYTE, "AEError", &stdInterpreter}, -//{0, AC_WRITE, 0, 0, 11, AUTO, "AEApertureSteps", &}, - {0, AC_WRITE, 0, nullptr, 15, AUTO, "SceneMode", &paSceneModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 16, AUTO, "AEMaxAperture", &paApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 17, AUTO, "AEMaxAperture2", &paApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 18, AUTO, "AEMinAperture", &paApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 19, AUTO, "AEMinExposureTime", &paExposureTimeInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib pentaxAEInfo3Attribs[] = { - {0, AC_WRITE, 0, nullptr, 16, AUTO, "AEExposureTime", &paExposureTimeInterpreter}, - {0, AC_WRITE, 0, nullptr, 17, AUTO, "AEAperture", &paApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 18, AUTO, "AE_ISO", &paISOfInterpreter}, - {0, AC_WRITE, 0, nullptr, 28, AUTO, "AEMaxAperture", &paApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 29, AUTO, "AEMaxAperture2", &paApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 30, AUTO, "AEMinAperture", &paApertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 31, AUTO, "AEMinExposureTime", &paExposureTimeInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib pentaxFlashInfoAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0, AUTO, "FlashStatus", &paFlashStatusInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "InternalFlashMode", &paInternalFlashModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "ExternalFlashMode", &paExternalFlashModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 3, AUTO, "InternalFlashStrength", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 24, AUTO, "ExternalFlashGuideNumber", &paExternalFlashGNInterpreter}, - {0, AC_WRITE, 0, nullptr, 25, AUTO, "ExternalFlashExposureComp", &paExternalFlashExposureCompInterpreter}, - {0, AC_WRITE, 0, nullptr, 26, AUTO, "ExternalFlashBounce", &paExternalFlashBounceInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib pentaxBatteryInfoAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0, AUTO, "PowerSource", &paPowerSourceInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "BatteryStates", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "BatteryADBodyNoLoad", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 3, AUTO, "BatteryADBodyLoad", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 4, AUTO, "BatteryADGripNoLoad", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 5, AUTO, "BatteryADGripLoad", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib pentaxCameraInfoAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0, AUTO, "PentaxModelID", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "ManufactureDate", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "ProductionCode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 4, AUTO, "InternalSerialNumber", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -} - - - - diff --git a/rtexif/rtexif.cc b/rtexif/rtexif.cc deleted file mode 100644 index 68a290eb6..000000000 --- a/rtexif/rtexif.cc +++ /dev/null @@ -1,3557 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * Some parts of the source code (e.g. ciff support) are taken from dcraw - * that is copyrighted by Dave Coffin - * - * 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 RawTherapee. If not, see . - */ -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "rtexif.h" - -#include "../rtengine/procparams.h" - -#include "../rtgui/cacheimagedata.h" -#include "../rtgui/version.h" -#include "../rtgui/ppversion.h" - -// see end of ExifManager::parse(bool, bool) -#define PRINT_METADATA_TREE 0 - -using namespace std; - -namespace rtexif -{ - -Interpreter stdInterpreter; - -//--------------- class TagDirectory ------------------------------------------ -// this class is a collection (an array) of tags -//----------------------------------------------------------------------------- - -TagDirectory::TagDirectory () - : attribs (ifdAttribs), order (HOSTORDER), parent (nullptr), parseJPEG(true) {} - -TagDirectory::TagDirectory (TagDirectory* p, const TagAttrib* ta, ByteOrder border) - : attribs (ta), order (border), parent (p), parseJPEG(true) {} - -TagDirectory::TagDirectory (TagDirectory* p, FILE* f, int base, const TagAttrib* ta, ByteOrder border, bool skipIgnored, bool parseJpeg) - : attribs (ta), order (border), parent (p), parseJPEG(parseJpeg) -{ - - int numOfTags = get2 (f, order); - - if (numOfTags <= 0 || numOfTags > 1000) { // KodakIfd has lots of tags, thus 1000 as the limit - return; - } - - bool thumbdescr = false; - - for (int i = 0; i < numOfTags; i++) { - - Tag* newTag = new Tag (this, f, base); - - // filter out tags with unknown type - if ((int)newTag->getType() == 0) { - delete newTag; - continue; - } - - if (skipIgnored) { - int id = newTag->getID(); - - // detect and possibly ignore tags of directories belonging to the embedded thumbnail image - if (attribs == ifdAttribs && id == TIFFTAG_SUBFILETYPE && newTag->toInt() != 0) { - thumbdescr = true; - } - - const TagAttrib* attrib = getAttrib (id); - - if (!attrib || attrib->ignore == 1 || (thumbdescr && attrib->ignore == 2)) { - delete newTag; - } else { - addTag (newTag); - } - } else { - addTag (newTag); - } - } -} - -TagDirectory::~TagDirectory () -{ - - for (size_t i = 0; i < tags.size(); i++) { - delete tags[i]; - } -} - -class CompareTags -{ -public: - int operator() (Tag* const& a, Tag* const& b) const - { - return a->getID() < b->getID(); - } -}; - -void TagDirectory::sort () -{ - - std::sort (tags.begin(), tags.end(), CompareTags()); - - for (size_t i = 0; i < tags.size(); i++) - if (tags[i]->isDirectory()) - for (int j = 0; tags[i]->getDirectory (j); j++) { - tags[i]->getDirectory (j)->sort (); - } -} -TagDirectory* TagDirectory::getRoot() -{ - if (parent) { - return parent->getRoot(); - } else { - return this; - } -} - -const TagAttrib* TagDirectory::getAttrib (int id) const -{ - - if (attribs) - for (int i = 0; attribs[i].ignore != -1; i++) - if (attribs[i].ID == id) { - return &attribs[i]; - } - - return nullptr; -} - -const TagAttrib* TagDirectory::getAttrib (const char* name) -{ - - if (attribs) - for (int i = 0; attribs[i].ignore != -1; i++) - if (!strcmp (attribs[i].name, name)) { - return &attribs[i]; - } - - return nullptr; -} - -const TagAttrib* TagDirectory::getAttribP (const char* name) -{ - - if (attribs) - for (int i = 0; attribs[i].ignore != -1; i++) { - // Yeah, self made comparison! - const char *n = name; - const char *a = attribs[i].name; - - while (*n && *a && *n == *a) { - n++; - a++; - }; - - if (!*a && (!*n || *n == '/')) { - // we reached the end of the subpart of name and the end of attribs->name, so they match - if (*n == '/') { - Tag* tag = getTag (attribs[i].ID); - TagDirectory *tagDir; - - if (attribs[i].subdirAttribs && tag && (tagDir = tag->getDirectory())) { - return tagDir->getAttribP (n + 1); - } else { - return nullptr; - } - } else { - return &attribs[i]; - } - } - } - - return nullptr; -} - -void TagDirectory::printAll (unsigned int level) const -{ - - // set the spacer prefix string - char prefixStr[level * 4 + 1]; - unsigned int i; - - for (i = 0; i < level * 4; i++) { - prefixStr[i] = ' '; - } - - prefixStr[i] = '\0'; - - // recursively iterate over the tag list - for (size_t i = 0; i < tags.size(); i++) { - std::string name = tags[i]->nameToString (); - - TagDirectory* currTagDir; - if (tags[i]->isDirectory()) { - for (int j = 0; (currTagDir = tags[i]->getDirectory (j)) != nullptr; j++) { - printf ("%s+-- DIRECTORY %s[%d]:\n", prefixStr, name.c_str(), j); - currTagDir->printAll (level + 1); - } - } else { - printf ("%s- %s\n", prefixStr, name.c_str()); - } - } -} - -/** @brief Dump the TagDirectory and its sub-directories to the file 'fname' - * - * This method has been created to dump the metadata for the Custom Profile Builders. - * It contains an [RT General] section to communicate some parameters, then the TagDirectory follows. - * - * The key is composed as follow: "010F_Make", i.e. "tag number or ID _ tag name" - * Entries like: - * - * 927C_MakerNotesSony=$subdir - * - * indicates that this tag refer to a sub-directory. RT's Keywords begins with $, where & is the first char of the value. - * $subdir is the only keyword so far. - * - * You'll have then to check for the [EXIF/927C_MakerNotesSony] section, given that the root section - * is named [EXIF]. - * - * WARNING: Some string will be sanitized, i.e. the new line char will be replaced by "\n". You'll - * have to check for this escape string if you want a correct display of the value, but your KeyFile module - * will most likely handle that automatically for you. - * - * @param commFNname Absolute path of the temporary communication file's name - * @param commFNname Absolute path of the image's file name - * @param commFNname Absolute path of the output profiles's file name - * @param defaultPParams absolute or relative path (to the application's folder) of the default ProcParams to use - * @param cfs pointer to a CacheImageData object that will contain common values - * @param flagMode will tell whether the Custom Profile Builder is called for on flagging event or for real development - * @param keyfile The KeyFile object to dump to. Has to be NULL (default value) on first call! - * @param tagDirName Name of the current TagDirectory (full path, i.e. "EXIF/MakerNotes/LensInfo"). Can be empty on first call, "EXIF" will then be used - * - * @return True if everything went fine, false otherwise - */ -bool TagDirectory::CPBDump (const Glib::ustring &commFName, const Glib::ustring &imageFName, const Glib::ustring &profileFName, const Glib::ustring &defaultPParams, - const CacheImageData* cfs, const bool flagMode, Glib::KeyFile *keyFile, Glib::ustring tagDirName) const -{ - const auto kf = keyFile ? keyFile : new Glib::KeyFile; - - if (!kf) { - return false; - } - - if (!keyFile || tagDirName.empty()) { - tagDirName = "EXIF"; - } - - std::vector tagDirList; - std::vector tagDirPaths; - - FILE *f = nullptr; - - if (!keyFile) { - // open the file in write mode - f = g_fopen (commFName.c_str (), "wt"); - - if (f == nullptr) { - printf ("TagDirectory::keyFileDump(\"%s\") >>> Error: unable to open file with write access!\n", commFName.c_str()); - delete kf; - return false; - } - - try { - - kf->set_string ("RT General", "CachePath", options.cacheBaseDir); - kf->set_string ("RT General", "AppVersion", RTVERSION); - kf->set_integer ("RT General", "ProcParamsVersion", PPVERSION); - kf->set_string ("RT General", "ImageFileName", imageFName); - kf->set_string ("RT General", "OutputProfileFileName", profileFName); - kf->set_string ("RT General", "DefaultProcParams", defaultPParams); - kf->set_boolean ("RT General", "FlaggingMode", flagMode); - - kf->set_integer ("Common Data", "FrameCount", cfs->frameCount); - kf->set_integer ("Common Data", "SampleFormat", cfs->sampleFormat); - kf->set_boolean ("Common Data", "IsHDR", cfs->isHDR); - kf->set_boolean ("Common Data", "IsPixelShift", cfs->isPixelShift); - kf->set_double ("Common Data", "FNumber", cfs->fnumber); - kf->set_double ("Common Data", "Shutter", cfs->shutter); - kf->set_double ("Common Data", "FocalLength", cfs->focalLen); - kf->set_integer ("Common Data", "ISO", cfs->iso); - kf->set_string ("Common Data", "Lens", cfs->lens); - kf->set_string ("Common Data", "Make", cfs->camMake); - kf->set_string ("Common Data", "Model", cfs->camModel); - - } catch (Glib::KeyFileError&) {} - } - - // recursively iterate over the tag list - for (size_t i = 0; i < tags.size(); i++) { - std::string tagName = tags[i]->nameToString (); - - if (tags[i]->isDirectory()) - for (int j = 0; tags[i]->getDirectory (j); j++) { - // Accumulating the TagDirectories to dump later - tagDirPaths.push_back ( Glib::ustring ( tagDirName + "/" + getDumpKey (tags[i]->getID(), tagName) ) ); - tagDirList.push_back (tags[i]->getDirectory (j)); - - try { - kf->set_string (tagDirName, getDumpKey (tags[i]->getID(), tagName), "$subdir"); - } catch (Glib::KeyFileError&) {} - } else { - try { - kf->set_string (tagDirName, getDumpKey (tags[i]->getID(), tagName), tags[i]->valueToString()); - } catch (Glib::KeyFileError&) {} - } - } - - // dumping the sub-directories - for (size_t i = 0; i < tagDirList.size(); i++) { - tagDirList.at (i)->CPBDump (commFName, imageFName, profileFName, defaultPParams, cfs, flagMode, kf, tagDirPaths.at (i)); - } - - if (!keyFile) { - try { - fprintf (f, "%s", kf->to_data().c_str()); - } catch (Glib::KeyFileError&) {} - - fclose (f); - delete kf; - } - - return true; -} - -Glib::ustring TagDirectory::getDumpKey (int tagID, const Glib::ustring &tagName) -{ - Glib::ustring key; - - if (options.CPBKeys == CPBKT_TID || options.CPBKeys == CPBKT_TID_NAME) { - key = Glib::ustring (Glib::ustring::format (std::fixed, std::hex, std::setfill (L'0'), std::setw (4), tagID)); - } - - if (options.CPBKeys == CPBKT_TID_NAME) { - key += Glib::ustring ("_"); - } - - if (options.CPBKeys == CPBKT_TID_NAME || options.CPBKeys == CPBKT_NAME) { - key += Glib::ustring (tagName); - } - - return key; -} -void TagDirectory::addTag (Tag* &tag) -{ - - // look up if it already exists: - if (getTag (tag->getID())) { - delete tag; - tag = nullptr; - } else { - tags.push_back (tag); - } -} - -void TagDirectory::addTagFront (Tag* &tag) -{ - - // look up if it already exists: - if (getTag (tag->getID())) { - delete tag; - tag = nullptr; - } else { - tags.insert (tags.begin(), tag); - } -} - -void TagDirectory::replaceTag (Tag* tag) -{ - - // look up if it already exists: - for (size_t i = 0; i < tags.size(); i++) - if (tags[i]->getID() == tag->getID()) { - delete tags[i]; - tags[i] = tag; - return; - } - - tags.push_back (tag); -} - -Tag* TagDirectory::getTag (int ID) const -{ - - for (size_t i = 0; i < tags.size(); i++) - if (tags[i]->getID() == ID) { - return tags[i]; - } - - return nullptr; -} - -Tag* TagDirectory::getTag (const char* name) const -{ - - if (attribs) { - for (int i = 0; attribs[i].ignore != -1; i++) - if (!strcmp (attribs[i].name, name)) { - return getTag (attribs[i].ID); - } - } - - return nullptr; -} - -Tag* TagDirectory::getTagP (const char* name) const -{ - - if (attribs) - for (int i = 0; attribs[i].ignore != -1; i++) { - // Yeah, self made comparison! - const char *n = name; - const char *a = attribs[i].name; - - while (*n && *a && *n == *a) { - n++; - a++; - }; - - if (!*a && (!*n || *n == '/')) { - // we reached the end of the subpart of name and the end of attribs->name, so they match - if (*n == '/') { - Tag* tag = getTag (attribs[i].ID); - TagDirectory *tagDir; - - if (attribs[i].subdirAttribs && tag && (tagDir = tag->getDirectory())) { - return tagDir->getTagP (n + 1); - } else { - return nullptr; - } - } else { - return getTag (attribs[i].ID); - } - } - } - - return nullptr; -} - -Tag* TagDirectory::findTag (const char* name, bool lookUpward) const -{ - Tag* t = getTag(name); - if (t) { - return t; - } - - Tag* foundTag = nullptr; - int tagDistance = 10000; - - for (auto tag : tags) { - if (tag->isDirectory()) { - TagDirectory *dir; - int i = 0; - // Find the shortest path to that tag - while ((dir = tag->getDirectory(i)) != nullptr) { - TagDirectory *dir = tag->getDirectory(); - Tag* t = dir->findTag (name); - - if (t) { - int currTagDistance = t->getDistanceFrom(this); - if (currTagDistance < tagDistance) { - tagDistance = currTagDistance; - foundTag = t; - } - } - ++i; - } - } - } - - if (foundTag) { - return foundTag; - } - - if (lookUpward && parent) { - Tag* t = parent->findTagUpward(name); - - if (t) { - return t; - } - } - - return nullptr; -} - -std::vector TagDirectory::findTags (int ID) -{ - - std::vector tagList; - - //assuming that an entry can only exist once - Tag* t = getTag(ID); - if (t) { - tagList.push_back(t); - } - - for (auto tag : tags) { - if (tag->isDirectory()) { - TagDirectory *dir; - int i = 0; - while ((dir = tag->getDirectory(i)) != nullptr) { - std::vector subTagList = dir->findTags (ID); - - if (!subTagList.empty()) { - // concatenating the 2 vectors - // not really optimal in a memory efficiency pov - for (auto tag2 : subTagList) { - tagList.push_back(tag2); - } - } - ++i; - } - } - } - - return tagList; -} - -std::vector TagDirectory::findTags (const char* name) -{ - - std::vector tagList; - - //assuming that an entry can only exist once - Tag* t = getTag(name); - if (t) { - tagList.push_back(t); - } - - for (auto tag : tags) { - if (tag->isDirectory()) { - TagDirectory *dir; - int i = 0; - while ((dir = tag->getDirectory(i)) != nullptr) { - std::vector subTagList = dir->findTags (name); - - if (!subTagList.empty()) { - // concatenating the 2 vectors - // not really optimal in a memory efficiency pov, but adding 10 items should be a maximum - for (auto tag2 : subTagList) { - tagList.push_back(tag2); - } - } - ++i; - } - } - } - - return tagList; -} - - -Tag* TagDirectory::findTagUpward (const char* name) const -{ - Tag* t = findTag(name); - if (t) { - return t; - } - - if (parent) { - Tag* t = parent->findTagUpward(name); - - if (t) { - return t; - } - } - - return nullptr; -} - - -// Searches a simple value, as either attribute or element -// only for simple values, not for entries with special chars or free text -bool TagDirectory::getXMPTagValue (const char* name, char* value) const -{ - *value = 0; - - if (!getTag ("ApplicationNotes")) { - return false; - } - - char *sXMP = (char*)getTag ("ApplicationNotes")->getValue(); - - // Check for full word - char *pos = sXMP; - - bool found = false; - - do { - pos = strstr (pos, name); - - if (pos) { - char nextChar = * (pos + strlen (name)); - - if (nextChar == ' ' || nextChar == '>' || nextChar == '=') { - found = true; - } else { - pos += strlen (name); - } - } - } while (pos && !found); - - if (!found) { - return false; - } - - char *posTag = strchr (pos, '>'); - char *posAttr = strchr (pos, '"'); - - if (!posTag && !posAttr) { - return false; - } - - if (posTag && (!posAttr || posTag < posAttr)) { - // Tag - pos = strchr (posTag + 1, '<'); - strncpy (value, posTag + 1, pos - posTag - 1); - value[pos - posTag - 1] = 0; - return true; - } else if (posAttr && (!posTag || posAttr < posTag)) { - // Attribute - pos = strchr (posAttr + 1, '"'); - strncpy (value, posAttr + 1, pos - posAttr - 1); - value[pos - posAttr - 1] = 0; - return true; - } else { - return false; - } -} - -void TagDirectory::keepTag (int ID) -{ - for (size_t i = 0; i < tags.size(); i++) - if (tags[i]->getID() == ID) { - tags[i]->setKeep (true); - } -} - -int TagDirectory::calculateSize () -{ - - int size = 2; // space to store the number of tags - - for (size_t i = 0; i < tags.size(); i++) - if (tags[i]->getKeep()) { - size += 12 + tags[i]->calculateSize (); - } - - size += 4; // next ifd pointer - return size; -} - -TagDirectory* TagDirectory::clone (TagDirectory* parent) const -{ - - TagDirectory* td = new TagDirectory (parent, attribs, order); - - for (size_t i = 0; i < tags.size(); i++) { - td->tags.push_back (tags[i]->clone (td)); - } - - return td; -} - -int TagDirectory::write (int start, unsigned char* buffer) -{ - - int size = calculateSize (); - int tagnum = 0; - int nondirspace = 0; - - for (size_t i = 0; i < tags.size(); i++) - if (tags[i]->getKeep()) { - tagnum++; - - if (!tags[i]->isDirectory()) { - nondirspace += tags[i]->calculateSize(); - } - } - - int nextValOffs = start + 2 + tagnum * 12 + 4; - int nextDirOffs = nextValOffs + nondirspace; - int pos = start; - sset2 (tagnum, buffer + start, order); - pos += 2; - int maxPos = start + size; - - for (size_t i = 0; i < tags.size(); i++) { - if (tags[i]->getKeep()) { - if (!tags[i]->isDirectory()) { - nextValOffs = tags[i]->write (pos, nextValOffs, buffer); // pos: where to put the tag, dataoffset: the place where the value can be put. return: next data offset - } else { - nextDirOffs = tags[i]->write (pos, nextDirOffs, buffer); // pos: where to put the tag, dataoffset: the place where the value can be put. return: next data offset - } - - pos += 12; - } - } - - sset4 (0, buffer + pos, order); - return maxPos; -} - -void TagDirectory::applyChange (const std::string &name, const Glib::ustring &value) -{ - - std::string::size_type dp = name.find_first_of ('.'); - std::string fseg = name.substr (0, dp); - - // this is a final segment: apply change - if (dp == std::string::npos) { - - Tag* t = nullptr; - - for (size_t i = 0; i < tags.size(); i++) - if (tags[i]->nameToString() == fseg) { - t = tags[i]; - break; - } - - if (value == "#keep" && t) { - t->setKeep (true); - } else if (value == "#delete" && t) { - t->setKeep (false); - } else if (t && !t->isDirectory()) { - if (name == "UserComment") { - // UserComment can be Unicode - t->userCommentFromString (value); - } else { - t->valueFromString (value); - } - } else { - const TagAttrib* attrib = nullptr; - - for (int i = 0; attribs[i].ignore != -1; i++) { - if (!strcmp (attribs[i].name, fseg.c_str())) { - attrib = &attribs[i]; - break; - } - } - - if (attrib) { - Tag* nt = new Tag (this, attrib); - if (name == "UserComment") { - // UserComment can be Unicode - nt->initUserComment (value); - } else { - nt->initString (value.c_str()); - } - addTag (nt); - } - } - } - // this is a subdirectory - else { - // try to find it - std::string::size_type dp1 = fseg.find_first_of ('['); - std::string basename = fseg.substr (0, dp1); - Tag* t = nullptr; - int dirnum = -1; - - for (size_t i = 0; i < tags.size(); i++) - if (tags[i]->isDirectory()) { - for (int j = 0; tags[i]->getDirectory (j); j++) { - if (tags[i]->nameToString (j) == fseg) { - t = tags[i]; - dirnum = j; - break; - } - } - - if (!t && tags[i]->nameToString() == basename) { // found it, but that directory index does not exist - t = tags[i]; - dirnum = -1; - } - } - - if (!t && value != "#keep" && value != "#delete") { - const TagAttrib* attrib = nullptr; - - for (int i = 0; attribs[i].ignore != -1; i++) - if (!strcmp (attribs[i].name, fseg.c_str())) { - attrib = &attribs[i]; - break; - } - - if (attrib && attrib->subdirAttribs) { - t = new Tag (this, attrib); - t->initSubDir (); - addTag (t); - } - - dirnum = 0; - } - - if (t && dirnum >= 0) { - t->getDirectory (dirnum)->applyChange (name.substr (dp + 1, std::string::npos), value); - } - } -} - -TagDirectoryTable::TagDirectoryTable () - : values (nullptr), zeroOffset (0), valuesSize (0), defaultType (INVALID) -{ -} - -TagDirectoryTable::TagDirectoryTable (TagDirectory* p, unsigned char *v, int memsize, int offs, TagType type, const TagAttrib* ta, ByteOrder border) - : TagDirectory (p, ta, border), zeroOffset (offs), valuesSize (memsize), defaultType ( type ) -{ - values = new unsigned char[valuesSize]; - memcpy (values, v, valuesSize); - - // Security ; will avoid to read above the buffer limit if the RT's tagDirectoryTable is longer that what's in the file - int count = valuesSize / getTypeSize (type); - - for (const TagAttrib* tattr = ta; tattr->ignore != -1 && tattr->ID < count; ++tattr) { - Tag* newTag = new Tag (this, tattr, (values + zeroOffset + tattr->ID * getTypeSize (type)), tattr->type == AUTO ? type : tattr->type); - tags.push_back (newTag); // Here we can insert more tag in the same offset because of bitfield meaning - } -} - -TagDirectoryTable::TagDirectoryTable (TagDirectory* p, FILE* f, int memsize, int offs, TagType type, const TagAttrib* ta, ByteOrder border) - : TagDirectory (p, ta, border), zeroOffset (offs), valuesSize (memsize), defaultType ( type ) -{ - values = new unsigned char[valuesSize]; - if (fread (values, 1, valuesSize, f) == static_cast(valuesSize)) { - - // Security ; will avoid to read above the buffer limit if the RT's tagDirectoryTable is longer that what's in the file - int count = valuesSize / getTypeSize (type); - - for (const TagAttrib* tattr = ta; tattr->ignore != -1 && tattr->ID < count; ++tattr) { - Tag* newTag = new Tag (this, tattr, (values + zeroOffset + tattr->ID * getTypeSize (type)), tattr->type == AUTO ? type : tattr->type); - tags.push_back (newTag); // Here we can insert more tag in the same offset because of bitfield meaning - } - } -} -TagDirectory* TagDirectoryTable::clone (TagDirectory* parent) const -{ - - TagDirectory* td = new TagDirectoryTable (parent, values, valuesSize, zeroOffset, defaultType, attribs, order); - return td; -} - -TagDirectoryTable::~TagDirectoryTable() -{ - if (values) { - delete [] values; - } -} -int TagDirectoryTable::calculateSize () -{ - return valuesSize; -} - -int TagDirectoryTable::write (int start, unsigned char* buffer) -{ - if ( values && valuesSize) { - memcpy (buffer + start, values, valuesSize); - return start + valuesSize; - } else { - return start; - } -} - -//--------------- class Tag --------------------------------------------------- -// this class represents a tag stored in the directory -//----------------------------------------------------------------------------- - -Tag::Tag (TagDirectory* p, FILE* f, int base) - : type (INVALID), count (0), value (nullptr), allocOwnMemory (true), attrib (nullptr), parent (p), directory (nullptr) -{ - - ByteOrder order = getOrder(); - - tag = get2 (f, order); - type = (TagType)get2 (f, order); - count = get4 (f, order); - - if (!count) { - count = 1; - } - - makerNoteKind = NOMK; - keep = false; - - // filter out invalid tags - // note the large count is to be able to pass LeafData ASCII tag which can be up to almost 10 megabytes, - // (only a small part of it will actually be parsed though) - if ((int)type < 1 || (int)type > 14 || count > 10 * 1024 * 1024) { - type = INVALID; - valuesize = 0; - return; - } - - // store next Tag's position in file - int save = ftell (f) + 4; - - // load value field (possibly seek before) - valuesize = count * getTypeSize (type); - - if (valuesize > 4) { - fseek (f, get4 (f, getOrder()) + base, SEEK_SET); - } - - attrib = parent->getAttrib (tag); - - if (attrib && (attrib->action == AC_WRITE || attrib->action == AC_NEW)) { - keep = true; - } - - if ( tag == 0xc634 ) { // DNGPrivateData - int currPos = ftell (f); - const int buffersize = 32; - char buffer[buffersize], *p = buffer; - - while ( fread (p, 1, 1, f ) && *p != 0 && p - buffer < buffersize - 1 ) { - p++; - } - - *p = 0; - - if ( !strncmp (buffer, "Adobe", 5) ) { - fread (buffer, 1, 14, f ); - - if ( !strncmp ( buffer, "MakN", 4) ) { - ByteOrder bom = ((buffer[8] == 'M' && buffer[9] == 'M') ? MOTOROLA : INTEL) ; - Tag* tmake = parent->getRoot()->findTag ("Make"); - std::string make ( tmake ? tmake->valueToString() : ""); - int save = ftell (f); - int originalOffset = sget4 ( (unsigned char*)&buffer[10], ( make.find ("SONY") != std::string::npos ) || ( make.find ("Canon") != std::string::npos ) || ( make.find ("OLYMPUS") != std::string::npos ) ? MOTOROLA : bom ); - - if ( !parseMakerNote (f, save - originalOffset, bom )) { - type = INVALID; - } - } - } else if ( !strncmp (buffer, "PENTAX", 6) ) { - makerNoteKind = HEADERIFD; - fread (buffer, 1, 2, f); - directory = new TagDirectory*[2]; - directory[0] = new TagDirectory (parent, f, currPos, pentaxAttribs, strncmp (buffer, "MM", 2) ? INTEL : MOTOROLA); - directory[1] = nullptr; - } else - /* SONY uses this tag to write hidden info and pointer to private encrypted tags - { - unsigned offset =sget4((unsigned char*)buffer, order); - fseek(f,offset,SEEK_SET); - makerNoteKind = TABLESUBDIR; - directory = new TagDirectory*[2]; - directory[0] = new TagDirectory (parent, f, base, sonyDNGMakerNote, order); - directory[1] = NULL; - fseek (f, save, SEEK_SET); - return; - }*/ - { - type = INVALID; - } - } - - if (parent->getParseJpeg() && tag == 0x002e) { // location of the embedded preview image in raw files of Panasonic cameras - ExifManager eManager(f, nullptr, true); - const auto fpos = ftell(f); - - if (fpos >= 0) { - eManager.parseJPEG(fpos); // try to parse the exif data from the preview image - - if (eManager.roots.size()) { - const TagDirectory* const previewdir = eManager.roots.at(0); - if (previewdir->getTag ("Exif")) { - if (previewdir->getTag ("Make")) { - if (previewdir->getTag ("Make")->valueToString() == "Panasonic") { // "make" is not yet available here, so get it from the preview tags to assure we're doing the right thing - Tag* t = new Tag (parent->getRoot(), lookupAttrib (ifdAttribs, "Exif")); // replace raw exif with preview exif assuming there are the same - t->initSubDir (previewdir->getTag ("Exif")->getDirectory()); - parent->getRoot()->addTag (t); - } - } - } - } - } - } - - // if this tag is the makernote, it needs special treatment (brand specific parsing) - if (tag == 0x927C && attrib && !strcmp (attrib->name, "MakerNote") ) { - if ( !parseMakerNote (f, base, order )) { - type = INVALID; - fseek (f, save, SEEK_SET); - return; - } - } else if (attrib && attrib->subdirAttribs) { - // Some subdirs are specific of maker and model - char make[128], model[128]; - make[0] = 0; - model[0] = 0; - Tag* tmake = parent->getRoot()->getTag ("Make"); - - if (tmake) { - tmake->toString (make, sizeof(make)); - } - - Tag* tmodel = parent->getRoot()->getTag ("Model"); - - if (tmodel) { - tmodel->toString (model, sizeof(model)); - } - - if (!strncmp (make, "SONY", 4)) { - switch ( tag ) { - case 0x0010: - directory = new TagDirectory*[2]; - directory[1] = nullptr; - - if (count == 15360) { - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, BYTE, sonyCameraInfoAttribs, order); - } else { - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, BYTE, sonyCameraInfo2Attribs, order); - } - - break; - - case 0x0114: - directory = new TagDirectory*[2]; - directory[1] = nullptr; - - if (count == 280 || count == 364) { - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, SHORT, sonyCameraSettingsAttribs, MOTOROLA); - } else if (count == 332) { - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, SHORT, sonyCameraSettingsAttribs2, MOTOROLA); - } else if (count == 1536 || count == 2048) { - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, BYTE, sonyCameraSettingsAttribs3, INTEL); - } else { - // Unknown CameraSettings - delete [] directory; - directory = nullptr; - type = INVALID; - } - - makerNoteKind = directory ? TABLESUBDIR : NOMK; - break; - - case 0x9405: - directory = new TagDirectory*[2]; - directory[1] = nullptr; - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, SHORT, attrib->subdirAttribs, order); - makerNoteKind = TABLESUBDIR; - break; - - default: - goto defsubdirs; - } - } else if ((!strncmp (make, "PENTAX", 6)) || (!strncmp (make, "RICOH", 5) && !strncmp (model, "PENTAX", 6))) { // Either the former Pentax brand or the RICOH brand + PENTAX model" - switch ( tag ) { - case 0x007d: - case 0x0205: - case 0x0208: - case 0x0216: - directory = new TagDirectory*[2]; - directory[1] = nullptr; - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, BYTE, attrib->subdirAttribs, order); - makerNoteKind = TABLESUBDIR; - break; - - case 0x0215: - directory = new TagDirectory*[2]; - directory[1] = nullptr; - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, LONG, attrib->subdirAttribs, order); - makerNoteKind = TABLESUBDIR; - break; - - case 0x005c: - directory = new TagDirectory*[2]; - directory[1] = nullptr; - - if (count == 4) { // SRInfo - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, BYTE, pentaxSRInfoAttribs, order); - } else if (count == 2) { // SRInfo2 - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, BYTE, pentaxSRInfo2Attribs, order); - } else { - // Unknown SRInfo - delete [] directory; - directory = nullptr; - type = INVALID; - } - - makerNoteKind = directory ? TABLESUBDIR : NOMK; - break; - - case 0x0206: - directory = new TagDirectory*[2]; - directory[1] = nullptr; - - if (count == 21) { // AEInfo2 - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, BYTE, pentaxAEInfo2Attribs, order); - } else if (count == 48) { // AEInfo3 - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, BYTE, pentaxAEInfo3Attribs, order); - } else if (count <= 25) { // AEInfo - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, BYTE, pentaxAEInfoAttribs, order); - } else { - // Unknown AEInfo - delete [] directory; - directory = nullptr; - type = INVALID; - } - - makerNoteKind = directory ? TABLESUBDIR : NOMK; - break; - - case 0x0207: { - // There are 2 format pentaxLensDataAttribs - int offsetFirst = 4; // LensInfo2 - - if ( strstr (model, "*ist") || strstr (model, "GX-1") || strstr (model, "K200D") || (strstr (model, "K100D") && !strstr (model, "K100D Super")) || strstr (model, "K110D") || strstr (model, "645Z")) { - offsetFirst = 3; // LensInfo - } else if ( strstr (model, "645D") ) { - offsetFirst = 13; // LensInfo3 - } else if ( strstr (model, "K-01") || strstr (model, "K-30") || strstr (model, "K-50")) { - offsetFirst = 15; // LensInfo5 - } else if ( strstr (model, "K-5") || strstr (model, "K-r") ) { - offsetFirst = 12; // LensInfo4 - } else if (!strncmp (make, "RICOH", 5)) { // all PENTAX camera model produced under the RICOH era uses LensInfo5, for now... - offsetFirst = 15; // LensInfo5 too - } - - directory = new TagDirectory*[2]; - directory[1] = nullptr; - directory[0] = new TagDirectoryTable (parent, f, valuesize, offsetFirst, BYTE, attrib->subdirAttribs, order); - makerNoteKind = TABLESUBDIR; - } - break; - - case 0x0239: - directory = new TagDirectory*[2]; - directory[1] = nullptr; - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, BYTE, attrib->subdirAttribs, order); - makerNoteKind = TABLESUBDIR; - break; - - default: - goto defsubdirs; - } - } else if (!strncmp (make, "Canon", 5)) { - switch ( tag ) { - case 0x0001: - case 0x0002: - case 0x0004: - case 0x0005: - case 0x0093: - case 0x0098: - case 0x00a0: - directory = new TagDirectory*[2]; - directory[1] = nullptr; - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, SSHORT, attrib->subdirAttribs, order); - makerNoteKind = TABLESUBDIR; - break; - - case 0x009a: - case 0x4013: - directory = new TagDirectory*[2]; - directory[1] = nullptr; - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, LONG, attrib->subdirAttribs, order); - makerNoteKind = TABLESUBDIR; - break; - - default: - goto defsubdirs; - } - } else if (!strncmp (make, "NIKON", 5)) { - switch (tag) { - case 0x0025: { - directory = new TagDirectory*[2]; - directory[1] = nullptr; - directory[0] = new TagDirectoryTable (parent, f, valuesize, 0, BYTE, attrib->subdirAttribs, order); - makerNoteKind = TABLESUBDIR; - break; - } - - default: - goto defsubdirs; - } - } else if (type == UNDEFINED) { - count = 1; - type = LONG; - directory = new TagDirectory*[2]; - directory[0] = new TagDirectory (parent, f, base, attrib->subdirAttribs, order); - directory[1] = nullptr; - } else { - goto defsubdirs; - } - } else { - // In some circumstances, `value` may have been allocated, so - // delete it to prevent a leak. See issue - // https://github.com/Beep6581/RawTherapee/issues/6735 - delete [] value; - // read value - value = new unsigned char [valuesize + 1]; - auto readSize = fread (value, 1, valuesize, f); - value[readSize] = '\0'; - } - - // seek back to the saved position - fseek (f, save, SEEK_SET); - return; - -defsubdirs: - // read value - value = new unsigned char [valuesize]; - if (fread (value, 1, valuesize, f) != static_cast(valuesize)) { - type = INVALID; - } else { - // count the number of valid subdirs - int sdcount = count; - - if (sdcount > 0) { - if (parent->getAttribTable() == olympusAttribs) { - sdcount = 1; - } - - // allocate space - directory = new TagDirectory*[sdcount + 1]; - - // load directories - for (size_t j = 0, i = 0; j < count; j++, i++) { - int newpos = base + toInt (j * 4, LONG); - fseek (f, newpos, SEEK_SET); - directory[i] = new TagDirectory (parent, f, base, attrib->subdirAttribs, order, true, parent->getParseJpeg()); - } - - // set the terminating NULL - directory[sdcount] = nullptr; - } else { - type = INVALID; - } - } - // seek back to the saved position - fseek (f, save, SEEK_SET); - return; - -} - -bool Tag::parseMakerNote (FILE* f, int base, ByteOrder bom ) -{ - value = nullptr; - Tag* tmake = parent->getRoot()->findTag ("Make"); - std::string make ( tmake ? tmake->valueToString() : ""); - - Tag* tmodel = parent->getRoot()->findTag ("Model"); - std::string model ( tmodel ? tmodel->valueToString() : ""); - - if ( make.find ( "NIKON" ) != std::string::npos ) { - if ( model.find ("NIKON E700") != std::string::npos || - model.find ("NIKON E800") != std::string::npos || - model.find ("NIKON E900") != std::string::npos || - model.find ("NIKON E900S") != std::string::npos || - model.find ("NIKON E910") != std::string::npos || - model.find ("NIKON E950") != std::string::npos ) { - makerNoteKind = HEADERIFD; - valuesize = 8; - value = new unsigned char[8]; - fread (value, 1, 8, f); - directory = new TagDirectory*[2]; - directory[0] = new TagDirectory (parent, f, base, nikon2Attribs, bom); - directory[1] = nullptr; - } else if ( model.find ("NIKON E990") != std::string::npos || - (model.find ("NIKON D1") != std::string::npos && model.size() > 8 && model.at (8) != '0')) { - makerNoteKind = IFD; - directory = new TagDirectory*[2]; - directory[0] = new TagDirectory (parent, f, base, nikon3Attribs, bom); - directory[1] = nullptr; - } else { - // needs refinement! (embedded tiff header parsing) - makerNoteKind = NIKON3; - valuesize = 18; - value = new unsigned char[18]; - int basepos = ftell (f); - fread (value, 1, 18, f); - directory = new TagDirectory*[2]; - // byte order for makernotes can be different from exif byte order. We have to get it from makernotes header - ByteOrder MakerNoteOrder; - - if (value[10] == 'M' && value[11] == 'M') { - MakerNoteOrder = rtexif::MOTOROLA; - } else { - MakerNoteOrder = rtexif::INTEL; - } - - directory[0] = new TagDirectory (parent, f, basepos + 10, nikon3Attribs, MakerNoteOrder); - directory[1] = nullptr; - } - } else if ( make.find ( "Canon" ) != std::string::npos ) { - makerNoteKind = IFD; - directory = new TagDirectory*[2]; - directory[0] = new TagDirectory (parent, f, base, canonAttribs, bom); - directory[1] = nullptr; - } else if ( make.find ( "PENTAX" ) != std::string::npos ) { - makerNoteKind = HEADERIFD; - valuesize = 6; - value = new unsigned char[6]; - fread (value, 1, 6, f); - directory = new TagDirectory*[2]; - directory[0] = new TagDirectory (parent, f, base, pentaxAttribs, bom); - directory[1] = nullptr; - } else if ( (make.find ( "RICOH" ) != std::string::npos ) && (model.find ("PENTAX") != std::string::npos) ) { - makerNoteKind = HEADERIFD; - valuesize = 10; - value = new unsigned char[10]; - fread (value, 1, 10, f); - directory = new TagDirectory*[2]; - directory[0] = new TagDirectory (parent, f, ftell (f) - 10, pentaxAttribs, bom); - directory[1] = nullptr; - } else if ( make.find ( "FUJIFILM" ) != std::string::npos ) { - makerNoteKind = FUJI; - valuesize = 12; - value = new unsigned char[12]; - fread (value, 1, 12, f); - directory = new TagDirectory*[2]; - directory[0] = new TagDirectory (parent, f, ftell (f) - 12, fujiAttribs, INTEL); - directory[1] = nullptr; - } else if ( make.find ( "KONICA MINOLTA" ) != std::string::npos || make.find ( "Minolta" ) != std::string::npos ) { - makerNoteKind = IFD; - directory = new TagDirectory*[2]; - directory[0] = new TagDirectory (parent, f, base, minoltaAttribs, bom); - directory[1] = nullptr; - } else if ( make.find ( "SONY" ) != std::string::npos ) { - valuesize = 12; - value = new unsigned char[12]; - fread (value, 1, 12, f); - - if (!strncmp ((char*)value, "SONY DSC", 8)) { - makerNoteKind = HEADERIFD; - } else { - makerNoteKind = IFD; - fseek (f, -12, SEEK_CUR); - } - - directory = new TagDirectory*[2]; - directory[0] = new TagDirectory (parent, f, base, sonyAttribs, bom ); - directory[1] = nullptr; - } else if ( make.find ( "OLYMPUS" ) != std::string::npos ) { - makerNoteKind = HEADERIFD; - valuesize = 8; - value = new unsigned char[12]; - fread (value, 1, 8, f); - directory = new TagDirectory*[2]; - directory[1] = nullptr; - - if (!strncmp ((char*)value, "OLYMPUS", 7)) { - makerNoteKind = OLYMPUS2; - fread (value + 8, 1, 4, f); - valuesize = 12; - directory[0] = new TagDirectory (parent, f, ftell (f) - 12, olympusAttribs, value[8] == 'I' ? INTEL : MOTOROLA); - } else { - directory[0] = new TagDirectory (parent, f, base, olympusAttribs, bom); - } - } else if ( make.find ( "Panasonic" ) != std::string::npos) { - makerNoteKind = HEADERIFD; - valuesize = 12; - value = new unsigned char[12]; - fread (value, 1, 12, f); - directory = new TagDirectory*[2]; - directory[0] = new TagDirectory (parent, f, base, panasonicAttribs, bom, true, parent->getParseJpeg()); - directory[1] = nullptr; - } else { - return false; - } - - return true; -} - -Tag* Tag::clone (TagDirectory* parent) const -{ - - Tag* t = new Tag (parent, attrib); - - t->tag = tag; - t->type = type; - t->count = count; - t->keep = keep; - t->valuesize = valuesize; - - if (value) { - t->value = new unsigned char [valuesize]; - memcpy (t->value, value, valuesize); - } else { - t->value = nullptr; - } - - t->makerNoteKind = makerNoteKind; - - if (directory) { - int ds = 0; - - for (; directory[ds]; ds++); - - t->directory = new TagDirectory*[ds + 1]; - - for (int i = 0; i < ds; i++) { - t->directory[i] = directory[i]->clone (parent); - } - - t->directory[ds] = nullptr; - } else { - t->directory = nullptr; - } - - return t; -} - -Tag::~Tag () -{ - - // delete value - if (value && allocOwnMemory) { - delete [] value; - } - - // if there are directories behind the tag, delete them - if (directory) { - int i = 0; - - while (directory[i]) { - delete directory[i++]; - } - - delete [] directory; - } -} - -int Tag::getDistanceFrom(const TagDirectory *root) -{ - int i = 0; - TagDirectory *currTagDir = parent; - while (currTagDir != nullptr && currTagDir != root) { - ++i; - if (parent->getParent() == currTagDir) { - break; - } - currTagDir = parent->getParent(); - } - return i; -} - -void Tag::setInt (int v, int ofs, TagType astype) -{ - - if (astype == SHORT) { - sset2 (v, value + ofs, getOrder()); - } else if (astype == RATIONAL) { - sset4 (v, value + ofs, getOrder()); - sset4 (1, value + ofs + 4, getOrder()); - } else { - sset4 (v, value + ofs, getOrder()); - } -} - -void Tag::fromInt (int v) -{ - - if (type == SHORT) { - sset2 (v, value, getOrder()); - } else { - sset4 (v, value, getOrder()); - } -} - -void Tag::fromString (const char* v, int size) -{ - - if ( value && allocOwnMemory) { - delete [] value; - } - - if (size < 0) { - valuesize = strlen (v) + 1; - } else { - valuesize = size; - } - - count = valuesize; - - if ( allocOwnMemory ) { - value = new unsigned char [valuesize]; - } - - if(value) { - memcpy ((char*)value, v, valuesize); - } -} - -int Tag::toInt (int ofs, TagType astype) const -{ - if (attrib) { - return attrib->interpreter->toInt (this, ofs, astype); - } - - if (astype == INVALID) { - astype = type; - } - - switch (astype) { - //case SBYTE: return (signed char)(value[ofs]); - case SBYTE: - return int ((reinterpret_cast (value))[ofs]); - - case BYTE: - return value[ofs]; - - case ASCII: - return 0; - - case SSHORT: - return (int)int2_to_signed (sget2 (value + ofs, getOrder())); - - case SHORT: - return (int)sget2 (value + ofs, getOrder()); - - case SLONG: - case LONG: - return (int)sget4 (value + ofs, getOrder()); - - case SRATIONAL: { - int a = (int)sget4 (value + ofs + 4, getOrder()); - return a == 0 ? 0 : (int)sget4 (value + ofs, getOrder()) / a; - } - - case RATIONAL: { - uint32_t a = (uint32_t)sget4 (value + ofs + 4, getOrder()); - return a == 0 ? 0 : (uint32_t)sget4 (value + ofs, getOrder()) / a; - } - - case FLOAT: - return (int)toDouble (ofs); - - case UNDEFINED: - return 0; - - default: - return 0; // Quick fix for missing cases (INVALID, DOUBLE, OLYUNDEF, SUBDIR) - } - - return 0; -} - -double Tag::toDouble (int ofs) const -{ - if (attrib) { - return attrib->interpreter->toDouble (this, ofs); - } - - union IntFloat { - uint32_t i; - float f; - } conv; - - double ud, dd; - - switch (type) { - case SBYTE: - return (double) (int ((reinterpret_cast (value))[ofs])); - - case BYTE: - return (double) ((int)value[ofs]); - - case ASCII: - return 0.0; - - case SSHORT: - return (double)int2_to_signed (sget2 (value + ofs, getOrder())); - - case SHORT: - return (double) ((int)sget2 (value + ofs, getOrder())); - - case SLONG: - case LONG: - return (double) ((int)sget4 (value + ofs, getOrder())); - - case SRATIONAL: - ud = (int)sget4 (value + ofs, getOrder()); - dd = (int)sget4 (value + ofs + 4, getOrder()); - return dd == 0. ? 0. : ud / dd; - - case RATIONAL: - ud = (uint32_t)sget4 (value + ofs, getOrder()); - dd = (uint32_t)sget4 (value + ofs + 4, getOrder()); - return dd == 0. ? 0. : ud / dd; - - case FLOAT: - conv.i = sget4 (value + ofs, getOrder()); - return conv.f; // IEEE FLOATs are already C format, they just need a recast - - case UNDEFINED: - return 0.; - - default: - return 0.; // Quick fix for missing cases (INVALID, DOUBLE, OLYUNDEF, SUBDIR) - } - -} - -/** - * @brief Create an array of the elements - */ -double* Tag::toDoubleArray (int ofs) const -{ - double *values = new double[count]; - - for (unsigned int i = 0; i < count; ++i) { - values[i] = toDouble (ofs + i * getTypeSize (type)); - } - - return values; -} - -void Tag::toRational (int& num, int& denom, int ofs) const -{ - - switch (type) { - case BYTE: - num = (int)value[ofs]; - denom = 1; - break; - - case ASCII: - num = 0; - denom = 0; - break; - - case SSHORT: - case SHORT: - num = (int)sget2 (value + ofs, getOrder()); - denom = 1; - break; - - case SLONG: - case LONG: - num = (int)sget4 (value + ofs, getOrder()); - denom = 1; - break; - - case SRATIONAL: - case RATIONAL: - num = (int)sget4 (value + ofs, getOrder()); - denom = (int)sget4 (value + ofs + 4, getOrder()); - break; - - case FLOAT: - num = 0; - denom = 0; - break; - - case UNDEFINED: - num = 0; - denom = 0; - break; - - default: - num = 0; - denom = 0; - break; // Quick fix for missing cases (INVALID, DOUBLE, OLYUNDEF, SUBDIR) - } -} - -void Tag::toString (char* buffer, std::size_t size, int ofs) const -{ - if (!buffer || !size) { - return; - } - - if (type == UNDEFINED && !directory) { - bool isstring = true; - unsigned int i = 0; - - for (i = 0; i + ofs < count && i < 64 && value[i + ofs]; i++) - if (value[i + ofs] < 32 || value[i + ofs] > 126) { - isstring = false; - } - - if (isstring) { - if (size < 3) { - return; - } - - std::size_t j = 0; - - for (i = 0; i + ofs < count && i < 64 && value[i + ofs]; i++) { - if (value[i + ofs] == '<' || value[i + ofs] == '>') { - buffer[j++] = '\\'; - if (j > size - 2) { - break; - } - } - - buffer[j++] = value[i + ofs]; - if (j > size - 2) { - break; - } - } - - buffer[j++] = 0; - return; - } - } else if (type == ASCII) { - snprintf(buffer, size, "%.64s", value + ofs); - return; - } - - size_t maxcount = rtengine::min(count, 10); - - buffer[0] = 0; - - for (ssize_t i = 0; i < rtengine::min(maxcount, valuesize - ofs); i++) { - std::size_t len = strlen(buffer); - - if (i > 0 && size - len > 2) { - strcat (buffer, ", "); - len += 2; - } - - char* b = buffer + len; - - switch (type) { - case UNDEFINED: - case BYTE: - snprintf(b, size - len, "%d", value[i + ofs]); - break; - - case SSHORT: - snprintf(b, size - len, "%d", toInt (2 * i + ofs)); - break; - - case SHORT: - snprintf(b, size - len, "%u", toInt (2 * i + ofs)); - break; - - case SLONG: - snprintf(b, size - len, "%d", toInt (4 * i + ofs)); - break; - - case LONG: - snprintf(b, size - len, "%u", toInt (4 * i + ofs)); - break; - - case SRATIONAL: - snprintf(b, size - len, "%d/%d", (int)sget4 (value + 8 * i + ofs, getOrder()), (int)sget4 (value + 8 * i + ofs + 4, getOrder())); - break; - - case RATIONAL: - snprintf(b, size - len, "%u/%u", (uint32_t)sget4 (value + 8 * i + ofs, getOrder()), (uint32_t)sget4 (value + 8 * i + ofs + 4, getOrder())); - break; - - case FLOAT: - snprintf(b, size - len, "%g", toDouble (8 * i + ofs)); - break; - - default: - break; - } - } - - if (count > maxcount && size - strlen(buffer) > 3) { - strcat (buffer, "..."); - } -} - -std::string Tag::nameToString (int i) -{ - - char buffer[1025]; - - if (attrib) { - strncpy (buffer, attrib->name, 1024); - } else { - snprintf(buffer, sizeof(buffer), "0x%x", tag); - } - - if (i > 0) { - sprintf (buffer + strlen (buffer) - 1, "[%d]", i); - } - - return buffer; -} - -std::string Tag::valueToString () const -{ - - if (attrib && attrib->interpreter) { - return attrib->interpreter->toString (this); - } else { - char buffer[1024]; - toString (buffer, sizeof(buffer)); - return buffer; - } -} - -void Tag::valueFromString (const std::string& value) -{ - - if (attrib && attrib->interpreter) { - attrib->interpreter->fromString (this, value); - } -} - -void Tag::userCommentFromString (const Glib::ustring& text) -{ - - if (!allocOwnMemory) { - return; - } - if (value) { - delete [] value; - value = nullptr; - } - initUserComment(text); -} - -int Tag::calculateSize () -{ - int size = 0; - - if (directory) { - int j; - - for (j = 0; directory[j]; j++) { - size += directory[j]->calculateSize (); - } - - if (j > 1) { - size += 4 * j; - } - if (makerNoteKind != NOMK) { - count = directory[0]->calculateSize () / getTypeSize (type); - } - } else if (valuesize > 4) { - size += valuesize + (valuesize % 2); // we align tags to even byte positions - } - - - if (makerNoteKind == NIKON3 || makerNoteKind == OLYMPUS2 || makerNoteKind == FUJI || makerNoteKind == HEADERIFD) { - size += valuesize; - } - - return size; -} - -int Tag::write (int offs, int dataOffs, unsigned char* buffer) -{ - - if ((int)type == 0 || offs > 65500) { - return dataOffs; - } - - sset2 (tag, buffer + offs, parent->getOrder()); - offs += 2; - unsigned short typ = type; - sset2 (typ, buffer + offs, parent->getOrder()); - offs += 2; - sset4 (count, buffer + offs, parent->getOrder()); - offs += 4; - - if (!directory) { - if (valuesize > 4) { - sset4 (dataOffs, buffer + offs, parent->getOrder()); - memcpy (buffer + dataOffs, value, valuesize); - - if (valuesize % 2) { - buffer[dataOffs + valuesize] = 0; // zero padding required by the exif standard - } - - return dataOffs + valuesize + (valuesize % 2); - } else { - memcpy (buffer + offs, value, valuesize); - return dataOffs; - } - } else { - if (makerNoteKind == NIKON3) { - sset4 (dataOffs, buffer + offs, parent->getOrder()); - memcpy (buffer + dataOffs, value, 18); - dataOffs += 10; - dataOffs += directory[0]->write (8, buffer + dataOffs); - return dataOffs; - } else if (makerNoteKind == OLYMPUS2 || makerNoteKind == FUJI) { - sset4 (dataOffs, buffer + offs, parent->getOrder()); - memcpy (buffer + dataOffs, value, valuesize); - dataOffs += valuesize + directory[0]->write (valuesize, buffer + dataOffs); - return dataOffs; - } else if (makerNoteKind == HEADERIFD) { - sset4 (dataOffs, buffer + offs, parent->getOrder()); - memcpy (buffer + dataOffs, value, valuesize); - dataOffs += valuesize; - dataOffs += directory[0]->write (dataOffs, buffer); - return dataOffs; - } else if ( makerNoteKind == TABLESUBDIR) { - sset4 (dataOffs, buffer + offs, parent->getOrder()); - dataOffs = directory[0]->write (dataOffs, buffer); - return dataOffs; - } else if (!directory[1]) { - sset4 (dataOffs, buffer + offs, parent->getOrder()); - return directory[0]->write (dataOffs, buffer); - } else { - sset4 (dataOffs, buffer + offs, parent->getOrder()); - int linkOffs = dataOffs; - - for (int i = 0; directory[i]; i++) { - dataOffs += 4; - } - - for (int i = 0; directory[i]; i++) { - sset4 (dataOffs, buffer + linkOffs, parent->getOrder()); - linkOffs += 4; - dataOffs = directory[i]->write (dataOffs, buffer); - } - - return dataOffs; - } - } -} - -Tag::Tag (TagDirectory* p, const TagAttrib* attr) - : tag (attr ? attr->ID : -1), type (INVALID), count (0), value (nullptr), valuesize (0), keep (true), allocOwnMemory (true), attrib (attr), parent (p), directory (nullptr), makerNoteKind (NOMK) -{ -} - -Tag::Tag (TagDirectory* p, const TagAttrib* attr, int data, TagType t) - : tag (attr ? attr->ID : -1), type (t), count (1), value (nullptr), valuesize (0), keep (true), allocOwnMemory (true), attrib (attr), parent (p), directory (nullptr), makerNoteKind (NOMK) -{ - - initInt (data, t); -} - -Tag::Tag (TagDirectory* p, const TagAttrib* attr, unsigned char *data, TagType t) - : tag (attr ? attr->ID : -1), type (t), count (1), value (nullptr), valuesize (0), keep (true), allocOwnMemory (false), attrib (attr), parent (p), directory (nullptr), makerNoteKind (NOMK) -{ - - initType (data, t); -} - -Tag::Tag (TagDirectory* p, const TagAttrib* attr, const char* text) - : tag (attr ? attr->ID : -1), type (ASCII), count (1), value (nullptr), valuesize (0), keep (true), allocOwnMemory (true), attrib (attr), parent (p), directory (nullptr), makerNoteKind (NOMK) -{ - - initString (text); -} - -void Tag::initType (unsigned char *data, TagType type) -{ - valuesize = getTypeSize (type); - - if ( allocOwnMemory ) { - value = new unsigned char[valuesize]; - memcpy ((char*)value, data, valuesize); - } else { - value = data; - } -} - -void Tag::initInt (int data, TagType t, int cnt) -{ - - type = t; - - if (t == LONG) { - valuesize = 4; - } else if (t == SHORT) { - valuesize = 2; - } else if (t == BYTE) { - valuesize = 1; - } else if (t == RATIONAL) { - valuesize = 8; - } - - count = cnt; - valuesize *= count; - value = new unsigned char[valuesize]; - setInt (data, 0, t); -} - -void Tag::swapByteOrder2(unsigned char *buffer, int count) -{ - unsigned char* ptr = buffer; - for (int i = 0; i < count; i+=2) { - unsigned char c = ptr[0]; - ptr[0] = ptr[1]; - ptr[1] = c; - ptr += 2; - } -} -void Tag::initUserComment (const Glib::ustring &text) -{ - const bool useBOM = false; // set it to true if you want to output BOM in UCS-2/UTF-8 UserComments ; this could be turned to an options entry - type = UNDEFINED; - if (text.is_ascii()) { - valuesize = count = 8 + strlen (text.c_str()); - value = new unsigned char[valuesize]; - memcpy(value, "ASCII\0\0\0", 8); - memcpy(value + 8, text.c_str(), valuesize - 8); - } else { - glong wcStrSize = 0; - gunichar2 *commentStr = g_utf8_to_utf16 (text.c_str(), -1, nullptr, &wcStrSize, nullptr); - valuesize = count = wcStrSize * 2 + 8 + (useBOM ? 2 : 0); - value = new unsigned char[valuesize]; - memcpy(value, "UNICODE\0", 8); - - if (useBOM) { - if (getOrder() == INTEL) { //Little Endian - value[8] = 0xFF; - value[9] = 0xFE; - } else { - value[8] = 0xFE; - value[9] = 0xFF; - } - } - - // Swapping byte order to match the Exif's byte order - if (getOrder() != HOSTORDER) { - swapByteOrder2((unsigned char*)commentStr, wcStrSize * 2); - } - - memcpy(value + 8 + (useBOM ? 2 : 0), (char*)commentStr, wcStrSize * 2); - g_free(commentStr); - } -} - -void Tag::initString (const char* text) -{ - - type = ASCII; - count = strlen (text) + 1; - valuesize = count; - value = new unsigned char[valuesize]; - strcpy ((char*)value, text); -} - -void Tag::initSubDir () -{ - type = LONG; - valuesize = 4; - count = 1; - value = new unsigned char[4]; - setInt (0); - directory = new TagDirectory*[2]; - directory[0] = new TagDirectory (parent, attrib ? attrib->subdirAttribs : nullptr, parent->getOrder()); - directory[1] = nullptr; -} - -void Tag::initSubDir (TagDirectory* dir) -{ - type = LONG; - valuesize = 4; - count = 1; - value = new unsigned char[4]; - setInt (0); - directory = new TagDirectory*[2]; - directory[0] = dir; - directory[1] = nullptr; -} - -void Tag::initMakerNote (MNKind mnk, const TagAttrib* ta) -{ - type = UNDEFINED; - valuesize = 4; - count = 1; - value = new unsigned char[4]; - setInt (0); - directory = new TagDirectory*[2]; - directory[0] = new TagDirectory (parent, ta, parent->getOrder()); - directory[1] = nullptr; - makerNoteKind = mnk; -} - -void Tag::initUndefArray (const char* data, int len) -{ - type = UNDEFINED; - count = valuesize = len; - value = new unsigned char[valuesize]; - memcpy (value, data, len); -} - -void Tag::initLongArray (const char* data, int len) -{ - type = LONG; - count = (len + 3) / 4; - valuesize = count * 4; - value = new unsigned char[valuesize]; - memcpy (value, data, len); -} - -void Tag::initRational (int num, int den) -{ - count = 1; - valuesize = 8; - value = new unsigned char[8]; - type = RATIONAL; - setInt (num, 0); - setInt (den, 4); -} - -//--------------- class IFDParser --------------------------------------------- -// static functions to read tag directories from different kinds of files -//----------------------------------------------------------------------------- - - -const TagAttrib* lookupAttrib (const TagAttrib* dir, const char* field) -{ - - for (int i = 0; dir[i].ignore != -1; i++) - if (!strcmp (dir[i].name, field)) { - return &dir[i]; - } - - return nullptr; -} - -void ExifManager::setIFDOffset(unsigned int offset) -{ - IFDOffset = offset; -} - -void ExifManager::parseCIFF () -{ - - TagDirectory* root = new TagDirectory (nullptr, ifdAttribs, INTEL); - Tag* exif = new Tag (root, lookupAttrib (ifdAttribs, "Exif")); - exif->initSubDir (); - root->addTag (exif); - if (exif) { - Tag* mn = new Tag (exif->getDirectory(), lookupAttrib (exifAttribs, "MakerNote")); - mn->initMakerNote (IFD, canonAttribs); - exif->getDirectory()->addTag (mn); - } - parseCIFF (rml->ciffLength, root); - root->sort (); - parse(true); -} - -Tag* ExifManager::saveCIFFMNTag (TagDirectory* root, int len, const char* name) -{ - int s = ftell (f); - if(s >= 0) { - char* data = new char [len]; - fread (data, len, 1, f); - TagDirectory* mn = root->getTag ("Exif")->getDirectory()->getTag ("MakerNote")->getDirectory(); - Tag* cs = new Tag (mn, lookupAttrib (canonAttribs, name)); - cs->initUndefArray (data, len); - mn->addTag (cs); - fseek (f, s, SEEK_SET); - delete [] data; - return cs; - } else { - return nullptr; - } -} - -void ExifManager::parseCIFF (int length, TagDirectory* root) -{ - - if (!f) { - #ifndef NDEBUG - std::cerr << "ERROR : no file opened !" << std::endl; - #endif - return; - } - - char buffer[1024]; - Tag* t; - - if (fseek(f, rml->ciffBase + length - 4, SEEK_SET)) { - return; - } - - int dirStart = get4 (f, INTEL) + rml->ciffBase; - if (fseek(f, dirStart, SEEK_SET)) { - return; - } - - int numOfTags = get2 (f, INTEL); - - if (numOfTags > 100) { - return; - } - - float exptime, shutter, aperture, fnumber, ev; - exptime = fnumber = shutter = aperture = ev = -1000.f; - int focal_len, iso; - focal_len = iso = -1; - - TagDirectory* exif = root->getTag ("Exif")->getDirectory(); - - time_t timestamp = time (nullptr); - - for (int i = 0; i < numOfTags; i++) { - - int type = get2 (f, INTEL); - int len = get4 (f, INTEL); - int nextPos = ftell (f) + 4; - - // seek to the location of the value - fseek (f, rml->ciffBase + get4 (f, INTEL), SEEK_SET); - - if ((((type >> 8) + 8) | 8) == 0x38) { - ExifManager( - f, - std::unique_ptr( - new rtengine::RawMetaDataLocation( - ftell(f), - len - ) - ), - true - ).parseCIFF(len, root); // Parse a sub-table - } - - if (type == 0x0810) { - fread (buffer, 64, 1, f); - t = new Tag (root, lookupAttrib (ifdAttribs, "Artist")); - t->initString (buffer); - root->addTag (t); - } - - if (type == 0x080a) { - fread (buffer, 64, 1, f); - t = new Tag (root, lookupAttrib (ifdAttribs, "Make")); - t->initString (buffer); - root->addTag (t); - if (!fseek (f, strlen (buffer) - 63, SEEK_CUR)) { - if (fread (buffer, 64, 1, f) == 1) { - t = new Tag (root, lookupAttrib (ifdAttribs, "Model")); - t->initString (buffer); - root->addTag (t); - } - } - } - - if (type == 0x1818) { - ev = int_to_float (get4 (f, INTEL)); - shutter = int_to_float (get4 (f, INTEL)); - exptime = pow (2, -shutter); - aperture = int_to_float (get4 (f, INTEL)); - fnumber = pow (2, aperture / 2); - - } - - ExifManager exifManager(f, nullptr, true); - if (type == 0x102d) { - Tag* t = exifManager.saveCIFFMNTag (root, len, "CanonCameraSettings"); - int mm = t->toInt (34, SHORT); - Tag* nt = new Tag (exif, lookupAttrib (exifAttribs, "MeteringMode")); - - switch (mm) { - case 0: - nt->initInt (5, SHORT); - break; - - case 1: - nt->initInt (3, SHORT); - break; - - case 2: - nt->initInt (1, SHORT); - break; - - case 3: - nt->initInt (5, SHORT); - break; - - case 4: - nt->initInt (6, SHORT); - break; - - case 5: - nt->initInt (2, SHORT); - break; - } - - exif->addTag (nt); - nt = new Tag (exif, lookupAttrib (exifAttribs, "MaxApertureValue")); - nt->initRational (t->toInt (52, SHORT), 32); - exif->addTag (nt); - int em = t->toInt (40, SHORT); - nt = new Tag (exif, lookupAttrib (exifAttribs, "ExposureProgram")); - - switch (em) { - case 0: - nt->initInt (2, SHORT); - break; - - case 1: - nt->initInt (2, SHORT); - break; - - case 2: - nt->initInt (4, SHORT); - break; - - case 3: - nt->initInt (3, SHORT); - break; - - case 4: - nt->initInt (1, SHORT); - break; - - default: - nt->initInt (0, SHORT); - break; - } - - exif->addTag (nt); - nt = new Tag (exif, lookupAttrib (exifAttribs, "Flash")); - - if (t->toInt (8, SHORT) == 0) { - nt->initInt (0, SHORT); - } else { - nt->initInt (1, SHORT); - } - - exif->addTag (nt); - nt = new Tag (exif, lookupAttrib (exifAttribs, "MaxApertureValue")); - nt->initRational (t->toInt (52, SHORT), 32); - exif->addTag (nt); - } - - if (type == 0x1029) { - exifManager.saveCIFFMNTag (root, len, "CanonFocalLength"); - } - - if (type == 0x1031) { - exifManager.saveCIFFMNTag (root, len, "SensorInfo"); - } - - if (type == 0x1033) { - exifManager.saveCIFFMNTag (root, len, "CustomFunctions"); - } - - if (type == 0x1038) { - exifManager.saveCIFFMNTag (root, len, "CanonAFInfo"); - } - - if (type == 0x1093) { - exifManager.saveCIFFMNTag (root, len, "CanonFileInfo"); - } - - if (type == 0x10a9) { - exifManager.saveCIFFMNTag (root, len, "ColorBalance"); - } - - if (type == 0x102a) { - exifManager.saveCIFFMNTag (root, len, "CanonShotInfo"); - - iso = pow (2, (get4 (f, INTEL), get2 (f, INTEL)) / 32.0 - 4) * 50; - aperture = (get2 (f, INTEL), (short)get2 (f, INTEL)) / 32.0f; - fnumber = pow (2, aperture / 2); - shutter = ((short)get2 (f, INTEL)) / 32.0f; - ev = ((short)get2 (f, INTEL)) / 32.0f; - fseek (f, 34, SEEK_CUR); - - if (shutter > 1e6f) { - shutter = get2 (f, INTEL) / 10.0f; - } - - exptime = pow (2, -shutter); - } - - if (type == 0x5029) { - focal_len = len >> 16; - - if ((len & 0xffff) == 2) { - focal_len /= 32; - } - } - -// if (type == 0x5813) flash_used = int_to_float(len); - if (type == 0x580e) { - timestamp = len; - } - - if (type == 0x180e) { - timestamp = get4 (f, INTEL); - } - - if ((type | 0x4000) == 0x580e) { - timestamp = mktime (gmtime (×tamp)); - } - - fseek (f, nextPos, SEEK_SET); - } - - if (shutter > -999) { - t = new Tag (exif, lookupAttrib (exifAttribs, "ShutterSpeedValue")); - t->initRational ((int) (shutter * 10000), 10000); - exif->addTag (t); - } - - if (exptime > -999) { - t = new Tag (exif, lookupAttrib (exifAttribs, "ExposureTime")); - t->initRational ((int) (exptime * 10000), 10000); - exif->addTag (t); - } - - if (aperture > -999) { - t = new Tag (exif, lookupAttrib (exifAttribs, "ApertureValue")); - t->initRational ((int) (aperture * 10), 10); - exif->addTag (t); - } - - if (fnumber > -999) { - t = new Tag (exif, lookupAttrib (exifAttribs, "FNumber")); - t->initRational ((int) (fnumber * 10), 10); - exif->addTag (t); - } - - if (ev > -999) { - t = new Tag (exif, lookupAttrib (exifAttribs, "ExposureBiasValue")); - t->initRational ((int) (ev * 1000), 1000); - exif->addTag (t); - } - - if (iso > 0) { - t = new Tag (exif, lookupAttrib (exifAttribs, "ISOSpeedRatings")); - t->initInt (iso, LONG); - exif->addTag (t); - } - - if (focal_len > 0) { - t = new Tag (exif, lookupAttrib (exifAttribs, "FocalLength")); - t->initRational (focal_len * 32, 32); - exif->addTag (t); - } - - if (timestamp != time (nullptr)) { - struct tm* tim = localtime (×tamp); - strftime (buffer, 20, "%Y:%m:%d %H:%M:%S", tim); - t = new Tag (exif, lookupAttrib (exifAttribs, "DateTimeOriginal")); - t->initString (buffer); - exif->addTag (t); - t = new Tag (exif, lookupAttrib (exifAttribs, "DateTimeDigitized")); - t->initString (buffer); - exif->addTag (t); - t = new Tag (root, lookupAttrib (ifdAttribs, "DateTime")); - t->initString (buffer); - root->addTag (t); - } - - roots.push_back(root); - -} - -static void -parse_leafdata (TagDirectory* root, ByteOrder order) -{ - - Tag *leafdata = root->getTag ("LeafData"); - - if (!leafdata) { - return; - } - - unsigned char *value = leafdata->getValue(); - int valuesize = leafdata->getValueSize(); - - // parse LeafData tag, a tag specific to Leaf digital backs, and has a custom - // format with 52 byte tag headers starting with "PKTS" - const char *PKTS_tag = (order == MOTOROLA) ? "PKTS" : "STKP"; - char *hdr; - int pos = 0; - - // There are lots of sub-tags in here, but for now we only care about those directly - // useful to RT, which is ISO and rotation. Shutter speed and aperture is not - // available here. - int iso_speed = 0; - int rotation_angle = 0; - int found_count = 0; - - while (pos + (int)sizeof (hdr) <= valuesize && found_count < 2) { - hdr = (char *)&value[pos]; - - if (strncmp (hdr, PKTS_tag, 4) != 0) { - // in a few cases the header can be offset a few bytes, don't know why - // it does not seem to be some sort of alignment, it appears random, - // this check takes care of it, restart if we find an offset match. - int offset = 1; - - for (; offset <= 3; offset++) { - if (strncmp (&hdr[offset], PKTS_tag, 4) == 0) { - pos += offset; - break; - } - } - - if (offset <= 3) { - continue; - } - - break; - } - - int size = sget4 ((unsigned char *)&hdr[48], order); - - if (pos + size > valuesize) { - break; - } - - pos += 52; - char *val = (char *)&value[pos]; - - if (strncmp (&hdr[8], "CameraObj_ISO_speed", 19) == 0) { - iso_speed = 25 * (1 << std::max((atoi (val) - 1), 0)); - found_count++; - } else if (strncmp (&hdr[8], "ImgProf_rotation_angle", 22) == 0) { - rotation_angle = atoi (val); - found_count++; - } else { - // check if this is a sub-directory, include test for that strange offset of next header - if (size >= 8 && - (strncmp (val, PKTS_tag, 4) == 0 || - strncmp (&val[1], PKTS_tag, 4) == 0 || - strncmp (&val[2], PKTS_tag, 4) == 0 || - strncmp (&val[3], PKTS_tag, 4) == 0)) { - // start of next hdr, this is a sub-directory, we skip those for now. - size = 0; - } - } - - pos += size; - } - - // create standard tags from the custom Leaf tags - Tag* exif = root->getTag ("Exif"); - - if (!exif) { - exif = new Tag (root, root->getAttrib ("Exif")); - exif->initSubDir(); - root->addTagFront (exif); - } - - if (exif && !exif->getDirectory()->getTag ("ISOSpeedRatings")) { - Tag *t = new Tag (exif->getDirectory(), exif->getDirectory()->getAttrib ("ISOSpeedRatings")); - t->initInt (iso_speed, LONG); - exif->getDirectory()->addTagFront (t); - } - - if (!root->getTag ("Orientation")) { - int orientation; - - switch (rotation_angle) { - case 0: - orientation = 1; - break; - - case 90: - orientation = 6; - break; - - case 180: - orientation = 3; - break; - - case 270: - orientation = 8; - break; - - default: - orientation = 1; - break; - } - - Tag *t = new Tag (root, root->getAttrib ("Orientation")); - t->initInt (orientation, SHORT); - root->addTagFront (t); - } - - // now look in ApplicationNotes tag for additional information - Tag *appnotes = root->getTag ("ApplicationNotes"); - - if (!appnotes) { - return; - } - - char *xmp = (char *)appnotes->getValue(); - char *end, *p; - - // Quick-and-dirty value extractor, no real xml parsing. - // We could make it more generic, but we just get most important - // values we know use to be in there. - if ((p = strstr (xmp, "xmlns:tiff")) != nullptr && - (end = strstr (p, "")) != nullptr) { - *end = '\0'; - - while ((p = strstr (p, "')) == nullptr) { - break; - } - - *tagend = '\0'; - char *val = &tagend[1]; - - if ((p = strstr (val, "getAttrib (tag) && !root->getTag (tag)) { - Tag *t = new Tag (root, root->getAttrib (tag)); - - if (strcmp (tag, "Make") == 0 || - strcmp (tag, "Model") == 0) { - if (strcmp (tag, "Model") == 0) { - // Leaf adds back serial number and camera model to the 'Model' - // tag, we strip that away here so the back can be recognized - // and matched against DCP profile - char *p1 = strchr (val, '('); - - if (p1 != nullptr) { - *p1 = '\0'; - } - - // Model name also contains a leading "Leaf " which we already - // have in the Make name, remove that. - if (strstr (val, "Leaf ") == val) { - t->initString (&val[5]); - } else { - t->initString (val); - } - - if (p1 != nullptr) { - *p1 = '('; - } - } else { - t->initString (val); - } - - root->addTagFront (t); - } else { - delete t; - } - } - - *p = '<'; - *tagend = '>'; - } - - *end = '<'; - } - - if ((p = strstr (xmp, "xmlns:exif")) != nullptr && - (end = strstr (p, "")) != nullptr) { - *end = '\0'; - - while ((p = strstr (p, "')) == nullptr) { - break; - } - - *tagend = '\0'; - char *val = &tagend[1]; - - if ((p = strstr (val, "getDirectory()->getAttrib (tag) && !exif->getDirectory()->getTag (tag)) { - Tag *t = new Tag (exif->getDirectory(), exif->getDirectory()->getAttrib (tag)); - int num, denom; - struct tm tm; - - if (strcmp (tag, "ApertureValue") == 0 && sscanf (val, "%d/%d", &num, &denom) == 2) { - t->initRational (num, denom); - exif->getDirectory()->addTagFront (t); - // we also make an "FNumber" tag since many tools don't interpret ApertureValue - // according to Exif standard - t = new Tag (exif->getDirectory(), lookupAttrib (exifAttribs, "FNumber")); - double f = pow (sqrt (2.0), ((double)num / denom)); - - if (f > 10.0) { - t->initRational ((int)floor (f), 1); - } else { - t->initRational ((int)floor (f * 10.0), 10); - } - - exif->getDirectory()->addTagFront (t); - } else if (strcmp (tag, "ShutterSpeedValue") == 0 && sscanf (val, "%d/%d", &num, &denom) == 2) { - t->initRational (num, denom); - exif->getDirectory()->addTagFront (t); - // we also make an "ExposureTime" tag since many tools don't interpret ShutterSpeedValue - // according to Exif standard - t = new Tag (exif->getDirectory(), lookupAttrib (exifAttribs, "ExposureTime")); - double f = 1.0 / pow (2.0, ((double)num / denom)); - - if (f > 10.0) { - t->initRational ((int)floor (f), 1); - } else if (f > 1.0) { - t->initRational ((int)floor (f * 10.0), 10); - } else if (f == 1.0) { - t->initRational (1, 1); - } else { - f = 1.0 / f; - static const double etimes[] = { - 10000, 8000, 6400, 6000, 5000, - 4000, 3200, 3000, 2500, - 2000, 1600, 1500, 1250, - 1000, 800, 750, 640, - 500, 400, 350, 320, - 250, 200, 180, 160, - 125, 100, 90, 80, - 60, 50, 45, 40, - 30, 25, 22, 20, - 15, 13, 11, 10, - 8, 6, 5, - 4, 3, 2.5, - 2, 1.6, 1.5, 1.3, - 1, -1 - }; - double diff = etimes[0]; - int idx = -1; - - for (int i = 1; etimes[i] > 0; i++) { - if (abs (etimes[i] - f) < diff) { - idx = i; - diff = abs (etimes[i] - f); - } - } - - if (idx != -1 && f < etimes[0]) { - f = etimes[idx]; - } - - if (f < 2) { - t->initRational (10, (int) (10 * f)); - } else { - t->initRational (1, (int)f); - } - } - - exif->getDirectory()->addTagFront (t); - } else if (strcmp (tag, "FocalLength") == 0 && sscanf (val, "%d/%d", &num, &denom) == 2) { - t->initRational (num, denom); - exif->getDirectory()->addTagFront (t); - } else if (strcmp (tag, "ISOSpeedRatings") == 0) { - char *p1 = val; - - while (*p1 != '\0' && !isdigit (*p1)) { - p1++; - } - - if (*p1 != '\0') { - t->initInt (atoi (p1), LONG); - exif->getDirectory()->addTagFront (t); - } else { - delete t; - } - } else if (strcmp (tag, "DateTimeOriginal") == 0 && - sscanf (val, "%d-%d-%dT%d:%d:%dZ", - &tm.tm_year, &tm.tm_mon, - &tm.tm_mday, &tm.tm_hour, - &tm.tm_min, &tm.tm_sec) == 6) { - char tstr[64]; - snprintf(tstr, sizeof(tstr), "%04d:%02d:%02d %02d:%02d:%02d", tm.tm_year, tm.tm_mon, - tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); - t->initString (tstr); - exif->getDirectory()->addTagFront (t); - } else { - delete t; - } - } - - *p = '<'; - *tagend = '>'; - } - - *end = '<'; - } -} - -void ExifManager::parseRaw (bool skipIgnored) { - parse(true, skipIgnored); -} - -void ExifManager::parseStd (bool skipIgnored) { - parse(false, skipIgnored); -} - -void ExifManager::parse (bool isRaw, bool skipIgnored, bool parseJpeg) -{ - int ifdOffset = IFDOffset; - - if (!f) { - #ifndef NDEBUG - std::cerr << "ERROR : no file opened !" << std::endl; - #endif - return; - } - setlocale (LC_NUMERIC, "C"); // to set decimal point in sscanf - - if (order == ByteOrder::UNKNOWN) { - // read tiff header - fseek (f, rml->exifBase, SEEK_SET); - unsigned short bo; - fread (&bo, 1, 2, f); - order = (ByteOrder) ((int)bo); - get2 (f, order); - if (!ifdOffset) { - ifdOffset = get4 (f, order); - } - } - - do { - // seek to IFD - fseek (f, rml->exifBase + ifdOffset, SEEK_SET); - - // first read the IFD directory - TagDirectory* root = new TagDirectory (nullptr, f, rml->exifBase, ifdAttribs, order, skipIgnored, parseJpeg); - - // fix ISO issue with nikon and panasonic cameras - Tag* make = root->getTag ("Make"); - Tag* exif = root->getTag ("Exif"); - - if (exif && !exif->getDirectory()->getTag ("ISOSpeedRatings")) { - if (make && !strncmp ((char*)make->getValue(), "NIKON", 5)) { - Tag* mn = exif->getDirectory()->getTag ("MakerNote"); - - if (mn) { - Tag* iso = mn->getDirectory()->getTag ("ISOSpeed"); - - if (iso) { - std::string isov = iso->valueToString (); - Tag* niso = new Tag (exif->getDirectory(), exif->getDirectory()->getAttrib ("ISOSpeedRatings")); - niso->initInt (atoi (isov.c_str()), SHORT); - exif->getDirectory()->addTagFront (niso); - } - } - } else if (make && (!strncmp ((char*)make->getValue(), "Panasonic", 9) || !strncmp ((char*)make->getValue(), "LEICA", 5))) { - Tag* iso = root->getTag ("PanaISO"); - - if (iso) { - std::string isov = iso->valueToString (); - Tag* niso = new Tag (exif->getDirectory(), exif->getDirectory()->getAttrib ("ISOSpeedRatings")); - niso->initInt (atoi (isov.c_str()), SHORT); - exif->getDirectory()->addTagFront (niso); - } - } - } - - if (make && !strncmp ((char*)make->getValue(), "Kodak", 5)) { - if (!exif) { - // old Kodak cameras may have exif tags in IFD0, reparse and create an exif subdir - fseek (f, rml->exifBase + ifdOffset, SEEK_SET); - TagDirectory* exifdir = new TagDirectory (nullptr, f, rml->exifBase, exifAttribs, order, true); - - exif = new Tag (root, root->getAttrib ("Exif")); - exif->initSubDir (exifdir); - root->addTagFront (exif); - - if (exif && !exif->getDirectory()->getTag ("ISOSpeedRatings") && exif->getDirectory()->getTag ("ExposureIndex")) { - Tag* niso = new Tag (exif->getDirectory(), exif->getDirectory()->getAttrib ("ISOSpeedRatings")); - niso->initInt (exif->getDirectory()->getTag ("ExposureIndex")->toInt(), SHORT); - exif->getDirectory()->addTagFront (niso); - } - } - - Tag *kodakIFD = root->getTag ("KodakIFD"); - - if (kodakIFD && kodakIFD->getDirectory()->getTag ("TextualInfo")) { - parseKodakIfdTextualInfo (kodakIFD->getDirectory()->getTag ("TextualInfo"), exif); - } - } - - parse_leafdata (root, order); - - if (make && !strncmp ((char*)make->getValue(), "Hasselblad", 10)) { - /* - Figuring out the Hasselblad model is a mess. Hasselblad raw data comes in four slightly - different containers, 3FR (directly from CF card), FFF (same as 3FR but filtered through - Phocus, calibration data applied and a bit different tags), Adobe-generated DNGs and - Phocus-generated DNGs. - - FFF usually has a sane model name in Model (and is used as reference for what we shall - call the different Hasselblad models), but 3FR only says like "Hasselblad H3D" for - all H3D models, or "Flash Sync" if the back has been used on a mechanical camera body. - V-mount backs may have the model name of the V body instead of the back model. Etc... - as said it's a mess. - - This code is supposed to handle all raw containers and end up with the same model - regardless of container. - - We don't differ between single shot and multi-shot models, and probably there's no use - of doing so. You need Hasselblad's own software to shoot multi-shot and can only do that - tethered. In single-shot mode they should be exactly the same as the single-shot models. - */ - Tag *subd = root->getTag (0x14a); - Tag *iw = (subd) ? subd->getDirectory()->getTag ("ImageWidth") : nullptr; - int sensorWidth = (iw) ? iw->toInt() : 0; - Tag* tmodel = root->getTag ("Model"); - const char *model = (tmodel) ? (const char *)tmodel->getValue() : ""; - - if (strstr (model, "Hasselblad ") == model) { - model += 11; - } else { - // if HxD is used in flash sync mode for example, we need to fetch model from this tag - Tag* tmodel3 = root->getTag ("UniqueCameraModel"); - const char *model3 = (tmodel3) ? (const char *)tmodel3->getValue() : ""; - - if (strstr (model3, "Hasselblad ") == model3) { - model = model3 + 11; - } - } - - // FIXME: due to lack of test files this Hasselblad model identification is not 100% complete - // This needs checking out: CFV-39/CFV-50 3FR, H3DII vs H3D, old CF/CFH models - - if (!strcmp (model, "H3D")) { - // We can't differ between H3D and H3DII for the 22, 31 and 39 models. There's was no H3D-50 so we know that is a - // H3DII-50. At the time of writing I have no test files for the H3D vs H3DII models, so there still may be a chance - // to differ between them. AFAIK Adobe's DNG converter don't differ between them, and actually call the H3DII-50 - // H3D-50 although Hasselblad never released such a model. - switch (sensorWidth) { - case 4096: - tmodel->initString ("H3D-22"); - break; - - case 6542: - tmodel->initString ("H3D-31"); - break; - - case 7262: - tmodel->initString ("H3D-39"); - break; - - case 8282: - tmodel->initString ("H3DII-50"); - break; - } - } else if (!strcmp (model, "H4D")) { - switch (sensorWidth) { - case 6542: - tmodel->initString ("H4D-31"); - break; - - case 7410: - tmodel->initString ("H4D-40"); - break; - - case 8282: - tmodel->initString ("H4D-50"); - break; - - case 9044: - tmodel->initString ("H4D-60"); - break; - } - } else if (!strcmp (model, "H5D")) { - switch (sensorWidth) { - case 7410: - tmodel->initString ("H5D-40"); - break; - - case 8282: - tmodel->initString ("H5D-50"); - break; - - case 8374: - tmodel->initString ("H5D-50c"); - break; - - case 9044: - tmodel->initString ("H5D-60"); - break; - } - } else if (!strcmp (model, "CFV")) { - switch (sensorWidth) { - case 7262: - tmodel->initString ("CFV-39"); - break; - - case 8282: - tmodel->initString ("CFV-50"); - break; - - case 8374: - tmodel->initString ("CFV-50c"); - break; - } - } - - // and a few special cases - Tag* tmodel3 = root->getTag ("UniqueCameraModel"); - const char *model3 = (tmodel3) ? (const char *)tmodel3->getValue() : ""; - - if (strstr (model3, "Hasselblad ") == model3) { - model3 = model3 + 11; - } - - if (!strcmp (model3, "ixpressCF132")) { - tmodel->initString ("CF-22"); - } else if (!strcmp (model3, "Hasselblad96")) { - tmodel->initString ("CFV"); // popularly called CFV-16, but the official name is CFV - } else if (!strcmp (model3, "Hasselblad234")) { - tmodel->initString ("CFV-39"); - } else if (sensorWidth == 4090) { - tmodel->initString ("V96C"); - } - - // and yet some, this is for Adobe-generated DNG files - Tag* tmodel4 = root->getTag ("LocalizedCameraModel"); - - if (tmodel4) { - const char *model4 = (const char *)tmodel4->getValue(); - - if (strstr (model4, "Hasselblad ") == model4) { - model4 = model4 + 11; - } - - if (!strcmp (model4, "ixpressCF132-22")) { - tmodel->initString ("CF-22"); - } else if (!strcmp (model4, "Hasselblad96-16")) { - tmodel->initString ("CFV"); - } else if (!strcmp (model4, "Hasselblad234-39")) { - tmodel->initString ("CFV-39"); - } else if (!strcmp (model4, "H3D-50")) { - // Adobe names H3DII-50 incorrectly as H3D-50 - tmodel->initString ("H3DII-50"); - } else if (strstr (model4, "H3D-") == model4 || strstr (model4, "H4D-") == model4 || strstr (model4, "H5D-") == model4) { - tmodel->initString (model4); - } - } - } - - if (!root->getTag ("Orientation")) { - if (make && !strncmp ((char*)make->getValue(), "Phase One", 9)) { - int orientation = 0; - Tag *iw = root->getTag ("ImageWidth"); - - if (iw) { - // from dcraw, derive orientation from image width - orientation = "0653"[iw->toInt() & 3] - '0'; - } - - Tag *t = new Tag (root, root->getAttrib ("Orientation")); - t->initInt (orientation, SHORT); - root->addTagFront (t); - } - } - - if (!root->getTag ("Rating")) { - Tag *t = new Tag (root, root->getAttrib("Rating")); - t->initInt (0, LONG); - root->addTag (t); - } - - // --- detecting image root IFD based on SubFileType, or if not provided, on PhotometricInterpretation - - bool frameRootDetected = false; - - for (auto ris : root->findTags("RawImageSegmentation")) { - frames.push_back(ris->getParent()); - frameRootDetected = true; - -#if PRINT_METADATA_TREE - printf("\n--------------- FRAME (RAWIMAGESEGMENTATION) ---------------\n\n"); - ris->getParent()->printAll (); -#endif - } - - if(!frameRootDetected) { - std::vector sftTagList = root->findTags(TIFFTAG_SUBFILETYPE); - if (!sftTagList.empty()) { - for (auto sft : sftTagList) { - int sftVal = sft->toInt(); - if (sftVal == 0 || (!isRaw && sftVal == 2)) { - frames.push_back(sft->getParent()); - frameRootDetected = true; - -#if PRINT_METADATA_TREE - printf("\n--------------- FRAME (SUBFILETYPE) ---------------\n\n"); - sft->getParent()->printAll (); -#endif - } - } - } - } - - if(!frameRootDetected) { - std::vector sftTagList = root->findTags(TIFFTAG_OSUBFILETYPE); - if (!sftTagList.empty()) { - for (auto sft : sftTagList) { - int sftVal = sft->toInt(); - if (sftVal == OFILETYPE_IMAGE) { - frames.push_back(sft->getParent()); - frameRootDetected = true; - -#if PRINT_METADATA_TREE - printf("\n--------------- FRAME (OSUBFILETYPE) ---------------\n\n"); - sft->getParent()->printAll (); -#endif - } - } - } - } - - if(!frameRootDetected) { - std::vector piTagList = root->findTags("PhotometricInterpretation"); - if (!piTagList.empty()) { - for (auto pi : piTagList) { - int piVal = pi->toInt(); - if (piVal == (isRaw ? 32803 : 2)) { - frames.push_back(pi->getParent()); - //frameRootDetected = true; not used afterward - -#if PRINT_METADATA_TREE - printf("\n--------------- FRAME (PHOTOMETRIC) ---------------\n\n"); - pi->getParent()->printAll (); -#endif - } - } - } - } - - // --- getting next sibling root - - ifdOffset = get4 (f, order); - - roots.push_back(root); - -#if PRINT_METADATA_TREE - printf("\n~~~~~~~~~ ROOT ~~~~~~~~~~~~~~~~~~~~~~~~\n\n"); - root->printAll (); -#endif - - } while (ifdOffset > 0 && !onlyFirst); - - // Security check : if there's at least one root, there must be at least one image. - // If the following occurs, then image detection above has failed or it's an unsupported file type. - // Yet the result of this should be valid. - if (!roots.empty() && frames.empty()) { - frames.push_back(roots.at(0)); - } -} - -void ExifManager::parseJPEG (int offset) -{ - if (!f) { - #ifndef NDEBUG - std::cerr << "ERROR : no file opened !" << std::endl; - #endif - return; - } - - if(!fseek (f, offset, SEEK_SET)) { - unsigned char c; - if(fread (&c, 1, 1, f) == 1) { - constexpr unsigned char markerl = 0xff; - const char exifid[] = "Exif\0\0"; - char idbuff[8]; - int tiffbase = -1; - - while (fread (&c, 1, 1, f)) { - if (c != markerl) { - continue; - } - - if (fread (&c, 1, 1, f) && c == 0xe1) { // APP1 marker found - if (fread (idbuff, 1, 8, f) < 8) { - return; - } - - if (!memcmp (idbuff + 2, exifid, 6)) { // Exif info found - tiffbase = ftell (f); - - // We need a RawMetaDataLocation to put the 'tiffbase' value - const bool rmlCreated = !rml; - if (rmlCreated) { - rml.reset(new rtengine::RawMetaDataLocation(0)); - } - rml->exifBase = tiffbase; - parse (false, true, false); - if (rmlCreated) { - rml.reset(); - } - return; - } - } - } - } - } -} - -void ExifManager::parseTIFF (bool skipIgnored) -{ - if (!rml) { - rml.reset(new rtengine::RawMetaDataLocation(0)); - parse(false, skipIgnored); - rml.reset(); - } else { - parse (false,skipIgnored); - } -} - -std::vector ExifManager::getDefaultTIFFTags (TagDirectory* forthis) -{ - - std::vector defTags; - - defTags.reserve (12); - defTags.push_back (new Tag (forthis, lookupAttrib (ifdAttribs, "ImageWidth"), 0, LONG)); - defTags.push_back (new Tag (forthis, lookupAttrib (ifdAttribs, "ImageHeight"), 0, LONG)); - defTags.push_back (new Tag (forthis, lookupAttrib (ifdAttribs, "XResolution"), 300, RATIONAL)); - defTags.push_back (new Tag (forthis, lookupAttrib (ifdAttribs, "YResolution"), 300, RATIONAL)); - defTags.push_back (new Tag (forthis, lookupAttrib (ifdAttribs, "ResolutionUnit"), 2, SHORT)); - defTags.push_back (new Tag (forthis, lookupAttrib (ifdAttribs, "Software"), "RawTherapee " RTVERSION)); - defTags.push_back (new Tag (forthis, lookupAttrib (ifdAttribs, "Orientation"), 1, SHORT)); - defTags.push_back (new Tag (forthis, lookupAttrib (ifdAttribs, "SamplesPerPixel"), 3, SHORT)); - defTags.push_back (new Tag (forthis, lookupAttrib (ifdAttribs, "BitsPerSample"), 8, SHORT)); - defTags.push_back (new Tag (forthis, lookupAttrib (ifdAttribs, "PlanarConfiguration"), 1, SHORT)); - defTags.push_back (new Tag (forthis, lookupAttrib (ifdAttribs, "PhotometricInterpretation"), 2, SHORT)); - defTags.push_back (new Tag (forthis, lookupAttrib (ifdAttribs, "Compression"), 1, SHORT)); - - return defTags; -} - - - -void ExifManager::createJPEGMarker (const TagDirectory* root, const rtengine::procparams::ExifPairs& changeList, int W, int H, unsigned char *&buffer, unsigned &bufferSize) -{ - - // write tiff header - int offs = 6; // "Exif\0\0" - ByteOrder order = INTEL; - - if (root) { - order = root->getOrder (); - } - - TagDirectory* cl; - - if (root) { - cl = root->clone(nullptr); - - // Drop unwanted tags before exporting - // For example, Nikon Z-series has a 52Kb MakerNotes->ShotInfo tag - // which does not fit into the 65Kb limit on JPEG exif tags - const Tag* const make_tag = cl->getTag(271); - if (make_tag && !std::strncmp((const char*)make_tag->getValue(), "NIKON CORPORATION", 17)) { - [cl]() - { - Tag* const exif_tag = cl->getTag(34665); - if (!exif_tag) { - return; - } - - TagDirectory* const exif_dir = exif_tag->getDirectory(); - if (!exif_dir) { - return; - } - - Tag* const make_notes_tag = exif_dir->getTag(37500); - if (!make_notes_tag) { - return; - } - - TagDirectory* const maker_notes_dir = make_notes_tag->getDirectory(); - if (!maker_notes_dir) { - return; - } - - Tag* const shot_info_tag = maker_notes_dir->getTag(145); - if (!shot_info_tag) { - return; - } - - shot_info_tag->setKeep(false); - }(); - } - } else { - cl = new TagDirectory (nullptr, ifdAttribs, INTEL); - } - - for (rtengine::procparams::ExifPairs::const_iterator i = changeList.begin(); i != changeList.end(); ++i) { - cl->applyChange (i->first, i->second); - } - - const std::vector defTags = getDefaultTIFFTags (cl); - - defTags[0]->setInt (W, 0, LONG); - defTags[1]->setInt (H, 0, LONG); - defTags[8]->setInt (8, 0, SHORT); - - for (int i = defTags.size() - 1; i >= 0; i--) { - Tag* defTag = defTags[i]; - cl->replaceTag (defTag->clone (cl)); - delete defTag; - } - - cl->sort (); - bufferSize = cl->calculateSize() + 8 + 6; - buffer = new unsigned char[bufferSize]; // this has to be deleted in caller - memcpy (buffer, "Exif\0\0", 6); - sset2 ((unsigned short)order, buffer + offs, order); - offs += 2; - sset2 (42, buffer + offs, order); - offs += 2; - sset4 (8, buffer + offs, order); - - cl->write (8, buffer + 6); - - delete cl; -} - -int ExifManager::createPNGMarker(const TagDirectory* root, const rtengine::procparams::ExifPairs &changeList, int W, int H, int bps, const char* iptcdata, int iptclen, unsigned char *&buffer, unsigned &bufferSize) -{ -// write tiff header - int offs = 0; - ByteOrder order = HOSTORDER; - - if (root) { - order = root->getOrder (); - } - - TagDirectory* cl; - - if (root) { - cl = (const_cast (root))->clone (nullptr); - // remove some unknown top level tags which produce warnings when opening a tiff - Tag *removeTag = cl->getTag (0x9003); - - if (removeTag) { - removeTag->setKeep (false); - } - - removeTag = cl->getTag (0x9211); - - if (removeTag) { - removeTag->setKeep (false); - } - } else { - cl = new TagDirectory (nullptr, ifdAttribs, HOSTORDER); - } - - if (iptcdata) { - Tag* iptc = new Tag (cl, lookupAttrib (ifdAttribs, "IPTCData")); - iptc->initLongArray (iptcdata, iptclen); - cl->replaceTag (iptc); - } - -// apply list of changes - for (rtengine::procparams::ExifPairs::const_iterator i = changeList.begin(); i != changeList.end(); ++i) { - cl->applyChange (i->first, i->second); - } - - // append default properties - const std::vector defTags = getDefaultTIFFTags (cl); - - defTags[0]->setInt (W, 0, LONG); - defTags[1]->setInt (H, 0, LONG); - defTags[8]->initInt (0, SHORT, 3); - - for (int i = 0; i < 3; i++) { - defTags[8]->setInt (bps, i * 2, SHORT); - } - - for (int i = defTags.size() - 1; i >= 0; i--) { - Tag* defTag = defTags[i]; - cl->replaceTag (defTag->clone (cl)); - delete defTag; - } - - cl->sort (); - bufferSize = cl->calculateSize() + 8; - buffer = new unsigned char[bufferSize]; // this has to be deleted in caller - sset2 ((unsigned short)order, buffer + offs, order); - offs += 2; - sset2 (42, buffer + offs, order); - offs += 2; - sset4 (8, buffer + offs, order); - - int endOffs = cl->write (8, buffer); - -// cl->printAll(); - delete cl; - - return endOffs; -} - - -//----------------------------------------------------------------------------- -// global functions to read byteorder dependent data -//----------------------------------------------------------------------------- -unsigned short sget2 (unsigned char *s, rtexif::ByteOrder order) -{ - - if (order == rtexif::INTEL) { - return s[0] | s[1] << 8; - } else { - return s[0] << 8 | s[1]; - } -} - -int sget4 (unsigned char *s, rtexif::ByteOrder order) -{ - - if (order == rtexif::INTEL) { - return s[0] | s[1] << 8 | s[2] << 16 | s[3] << 24; - } else { - return s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3]; - } -} - -inline unsigned short get2 (FILE* f, rtexif::ByteOrder order) -{ - - unsigned char str[2] = { 0xff, 0xff }; - fread (str, 1, 2, f); - return rtexif::sget2 (str, order); -} - -int get4 (FILE* f, rtexif::ByteOrder order) -{ - - unsigned char str[4] = { 0xff, 0xff, 0xff, 0xff }; - fread (str, 1, 4, f); - return rtexif::sget4 (str, order); -} - -void sset2 (unsigned short v, unsigned char *s, rtexif::ByteOrder order) -{ - - if (order == rtexif::INTEL) { - s[0] = v & 0xff; - v >>= 8; - s[1] = v; - } else { - s[1] = v & 0xff; - v >>= 8; - s[0] = v; - } -} - -void sset4 (int v, unsigned char *s, rtexif::ByteOrder order) -{ - - if (order == rtexif::INTEL) { - s[0] = v & 0xff; - v >>= 8; - s[1] = v & 0xff; - v >>= 8; - s[2] = v & 0xff; - v >>= 8; - s[3] = v; - } else { - s[3] = v & 0xff; - v >>= 8; - s[2] = v & 0xff; - v >>= 8; - s[1] = v & 0xff; - v >>= 8; - s[0] = v; - } -} - -float int_to_float (int i) -{ - union { - int i; - float f; - } u; - u.i = i; - return u.f; -} - -short int int2_to_signed (short unsigned int i) -{ - union { - short unsigned int i; - short int s; - } u; - u.i = i; - return u.s; -} - -/* Function to parse and extract focal length and aperture information from description - * @fullname must conform to the following formats - * mm f/ - * -mm f/ - * -mm f/- - * NB: no space between separator '-'; no space between focal length and 'mm' - */ -bool extractLensInfo (const std::string &fullname, double &minFocal, double &maxFocal, double &maxApertureAtMinFocal, double &maxApertureAtMaxFocal) -{ - minFocal = 0.0; - maxFocal = 0.0; - maxApertureAtMinFocal = 0.0; - maxApertureAtMaxFocal = 0.0; - char buffer[1025]; - strncpy (buffer, fullname.c_str(), 1024); - char *pF = strstr (buffer, "f/" ); - - if ( pF ) { - sscanf (pF + 2, "%lf-%lf", &maxApertureAtMinFocal, &maxApertureAtMaxFocal); - - if (maxApertureAtMinFocal > 0. && maxApertureAtMaxFocal == 0.) { - maxApertureAtMaxFocal = maxApertureAtMinFocal; - } - - char *pMM = pF - 3; - - while ( pMM[0] != 'm' && pMM[1] != 'm' && pMM > buffer) { - pMM--; - } - - if ( pMM[0] == 'm' && pMM[1] == 'm' ) { - char *sp = pMM; - - while ( *sp != ' ' && sp > buffer ) { - sp--; - } - - sscanf (sp + 1, "%lf-%lf", &minFocal, &maxFocal); - - if (maxFocal == 0.) { - maxFocal = minFocal; - } - - return true; - } - } - - return false; -} - -} diff --git a/rtexif/rtexif.h b/rtexif/rtexif.h deleted file mode 100644 index 0b44bc47a..000000000 --- a/rtexif/rtexif.h +++ /dev/null @@ -1,706 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * 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 RawTherapee. If not, see . - */ -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "../rtengine/noncopyable.h" -#include "../rtengine/rawmetadatalocation.h" - -namespace Glib -{ - class KeyFile; -} -namespace rtengine -{ - -namespace procparams -{ - class ExifPairs; -} - -} - -class CacheImageData; - -namespace rtexif -{ - -enum TagType {INVALID = 0, BYTE = 1, ASCII = 2, SHORT = 3, LONG = 4, RATIONAL = 5, SBYTE = 6, UNDEFINED = 7, SSHORT = 8, SLONG = 9, SRATIONAL = 10, FLOAT = 11, DOUBLE = 12, OLYUNDEF = 13, AUTO = 98, SUBDIR = 99}; -enum ActionCode { - AC_DONTWRITE, // don't write it to the output - AC_WRITE, // write it to the output - AC_SYSTEM, // changed by RT (not editable/deletable) - don't write, don't show - AC_NEW, // new addition - write, don't show - - AC_INVALID = 100, // invalid state -}; -enum ByteOrder {UNKNOWN = 0, INTEL = 0x4949, MOTOROLA = 0x4D4D}; -#if __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ -const ByteOrder HOSTORDER = INTEL; -#else -const enum ByteOrder HOSTORDER = MOTOROLA; -#endif -enum MNKind {NOMK, IFD, HEADERIFD, NIKON3, OLYMPUS2, FUJI, TABLESUBDIR}; - -bool extractLensInfo (const std::string &fullname, double &minFocal, double &maxFocal, double &maxApertureAtMinFocal, double &maxApertureAtMaxFocal); - -unsigned short sget2 (unsigned char *s, ByteOrder order); -int sget4 (unsigned char *s, ByteOrder order); -unsigned short get2 (FILE* f, ByteOrder order); -int get4 (FILE* f, ByteOrder order); -void sset2 (unsigned short v, unsigned char *s, ByteOrder order); -void sset4 (int v, unsigned char *s, ByteOrder order); -float int_to_float (int i); -short int int2_to_signed (short unsigned int i); - -struct TIFFHeader { - - unsigned short byteOrder; - unsigned short fixed; - unsigned int ifdOffset; -}; - -class Tag; -class Interpreter; - -/// Structure of information describing an Exif tag -struct TagAttrib { - int ignore; // =0: never ignore, =1: always ignore, =2: ignore if the subdir type is reduced image, =-1: end of table - ActionCode action; - int editable; - const TagAttrib* subdirAttribs; // !NULL if this tag points to a subdir - /** Numeric identifier of tag (or index inside DirectoryTable) - To avoid rewriting all the tables, and to address the problem of TagDirectoryTable with heterogeneous tag's type, - this parameter is now an unsigned int, where the leftmost 2 bytes represent the tag's type, which by default will be aqual - to 0 (INVALID). Only non null tag type will be used. See nikon attrib for an example - */ - unsigned short ID; - TagType type; - const char* name; - Interpreter* interpreter; // Call back hook -}; - -const TagAttrib* lookupAttrib (const TagAttrib* dir, const char* field); - -/// A directory of tags -class TagDirectory -{ - -protected: - std::vector tags; // tags in the directory - const TagAttrib* attribs; // descriptor table to decode the tags - ByteOrder order; // byte order - TagDirectory* parent; // parent directory (NULL if root) - bool parseJPEG; - static Glib::ustring getDumpKey (int tagID, const Glib::ustring &tagName); - -public: - TagDirectory (); - TagDirectory (TagDirectory* p, FILE* f, int base, const TagAttrib* ta, ByteOrder border, bool skipIgnored = true, bool parseJpeg = true); - TagDirectory (TagDirectory* p, const TagAttrib* ta, ByteOrder border); - virtual ~TagDirectory (); - - inline ByteOrder getOrder () const - { - return order; - } - TagDirectory* getParent () - { - return parent; - } - inline bool getParseJpeg() const - { - return parseJPEG; - } - TagDirectory* getRoot (); - inline int getCount () const - { - return tags.size (); - } - const TagAttrib* getAttrib (int id) const; - // Find a Tag by scanning the whole tag tree and stopping at the first occurrence - const TagAttrib* getAttrib (const char* name); - // Try to get the Tag at a given location. 'name' is a path relative to this directory (e.g. "LensInfo/FocalLength") - const TagAttrib* getAttribP (const char* name); - const TagAttrib* getAttribTable() const - { - return attribs; - } - // Find a Tag by scanning the whole tag tree and stopping at the first occurrence - Tag* getTag (const char* name) const; - // Try to get the Tag at a given location. 'name' is a path relative to this directory (e.g. "LensInfo/FocalLength") - Tag* getTagP (const char* name) const; - Tag* getTag (int ID) const; - - // Try to get the Tag in the current directory and in subdirectories - // if lookUpward = true, it will scan the parents TagDirectory up to the root one, - // but w/o looking into their subdirs - Tag* findTag (const char* name, bool lookUpward = false) const; - // Find a all Tags with the given name by scanning the whole tag tree - std::vector findTags (const char* name); - // Find a all Tags with the given ID by scanning the whole tag tree - std::vector findTags (int ID); - // Try to get the Tag in the current directory and in parent directories - // (won't look into subdirs) - Tag* findTagUpward (const char* name) const; - bool getXMPTagValue (const char* name, char* value) const; - - void keepTag (int ID); - void addTag (Tag* &a); - void addTagFront (Tag* &a); - void replaceTag (Tag* a); - inline Tag* getTagByIndex (int ix) - { - return tags[ix]; - } - inline void setOrder (ByteOrder bo) - { - order = bo; - } - - virtual int calculateSize (); - virtual int write (int start, unsigned char* buffer); - virtual TagDirectory* clone (TagDirectory* parent) const; - void applyChange (const std::string &field, const Glib::ustring &value); - - void printAll (unsigned int level = 0) const; // reentrant debug function, keep level=0 on first call ! - bool CPBDump (const Glib::ustring &commFName, const Glib::ustring &imageFName, const Glib::ustring &profileFName, const Glib::ustring &defaultPParams, - const CacheImageData* cfs, const bool flagMode, Glib::KeyFile *keyFile = nullptr, Glib::ustring tagDirName = "") const; - void sort (); -}; - -// a table of tags: id are offset from beginning and not identifiers -class TagDirectoryTable: public TagDirectory, public rtengine::NonCopyable -{ -protected: - unsigned char *values; // Tags values are saved internally here - long zeroOffset; // Offset 0 (index 0) could be at an offset from values - long valuesSize; // Size of allocated memory - TagType defaultType; // Default type of all tags in this directory -public: - TagDirectoryTable(); - TagDirectoryTable (TagDirectory* p, unsigned char *v, int memsize, int offs, TagType type, const TagAttrib* ta, ByteOrder border); - TagDirectoryTable (TagDirectory* p, FILE* f, int memsize, int offset, TagType type, const TagAttrib* ta, ByteOrder border); - ~TagDirectoryTable() override; - int calculateSize () override; - int write (int start, unsigned char* buffer) override; - TagDirectory* clone (TagDirectory* parent) const override; -}; - -// a class representing a single tag -class Tag : - public rtengine::NonCopyable -{ - -protected: - unsigned short tag; - TagType type; - unsigned int count; - unsigned char* value; - int valuesize; - bool keep; - bool allocOwnMemory; - - const TagAttrib* attrib; - TagDirectory* parent; - TagDirectory** directory; - MNKind makerNoteKind; - bool parseMakerNote (FILE* f, int base, ByteOrder bom ); - -public: - Tag (TagDirectory* parent, FILE* f, int base); // parse next tag from the file - Tag (TagDirectory* parent, const TagAttrib* attr); - Tag (TagDirectory* parent, const TagAttrib* attr, unsigned char *data, TagType t); - Tag (TagDirectory* parent, const TagAttrib* attr, int data, TagType t); // create a new tag from array (used - Tag (TagDirectory* parent, const TagAttrib* attr, const char* data); // create a new tag from array (used - - ~Tag (); - void initType (unsigned char *data, TagType type); - void initInt (int data, TagType t, int count = 1); - void initUserComment (const Glib::ustring &text); - void initString (const char* text); - void initSubDir (); - void initSubDir (TagDirectory* dir); - void initMakerNote (MNKind mnk, const TagAttrib* ta); - void initUndefArray (const char* data, int len); - void initLongArray (const char* data, int len); - void initRational (int num, int den); - - static void swapByteOrder2 (unsigned char *buffer, int count); - - // get basic tag properties - int getID () const - { - return tag; - } - int getCount () const - { - return count; - } - TagType getType () const - { - return (attrib && attrib->type > INVALID && attrib->type < AUTO) ? attrib->type : type; - } - unsigned char* getValue () const - { - return value; - } - signed char* getSignedValue () const - { - return reinterpret_cast (value); - } - const TagAttrib* getAttrib () const - { - return attrib; - } - inline ByteOrder getOrder () const - { - return parent ? parent->getOrder() : HOSTORDER; - } - inline TagDirectory* getParent () const - { - return parent; - } - int getValueSize () const - { - return valuesize; - } - bool getOwnMemory () const - { - return allocOwnMemory; - } - - // read/write value - int toInt (int ofs = 0, TagType astype = INVALID) const; - void fromInt (int v); - double toDouble (int ofs = 0) const; - double* toDoubleArray (int ofs = 0) const; - void toRational (int& num, int& denom, int ofs = 0) const; - void toString (char* buffer, std::size_t size, int ofs = 0) const; - void fromString (const char* v, int size = -1); - void setInt (int v, int ofs = 0, TagType astype = LONG); - int getDistanceFrom (const TagDirectory *root); - - // additional getter/setter for more comfortable use - std::string valueToString () const; - std::string nameToString (int i = 0); - void valueFromString (const std::string& value); - void userCommentFromString (const Glib::ustring& text); - - // functions for writing - int calculateSize (); - int write (int offs, int dataOffs, unsigned char* buffer); - Tag* clone (TagDirectory* parent) const; - - // to control if the tag shall be written - bool getKeep () const - { - return keep; - } - void setKeep (bool k) - { - keep = k; - } - - // get subdirectory (there can be several, the last is NULL) - bool isDirectory () const - { - return directory != nullptr; - } - TagDirectory* getDirectory (int i = 0) - { - return (directory) ? directory[i] : nullptr; - } - - MNKind getMakerNoteFormat () const - { - return makerNoteKind; - } -}; - -class ExifManager -{ - - Tag* saveCIFFMNTag (TagDirectory* root, int len, const char* name); - void parseCIFF (int length, TagDirectory* root); - void parse (bool isRaw, bool skipIgnored = true, bool parseJpeg = true); - -public: - FILE* f; - std::unique_ptr rml; - ByteOrder order; - bool onlyFirst; // Only first IFD - unsigned int IFDOffset; - std::vector roots; - std::vector frames; - - ExifManager (FILE* fHandle, std::unique_ptr _rml, bool onlyFirstIFD) - : f(fHandle), rml(std::move(_rml)), order(UNKNOWN), onlyFirst(onlyFirstIFD), - IFDOffset(0) {} - - void setIFDOffset(unsigned int offset); - - - void parseRaw (bool skipIgnored = true); - void parseStd (bool skipIgnored = true); - void parseJPEG (int offset = 0); // offset: to extract exif data from a embedded preview/thumbnail - void parseTIFF (bool skipIgnored = true); - void parseCIFF (); - - /// @brief Get default tag for TIFF - /// @param forthis The byte order will be taken from the given directory. - /// @return The ownership of the return tags is passed to the caller. - static std::vector getDefaultTIFFTags (TagDirectory* forthis); - static void createJPEGMarker (const TagDirectory* root, const rtengine::procparams::ExifPairs& changeList, int W, int H, unsigned char *&buffer, unsigned &bufferSize); - static int createTIFFHeader (const TagDirectory* root, const rtengine::procparams::ExifPairs& changeList, int W, int H, int bps, const char* profiledata, int profilelen, const char* iptcdata, int iptclen, unsigned char *&buffer, unsigned &bufferSize); - static int createPNGMarker(const TagDirectory *root, const rtengine::procparams::ExifPairs &changeList, int W, int H, int bps, const char *iptcdata, int iptclen, unsigned char *&buffer, unsigned &bufferSize); -}; - -class Interpreter -{ -public: - Interpreter () {} - virtual ~Interpreter() {}; - virtual std::string toString (const Tag* t) const - { - char buffer[1024]; - t->toString (buffer, sizeof(buffer)); - std::string s (buffer); - std::string::size_type p1 = s.find_first_not_of (' '); - - if ( p1 == std::string::npos ) { - return s; - } else { - return s.substr (p1, s.find_last_not_of (' ') - p1 + 1); - } - } - virtual void fromString (Tag* t, const std::string& value) - { - if (t->getType() == SHORT || t->getType() == LONG) { - t->fromInt (atoi (value.c_str())); - } else { - t->fromString (value.c_str()); - } - } - // Get the value as a double - virtual double toDouble (const Tag* t, int ofs = 0) - { - - switch (t->getType()) { - case SBYTE: - return double (int (t->getSignedValue()[ofs])); - - case BYTE: - return (double) ((int)t->getValue()[ofs]); - - case ASCII: - return 0.0; - - case SSHORT: - return (double)int2_to_signed (sget2 (t->getValue() + ofs, t->getOrder())); - - case SHORT: - return (double) ((int)sget2 (t->getValue() + ofs, t->getOrder())); - - case SLONG: - case LONG: - return (double) ((int)sget4 (t->getValue() + ofs, t->getOrder())); - - case SRATIONAL: { - const double dividend = (int)sget4 (t->getValue() + ofs, t->getOrder()); - const double divisor = (int)sget4 (t->getValue() + ofs + 4, t->getOrder()); - return divisor == 0. ? 0. : dividend / divisor; - } - - case RATIONAL: { - const double dividend = (uint32_t)sget4 (t->getValue() + ofs, t->getOrder()); - const double divisor = (uint32_t)sget4 (t->getValue() + ofs + 4, t->getOrder()); - return divisor == 0. ? 0. : dividend / divisor; - } - - case FLOAT: - return double (sget4 (t->getValue() + ofs, t->getOrder())); - - case UNDEFINED: - return 0.; - - default: - return 0.; // Quick fix for missing cases (INVALID, DOUBLE, OLYUNDEF, SUBDIR) - } - } - // Get the value as an int - virtual int toInt (const Tag* t, int ofs = 0, TagType astype = INVALID) - { - if (astype == INVALID || astype == AUTO) { - astype = t->getType(); - } - - switch (astype) { - case SBYTE: - return int (t->getSignedValue()[ofs]); - - case BYTE: - return t->getValue()[ofs]; - - case ASCII: - return 0; - - case SSHORT: - return (int)int2_to_signed (sget2 (t->getValue() + ofs, t->getOrder())); - - case SHORT: - return (int)sget2 (t->getValue() + ofs, t->getOrder()); - - case SLONG: - case LONG: - return (int)sget4 (t->getValue() + ofs, t->getOrder()); - - case SRATIONAL: { - int a = (int)sget4 (t->getValue() + ofs + 4, t->getOrder()); - return a == 0 ? 0 : (int)sget4 (t->getValue() + ofs, t->getOrder()) / a; - } - - case RATIONAL: { - uint32_t a = (uint32_t)sget4 (t->getValue() + ofs + 4, t->getOrder()); - return a == 0 ? 0 : (uint32_t)sget4 (t->getValue() + ofs, t->getOrder()) / a; - } - - case FLOAT: - return (int)toDouble (t, ofs); - - case UNDEFINED: - return 0; - - default: - return 0; // Quick fix for missing cases (INVALID, DOUBLE, OLYUNDEF, SUBDIR) - } - - return 0; - } -}; - -extern Interpreter stdInterpreter; - -template -class ChoiceInterpreter : public Interpreter -{ -protected: - using Choices = std::map; - using ChoicesIterator = typename Choices::const_iterator; - Choices choices; -public: - ChoiceInterpreter () {}; - std::string toString (const Tag* t) const override - { - const typename std::map::const_iterator r = choices.find(t->toInt()); - - if (r != choices.end()) { - return r->second; - } else { - char buffer[1024]; - t->toString(buffer, sizeof(buffer)); - return buffer; - } - } -}; - -template< class T > -class IntLensInterpreter : public Interpreter -{ -protected: - typedef std::multimap< T, std::string> container_t; - typedef typename std::multimap< T, std::string>::const_iterator it_t; - typedef std::pair< T, std::string> p_t; - container_t choices; - - virtual std::string guess (const T lensID, double focalLength, double maxApertureAtFocal, double *lensInfoArray) const - { - it_t r; - size_t nFound = choices.count ( lensID ); - - switch ( nFound ) { - case 0: { // lens Unknown - std::ostringstream s; - s << lensID; - return s.str(); - } - - case 1: // lens found - r = choices.find ( lensID ); - return r->second; - - default: - // More than one hit: we must guess - break; - } - - std::string bestMatch ("Unknown"); - double a1, a2, f1, f2; - - /* FIRST TRY - * - * Get the lens info (min/man focal, min/max aperture) and compare them to the possible choice - */ - if (lensInfoArray) { - for ( r = choices.lower_bound ( lensID ); r != choices.upper_bound (lensID); ++r ) { - if ( !extractLensInfo ( r->second, f1, f2, a1, a2) ) { - continue; - } - - if (f1 == lensInfoArray[0] && f2 == lensInfoArray[1] && a1 == lensInfoArray[2] && a2 == lensInfoArray[3]) - // can't match better! we take this entry as being the one - { - return r->second; - } - } - - // No lens found, we update the "unknown" string with the lens info values - if (lensInfoArray[0] == lensInfoArray[1]) { - bestMatch += Glib::ustring::compose (" (%1mm", int (lensInfoArray[0])); - } else { - bestMatch += Glib::ustring::compose (" (%1-%2mm", int (lensInfoArray[0]), int (lensInfoArray[1])); - } - - if (lensInfoArray[2] == lensInfoArray[3]) { - bestMatch += Glib::ustring::compose (" f/%1)", Glib::ustring::format (std::fixed, std::setprecision (1), lensInfoArray[2])); - } else - bestMatch += Glib::ustring::compose (" f/%1-%2)", - Glib::ustring::format (std::fixed, std::setprecision (1), lensInfoArray[2]), - Glib::ustring::format (std::fixed, std::setprecision (1), lensInfoArray[3])); - } - - /* SECOND TRY - * - * Choose the best match: thanks to exiftool by Phil Harvey - * first throws for "out of focal range" and lower or upper aperture of the lens compared to MaxApertureAtFocal - * if the lens is not constant aperture, calculate aprox. aperture of the lens at focalLength - * and compare with actual aperture. - */ - std::ostringstream candidates; - double deltaMin = 1000.; - - for ( r = choices.lower_bound ( lensID ); r != choices.upper_bound (lensID); ++r ) { - double dif; - - if ( !extractLensInfo ( r->second, f1, f2, a1, a2) ) { - continue; - } - - if ( f1 == 0. || a1 == 0.) { - continue; - } - - if ( focalLength < f1 - .5 || focalLength > f2 + 0.5 ) { - continue; - } - - if ( maxApertureAtFocal > 0.1) { - double lensAperture; - - if ( maxApertureAtFocal < a1 - 0.15 || maxApertureAtFocal > a2 + 0.15) { - continue; - } - - if ( a1 == a2 || f1 == f2) { - lensAperture = a1; - } else { - lensAperture = exp ( log (a1) + (log (a2) - log (a1)) / (log (f2) - log (f1)) * (log (focalLength) - log (f1)) ); - } - - dif = std::abs (lensAperture - maxApertureAtFocal); - } else { - dif = 0; - } - - if ( dif < deltaMin ) { - deltaMin = dif; - bestMatch = r->second; - } - - if ( dif < 0.15) { - if ( candidates.tellp() ) { - candidates << "\n or " << r->second; - } else { - candidates << r->second; - } - } - } - - if ( !candidates.tellp() ) { - return bestMatch; - } else { - return candidates.str(); - } - } -}; - -inline static int getTypeSize ( TagType type ) -{ - return ("11124811248484"[type < 14 ? type : 0] - '0'); -} - -extern const TagAttrib exifAttribs[]; -extern const TagAttrib gpsAttribs[]; -extern const TagAttrib iopAttribs[]; -extern const TagAttrib ifdAttribs[]; -extern const TagAttrib nikon2Attribs[]; -extern const TagAttrib nikon3Attribs[]; -extern const TagAttrib canonAttribs[]; -extern const TagAttrib pentaxAttribs[]; -extern const TagAttrib pentaxLensDataAttribs[]; -extern const TagAttrib pentaxLensInfoQAttribs[]; -extern const TagAttrib pentaxLensCorrAttribs[]; -extern const TagAttrib pentaxAEInfoAttribs[]; -extern const TagAttrib pentaxAEInfo2Attribs[]; -extern const TagAttrib pentaxAEInfo3Attribs[]; -extern const TagAttrib pentaxCameraSettingsAttribs[]; -extern const TagAttrib pentaxFlashInfoAttribs[]; -extern const TagAttrib pentaxSRInfoAttribs[]; -extern const TagAttrib pentaxSRInfo2Attribs[]; -extern const TagAttrib pentaxBatteryInfoAttribs[]; -extern const TagAttrib pentaxCameraInfoAttribs[]; -extern const TagAttrib fujiAttribs[]; -extern const TagAttrib minoltaAttribs[]; -extern const TagAttrib sonyAttribs[]; -extern const TagAttrib sonyTag9405Attribs[]; -extern const TagAttrib sonyCameraInfoAttribs[]; -extern const TagAttrib sonyCameraInfo2Attribs[]; -extern const TagAttrib sonyCameraSettingsAttribs[]; -extern const TagAttrib sonyCameraSettingsAttribs2[]; -extern const TagAttrib sonyCameraSettingsAttribs3[]; -//extern const TagAttrib sonyDNGMakerNote[]; -extern const TagAttrib olympusAttribs[]; -extern const TagAttrib kodakIfdAttribs[]; -void parseKodakIfdTextualInfo (Tag *textualInfo, Tag* exif); -extern const TagAttrib panasonicAttribs[]; -extern const TagAttrib panasonicRawAttribs[]; - -} diff --git a/rtexif/sonyminoltaattribs.cc b/rtexif/sonyminoltaattribs.cc deleted file mode 100644 index f666d7046..000000000 --- a/rtexif/sonyminoltaattribs.cc +++ /dev/null @@ -1,2557 +0,0 @@ -/* - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * 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 RawTherapee. If not, see . - */ - -#include - -#include "rtexif.h" - -namespace rtexif -{ - -class SANoYesInterpreter : public ChoiceInterpreter<> -{ -public: - SANoYesInterpreter () - { - choices[1] = "No"; - choices[16] = "Yes"; - } -}; -SANoYesInterpreter saNoYesInterpreter; - -class SAOnOffInterpreter : public ChoiceInterpreter<> -{ -public: - SAOnOffInterpreter () - { - choices[0] = "Off"; - choices[1] = "On"; - choices[5] = "On"; - } -}; -SAOnOffInterpreter saOnOffInterpreter; - -class SAOnOffInterpreter2 : public ChoiceInterpreter<> -{ -public: - SAOnOffInterpreter2 () - { - choices[1] = "Off"; - choices[16] = "On"; - } -}; -SAOnOffInterpreter2 saOnOffInterpreter2; - -class SAOnOffInterpreter3 : public ChoiceInterpreter<> -{ -public: - SAOnOffInterpreter3 () - { - choices[1] = "Off"; - choices[16] = "On (Auto)"; - choices[17] = "On (Manual)"; - } -}; -SAOnOffInterpreter3 saOnOffInterpreter3; - -class SAOnOffInterpreter4 : public ChoiceInterpreter<> -{ -public: - SAOnOffInterpreter4 () - { - choices[0] = "n/a"; - choices[1] = "Off"; - choices[16] = "On"; - choices[255] = "None"; - } -}; -SAOnOffInterpreter4 saOnOffInterpreter4; - -class SAOnOffInterpreter5 : public ChoiceInterpreter<> -{ -public: - SAOnOffInterpreter5 () - { - choices[1] = "On"; - choices[2] = "Off"; - } -}; -SAOnOffInterpreter5 saOnOffInterpreter5; - -class SAHighISONoiseReduction : public ChoiceInterpreter<> -{ -public: - SAHighISONoiseReduction () - { - choices[0] = "Off"; - choices[1] = "Low"; - choices[2] = "Normal"; - choices[3] = "High"; - choices[256] = "Auto"; - choices[65535] = "n/a"; - } -}; -SAHighISONoiseReduction saHighISONoiseReduction; - -class SAHighISONoiseReduction2 : public ChoiceInterpreter<> -{ -public: - SAHighISONoiseReduction2 () - { - choices[0] = "Normal"; - choices[1] = "High"; - choices[2] = "Low"; - choices[3] = "Off"; - choices[65535] = "n/a"; - } -}; -SAHighISONoiseReduction2 saHighISONoiseReduction2; - -class SAHighISONoiseReduction3 : public ChoiceInterpreter<> -{ -public: - SAHighISONoiseReduction3 () - { - choices[0] = "Normal"; - choices[1] = "Low"; - choices[2] = "High"; - choices[3] = "Off"; - } -}; -SAHighISONoiseReduction3 saHighISONoiseReduction3; - -class SAHighISONoiseReduction4 : public ChoiceInterpreter<> -{ -public: - SAHighISONoiseReduction4 () - { - choices[0] = "Off"; - choices[1] = "Low"; - choices[2] = "Normal"; - choices[3] = "High"; - } -}; -SAHighISONoiseReduction4 saHighISONoiseReduction4; - -class SAHighISONoiseReduction5 : public ChoiceInterpreter<> -{ -public: - SAHighISONoiseReduction5 () - { - choices[16] = "Low"; - choices[19] = "Auto"; - } -}; -SAHighISONoiseReduction5 saHighISONoiseReduction5; - -class SASmileShutterMode : public ChoiceInterpreter<> -{ -public: - SASmileShutterMode () - { - choices[17] = "Slight smile"; - choices[18] = "Normal smile"; - choices[19] = "Big smile"; - } -}; -SASmileShutterMode saSmileShutterMode; - -class SAHDRLevel : public ChoiceInterpreter<> -{ -public: - SAHDRLevel () - { - choices[33] = "1 EV"; - choices[34] = "1.5 EV"; - choices[35] = "2 EV"; - choices[36] = "2.5 EV"; - choices[37] = "3 EV"; - choices[38] = "3.5 EV"; - choices[39] = "4 EV"; - choices[40] = "5 EV"; - choices[41] = "6 EV"; - } -}; -SAHDRLevel saHDRLevel; - -class SAViewingMode : public ChoiceInterpreter<> -{ -public: - SAViewingMode () - { - choices[0] = "n/a"; - choices[16] = "ViewFinder"; - choices[33] = "Focus Check Live View"; - choices[34] = "Quick AF Live View"; - } -}; -SAViewingMode saViewingMode; - -class SAFlashAction : public ChoiceInterpreter<> -{ -public: - SAFlashAction () - { - choices[1] = "Did not fire"; - choices[2] = "Fired"; - } -}; -SAFlashAction saFlashAction; - -class SALiveViewFocusMode : public ChoiceInterpreter<> -{ -public: - SALiveViewFocusMode () - { - choices[0] = "n/a"; - choices[1] = "AF"; - choices[16] = "Manual"; - } -}; -SALiveViewFocusMode saLiveViewFocusMode; - -class SALensMount : public ChoiceInterpreter<> -{ -public: - SALensMount () - { - choices[1] = "Unknown"; - choices[16] = "A-Mount"; - choices[17] = "E-Mount"; - } -}; -SALensMount saLensMount; - -class SASweepPanoramaSize : public ChoiceInterpreter<> -{ -public: - SASweepPanoramaSize () - { - choices[1] = "Standard"; - choices[2] = "Wide"; - } -}; -SASweepPanoramaSize saSweepPanoramaSize; - -class SASweepPanoramaDirection : public ChoiceInterpreter<> -{ -public: - SASweepPanoramaDirection () - { - choices[1] = "Right"; - choices[2] = "Left"; - choices[3] = "Up"; - choices[4] = "Down"; - } -}; -SASweepPanoramaDirection saSweepPanoramaDirection; - -class SALiveViewAFSetting : public ChoiceInterpreter<> -{ -public: - SALiveViewAFSetting () - { - choices[0] = "n/a"; - choices[1] = "Phase-detect AF"; - choices[2] = "Contrast AF"; - } -}; -SALiveViewAFSetting saLiveViewAFSetting; - -class SAPanoramaSize3D : public ChoiceInterpreter<> -{ -public: - SAPanoramaSize3D () - { - choices[0] = "n/a"; - choices[1] = "Standard"; - choices[2] = "Wide"; - choices[3] = "16:9"; - } -}; -SAPanoramaSize3D saPanoramaSize3D; - -class SALiveViewMetering : public ChoiceInterpreter<> -{ -public: - SALiveViewMetering () - { - choices[0] = "n/a"; - choices[16] = "40 segment"; - choices[32] = "1200-zone Evaluative"; - } -}; -SALiveViewMetering saLiveViewMetering; - -class SAWhiteBalanceInterpreter: public ChoiceInterpreter<> -{ -public: - SAWhiteBalanceInterpreter() - { - choices[ 0x0] = "Auto"; - choices[ 0x1] = "Color Temperature/Color Filter"; - choices[0x10] = "Daylight"; - choices[0x20] = "Cloudy"; - choices[0x30] = "Shade"; - choices[0x40] = "Tungsten"; - choices[0x50] = "Flash"; - choices[0x60] = "Fluorescent"; - choices[0x70] = "Custom"; - choices[0x80] = "Underwater"; - } -}; -SAWhiteBalanceInterpreter saWhiteBalanceInterpreter; - -class SAWhiteBalanceSettingInterpreter: public ChoiceInterpreter<> -{ -public: - SAWhiteBalanceSettingInterpreter() - { - choices[0x10] = "Auto (-3)"; - choices[0x11] = "Auto (-2)"; - choices[0x12] = "Auto (-1)"; - choices[0x13] = "Auto (0)"; - choices[0x14] = "Auto (+1)"; - choices[0x15] = "Auto (+2)"; - choices[0x16] = "Auto (+3)"; - choices[0x20] = "Daylight (-3)"; - choices[0x21] = "Daylight (-2)"; - choices[0x22] = "Daylight (-1)"; - choices[0x23] = "Daylight (0)"; - choices[0x24] = "Daylight (+1)"; - choices[0x25] = "Daylight (+2)"; - choices[0x26] = "Daylight (+3)"; - choices[0x30] = "Shade (-3)"; - choices[0x31] = "Shade (-2)"; - choices[0x32] = "Shade (-1)"; - choices[0x33] = "Shade (0)"; - choices[0x34] = "Shade (+1)"; - choices[0x35] = "Shade (+2)"; - choices[0x36] = "Shade (+3)"; - choices[0x40] = "Cloudy (-3)"; - choices[0x41] = "Cloudy (-2)"; - choices[0x42] = "Cloudy (-1)"; - choices[0x43] = "Cloudy (0)"; - choices[0x44] = "Cloudy (+1)"; - choices[0x45] = "Cloudy (+2)"; - choices[0x46] = "Cloudy (+3)"; - choices[0x50] = "Tungsten (-3)"; - choices[0x51] = "Tungsten (-2)"; - choices[0x52] = "Tungsten (-1)"; - choices[0x53] = "Tungsten (0)"; - choices[0x54] = "Tungsten (+1)"; - choices[0x55] = "Tungsten (+2)"; - choices[0x56] = "Tungsten (+3)"; - choices[0x60] = "Fluorescent (-3)"; - choices[0x61] = "Fluorescent (-2)"; - choices[0x62] = "Fluorescent (-1)"; - choices[0x63] = "Fluorescent (0)"; - choices[0x64] = "Fluorescent (+1)"; - choices[0x65] = "Fluorescent (+2)"; - choices[0x66] = "Fluorescent (+3)"; - choices[0x70] = "Flash (-3)"; - choices[0x71] = "Flash (-2)"; - choices[0x72] = "Flash (-1)"; - choices[0x73] = "Flash (0)"; - choices[0x74] = "Flash (+1)"; - choices[0x75] = "Flash (+2)"; - choices[0x76] = "Flash (+3)"; - choices[0xa3] = "Custom"; - choices[0xf3] = "Color Temperature/Color Filter"; - } -}; -SAWhiteBalanceSettingInterpreter saWhiteBalanceSettingInterpreter; - -class SASceneModeInterpreter : public ChoiceInterpreter<> -{ -public: - SASceneModeInterpreter () - { - choices[0] = "Standard"; - choices[1] = "Portrait"; - choices[2] = "Text"; - choices[3] = "Night Scene"; - choices[4] = "Sunset"; - choices[5] = "Sports"; - choices[6] = "Landscape"; - choices[7] = "Night Portrait"; - choices[8] = "Macro"; - choices[9] = "Super Macro"; - choices[16] = "Auto"; - choices[17] = "Night View/Portrait"; - choices[18] = "Sweep Panorama"; - choices[19] = "Handheld Night Shot"; - choices[20] = "Anti Motion Blur"; - choices[21] = "Cont. Priority AE"; - choices[22] = "Auto+"; - choices[23] = "3D Sweep Panorama"; - choices[24] = "Superior Auto"; - choices[25] = "High Sensitivity"; - choices[26] = "Fireworks"; - choices[27] = "Food"; - choices[28] = "Pet"; - choices[33] = "HDR"; - choices[65535] = "n/a"; - } -}; -SASceneModeInterpreter saSceneModeInterpreter; - -class SAZoneMatchingInterpreter : public ChoiceInterpreter<> -{ -public: - SAZoneMatchingInterpreter () - { - choices[0] = "ISO Setting Used"; - choices[1] = "High Key"; - choices[2] = "Low Key"; - } -}; -SAZoneMatchingInterpreter saZoneMatchingInterpreter; - -class SADynamicRangeOptimizerInterpreter : public ChoiceInterpreter<> -{ -public: - SADynamicRangeOptimizerInterpreter () - { - choices[0] = "Off"; - choices[1] = "Standard"; - choices[2] = "Advanced"; - choices[3] = "Auto"; - choices[8] = "Advanced Lv1"; - choices[9] = "Advanced Lv2"; - choices[10] = "Advanced Lv3"; - choices[11] = "Advanced Lv4"; - choices[12] = "Advanced Lv5"; - choices[16] = "Lv1"; - choices[17] = "Lv2"; - choices[18] = "Lv3"; - choices[19] = "Lv4"; - choices[20] = "Lv5"; - } -}; -SADynamicRangeOptimizerInterpreter saDynamicRangeOptimizerInterpreter; - -class SAColorModeInterpreter : public ChoiceInterpreter<> -{ -public: - SAColorModeInterpreter () - { - choices[0] = "Standard"; - choices[1] = "Vivid"; - choices[2] = "Portrait"; - choices[3] = "Landscape"; - choices[4] = "Sunset"; - choices[5] = "Night View/Portrait"; - choices[6] = "B&W"; - choices[7] = "Adobe RGB"; - choices[12] = "Neutral"; - choices[13] = "Clear"; - choices[14] = "Deep"; - choices[15] = "Light"; - choices[16] = "Autumn Leaves"; - choices[17] = "Sepia"; - choices[100] = "Neutral"; - choices[101] = "Clear"; - choices[102] = "Deep"; - choices[103] = "Light"; - choices[104] = "Night View"; - choices[105] = "Autumn Leaves"; - } -}; -SAColorModeInterpreter saColorModeInterpreter; - -class SAExposureModeInterpreter : public ChoiceInterpreter<> -{ -public: - SAExposureModeInterpreter () - { - choices[0] = "Program AE"; - choices[1] = "Portrait"; - choices[2] = "Beach"; - choices[3] = "Sports"; - choices[4] = "Snow"; - choices[5] = "Landscape"; - choices[6] = "Auto"; - choices[7] = "Aperture-priority AE"; - choices[8] = "Shutter speed priority AE"; - choices[9] = "Night Scene / Twilight"; - choices[10] = "Hi-Speed Shutter"; - choices[11] = "Twilight Portrait"; - choices[12] = "Soft Snap/Portrait"; - choices[13] = "Fireworks"; - choices[14] = "Smile Shutter"; - choices[15] = "Manual"; - choices[18] = "High Sensitivity"; - choices[19] = "Macro"; - choices[20] = "Advanced Sports Shooting"; - choices[29] = "Underwater"; - choices[33] = "Food"; - choices[34] = "Sweep Panorama"; - choices[35] = "Handheld Night Shot"; - choices[36] = "Anti Motion Blur"; - choices[37] = "Pet"; - choices[38] = "Backlight Correction HDR"; - choices[39] = "Superior Auto"; - choices[40] = "Background Defocus"; - choices[41] = "Soft Skin"; - choices[42] = "3D Image"; - choices[65535] = "n/a"; - } -}; -SAExposureModeInterpreter saExposureModeInterpreter; - -class SAQualityInterpreter : public ChoiceInterpreter<> -{ -public: - SAQualityInterpreter () - { - choices[0] = "Normal"; - choices[1] = "Fine"; - } -}; -SAQualityInterpreter saQualityInterpreter; - -class SAAntiBlurInterpreter : public ChoiceInterpreter<> -{ -public: - SAAntiBlurInterpreter () - { - choices[0] = "Off"; - choices[1] = "On (Continuous)"; - choices[2] = "On (Shooting)"; - choices[65535] = "n/a"; - } -}; -SAAntiBlurInterpreter saAntiBlurInterpreter; - -class SALensIDInterpreter final : public IntLensInterpreter -{ -public: - SALensIDInterpreter () - { - choices = { - {0, "Minolta AF 28-85mm f/3.5-4.5 New"}, - {1, "Minolta AF 80-200mm f/2.8 HS-APO G"}, - {2, "Minolta AF 28-70mm f/2.8 G"}, - {3, "Minolta AF 28-80mm f/4-5.6"}, - {4, "Minolta AF 85mm f/1.4G"}, - {5, "Minolta AF 35-70mm f/3.5-4.5 [II]"}, - {6, "Minolta AF 24-85mm f/3.5-4.5 [New]"}, - {7, "Minolta AF 100-300mm f/4.5-5.6 APO [New] or 100-400mm or Sigma Lens"}, - {7, "Minolta AF 100-400mm f/4.5-6.7 APO"}, - {7, "Sigma AF 100-300mm f/4 EX DG IF"}, - {8, "Minolta AF 70-210mm f/4.5-5.6 [II]"}, - {9, "Minolta AF 50mm f/3.5 Macro"}, - {10, "Minolta AF 28-105mm f/3.5-4.5 [New]"}, - {11, "Minolta AF 300mm f/4 HS-APO G"}, - {12, "Minolta AF 100mm f/2.8 Soft Focus"}, - {13, "Minolta AF 75-300mm f/4.5-5.6 (New or II)"}, - {14, "Minolta AF 100-400mm f/4.5-6.7 APO"}, - {15, "Minolta AF 400mm f/4.5 HS-APO G"}, - {16, "Minolta AF 17-35mm f/3.5 G"}, - {17, "Minolta AF 20-35mm f/3.5-4.5"}, - {18, "Minolta AF 28-80mm f/3.5-5.6 II"}, - {19, "Minolta AF 35mm f/1.4 G"}, - {20, "Minolta/Sony 135mm f/2.8 [T4.5] STF"}, - {22, "Minolta AF 35-80mm f/4-5.6 II"}, - {23, "Minolta AF 200mm f/4 Macro APO G"}, - {24, "Minolta/Sony AF 24-105mm f/3.5-4.5 (D) or Sigma or Tamron Lens"}, - {24, "Sigma 18-50mm f/2.8"}, - {24, "Sigma 17-70mm f/2.8-4.5 DC Macro"}, - {24, "Sigma 20-40mm f/2.8 EX DG Aspherical IF"}, - {24, "Sigma 18-200mm f/3.5-6.3 DC"}, - {24, "Sigma DC 18-125mm f/4-5,6 D"}, - {24, "Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical [IF] Macro"}, - {24, "Sigma 15-30mm f/3.5-4.5 EX DG Aspherical"}, - {25, "Minolta AF 100-300mm f/4.5-5.6 APO (D) or Sigma Lens"}, - {25, "Sigma 100-300mm f/4 EX (APO (D) or D IF)"}, - {25, "Sigma 70mm f/2.8 EX DG Macro"}, - {25, "Sigma 20mm f/1.8 EX DG Aspherical RF"}, - {25, "Sigma 30mm f/1.4 EX DC"}, - {25, "Sigma 24mm f/1.8 EX DG ASP Macro"}, - {27, "Minolta AF 85mm f/1.4 G (D)"}, - {28, "Minolta/Sony AF 100mm f/2.8 Macro (D) or Tamron Lens"}, - {28, "Tamron SP AF 90mm f/2.8 Di Macro"}, - {28, "Tamron SP AF 180mm f/3.5 Di LD [IF] Macro"}, - {29, "Minolta/Sony AF 75-300mm f/4.5-5.6 (D)"}, - {30, "Minolta AF 28-80mm f/3.5-5.6 (D) or Sigma Lens"}, - {30, "Sigma AF 10-20mm f/4-5.6 EX DC"}, - {30, "Sigma AF 12-24mm f/4.5-5.6 EX DG"}, - {30, "Sigma 28-70mm EX DG f/2.8"}, - {30, "Sigma 55-200mm f/4-5.6 DC"}, - {31, "Minolta/Sony AF 50mm f/2.8 Macro (D) or f/3.5"}, - {31, "Minolta/Sony AF 50mm f/3.5 Macro"}, - {32, "Minolta/Sony AF 300mm f/2.8 G or 1.5x Teleconverter"}, - {33, "Minolta/Sony AF 70-200mm f/2.8 G"}, - {35, "Minolta AF 85mm f/1.4 G (D) Limited"}, - {36, "Minolta AF 28-100mm f/3.5-5.6 (D)"}, - {38, "Minolta AF 17-35mm f/2.8-4 (D)"}, - {39, "Minolta AF 28-75mm f/2.8 (D)"}, - {40, "Minolta/Sony AF DT 18-70mm f/3.5-5.6 (D)"}, - {41, "Minolta/Sony AF DT 11-18mm f/4.5-5.6 (D) or Tamron Lens"}, - {41, "Tamron SP AF 11-18mm f/4.5-5.6 Di II LD Aspherical IF"}, - {42, "Minolta/Sony AF DT 18-200mm f/3.5-6.3 (D)"}, - {43, "Sony 35mm f/1.4 G (SAL35F14G)"}, - {44, "Sony 50mm f/1.4 (SAL50F14)"}, - {45, "Carl Zeiss Planar T* 85mm f/1.4 ZA (SAL85F14Z)"}, - {46, "Carl Zeiss Vario-Sonnar T* DT 16-80mm f/3.5-4.5 ZA (SAL1680Z)"}, - {47, "Carl Zeiss Sonnar T* 135mm f/1.8 ZA (SAL135F18Z)"}, - {48, "Carl Zeiss Vario-Sonnar T* 24-70mm f/2.8 ZA SSM (SAL2470Z) or Other Lens"}, - {48, "Carl Zeiss Vario-Sonnar T* 24-70mm f/2.8 ZA SSM II (SAL2470Z2)"}, - {48, "Tamron SP 24-70mm f/2.8 Di USD"}, - {49, "Sony DT 55-200mm f/4-5.6 (SAL55200)"}, - {50, "Sony DT 18-250mm f/3.5-6.3 (SAL18250)"}, - {51, "Sony DT 16-105mm f/3.5-5.6 (SAL16105)"}, - {52, "Sony 70-300mm f/4.5-5.6 G SSM (SAL70300G) or G SSM II or Tamron Lens"}, - {52, "Sony 70-300mm f/4.5-5.6 G SSM II (SAL70300G2)"}, - {52, "Tamron SP 70-300mm f/4-5.6 Di USD"}, - {53, "Sony 70-400mm f/4-5.6 G SSM (SAL70400G)"}, - {54, "Carl Zeiss Vario-Sonnar T* 16-35mm f/2.8 ZA SSM (SAL1635Z) or ZA SSM II"}, - {54, "Carl Zeiss Vario-Sonnar T* 16-35mm f/2.8 ZA SSM II (SAL1635Z2)"}, - {55, "Sony DT 18-55mm f/3.5-5.6 SAM (SAL1855) or SAM II"}, - {55, "Sony DT 18-55mm f/3.5-5.6 SAM II (SAL18552)"}, - {56, "Sony DT 55-200mm f/4-5.6 SAM (SAL55200-2)"}, - {57, "Sony DT 50mm f/1.8 SAM (SAL50F18) or Tamron Lens or Commlite CM-EF-NEX adapter"}, - {57, "Tamron SP AF 60mm f/2 Di II LD [IF] Macro 1:1"}, - {57, "Tamron 18-270mm f/3.5-6.3 Di II PZD"}, - {58, "Sony DT 30mm f/2.8 Macro SAM (SAL30M28)"}, - {59, "Sony 28-75mm f/2.8 SAM (SAL2875)"}, - {60, "Carl Zeiss Distagon T* 24mm f/2 ZA SSM (SAL24F20Z)"}, - {61, "Sony 85mm f/2.8 SAM (SAL85F28)"}, - {62, "Sony DT 35mm f/1.8 SAM (SAL35F18)"}, - {63, "Sony DT 16-50mm f/2.8 SSM (SAL1650)"}, - {64, "Sony 500mm f/4 G SSM (SAL500F40G)"}, - {65, "Sony DT 18-135mm f/3.5-5.6 SAM (SAL18135)"}, - {66, "Sony 300mm f/2.8 G SSM II (SAL300F28G2)"}, - {67, "Sony 70-200mm f/2.8 G SSM II (SAL70200G2)"}, - {68, "Sony DT 55-300mm f/4.5-5.6 SAM (SAL55300)"}, - {69, "Sony 70-400mm f/4-5.6 G SSM II (SAL70400G2)"}, - {70, "Carl Zeiss Planar T* 50mm f/1.4 ZA SSM (SAL50F14Z)"}, - {128, "Tamron or Sigma Lens (128)"}, - {128, "Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical [IF] Macro"}, - {128, "Tamron AF 28-300mm f/3.5-6.3 XR Di LD Aspherical [IF] Macro"}, - {128, "Tamron AF 28-200mm f/3.8-5.6 XR Di Aspherical [IF] Macro"}, - {128, "Tamron SP AF 17-35mm f/2.8-4 Di LD Aspherical IF"}, - {128, "Sigma AF 50-150mm f/2.8 EX DC APO HSM II"}, - {128, "Sigma 10-20mm f/3.5 EX DC HSM"}, - {128, "Sigma 70-200mm f/2.8 II EX DG APO MACRO HSM"}, - {128, "Sigma 10mm f/2.8 EX DC HSM Fisheye"}, - {128, "Sigma 50mm f/1.4 EX DG HSM"}, - {128, "Sigma 85mm f/1.4 EX DG HSM"}, - {128, "Sigma 24-70mm f/2.8 IF EX DG HSM"}, - {128, "Sigma 18-250mm f/3.5-6.3 DC OS HSM"}, - {128, "Sigma 17-50mm f/2.8 EX DC HSM"}, - {128, "Sigma 17-70mm f/2.8-4 DC Macro HSM"}, - {128, "Sigma 150mm f/2.8 EX DG OS HSM APO Macro"}, - {128, "Sigma 150-500mm f/5-6.3 APO DG OS HSM"}, - {128, "Tamron AF 28-105mm f/4-5.6 [IF]"}, - {128, "Sigma 35mm f/1.4 DG HSM"}, - {128, "Sigma 18-35mm f/1.8 DC HSM"}, - {128, "Sigma 50-500mm f/4.5-6.3 APO DG OS HSM"}, - {128, "Sigma 24-105mm f/4 DG HSM | A"}, - {128, "Sigma 30mm f/1.4"}, - {128, "Sigma 35mm f/1.4 DG HSM | A"}, - {128, "Sigma 105mm f/2.8 EX DG OS HSM Macro"}, - {128, "Sigma 180mm f/2.8 EX DG OS HSM APO Macro"}, - {128, "Sigma 18-300mm f/3.5-6.3 DC Macro HSM | C"}, - {128, "Sigma 18-50mm f/2.8-4.5 DC HSM"}, - {129, "Tamron Lens (129)"}, - {129, "Tamron 200-400mm f/5.6 LD"}, - {129, "Tamron 70-300mm f/4-5.6 LD"}, - {131, "Tamron 20-40mm f/2.7-3.5 SP Aspherical IF"}, - {135, "Vivitar 28-210mm f/3.5-5.6"}, - {136, "Tokina EMZ M100 AF 100mm f/3.5"}, - {137, "Cosina 70-210mm f/2.8-4 AF"}, - {138, "Soligor 19-35mm f/3.5-4.5"}, - {139, "Tokina AF 28-300mm f/4-6.3"}, - {142, "Cosina AF 70-300mm f/4.5-5.6 MC"}, - {146, "Voigtlander Macro APO-Lanthar 125mm f/2.5 SL"}, - {194, "Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical [IF]"}, - {202, "Tamron SP AF 70-200mm f/2.8 Di LD [IF] Macro"}, - {203, "Tamron SP 70-200mm f/2.8 Di USD"}, - {204, "Tamron SP 24-70mm f/2.8 Di USD"}, - {212, "Tamron 28-300mm f/3.5-6.3 Di PZD"}, - {213, "Tamron 16-300mm f/3.5-6.3 Di II PZD Macro"}, - {214, "Tamron SP 150-600mm f/5-6.3 Di USD"}, - {215, "Tamron SP 15-30mm f/2.8 Di USD"}, - {216, "Tamron SP 45mm f/1.8 Di USD"}, - {217, "Tamron SP 35mm f/1.8 Di USD"}, - {218, "Tamron SP 90mm f/2.8 Di Macro 1:1 USD (F017)"}, - {220, "Tamron SP 150-600mm f/5-6.3 Di USD G2"}, - {224, "Tamron SP 90mm f/2.8 Di Macro 1:1 USD (F004)"}, - {255, "Tamron Lens (255)"}, - {255, "Tamron SP AF 17-50mm f/2.8 XR Di II LD Aspherical"}, - {255, "Tamron AF 18-250mm f/3.5-6.3 XR Di II LD"}, - {255, "Tamron AF 55-200mm f/4-5.6 Di II LD Macro"}, - {255, "Tamron AF 70-300mm f/4-5.6 Di LD Macro 1:2"}, - {255, "Tamron SP AF 200-500mm f/5.0-6.3 Di LD IF"}, - {255, "Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical IF"}, - {255, "Tamron SP AF 70-200mm f/2.8 Di LD IF Macro"}, - {255, "Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical IF"}, - {255, "Tamron AF 90-300mm f/4.5-5.6 Telemacro"}, - {1868, "Sigma MC-11 SA-E Mount Converter with not-supported Sigma lens"}, - {2550, "Minolta AF 50mm f/1.7"}, - {2551, "Minolta AF 35-70mm f/4 or Other Lens"}, - {2551, "Sigma UC AF 28-70mm f/3.5-4.5"}, - {2551, "Sigma AF 28-70mm f/2.8"}, - {2551, "Sigma M-AF 70-200mm f/2.8 EX Aspherical"}, - {2551, "Quantaray M-AF 35-80mm f/4-5.6"}, - {2551, "Tokina 28-70mm f/2.8-4.5 AF"}, - {2552, "Minolta AF 28-85mm f/3.5-4.5 or Other Lens"}, - {2552, "Tokina 19-35mm f/3.5-4.5"}, - {2552, "Tokina 28-70mm f/2.8 AT-X"}, - {2552, "Tokina 80-400mm f/4.5-5.6 AT-X AF II 840"}, - {2552, "Tokina AF PRO 28-80mm f/2.8 AT-X 280"}, - {2552, "Tokina AT-X PRO [II] AF 28-70mm f/2.6-2.8 270"}, - {2552, "Tamron AF 19-35mm f/3.5-4.5"}, - {2552, "Angenieux AF 28-70mm f/2.6"}, - {2552, "Tokina AT-X 17 AF 17mm f/3.5"}, - {2552, "Tokina 20-35mm f/3.5-4.5 II AF"}, - {2553, "Minolta AF 28-135mm f/4-4.5 or Other Lens"}, - {2553, "Sigma ZOOM-alpha 35-135mm f/3.5-4.5"}, - {2553, "Sigma 28-105mm f/2.8-4 Aspherical"}, - {2553, "Sigma 28-105mm f/4-5.6 UC"}, - {2553, "Tokina AT-X 242 AF 24-200mm f/3.5-5.6"}, - {2554, "Minolta AF 35-105mm f/3.5-4.5"}, - {2555, "Minolta AF 70-210mm f/4 Macro or Sigma Lens"}, - {2555, "Sigma 70-210mm f/4-5.6 APO"}, - {2555, "Sigma M-AF 70-200mm f/2.8 EX APO"}, - {2555, "Sigma 75-200mm f/2.8-3.5"}, - {2556, "Minolta AF 135mm f/2.8"}, - {2557, "Minolta/Sony AF 28mm f/2.8"}, - {2558, "Minolta AF 24-50mm f/4"}, - {2560, "Minolta AF 100-200mm f/4.5"}, - {2561, "Minolta AF 75-300mm f/4.5-5.6 or Sigma Lens"}, - {2561, "Sigma 70-300mm f/4-5.6 DL Macro"}, - {2561, "Sigma 300mm f/4 APO Macro"}, - {2561, "Sigma AF 500mm f/4.5 APO"}, - {2561, "Sigma AF 170-500mm f/5-6.3 APO Aspherical"}, - {2561, "Tokina AT-X AF 300mm f/4"}, - {2561, "Tokina AT-X AF 400mm f/5.6 SD"}, - {2561, "Tokina AF 730 II 75-300mm f/4.5-5.6"}, - {2561, "Sigma 800mm f/5.6 APO"}, - {2561, "Sigma AF 400mm f/5.6 APO Macro"}, - {2561, "Sigma 1000mm f/8 APO"}, - {2562, "Minolta AF 50mm f/1.4 [New]"}, - {2563, "Minolta AF 300mm f/2.8 APO or Sigma Lens"}, - {2563, "Sigma AF 50-500mm f/4-6.3 EX DG APO"}, - {2563, "Sigma AF 170-500mm f/5-6.3 APO Aspherical"}, - {2563, "Sigma AF 500mm f/4.5 EX DG APO"}, - {2563, "Sigma 400mm f/5.6 APO"}, - {2564, "Minolta AF 50mm f/2.8 Macro or Sigma Lens"}, - {2564, "Sigma 50mm f/2.8 EX Macro"}, - {2565, "Minolta AF 600mm f/4 APO"}, - {2566, "Minolta AF 24mm f/2.8 or Sigma Lens"}, - {2566, "Sigma 17-35mm f/2.8-4 EX Aspherical"}, - {2572, "Minolta/Sony AF 500mm f/8 Reflex"}, - {2578, "Minolta/Sony AF 16mm f/2.8 Fisheye or Sigma Lens"}, - {2578, "Sigma 8mm f/4 EX [DG] Fisheye"}, - {2578, "Sigma 14mm f/3.5"}, - {2578, "Sigma 15mm f/2.8 Fisheye"}, - {2579, "Minolta/Sony AF 20mm f/2.8 or Tokina Lens"}, - {2579, "Tokina AT-X Pro DX 11-16mm f/2.8"}, - {2581, "Minolta AF 100mm f/2.8 Macro [New] or Sigma or Tamron Lens"}, - {2581, "Sigma AF 90mm f/2.8 Macro"}, - {2581, "Sigma AF 105mm f/2.8 EX [DG] Macro"}, - {2581, "Sigma 180mm f/5.6 Macro"}, - {2581, "Sigma 180mm f/3.5 EX DG Macro"}, - {2581, "Tamron 90mm f/2.8 Macro"}, - {2585, "Minolta AF 35-105mm f/3.5-4.5 New or Tamron Lens"}, - {2585, "Beroflex 35-135mm f/3.5-4.5"}, - {2585, "Tamron 24-135mm f/3.5-5.6"}, - {2588, "Minolta AF 70-210mm f/3.5-4.5"}, - {2589, "Minolta AF 80-200mm f/2.8 APO or Tokina Lens"}, - {2589, "Tokina 80-200mm f/2.8"}, - {2590, "Minolta AF 200mm f/2.8 G APO + Minolta AF 1.4x APO or Other Lens + 1.4x"}, - {2590, "Minolta AF 600mm f/4 HS-APO G + Minolta AF 1.4x APO"}, - {2591, "Minolta AF 35mm f/1.4"}, - {2592, "Minolta AF 85mm f/1.4 G (D)"}, - {2593, "Minolta AF 200mm f/2.8 APO"}, - {2594, "Minolta AF 3x-1x f/1.7-2.8 Macro"}, - {2596, "Minolta AF 28mm f/2"}, - {2597, "Minolta AF 35mm f/2 [New]"}, - {2598, "Minolta AF 100mm f/2"}, - {2601, "Minolta AF 200mm f/2.8 G APO + Minolta AF 2x APO or Other Lens + 2x"}, - {2601, "Minolta AF 600mm f/4 HS-APO G + Minolta AF 2x APO"}, - {2604, "Minolta AF 80-200mm f/4.5-5.6"}, - {2605, "Minolta AF 35-80mm f/4-5.6"}, - {2606, "Minolta AF 100-300mm f/4.5-5.6"}, - {2607, "Minolta AF 35-80mm f/4-5.6"}, - {2608, "Minolta AF 300mm f/2.8 HS-APO G"}, - {2609, "Minolta AF 600mm f/4 HS-APO G"}, - {2612, "Minolta AF 200mm f/2.8 HS-APO G"}, - {2613, "Minolta AF 50mm f/1.7 New"}, - {2615, "Minolta AF 28-105mm f/3.5-4.5 xi"}, - {2616, "Minolta AF 35-200mm f/4.5-5.6 xi"}, - {2618, "Minolta AF 28-80mm f/4-5.6 xi"}, - {2619, "Minolta AF 80-200mm f/4.5-5.6 xi"}, - {2620, "Minolta AF 28-70mm f/2.8 G"}, - {2621, "Minolta AF 100-300mm f/4.5-5.6 xi"}, - {2624, "Minolta AF 35-80mm f/4-5.6 Power Zoom"}, - {2628, "Minolta AF 80-200mm f/2.8 HS-APO G"}, - {2629, "Minolta AF 85mm f/1.4 New"}, - {2631, "Minolta AF 100-300mm f/4.5-5.6 APO"}, - {2632, "Minolta AF 24-50mm f/4 New"}, - {2638, "Minolta AF 50mm f/2.8 Macro New"}, - {2639, "Minolta AF 100mm f/2.8 Macro"}, - {2641, "Minolta/Sony AF 20mm f/2.8 New"}, - {2642, "Minolta AF 24mm f/2.8 New"}, - {2644, "Minolta AF 100-400mm f/4.5-6.7 APO"}, - {2662, "Minolta AF 50mm f/1.4 New"}, - {2667, "Minolta AF 35mm f/2 New"}, - {2668, "Minolta AF 28mm f/2 New"}, - {2672, "Minolta AF 24-105mm f/3.5-4.5 (D)"}, - {3046, "Metabones Canon EF Speed Booster"}, - {4567, "Tokina 70-210mm f/4-5.6"}, - {4568, "Tokina AF 35-200mm f/4-5.6 Zoom SD"}, - {4570, "Tamron AF 35-135mm f/3.5-4.5"}, - {4571, "Vivitar 70-210mm f/4.5-5.6"}, - {4574, "2x Teleconverter or Tamron or Tokina Lens"}, - {4574, "Tamron SP AF 90mm f/2.5"}, - {4574, "Tokina RF 500mm f/8.0 x2"}, - {4574, "Tokina 300mm f/2.8 x2"}, - {4575, "1.4x Teleconverter"}, - {4585, "Tamron SP AF 300mm f/2.8 LD IF"}, - {4586, "Tamron SP AF 35-105mm f/2.8 LD Aspherical IF"}, - {4587, "Tamron AF 70-210mm f/2.8 SP LD"}, - {4812, "Metabones Canon EF Speed Booster Ultra"}, - {6118, "Canon EF Adapter"}, - {6528, "Sigma 16mm f/2.8 Filtermatic Fisheye"}, - {6553, "E-Mount, T-Mount, Other Lens or no lens"}, - {6553, "Arax MC 35mm f/2.8 Tilt+Shift"}, - {6553, "Arax MC 80mm f/2.8 Tilt+Shift"}, - {6553, "Zenitar MF 16mm f/2.8 Fisheye M42"}, - {6553, "Samyang 500mm Mirror f/8.0"}, - {6553, "Pentacon Auto 135mm f/2.8"}, - {6553, "Pentacon Auto 29mm f/2.8"}, - {6553, "Helios 44-2 58mm f/2.0"}, - {18688, "Sigma MC-11 SA-E Mount Converter with not-supported Sigma lens"}, - {25501, "Minolta AF 50mm f/1.7"}, - {25511, "Minolta AF 35-70mm f/4 or Other Lens"}, - {25511, "Sigma UC AF 28-70mm f/3.5-4.5"}, - {25511, "Sigma AF 28-70mm f/2.8"}, - {25511, "Sigma M-AF 70-200mm f/2.8 EX Aspherical"}, - {25511, "Quantaray M-AF 35-80mm f/4-5.6"}, - {25511, "Tokina 28-70mm f/2.8-4.5 AF"}, - {25521, "Minolta AF 28-85mm f/3.5-4.5 or Other Lens"}, - {25521, "Tokina 19-35mm f/3.5-4.5"}, - {25521, "Tokina 28-70mm f/2.8 AT-X"}, - {25521, "Tokina 80-400mm f/4.5-5.6 AT-X AF II 840"}, - {25521, "Tokina AF PRO 28-80mm f/2.8 AT-X 280"}, - {25521, "Tokina AT-X PRO [II] AF 28-70mm f/2.6-2.8 270"}, - {25521, "Tamron AF 19-35mm f/3.5-4.5"}, - {25521, "Angenieux AF 28-70mm f/2.6"}, - {25521, "Tokina AT-X 17 AF 17mm f/3.5"}, - {25521, "Tokina 20-35mm f/3.5-4.5 II AF"}, - {25531, "Minolta AF 28-135mm f/4-4.5 or Other Lens"}, - {25531, "Sigma ZOOM-alpha 35-135mm f/3.5-4.5"}, - {25531, "Sigma 28-105mm f/2.8-4 Aspherical"}, - {25531, "Sigma 28-105mm f/4-5.6 UC"}, - {25531, "Tokina AT-X 242 AF 24-200mm f/3.5-5.6"}, - {25541, "Minolta AF 35-105mm f/3.5-4.5"}, - {25551, "Minolta AF 70-210mm f/4 Macro or Sigma Lens"}, - {25551, "Sigma 70-210mm f/4-5.6 APO"}, - {25551, "Sigma M-AF 70-200mm f/2.8 EX APO"}, - {25551, "Sigma 75-200mm f/2.8-3.5"}, - {25561, "Minolta AF 135mm f/2.8"}, - {25571, "Minolta/Sony AF 28mm f/2.8"}, - {25581, "Minolta AF 24-50mm f/4"}, - {25601, "Minolta AF 100-200mm f/4.5"}, - {25611, "Minolta AF 75-300mm f/4.5-5.6 or Sigma Lens"}, - {25611, "Sigma 70-300mm f/4-5.6 DL Macro"}, - {25611, "Sigma 300mm f/4 APO Macro"}, - {25611, "Sigma AF 500mm f/4.5 APO"}, - {25611, "Sigma AF 170-500mm f/5-6.3 APO Aspherical"}, - {25611, "Tokina AT-X AF 300mm f/4"}, - {25611, "Tokina AT-X AF 400mm f/5.6 SD"}, - {25611, "Tokina AF 730 II 75-300mm f/4.5-5.6"}, - {25611, "Sigma 800mm f/5.6 APO"}, - {25611, "Sigma AF 400mm f/5.6 APO Macro"}, - {25611, "Sigma 1000mm f/8 APO"}, - {25621, "Minolta AF 50mm f/1.4 [New]"}, - {25631, "Minolta AF 300mm f/2.8 APO or Sigma Lens"}, - {25631, "Sigma AF 50-500mm f/4-6.3 EX DG APO"}, - {25631, "Sigma AF 170-500mm f/5-6.3 APO Aspherical"}, - {25631, "Sigma AF 500mm f/4.5 EX DG APO"}, - {25631, "Sigma 400mm f/5.6 APO"}, - {25641, "Minolta AF 50mm f/2.8 Macro or Sigma Lens"}, - {25641, "Sigma 50mm f/2.8 EX Macro"}, - {25651, "Minolta AF 600mm f/4 APO"}, - {25661, "Minolta AF 24mm f/2.8 or Sigma Lens"}, - {25661, "Sigma 17-35mm f/2.8-4 EX Aspherical"}, - {25721, "Minolta/Sony AF 500mm f/8 Reflex"}, - {25781, "Minolta/Sony AF 16mm f/2.8 Fisheye or Sigma Lens"}, - {25781, "Sigma 8mm f/4 EX [DG] Fisheye"}, - {25781, "Sigma 14mm f/3.5"}, - {25781, "Sigma 15mm f/2.8 Fisheye"}, - {25791, "Minolta/Sony AF 20mm f/2.8 or Tokina Lens"}, - {25791, "Tokina AT-X Pro DX 11-16mm f/2.8"}, - {25811, "Minolta AF 100mm f/2.8 Macro [New] or Sigma or Tamron Lens"}, - {25811, "Sigma AF 90mm f/2.8 Macro"}, - {25811, "Sigma AF 105mm f/2.8 EX [DG] Macro"}, - {25811, "Sigma 180mm f/5.6 Macro"}, - {25811, "Sigma 180mm f/3.5 EX DG Macro"}, - {25811, "Tamron 90mm f/2.8 Macro"}, - {25851, "Beroflex 35-135mm f/3.5-4.5"}, - {25858, "Minolta AF 35-105mm f/3.5-4.5 New or Tamron Lens"}, - {25858, "Tamron 24-135mm f/3.5-5.6"}, - {25881, "Minolta AF 70-210mm f/3.5-4.5"}, - {25891, "Minolta AF 80-200mm f/2.8 APO or Tokina Lens"}, - {25891, "Tokina 80-200mm f/2.8"}, - {25901, "Minolta AF 200mm f/2.8 G APO + Minolta AF 1.4x APO or Other Lens + 1.4x"}, - {25901, "Minolta AF 600mm f/4 HS-APO G + Minolta AF 1.4x APO"}, - {25911, "Minolta AF 35mm f/1.4"}, - {25921, "Minolta AF 85mm f/1.4 G (D)"}, - {25931, "Minolta AF 200mm f/2.8 APO"}, - {25941, "Minolta AF 3x-1x f/1.7-2.8 Macro"}, - {25961, "Minolta AF 28mm f/2"}, - {25971, "Minolta AF 35mm f/2 [New]"}, - {25981, "Minolta AF 100mm f/2"}, - {26011, "Minolta AF 200mm f/2.8 G APO + Minolta AF 2x APO or Other Lens + 2x"}, - {26011, "Minolta AF 600mm f/4 HS-APO G + Minolta AF 2x APO"}, - {26041, "Minolta AF 80-200mm f/4.5-5.6"}, - {26051, "Minolta AF 35-80mm f/4-5.6"}, - {26061, "Minolta AF 100-300mm f/4.5-5.6"}, - {26071, "Minolta AF 35-80mm f/4-5.6"}, - {26081, "Minolta AF 300mm f/2.8 HS-APO G"}, - {26091, "Minolta AF 600mm f/4 HS-APO G"}, - {26121, "Minolta AF 200mm f/2.8 HS-APO G"}, - {26131, "Minolta AF 50mm f/1.7 New"}, - {26151, "Minolta AF 28-105mm f/3.5-4.5 xi"}, - {26161, "Minolta AF 35-200mm f/4.5-5.6 xi"}, - {26181, "Minolta AF 28-80mm f/4-5.6 xi"}, - {26191, "Minolta AF 80-200mm f/4.5-5.6 xi"}, - {26201, "Minolta AF 28-70mm f/2.8 G"}, - {26211, "Minolta AF 100-300mm f/4.5-5.6 xi"}, - {26241, "Minolta AF 35-80mm f/4-5.6 Power Zoom"}, - {26281, "Minolta AF 80-200mm f/2.8 HS-APO G"}, - {26291, "Minolta AF 85mm f/1.4 New"}, - {26311, "Minolta AF 100-300mm f/4.5-5.6 APO"}, - {26321, "Minolta AF 24-50mm f/4 New"}, - {26381, "Minolta AF 50mm f/2.8 Macro New"}, - {26391, "Minolta AF 100mm f/2.8 Macro"}, - {26411, "Minolta/Sony AF 20mm f/2.8 New"}, - {26421, "Minolta AF 24mm f/2.8 New"}, - {26441, "Minolta AF 100-400mm f/4.5-6.7 APO"}, - {26621, "Minolta AF 50mm f/1.4 New"}, - {26671, "Minolta AF 35mm f/2 New"}, - {26681, "Minolta AF 28mm f/2 New"}, - {26721, "Minolta AF 24-105mm f/3.5-4.5 (D)"}, - {30464, "Metabones Canon EF Speed Booster"}, - {45671, "Tokina 70-210mm f/4-5.6"}, - {45681, "Tokina AF 35-200mm f/4-5.6 Zoom SD"}, - {45701, "Tamron AF 35-135mm f/3.5-4.5"}, - {45711, "Vivitar 70-210mm f/4.5-5.6"}, - {45741, "2x Teleconverter or Tamron or Tokina Lens"}, - {45741, "Tamron SP AF 90mm f/2.5"}, - {45741, "Tokina RF 500mm f/8.0 x2"}, - {45741, "Tokina 300mm f/2.8 x2"}, - {45751, "1.4x Teleconverter"}, - {45851, "Tamron SP AF 300mm f/2.8 LD IF"}, - {45861, "Tamron SP AF 35-105mm f/2.8 LD Aspherical IF"}, - {45871, "Tamron AF 70-210mm f/2.8 SP LD"}, - {48128, "Metabones Canon EF Speed Booster Ultra"}, - {61184, "Canon EF Adapter"}, - {65280, "Sigma 16mm f/2.8 Filtermatic Fisheye"}, - {65535, "E-Mount, T-Mount, Other Lens or no lens"}, - {65535, "Arax MC 35mm f/2.8 Tilt+Shift"}, - {65535, "Arax MC 80mm f/2.8 Tilt+Shift"}, - {65535, "Zenitar MF 16mm f/2.8 Fisheye M42"}, - {65535, "Samyang 500mm Mirror f/8.0"}, - {65535, "Pentacon Auto 135mm f/2.8"}, - {65535, "Pentacon Auto 29mm f/2.8"}, - {65535, "Helios 44-2 58mm f/2.0"} - }; - } - - std::string toString (const Tag* t) const override - { - int lensID = t->toInt(); - Tag *lensInfoTag = t->getParent()->getRoot()->findTag ("LensInfo"); - Tag *apertureTag = t->getParent()->getRoot()->findTag ("MaxApertureValue"); - Tag *focalLengthTag = t->getParent()->getRoot()->findTag ("FocalLength"); - double maxApertureAtFocal = 0.; - double focalLength = 0.; - - if ( apertureTag ) { - maxApertureAtFocal = pow (2.0, apertureTag->toDouble() / 2.0); - } - - if ( focalLengthTag ) { - focalLength = focalLengthTag->toDouble(); - } - - double *liArray = nullptr; - - if (lensInfoTag) { - liArray = lensInfoTag->toDoubleArray(); - } - - std::string retval = guess ( lensID, focalLength, maxApertureAtFocal, liArray); - - if (liArray) { - delete [] liArray; - } - - return retval; - } -}; -SALensIDInterpreter saLensIDInterpreter; - -class SALensID2Interpreter final : public IntLensInterpreter< int > -{ -public: - SALensID2Interpreter () - { - choices.insert (p_t (0, "Unknown E-mount lens or other lens")); - choices.insert (p_t (0, "Sigma 19mm f/2.8 [EX] DN")); - choices.insert (p_t (0, "Sigma 30mm f/2.8 [EX] DN")); - choices.insert (p_t (0, "Sigma 60mm f/2.8 DN")); - choices.insert (p_t (0, "Sony E 18-200mm f/3.5-6.3 OSS LE")); - choices.insert (p_t (0, "Tamron 18-200mm f/3.5-6.3 Di III VC")); - choices.insert (p_t (0, "Tokina FiRIN 20mm f/2 FE AF")); - choices.insert (p_t (0, "Tokina FiRIN 20mm f/2 FE MF")); - choices.insert (p_t (0, "Zeiss Touit 12mm f/2.8")); - choices.insert (p_t (0, "Zeiss Touit 32mm f/1.8")); - choices.insert (p_t (0, "Zeiss Touit 50mm f/2.8 Macro")); - choices.insert (p_t (0, "Zeiss Loxia 50mm f/2")); - choices.insert (p_t (0, "Zeiss Loxia 35mm f/2")); - choices.insert (p_t (1, "Sony LA-EA1 or Sigma MC-11 Adapter")); - choices.insert (p_t (2, "Sony LA-EA2 Adapter")); - choices.insert (p_t (3, "Sony LA-EA3 Adapter")); - choices.insert (p_t (6, "Sony LA-EA4 Adapter")); - choices.insert (p_t (7, "Sony LA-EA5 Adapter")); - choices.insert (p_t (44, "Metabones Canon EF Smart Adapter")); - choices.insert (p_t (78, "Metabones Canon EF Smart Adapter Mark III or Other Adapter")); - choices.insert (p_t (184, "Metabones Canon EF Speed Booster Ultra")); - choices.insert (p_t (234, "Metabones Canon EF Smart Adapter Mark IV")); - choices.insert (p_t (239, "Metabones Canon EF Speed Booster")); - choices.insert (p_t (24593, "LA-EA4r MonsterAdapter")); - choices.insert (p_t (32784, "Sony E 16mm f/2.8")); - choices.insert (p_t (32785, "Sony E 18-55mm f/3.5-5.6 OSS")); - choices.insert (p_t (32786, "Sony E 55-210mm f/4.5-6.3 OSS")); - choices.insert (p_t (32787, "Sony E 18-200mm f/3.5-6.3 OSS")); - choices.insert (p_t (32788, "Sony E 30mm f/3.5 Macro")); - choices.insert (p_t (32789, "Sony E 24mm f/1.8 ZA or Samyang AF 50mm f/1.4")); - choices.insert (p_t (32789, "Samyang AF 50mm f/1.4")); - choices.insert (p_t (32790, "Sony E 50mm f/1.8 OSS or Samyang AF 14mm f/2.8")); - choices.insert (p_t (32790, "Samyang AF 14mm f/2.8")); - choices.insert (p_t (32791, "Sony E 16-70mm f/4 ZA OSS")); - choices.insert (p_t (32792, "Sony E 10-18mm f/4 OSS")); - choices.insert (p_t (32793, "Sony E PZ 16-50mm f/3.5-5.6 OSS")); - choices.insert (p_t (32794, "Sony FE 35mm f/2.8 ZA or Samyang Lens")); - choices.insert (p_t (32794, "Samyang AF 24mm f/2.8")); - choices.insert (p_t (32794, "Samyang AF 35mm f/2.8")); - choices.insert (p_t (32795, "Sony FE 24-70mm f/4 ZA OSS")); - choices.insert (p_t (32796, "Sony FE 85mm f/1.8 or Viltrox PFU RBMH 85mm f/1.8")); - choices.insert (p_t (32796, "Viltrox PFU RBMH 85mm f/1.8")); - choices.insert (p_t (32797, "Sony E 18-200mm f/3.5-6.3 OSS LE")); - choices.insert (p_t (32798, "Sony E 20mm f/2.8")); - choices.insert (p_t (32799, "Sony E 35mm f/1.8 OSS")); - choices.insert (p_t (32800, "Sony E PZ 18-105mm f/4 G OSS")); - choices.insert (p_t (32801, "Sony FE 12-24mm f/4 G")); - choices.insert (p_t (32802, "Sony FE 90mm f/2.8 Macro G OSS")); - choices.insert (p_t (32803, "Sony E 18-50mm f/4-5.6")); - choices.insert (p_t (32804, "Sony FE 24mm f/1.4 GM")); - choices.insert (p_t (32805, "Sony FE 24-105mm f/4 G OSS")); - choices.insert (p_t (32807, "Sony E PZ 18-200mm f/3.5-6.3 OSS")); - choices.insert (p_t (32808, "Sony FE 55mm f/1.8 ZA")); - choices.insert (p_t (32810, "Sony FE 70-200mm f/4 G OSS")); - choices.insert (p_t (32811, "Sony FE 16-35mm f/4 ZA OSS")); - choices.insert (p_t (32812, "Sony FE 50mm f/2.8 Macro")); - choices.insert (p_t (32813, "Sony FE 28-70mm f/3.5-5.6 OSS")); - choices.insert (p_t (32814, "Sony FE 35mm f/1.4 ZA")); - choices.insert (p_t (32815, "Sony FE 24-240mm f/3.5-6.3 OSS")); - choices.insert (p_t (32816, "Sony FE 28mm f/2")); - choices.insert (p_t (32817, "Sony FE PZ 28-135mm f/4 G OSS")); - choices.insert (p_t (32819, "Sony FE 100mm f/2.8 STF GM OSS")); - choices.insert (p_t (32820, "Sony E PZ 18-110mm f/4 G OSS")); - choices.insert (p_t (32821, "Sony FE 24-70mm f/2.8 GM")); - choices.insert (p_t (32822, "Sony FE 50mm f/1.4 ZA")); - choices.insert (p_t (32823, "Sony FE 85mm f/1.4 GM or Samyang AF 85mm f/1.4")); - choices.insert (p_t (32823, "Samyang AF 85mm f/1.4")); - choices.insert (p_t (32824, "Sony FE 50mm f/1.8")); - choices.insert (p_t (32826, "Sony FE 21mm f/2.8 (SEL28F20 + SEL075UWC)")); - choices.insert (p_t (32827, "Sony FE 16mm f/3.5 Fisheye (SEL28F20 + SEL057FEC)")); - choices.insert (p_t (32828, "Sony FE 70-300mm f/4.5-5.6 G OSS")); - choices.insert (p_t (32829, "Sony FE 100-400mm f/4.5-5.6 GM OSS")); - choices.insert (p_t (32830, "Sony FE 70-200mm f/2.8 GM OSS")); - choices.insert (p_t (32831, "Sony FE 16-35mm f/2.8 GM")); - choices.insert (p_t (32848, "Sony FE 400mm f/2.8 GM OSS")); - choices.insert (p_t (32849, "Sony E 18-135mm f/3.5-5.6 OSS")); - choices.insert (p_t (32850, "Sony FE 135mm f/1.8 GM")); - choices.insert (p_t (32851, "Sony FE 200-600mm f/5.6-6.3 G OSS")); - choices.insert (p_t (32852, "Sony FE 600mm f/4 GM OSS")); - choices.insert (p_t (32853, "Sony E 16-55mm f/2.8 G")); - choices.insert (p_t (32854, "Sony E 70-350mm f/4.5-6.3 G OSS")); - choices.insert (p_t (32855, "Sony FE C 16-35mm T3.1 G")); - choices.insert (p_t (32858, "Sony FE 35mm f/1.8")); - choices.insert (p_t (32859, "Sony FE 20mm f/1.8 G")); - choices.insert (p_t (32860, "Sony FE 12-24mm f/2.8 GM")); - choices.insert (p_t (32862, "Sony FE 50mm f/1.2 GM")); - choices.insert (p_t (32863, "Sony FE 14mm f/1.8 GM")); - choices.insert (p_t (32864, "Sony FE 28-60mm f/4-5.6")); - choices.insert (p_t (32865, "Sony FE 35mm f/1.4 GM")); - choices.insert (p_t (32866, "Sony FE 24mm f/2.8 G")); - choices.insert (p_t (32867, "Sony FE 40mm f/2.5 G")); - choices.insert (p_t (32868, "Sony FE 50mm f/2.5 G")); - choices.insert (p_t (32871, "Sony FE PZ 16-35mm f/4 G")); - choices.insert (p_t (32873, "Sony E PZ 10-20mm f/4 G")); - choices.insert (p_t (32874, "Sony FE 70-200mm f/2.8 GM OSS II")); - choices.insert (p_t (32875, "Sony FE 24-70mm f/2.8 GM II")); - choices.insert (p_t (32876, "Sony E 11mm f/1.8")); - choices.insert (p_t (32877, "Sony E 15mm f/1.4 G")); - choices.insert (p_t (33072, "Sony FE 70-200mm f/2.8 GM OSS + 1.4X Teleconverter")); - choices.insert (p_t (33073, "Sony FE 70-200mm f/2.8 GM OSS + 2X Teleconverter")); - choices.insert (p_t (33076, "Sony FE 100mm f/2.8 STF GM OSS (macro mode)")); - choices.insert (p_t (33077, "Sony FE 100-400mm f/4.5-5.6 GM OSS + 1.4X Teleconverter")); - choices.insert (p_t (33078, "Sony FE 100-400mm f/4.5-5.6 GM OSS + 2X Teleconverter")); - choices.insert (p_t (33079, "Sony FE 400mm f/2.8 GM OSS + 1.4X Teleconverter")); - choices.insert (p_t (33080, "Sony FE 400mm f/2.8 GM OSS + 2X Teleconverter")); - choices.insert (p_t (33081, "Sony FE 200-600mm f/5.6-6.3 G OSS + 1.4X Teleconverter")); - choices.insert (p_t (33082, "Sony FE 200-600mm f/5.6-6.3 G OSS + 2X Teleconverter")); - choices.insert (p_t (33083, "Sony FE 600mm f/4 GM OSS + 1.4X Teleconverter")); - choices.insert (p_t (33084, "Sony FE 600mm f/4 GM OSS + 2X Teleconverter")); - choices.insert (p_t (49201, "Zeiss Touit 12mm f/2.8")); - choices.insert (p_t (49202, "Zeiss Touit 32mm f/1.8")); - choices.insert (p_t (49203, "Zeiss Touit 50mm f/2.8 Macro")); - choices.insert (p_t (49216, "Zeiss Batis 25mm f/2")); - choices.insert (p_t (49217, "Zeiss Batis 85mm f/1.8")); - choices.insert (p_t (49218, "Zeiss Batis 18mm f/2.8")); - choices.insert (p_t (49219, "Zeiss Batis 135mm f/2.8")); - choices.insert (p_t (49220, "Zeiss Batis 40mm f/2 CF")); - choices.insert (p_t (49232, "Zeiss Loxia 50mm f/2")); - choices.insert (p_t (49233, "Zeiss Loxia 35mm f/2")); - choices.insert (p_t (49234, "Zeiss Loxia 21mm f/2.8")); - choices.insert (p_t (49235, "Zeiss Loxia 85mm f/2.4")); - choices.insert (p_t (49236, "Zeiss Loxia 25mm f/2.4")); - choices.insert (p_t (49457, "Tamron 28-75mm f/2.8 Di III RXD")); - choices.insert (p_t (49458, "Tamron 17-28mm f/2.8 Di III RXD")); - choices.insert (p_t (49459, "Tamron 35mm f/2.8 Di III OSD M1:2")); - choices.insert (p_t (49460, "Tamron 24mm f/2.8 Di III OSD M1:2")); - choices.insert (p_t (49461, "Tamron 20mm f/2.8 Di III OSD M1:2")); - choices.insert (p_t (49462, "Tamron 70-180mm f/2.8 Di III VXD")); - choices.insert (p_t (49463, "Tamron 28-200mm f/2.8-5.6 Di III RXD")); - choices.insert (p_t (49464, "Tamron 70-300mm f/4.5-6.3 Di III RXD")); - choices.insert (p_t (49465, "Tamron 17-70mm f/2.8 Di III-A VC RXD")); - choices.insert (p_t (49466, "Tamron 150-500mm f/5-6.7 Di III VC VXD")); - choices.insert (p_t (49467, "Tamron 11-20mm f/2.8 Di III-A RXD")); - choices.insert (p_t (49468, "Tamron 18-300mm f/3.5-6.3 Di III-A VC VXD")); - choices.insert (p_t (49469, "Tamron 35-150mm f/2-F2.8 Di III VXD")); - choices.insert (p_t (49470, "Tamron 28-75mm f/2.8 Di III VXD G2")); - choices.insert (p_t (49471, "Tamron 50-400mm f/4.5-6.3 Di III VC VXD")); - choices.insert (p_t (49473, "Tokina atx-m 85mm f/1.8 FE or Viltrox lens")); - choices.insert (p_t (49473, "Viltrox 23mm f/1.4 E")); - choices.insert (p_t (49473, "Viltrox 56mm f/1.4 E")); - choices.insert (p_t (49712, "Tokina FiRIN 20mm f/2 FE AF")); - choices.insert (p_t (49713, "Tokina FiRIN 100mm f/2.8 FE MACRO")); - choices.insert (p_t (50480, "Sigma 30mm f/1.4 DC DN | C")); - choices.insert (p_t (50481, "Sigma 50mm f/1.4 DG HSM | A")); - choices.insert (p_t (50482, "Sigma 18-300mm f/3.5-6.3 DC MACRO OS HSM | C + MC-11")); - choices.insert (p_t (50483, "Sigma 18-35mm f/1.8 DC HSM | A + MC-11")); - choices.insert (p_t (50484, "Sigma 24-35mm f/2 DG HSM | A + MC-11")); - choices.insert (p_t (50485, "Sigma 24mm f/1.4 DG HSM | A + MC-11")); - choices.insert (p_t (50486, "Sigma 150-600mm f/5-6.3 DG OS HSM | C + MC-11")); - choices.insert (p_t (50487, "Sigma 20mm f/1.4 DG HSM | A + MC-11")); - choices.insert (p_t (50488, "Sigma 35mm f/1.4 DG HSM | A")); - choices.insert (p_t (50489, "Sigma 150-600mm f/5-6.3 DG OS HSM | S + MC-11")); - choices.insert (p_t (50490, "Sigma 120-300mm f/2.8 DG OS HSM | S + MC-11")); - choices.insert (p_t (50492, "Sigma 24-105mm f/4 DG OS HSM | A + MC-11")); - choices.insert (p_t (50493, "Sigma 17-70mm f/2.8-4 DC MACRO OS HSM | C + MC-11")); - choices.insert (p_t (50495, "Sigma 50-100mm f/1.8 DC HSM | A + MC-11")); - choices.insert (p_t (50499, "Sigma 85mm f/1.4 DG HSM | A")); - choices.insert (p_t (50501, "Sigma 100-400mm f/5-6.3 DG OS HSM | C + MC-11")); - choices.insert (p_t (50503, "Sigma 16mm f/1.4 DC DN | C")); - choices.insert (p_t (50507, "Sigma 105mm f/1.4 DG HSM | A")); - choices.insert (p_t (50508, "Sigma 56mm f/1.4 DC DN | C")); - choices.insert (p_t (50512, "Sigma 70-200mm f/2.8 DG OS HSM | S + MC-11")); - choices.insert (p_t (50513, "Sigma 70mm f/2.8 DG MACRO | A")); - choices.insert (p_t (50514, "Sigma 45mm f/2.8 DG DN | C")); - choices.insert (p_t (50515, "Sigma 35mm f/1.2 DG DN | A")); - choices.insert (p_t (50516, "Sigma 14-24mm f/2.8 DG DN | A")); - choices.insert (p_t (50517, "Sigma 24-70mm f/2.8 DG DN | A")); - choices.insert (p_t (50518, "Sigma 100-400mm f/5-6.3 DG DN OS | C")); - choices.insert (p_t (50521, "Sigma 85mm f/1.4 DG DN | A")); - choices.insert (p_t (50522, "Sigma 105mm f/2.8 DG DN MACRO | A")); - choices.insert (p_t (50523, "Sigma 65mm f/2 DG DN | C")); - choices.insert (p_t (50524, "Sigma 35mm f/2 DG DN | C")); - choices.insert (p_t (50525, "Sigma 24mm f/3.5 DG DN | C")); - choices.insert (p_t (50526, "Sigma 28-70mm f/2.8 DG DN | C")); - choices.insert (p_t (50527, "Sigma 150-600mm f/5-6.3 DG DN OS | S")); - choices.insert (p_t (50528, "Sigma 35mm f/1.4 DG DN | A")); - choices.insert (p_t (50529, "Sigma 90mm f/2.8 DG DN | C")); - choices.insert (p_t (50530, "Sigma 24mm f/2 DG DN | C")); - choices.insert (p_t (50531, "Sigma 18-50mm f/2.8 DC DN | C")); - choices.insert (p_t (50532, "Sigma 20mm f/2 DG DN | C")); - choices.insert (p_t (50533, "Sigma 16-28mm f/2.8 DG DN | C")); - choices.insert (p_t (50992, "Voigtlander SUPER WIDE-HELIAR 15mm f/4.5 III")); - choices.insert (p_t (50993, "Voigtlander HELIAR-HYPER WIDE 10mm f/5.6")); - choices.insert (p_t (50994, "Voigtlander ULTRA WIDE-HELIAR 12mm f/5.6 III")); - choices.insert (p_t (50995, "Voigtlander MACRO APO-LANTHAR 65mm f/2 Aspherical")); - choices.insert (p_t (50996, "Voigtlander NOKTON 40mm f/1.2 Aspherical")); - choices.insert (p_t (50997, "Voigtlander NOKTON classic 35mm f/1.4")); - choices.insert (p_t (50998, "Voigtlander MACRO APO-LANTHAR 110mm f/2.5")); - choices.insert (p_t (50999, "Voigtlander COLOR-SKOPAR 21mm f/3.5 Aspherical")); - choices.insert (p_t (51000, "Voigtlander NOKTON 50mm f/1.2 Aspherical")); - choices.insert (p_t (51001, "Voigtlander NOKTON 21mm f/1.4 Aspherical")); - choices.insert (p_t (51002, "Voigtlander APO-LANTHAR 50mm f/2 Aspherical")); - choices.insert (p_t (51003, "Voigtlander NOKTON 35mm f/1.2 Aspherical SE")); - choices.insert (p_t (51006, "Voigtlander APO-LANTHAR 35mm f/2 Aspherical")); - choices.insert (p_t (51504, "Samyang AF 50mm f/1.4")); - choices.insert (p_t (51505, "Samyang AF 14mm f/2.8 or Samyang AF 35mm f/2.8")); - choices.insert (p_t (51505, "Samyang AF 35mm f/2.8")); - choices.insert (p_t (51507, "Samyang AF 35mm f/1.4")); - choices.insert (p_t (51508, "Samyang AF 45mm f/1.8")); - choices.insert (p_t (51510, "Samyang AF 18mm f/2.8 or Samyang AF 35mm f/1.8")); - choices.insert (p_t (51510, "Samyang AF 35mm f/1.8")); - choices.insert (p_t (51512, "Samyang AF 75mm f/1.8")); - choices.insert (p_t (51513, "Samyang AF 35mm f/1.8")); - choices.insert (p_t (51514, "Samyang AF 24mm f/1.8")); - choices.insert (p_t (51515, "Samyang AF 12mm f/2.0")); - choices.insert (p_t (51516, "Samyang AF 24-70mm f/2.8")); - choices.insert (p_t (51517, "Samyang AF 50mm f/1.4 II")); - choices.insert (p_t (51518, "Samyang AF 135mm f/1.8")); - } - - std::string toString (const Tag* t) const override - { - int lensID = t->toInt(); - Tag *lensInfoTag = t->getParent()->getRoot()->findTag ("LensInfo"); - Tag *apertureTag = t->getParent()->getRoot()->findTag ("MaxApertureValue"); - Tag *focalLengthTag = t->getParent()->getRoot()->findTag ("FocalLength"); - double maxApertureAtFocal = 0.; - double focalLength = 0.; - - if ( apertureTag ) { - maxApertureAtFocal = pow (2.0, apertureTag->toDouble() / 2.0); - } - - if ( focalLengthTag ) { - focalLength = focalLengthTag->toDouble(); - } - - double *liArray = nullptr; - - if (lensInfoTag) { - liArray = lensInfoTag->toDoubleArray(); - } - - std::string retval = guess ( lensID, focalLength, maxApertureAtFocal, liArray); - - if (liArray) { - delete [] liArray; - } - - return retval; - } -}; -SALensID2Interpreter saLensID2Interpreter; - -class MATeleconverterInterpreter : public ChoiceInterpreter<> -{ -public: - MATeleconverterInterpreter () - { - choices[0x0] = "None"; - choices[0x4] = "Minolta/Sony AF 1.4x APO (D) (0x04)"; - choices[0x5] = "Minolta/Sony AF 2x APO (D) (0x05)"; - choices[0x48] = "Minolta/Sony AF 2x APO (D)"; - choices[0x50] = "Minolta AF 2x APO II"; - choices[0x60] = "Minolta AF 2x APO"; - choices[0x88] = "Minolta/Sony AF 1.4x APO (D)"; - choices[0x90] = "Minolta AF 1.4x APO II"; - choices[0xa0] = "Minolta AF 1.4x APO"; - } -}; -MATeleconverterInterpreter maTeleconverterInterpreter; - -class MAQualityInterpreter : public ChoiceInterpreter<> -{ -public: - MAQualityInterpreter () - { - choices[0] = "RAW"; - choices[1] = "Super Fine"; - choices[2] = "Fine"; - choices[3] = "Standard"; - choices[4] = "Economy"; - choices[5] = "Extra Fine"; - choices[6] = "RAW + JPEG"; - choices[7] = "Compressed RAW"; - choices[8] = "Compressed RAW + JPEG"; - } -}; -MAQualityInterpreter maQualityInterpreter; - -class MAImageSizeInterpreter : public ChoiceInterpreter<> -{ -public: - MAImageSizeInterpreter () - { - choices[1] = "1600x1200"; - choices[2] = "1280x960"; - choices[3] = "640x480"; - choices[5] = "2560x1920"; - choices[6] = "2272x1704"; - choices[7] = "2048x1536"; - } -}; -MAImageSizeInterpreter maImageSizeInterpreter; - -class SAQualityInterpreter2 : public ChoiceInterpreter<> -{ -public: - SAQualityInterpreter2 () - { - choices[0] = "Raw"; - choices[2] = "cRAW"; - choices[16] = "Extra fine"; - choices[32] = "Fine"; - choices[34] = "RAW + JPEG"; - choices[35] = "cRAW + JPEG"; - choices[48] = "Standard"; - } -}; -SAQualityInterpreter2 saQualityInterpreter2; - -class SAQualityInterpreter3 : public ChoiceInterpreter<> -{ -public: - SAQualityInterpreter3 () - { - choices[2] = "RAW"; - choices[4] = "RAW + JPEG"; - choices[6] = "Fine"; - choices[7] = "Standard"; - } -}; -SAQualityInterpreter3 saQualityInterpreter3; - -class SADriveMode : public ChoiceInterpreter<> -{ -public: - SADriveMode () - { - choices[1] = "Single Frame"; - choices[2] = "Continuous High"; - choices[4] = "Self-timer 10 sec"; - choices[5] = "Self-timer 2 sec, Mirror Lock-up"; - choices[6] = "Single-frame Bracketing"; - choices[7] = "Continuous Bracketing"; - choices[10] = "Remote Commander"; - choices[11] = "Mirror Lock-up"; - choices[18] = "Continuous Low"; - choices[24] = "White Balance Bracketing Low"; - choices[25] = "D-Range Optimizer Bracketing Low"; - choices[40] = "White Balance Bracketing High"; - choices[41] = "D-Range Optimizer Bracketing High"; - } -}; -SADriveMode saDriveMode; - -class SADriveMode2 : public ChoiceInterpreter<> -{ -public: - SADriveMode2 () - { - choices[1] = "Single Frame"; - choices[2] = "Continuous High"; - choices[4] = "Self-timer 10 sec"; - choices[5] = "Self-timer 2 sec, Mirror Lock-up"; - choices[7] = "Continuous Bracketing"; - choices[10] = "Remote Commander"; - choices[11] = "Continuous Self-timer"; - } -}; -SADriveMode2 saDriveMode2; - -class SADriveMode3 : public ChoiceInterpreter<> -{ -public: - SADriveMode3 () - { - choices[16] = "Single Frame"; - choices[33] = "Continuous High"; - choices[34] = "Continuous Low"; - choices[48] = "Speed Priority Continuous"; - choices[81] = "Self-timer 10 sec"; - choices[82] = "Self-timer 2 sec, Mirror Lock-up"; - choices[113] = "Continuous Bracketing 0.3 EV"; - choices[117] = "Continuous Bracketing 0.7 EV"; - choices[145] = "White Balance Bracketing Low"; - choices[146] = "White Balance Bracketing High"; - choices[192] = "Remote Commander"; - choices[209] = "Continuous - HDR"; - choices[210] = "Continuous - Multi Frame NR"; - choices[211] = "Continuous - Handheld Night Shot"; - choices[212] = "Continuous - Anti Motion Blur"; - choices[213] = "Continuous - Sweep Panorama"; - choices[214] = "Continuous - 3D Sweep Panorama"; - } -}; -SADriveMode3 saDriveMode3; - -class SAFocusMode: public ChoiceInterpreter<> -{ -public: - SAFocusMode () - { - choices[0] = "Manual"; - choices[1] = "AF-S"; - choices[2] = "AF-C"; - choices[3] = "AF-A"; - choices[4] = "Permanent-AF"; - choices[65535] = "n/a"; - } -}; -SAFocusMode saFocusMode; - -class SAFocusMode2: public ChoiceInterpreter<> -{ -public: - SAFocusMode2 () - { - choices[0] = "Manual"; - choices[1] = "AF-S"; - choices[2] = "AF-C"; - choices[3] = "AF-A"; - choices[65535] = "n/a"; - } -}; -SAFocusMode2 saFocusMode2; - -class SAFocusModeSetting3: public ChoiceInterpreter<> -{ -public: - SAFocusModeSetting3 () - { - choices[17] = "AF-S"; - choices[18] = "AF-C"; - choices[19] = "AF-A"; - choices[32] = "Manual"; - choices[48] = "DMF"; - choices[65535] = "n/a"; - } -}; -SAFocusModeSetting3 saFocusModeSetting3; - -class SAAFMode: public ChoiceInterpreter<> -{ -public: - SAAFMode() - { - choices[0] = "Default"; - choices[1] = "Multi AF"; - choices[2] = "Center AF"; - choices[3] = "Spot AF"; - choices[4] = "Flexible Spot AF"; - choices[6] = "Touch AF"; - choices[14] = "Tracking"; - choices[15] = "Face Tracking"; - choices[65535] = "n/a"; - } -}; -SAAFMode saAFMode; - -class SAAFAreaMode: public ChoiceInterpreter<> -{ -public: - SAAFAreaMode () - { - choices[0] = "Wide"; - choices[1] = "Local"; - choices[2] = "Spot"; - } -}; -SAAFAreaMode saAFAreaMode; - -class SAAFAreaMode2: public ChoiceInterpreter<> -{ -public: - SAAFAreaMode2 () - { - choices[1] = "Wide"; - choices[2] = "Spot"; - choices[3] = "Local"; - choices[4] = "Flexible"; - } -}; -SAAFAreaMode2 saAFAreaMode2; - -class SAAFPointSelected: public ChoiceInterpreter<> -{ -public: - SAAFPointSelected () - { - choices[1] = "Center"; - choices[2] = "Top"; - choices[3] = "Top-Right"; - choices[4] = "Right"; - choices[5] = "Bottom-Right"; - choices[6] = "Bottom"; - choices[7] = "Bottom-Left"; - choices[8] = "Left"; - choices[9] = "Top-Left"; - choices[10] = "Far Right"; - choices[11] = "Far Left"; - } -}; -SAAFPointSelected saAFPointSelected; - -class SACameraInfoAFPointSelected: public ChoiceInterpreter<> -{ -public: - SACameraInfoAFPointSelected () - { - choices[0] = "Auto"; - choices[1] = "Center"; - choices[2] = "Top"; - choices[3] = "Upper-Right"; - choices[4] = "Right"; - choices[5] = "Lower-Right"; - choices[6] = "Bottom"; - choices[7] = "Lower-Left"; - choices[8] = "Left"; - choices[9] = "Upper-Left"; - choices[10] = "Far Right"; - choices[11] = "Far Left"; - choices[12] = "Upper-middle"; - choices[13] = "Near Right"; - choices[14] = "Lower-middle"; - choices[15] = "Near Left"; - } -}; -SACameraInfoAFPointSelected saCameraInfoAFPointSelected; - -class SACameraInfoAFPoint: public ChoiceInterpreter<> -{ -public: - SACameraInfoAFPoint () - { - choices[0] = "Upper-Left"; - choices[1] = "Left"; - choices[2] = "Lower-Left"; - choices[3] = "Far Left"; - choices[4] = "Top (horizontal)"; - choices[5] = "Near Right"; - choices[6] = "Center (horizontal)"; - choices[7] = "Near Left"; - choices[8] = "Bottom (horizontal)"; - choices[9] = "Top (vertical)"; - choices[10] = "Center (vertical)"; - choices[11] = "Bottom (vertical)"; - choices[12] = "Far Right"; - choices[13] = "Upper-Right"; - choices[14] = "Right"; - choices[15] = "Lower-Right"; - choices[16] = "Upper-middle"; - choices[17] = "Lower-middle"; - choices[255] = "(none)"; - } -}; -SACameraInfoAFPoint saCameraInfoAFPoint; - -class SAAFPointSelected2: public ChoiceInterpreter<> -{ -public: - SAAFPointSelected2 () - { - choices[1] = "Center"; - choices[2] = "Top"; - choices[3] = "Top-Right"; - choices[4] = "Right"; - choices[5] = "Bottom-Right"; - choices[6] = "Bottom"; - choices[7] = "Bottom-Left"; - choices[8] = "Left"; - choices[9] = "Top-Left"; - } -}; -SAAFPointSelected2 saAFPointSelected2; - -class SAMeteringMode0_3: public ChoiceInterpreter<> -{ -public: - SAMeteringMode0_3 () - { - choices[0] = "Multi-segment"; - choices[2] = "Center-weighted Average"; - choices[3] = "Spot"; - } -}; -SAMeteringMode0_3 saMeteringMode0_3; - -class SAMeteringMode1_3: public ChoiceInterpreter<> -{ -public: - SAMeteringMode1_3 () - { - choices[1] = "Multi-segment"; - choices[2] = "Center-weighted Average"; - choices[3] = "Spot"; - } -}; -SAMeteringMode1_3 saMeteringMode1_3; - -class SAMeteringMode1_4: public ChoiceInterpreter<> -{ -public: - SAMeteringMode1_4 () - { - choices[1] = "Multi-segment"; - choices[2] = "Center-weighted Average"; - choices[4] = "Spot"; - } -}; -SAMeteringMode1_4 saMeteringMode1_4; - -class SADynamicRangeOptimizerMode: public ChoiceInterpreter<> -{ -public: - SADynamicRangeOptimizerMode () - { - choices[0] = "Off"; - choices[1] = "Standard"; - choices[2] = "Advanced Auto"; - choices[3] = "Advanced Level"; - choices[4097] = "Auto"; - } -}; -SADynamicRangeOptimizerMode saDynamicRangeOptimizerMode; - -class SADynamicRangeOptimizerSetting: public ChoiceInterpreter<> -{ -public: - SADynamicRangeOptimizerSetting () - { - choices[1] = "Off"; - choices[2] = "On (Auto)"; - choices[3] = "On (Manual)"; - } -}; -SADynamicRangeOptimizerSetting saDynamicRangeOptimizerSetting; - -class SACreativeStyle: public ChoiceInterpreter<> -{ -public: - SACreativeStyle () - { - choices[1] = "Standard"; - choices[2] = "Vivid"; - choices[3] = "Portrait"; - choices[4] = "Landscape"; - choices[5] = "Sunset"; - choices[6] = "Night View/Portrait"; - choices[8] = "B&W"; - choices[9] = "Adobe RGB"; - choices[11] = "Neutral"; - choices[12] = "Clear"; - choices[13] = "Deep"; - choices[14] = "Light"; - choices[15] = "Autumn Leaves"; - choices[16] = "Sepia"; - } -}; -SACreativeStyle saCreativeStyle; - -class SACreativeStyle2: public ChoiceInterpreter<> -{ -public: - SACreativeStyle2 () - { - choices[1] = "Standard"; - choices[2] = "Vivid"; - choices[3] = "Portrait"; - choices[4] = "Landscape"; - choices[5] = "Sunset"; - choices[6] = "Night View/Portrait"; - choices[8] = "B&W"; - } -}; -SACreativeStyle2 saCreativeStyle2; - -class SACreativeStyleSetting: public ChoiceInterpreter<> -{ -public: - SACreativeStyleSetting () - { - choices[16] = "Standard"; - choices[32] = "Vivid"; - choices[64] = "Portrait"; - choices[80] = "Landscape"; - choices[96] = "B&W"; - choices[160] = "Sunset"; - } -}; -SACreativeStyleSetting saCreativeStyleSetting; - -class SAFlashControl: public ChoiceInterpreter<> -{ -public: - SAFlashControl () - { - choices[1] = "ADI Flash"; - choices[2] = "Pre-flash TTL"; - } -}; -SAFlashControl saFlashControl; - -class SAFlashMode: public ChoiceInterpreter<> -{ -public: - SAFlashMode () - { - choices[0] = "ADI"; - choices[1] = "TTL"; - } -}; -SAFlashMode saFlashMode; - -class SAFlashMode2: public ChoiceInterpreter<> -{ -public: - SAFlashMode2 () - { - choices[1] = "Flash Off"; - choices[16] = "Autoflash"; - choices[17] = "Fill-flash"; - choices[18] = "Slow Sync"; - choices[19] = "Rear Sync"; - choices[20] = "Wireless"; - } -}; -SAFlashMode2 saFlashMode2; - -class SAExposureProgram: public ChoiceInterpreter<> -{ -public: - SAExposureProgram () - { - choices[0] = "Auto"; - choices[1] = "Manual"; - choices[2] = "Program AE"; - choices[3] = "Aperture-priority AE"; - choices[4] = "Shutter speed priority AE"; - choices[8] = "Program Shift A"; - choices[9] = "Program Shift S"; - choices[16] = "Portrait"; - choices[17] = "Sports"; - choices[18] = "Sunset"; - choices[19] = "Night Portrait"; - choices[20] = "Landscape"; - choices[21] = "Macro"; - choices[35] = "Auto No Flash"; - } -}; -SAExposureProgram saExposureProgram; - -class SAExposureProgram2: public ChoiceInterpreter<> -{ -public: - SAExposureProgram2 () - { - choices[1] = "Program AE"; - choices[2] = "Aperture-priority AE"; - choices[3] = "Shutter speed priority AE"; - choices[4] = "Manual"; - choices[5] = "Cont. Priority AE"; - choices[16] = "Auto"; - choices[17] = "Auto (no flash)"; - choices[18] = "Auto+"; - choices[49] = "Portrait"; - choices[50] = "Landscape"; - choices[51] = "Macro"; - choices[52] = "Sports"; - choices[53] = "Sunset"; - choices[54] = "Night view"; - choices[55] = "Night view/portrait"; - choices[56] = "Handheld Night Shot"; - choices[57] = "3D Sweep Panorama"; - choices[64] = "Auto 2"; - choices[65] = "Auto 2 (no flash)"; - choices[80] = "Sweep Panorama"; - choices[96] = "Anti Motion Blur"; - choices[128] = "Toy Camera"; - choices[129] = "Pop Color"; - choices[130] = "Posterization"; - choices[131] = "Posterization B/W"; - choices[132] = "Retro Photo"; - choices[133] = "High-key"; - choices[134] = "Partial Color Red"; - choices[135] = "Partial Color Green"; - choices[136] = "Partial Color Blue"; - choices[137] = "Partial Color Yellow"; - choices[138] = "High Contrast Monochrome"; - } -}; -SAExposureProgram2 saExposureProgram2; - -class SARotation: public ChoiceInterpreter<> -{ -public: - SARotation () - { - choices[0] = "Horizontal"; - choices[1] = "Rotate 90 CW"; - choices[2] = "Rotate 270 CW"; - choices[3] = "None"; - } -}; -SARotation saRotation; - -class SASonyImageSize: public ChoiceInterpreter<> -{ -public: - SASonyImageSize () - { - choices[1] = "Large"; - choices[2] = "Medium"; - choices[3] = "Small"; - } -}; -SASonyImageSize saSonyImageSize; - -class SASonyImageSize3: public ChoiceInterpreter<> -{ -public: - SASonyImageSize3 () - { - choices[21] = "Large (3:2)"; - choices[22] = "Medium (3:2)"; - choices[23] = "Small (3:2)"; - choices[25] = "Large (16:9)"; - choices[26] = "Medium (16:9) "; - choices[27] = "Small (16:9)"; - } -}; -SASonyImageSize3 saSonyImageSize3; - -class SAAspectRatio: public ChoiceInterpreter<> -{ -public: - SAAspectRatio () - { - choices[1] = "3:2"; - choices[2] = "16:9"; - } -}; -SAAspectRatio saAspectRatio; - -class SAAspectRatio2: public ChoiceInterpreter<> -{ -public: - SAAspectRatio2 () - { - choices[4] = "3:2"; - choices[8] = "16:9"; - } -}; -SAAspectRatio2 saAspectRatio2; - -class SAExposureLevelIncrements: public ChoiceInterpreter<> -{ -public: - SAExposureLevelIncrements () - { - choices[33] = "1/3 EV"; - choices[50] = "1/2 EV"; - } -}; -SAExposureLevelIncrements saExposureLevelIncrements; - -class SAAFIlluminator: public ChoiceInterpreter<> -{ -public: - SAAFIlluminator () - { - choices[0] = "Off"; - choices[1] = "Auto"; - choices[65535] = "n/a"; - } -}; -SAAFIlluminator saAFIlluminator; - -class SAColorSpace1_2: public ChoiceInterpreter<> -{ -public: - SAColorSpace1_2 () - { - choices[1] = "sRGB"; - choices[2] = "AdobeRGB"; - } -}; -SAColorSpace1_2 saColorSpace1_2; - -class SAColorSpace0_5: public ChoiceInterpreter<> -{ -public: - SAColorSpace0_5 () - { - choices[0] = "sRGB"; - choices[1] = "AdobeRGB"; - choices[5] = "AdobeRGB"; - } -}; -SAColorSpace0_5 saColorSpace0_5; - -class SAColorSpace5_6: public ChoiceInterpreter<> -{ -public: - SAColorSpace5_6 () - { - choices[5] = "AdobeRGB"; - choices[6] = "sRGB"; - } -}; -SAColorSpace5_6 saColorSpace5_6; - -class SAReleaseModeInterpreter: public ChoiceInterpreter<> -{ -public: - SAReleaseModeInterpreter () - { - choices[0] = "Normal"; - choices[2] = "Continuous"; - choices[5] = "Exposure Bracketing"; - choices[6] = "White Balance Bracketing"; - choices[8] = "DRO Bracketing"; - choices[65535] = "n/a"; - } -}; -SAReleaseModeInterpreter saReleaseModeInterpreter; - -class SAImageStyleInterpreter: public ChoiceInterpreter<> -{ -public: - SAImageStyleInterpreter () - { - choices[1] = "Standard"; - choices[2] = "Vivid"; - choices[3] = "Portrait"; - choices[4] = "Landscape"; - choices[5] = "Sunset"; - choices[7] = "Night View/Portrait"; - choices[8] = "B&W"; - choices[9] = "Adobe RGB"; - choices[11] = "Neutral"; - choices[129] = "StyleBox1"; - choices[130] = "StyleBox2"; - choices[131] = "StyleBox3"; - choices[132] = "StyleBox4"; - choices[133] = "StyleBox5"; - choices[134] = "StyleBox6"; - } -}; -SAImageStyleInterpreter saImageStyleInterpreter; - -class SAPictureEffectInterpreter: public ChoiceInterpreter<> -{ -public: - SAPictureEffectInterpreter() - { - choices[0] = "Off"; - choices[1] = "Toy Camera"; - choices[2] = "Pop Color"; - choices[3] = "Posterization"; - choices[4] = "Posterization B/W"; - choices[5] = "Retro Photo"; - choices[6] = "Soft High Key"; - choices[7] = "Partial Color (red)"; - choices[8] = "Partial Color (green)"; - choices[9] = "Partial Color (blue)"; - choices[10] = "Partial Color (yellow)"; - choices[13] = "High Contrast Monochrome"; - choices[16] = "Toy Camera (normal)"; - choices[17] = "Toy Camera (cool)"; - choices[18] = "Toy Camera (warm)"; - choices[19] = "Toy Camera (green)"; - choices[20] = "Toy Camera (magenta)"; - choices[32] = "Soft Focus (low)"; - choices[33] = "Soft Focus"; - choices[34] = "Soft Focus (high)"; - choices[48] = "Miniature (auto)"; - choices[49] = "Miniature (top)"; - choices[50] = "Miniature (middle horizontal)"; - choices[51] = "Miniature (bottom)"; - choices[52] = "Miniature (left)"; - choices[53] = "Miniature (middle vertical)"; - choices[54] = "Miniature (right)"; - choices[64] = "HDR Painting (low)"; - choices[65] = "HDR Painting"; - choices[66] = "HDR Painting (high)"; - choices[80] = "Rich-tone Monochrome"; - choices[97] = "Water Color"; - choices[98] = "Water Color 2"; - choices[112] = "Illustration (low)"; - choices[113] = "Illustration"; - choices[114] = "Illustration (high)"; - } -}; -SAPictureEffectInterpreter saPictureEffectInterpreter; - -class SACameraInfoFocusStatusInterpreter : public ChoiceInterpreter<> -{ -public: - SACameraInfoFocusStatusInterpreter() - { - choices[0] = "Manual - Not confirmed (0)"; - choices[4] = "Manual - Not confirmed (4)"; - choices[16] = "AF-C - Confirmed"; - choices[24] = "AF-C - Not Confirmed"; - choices[64] = "AF-S - Confirmed"; - } -}; -SACameraInfoFocusStatusInterpreter saCameraInfoFocusStatusInterpreter; - -class SAExposureTimeInterpreter : public Interpreter -{ -public: - SAExposureTimeInterpreter () {} - std::string toString (const Tag* t) const override - { - double a = t->toDouble(); - - if (a > 0) { - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%.4f", a); - return buffer; - } else { - return "n/a"; - } - } - double toDouble (const Tag* t, int ofs) override - { - // Get the value; Depending on the camera model, this parameter can be a BYTE or a SHORT - TagType astype = t->getType(); - int a = 0; - - if (astype == BYTE) { - a = t->getValue()[ofs]; - } else if (astype == SHORT) { - a = (int)sget2 (t->getValue() + ofs, t->getOrder()); - } - - // Decode the value - if (a > 0) { - return pow (2., 6. - (double (a) / 8.)); - } else { - return 0.; - } - } - int toInt (const Tag* t, int ofs, TagType astype) override - { - // Get the value; Depending on the camera model, this parameter can be a BYTE or a SHORT - int a = 0; - - if (astype == INVALID || astype == AUTO) { - astype = t->getType(); - } - - if (astype == BYTE) { - a = t->getValue()[ofs]; - } else if (astype == SHORT) { - a = (int)sget2 (t->getValue() + ofs, t->getOrder()); - } - - // Decode the value - if (a) { - return int (powf (2.f, 6.f - (float (a) / 8.f)) + 0.5f); - } else { - return 0; - } - } -}; -SAExposureTimeInterpreter saExposureTimeInterpreter; - -class SAFNumberInterpreter : public Interpreter -{ -public: - SAFNumberInterpreter () {} - std::string toString (const Tag* t) const override - { - double a = double (t->toDouble()); - - if (a) { - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%.1f", a / 100. ); - return buffer; - } else { - return "n/a"; - } - } - double toDouble (const Tag* t, int ofs) override - { - // Get the value; Depending on the camera model, this parameter can be a BYTE or a SHORT - TagType astype = t->getType(); - int a = 0; - - if (astype == BYTE) { - a = t->getValue()[ofs]; - } else if (astype == SHORT) { - a = (int)sget2 (t->getValue() + ofs, t->getOrder()); - } - - // Decode the value - if (a > 0) { - return pow (2., (double (a) / 8. - 1.) / 2.); - } else { - return 0.; - } - } - int toInt (const Tag* t, int ofs, TagType astype) override - { - // Get the value; Depending on the camera model, this parameter can be a BYTE or a SHORT - int a = 0; - - if (astype == INVALID || astype == AUTO) { - astype = t->getType(); - } - - if (astype == BYTE) { - a = t->getValue()[ofs]; - } else if (astype == SHORT) { - a = (int)sget2 (t->getValue() + ofs, t->getOrder()); - } - - // Decode the value - if (a) { - return int (powf (2.f, (float (a) / 8.f - 1.f) / 2.f) + 0.5f); - } else { - return 0; - } - } -}; -SAFNumberInterpreter saFNumberInterpreter; - -class SAISOSettingInterpreter : public Interpreter -{ -public: - SAISOSettingInterpreter () {} - std::string toString (const Tag* t) const override - { - int a = t->toInt(); - - if (a) { - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%d", a ); - return buffer; - } else { - return "Auto"; - } - } - int toInt (const Tag* t, int ofs, TagType astype) override - { - // Get the value; Depending on the camera model, this parameter can be a BYTE or a SHORT - int a = 0; - - if (astype == INVALID || astype == AUTO) { - astype = t->getType(); - } - - if (astype == BYTE) { - a = t->getValue()[ofs]; - } else if (astype == SHORT) { - a = (int)sget2 (t->getValue() + ofs, t->getOrder()); - } - - // Decode the value - if (a && a != 254) { // 254 = 'Auto' for CameraSettings3, but we might say the same for CameraSettings & CameraSettings2 (?) - return std::exp((a / 8.f - 6.f) * std::log(2.f)) * 100.f + 0.5f; - } else { - return 0; - } - } -}; -SAISOSettingInterpreter saISOSettingInterpreter; - -class SAExposureCompSetInterpreter : public Interpreter -{ -public: - SAExposureCompSetInterpreter () {} - std::string toString (const Tag* t) const override - { - double a = t->toDouble(); - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%.2f", a ); - return buffer; - } - double toDouble (const Tag* t, int ofs) override - { - // Get the value - int a = t->getValue()[ofs]; - // Decode the value - return (double (a) - 128.) / 24.; - } -}; -SAExposureCompSetInterpreter saExposureCompSetInterpreter; - -class SAAFMicroAdjValueInterpreter : public Interpreter -{ -public: - SAAFMicroAdjValueInterpreter() {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%d", t->getValue()[0] - 20); - return buffer; - } - int toInt (const Tag* t, int ofs, TagType astype) override - { - return t->getValue()[0] - 20; - } -}; -SAAFMicroAdjValueInterpreter saAFMicroAdjValueInterpreter; - -class SAAFMicroAdjModeInterpreter : public Interpreter -{ -public: - SAAFMicroAdjModeInterpreter() {} - std::string toString (const Tag* t) const override - { - int a = t->getValue()[0] & 0x80; - - if (a == 0x80) { - return "On"; - } - - return "Off"; - } - int toInt (const Tag* t, int ofs, TagType astype) override - { - return (t->getValue()[0] & 0x80) == 0x80 ? 1 : 0; - } -}; - -SAAFMicroAdjModeInterpreter saAFMicroAdjModeInterpreter; - -class SAAFMicroAdjRegisteredLensesInterpreter : public Interpreter -{ -public: - SAAFMicroAdjRegisteredLensesInterpreter() {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%d", t->getValue()[0] & 0x7f); - return buffer; - } - int toInt (const Tag* t, int ofs, TagType astype) override - { - return t->getValue()[0] & 0x7f; - } -}; -SAAFMicroAdjRegisteredLensesInterpreter saAFMicroAdjRegisteredLensesInterpreter; - -class SAFocusStatusInterpreter : public Interpreter -{ -public: - SAFocusStatusInterpreter () {} - std::string toString (const Tag* t) const override - { - std::string retval; - int a = t->toInt(); - - if (a == 0) { - retval = "Not confirmed"; - } else if (a == 4) { - retval = "Not confirmed, Tracking"; - } else { - if (a & 1) { - retval = "Confirmed"; - } - - if (a & 2) { - if (!retval.empty()) { - retval += ", "; - } - - retval += "Failed"; - } - - if (a & 4) - if (!retval.empty()) { - retval += ", "; - } - - retval += "Tracking"; - } - - return retval; - } -}; -SAFocusStatusInterpreter saFocusStatusInterpreter; - -class SAColorTemperatureSettingInterpreter : public Interpreter -{ -public: - SAColorTemperatureSettingInterpreter () {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%d", t->toInt()); - return buffer; - } - int toInt (const Tag* t, int ofs, TagType astype) override - { - int a = 0; - - if (astype == INVALID || astype == AUTO) { - astype = t->getType(); - } - - if (astype == BYTE) { - a = t->getValue()[ofs]; - } else if (astype == SHORT) { - a = (int)sget2 (t->getValue() + ofs, t->getOrder()); - } - - return a * 100; - } -}; -SAColorTemperatureSettingInterpreter saColorTemperatureSettingInterpreter; - -const TagAttrib minoltaAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "MakerNoteVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0001, AUTO, "MinoltaCameraSettingsOld", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0003, AUTO, "MinoltaCameraSettings", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0004, AUTO, "MinoltaCameraSettings7D", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0018, AUTO, "ImageStabilization", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0040, AUTO, "CompressedImageSize", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x0081, AUTO, "PreviewImage", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x0088, AUTO, "PreviewImageStart", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x0089, AUTO, "PreviewImageLength", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0100, AUTO, "SceneMode", &saSceneModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0101, AUTO, "ColorMode", &saColorModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0102, AUTO, "MinoltaQuality", &maQualityInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0103, AUTO, "MinoltaImageSize", &maImageSizeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0104, AUTO, "FlashExposureComp", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0105, AUTO, "Teleconverter", &maTeleconverterInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0107, AUTO, "ImageStabilization", &saOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010a, AUTO, "ZoneMatching", &saZoneMatchingInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010b, AUTO, "ColorTemperature", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010c, AUTO, "LensID", &saLensIDInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0113, AUTO, "ImageStabilization", &saOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0114, AUTO, "MinoltaCameraSettings", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x0e00, AUTO, "PrintIM", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0f00, AUTO, "MinoltaCameraSettings2", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib sonyAttribs[] = { - {0, AC_WRITE, 0, sonyCameraInfoAttribs, 0x0010, AUTO, "CameraInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0102, AUTO, "Quality", &maQualityInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0104, AUTO, "FlashExposureComp", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0106, AUTO, "TeleConverter", &maTeleconverterInterpreter}, - {0, AC_WRITE, 0, sonyCameraSettingsAttribs, 0x0114, AUTO, "SonyCameraSettings", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0115, AUTO, "WhiteBalance", &saWhiteBalanceInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x0e00, AUTO, "PrintIM", &stdInterpreter}, - {1, AC_WRITE, 0, nullptr, 0x2001, AUTO, "PreviewImage", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x2009, AUTO, "HighISONoiseReduction", &saHighISONoiseReduction}, - {0, AC_WRITE, 0, nullptr, 0x200a, AUTO, "AutoHDR", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x200b, AUTO, "MultiFrameNoiseReduction", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x200e, AUTO, "PictureEffect", &saPictureEffectInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x2011, AUTO, "VignettingCorrection", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x2012, AUTO, "LateralChromaticAberration", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x2013, AUTO, "DistortionCorrection", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb020, AUTO, "ColorReproduction", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb021, AUTO, "ColorTemperature", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb022, AUTO, "ColorCompensationFilter", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb023, AUTO, "SceneMode", &saSceneModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb024, AUTO, "ZoneMatching", &saZoneMatchingInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb025, AUTO, "DynamicRangeOptimizer", &saDynamicRangeOptimizerInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb026, AUTO, "ImageStabilization", &saOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb027, AUTO, "LensID", &saLensIDInterpreter}, - {0, AC_WRITE, 0, minoltaAttribs, 0xb028, AUTO, "MinoltaMakerNote", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb029, AUTO, "ColorMode", &saColorModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb040, AUTO, "Macro", &saOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb041, AUTO, "ExposureMode", &saExposureModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb042, AUTO, "FocusMode", &saFocusMode}, - {0, AC_WRITE, 0, nullptr, 0xb043, AUTO, "AFMode", &saAFMode}, - {0, AC_WRITE, 0, nullptr, 0xb044, AUTO, "AFIlluminator", &saAFIlluminator}, - {0, AC_WRITE, 0, nullptr, 0xb047, AUTO, "Quality", &saQualityInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb048, AUTO, "FlashLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb049, AUTO, "ReleaseMode", &saReleaseModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb04a, AUTO, "SequenceNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb04b, AUTO, "AntiBlur", &saAntiBlurInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb04e, AUTO, "LongExposureNoiseReduction", &saOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb04f, AUTO, "DynamicRangeOptimizer", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xb050, AUTO, "HighISONoiseReduction2", &saHighISONoiseReduction2}, - {0, AC_WRITE, 0, nullptr, 0xb052, AUTO, "IntelligentAuto", &stdInterpreter}, - {0, AC_WRITE, 0, sonyTag9405Attribs, 0x9405, AUTO, "Tag9405", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib sonyTag9405Attribs[] = { - {0, AC_WRITE, 0, nullptr, 0x005d, AUTO, "LensFormat", &stdInterpreter}, // 9405b start here - {0, AC_WRITE, 0, nullptr, 0x005e, AUTO, "LensMount", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0060, SHORT, "LensType2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0062, SHORT, "LensType", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0603, AUTO, "LensFormat", &stdInterpreter}, // 9405a start here - {0, AC_WRITE, 0, nullptr, 0x0604, AUTO, "LensMount", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0605, SHORT, "LensType2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0608, SHORT, "LensType", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib sonyCameraInfoAttribs[] = { - {0, AC_WRITE, 0, nullptr, 14, SHORT, "FocalLength", &saExposureTimeInterpreter}, - {0, AC_WRITE, 0, nullptr, 16, SHORT, "FocalLengthTeleZoom", &saExposureTimeInterpreter}, - {0, AC_WRITE, 0, nullptr, 25, AUTO, "FocusStatus", &saCameraInfoFocusStatusInterpreter}, - {0, AC_WRITE, 0, nullptr, 28, AUTO, "AFPointSelected", &saCameraInfoAFPointSelected}, - {0, AC_WRITE, 0, nullptr, 29, AUTO, "FocusMode", &saFocusMode2}, - {0, AC_WRITE, 0, nullptr, 32, AUTO, "AFPoint", &saCameraInfoAFPoint}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib sonyCameraInfo2Attribs[] = { - {0, AC_WRITE, 0, nullptr, 304, AUTO, "AFMicroAdjValue", &saAFMicroAdjValueInterpreter}, - {0, AC_WRITE, 0, nullptr, 305, AUTO, "AFMicroAdjMode", &saAFMicroAdjModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 305, AUTO, "AFMicroAdjRegisteredLenses", &saAFMicroAdjRegisteredLensesInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib sonyCameraSettingsAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0, AUTO, "ExposureTime", &saExposureTimeInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "FNumber", &saFNumberInterpreter}, - {0, AC_WRITE, 0, nullptr, 4, AUTO, "DriveMode", &saDriveMode}, - {0, AC_WRITE, 0, nullptr, 6, AUTO, "WhiteBalanceFineTune", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 16, AUTO, "FocusModeSetting", &saFocusMode}, - {0, AC_WRITE, 0, nullptr, 17, AUTO, "AFAreaMode", &saAFAreaMode}, - {0, AC_WRITE, 0, nullptr, 18, AUTO, "AFPointSelected", &saAFPointSelected}, - {0, AC_WRITE, 0, nullptr, 21, AUTO, "MeteringMode", &saMeteringMode1_4}, - {0, AC_WRITE, 0, nullptr, 22, AUTO, "ISOSetting", &saISOSettingInterpreter}, - {0, AC_WRITE, 0, nullptr, 24, AUTO, "DynamicRangeOptimizerMode", &saDynamicRangeOptimizerMode}, - {0, AC_WRITE, 0, nullptr, 25, AUTO, "DynamicRangeOptimizerLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 26, AUTO, "CreativeStyle", &saCreativeStyle}, - {0, AC_WRITE, 0, nullptr, 28, AUTO, "Sharpness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 29, AUTO, "Contrast", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 30, AUTO, "Saturation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 31, AUTO, "ZoneMatchingValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 34, AUTO, "Brightness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 35, AUTO, "FlashMode", &saFlashMode}, - {0, AC_WRITE, 0, nullptr, 40, AUTO, "PrioritySetupShutterRelease", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 41, AUTO, "AFIlluminator", &saAFIlluminator}, - {0, AC_WRITE, 0, nullptr, 42, AUTO, "AFWithShutter", &saOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 43, AUTO, "LongExposureNoiseReduction", &saOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 44, AUTO, "HighISONoiseReduction", &saHighISONoiseReduction3}, - {0, AC_WRITE, 0, nullptr, 45, AUTO, "ImageStyle", &saImageStyleInterpreter}, - {0, AC_WRITE, 0, nullptr, 60, AUTO, "ExposureProgram", &saExposureProgram}, - {0, AC_WRITE, 0, nullptr, 61, AUTO, "ImageStabilization", &saOnOffInterpreter}, - {0, AC_WRITE, 0, nullptr, 63, AUTO, "Rotation", &saRotation}, - {0, AC_WRITE, 0, nullptr, 77, AUTO, "FocusMode", &saFocusMode}, - {0, AC_WRITE, 0, nullptr, 83, AUTO, "FocusStatus", &saFocusStatusInterpreter}, - {0, AC_WRITE, 0, nullptr, 84, AUTO, "SonyImageSize", &saSonyImageSize}, - {0, AC_WRITE, 0, nullptr, 85, AUTO, "AspectRatio", &saAspectRatio}, - {0, AC_WRITE, 0, nullptr, 86, AUTO, "Quality", &saQualityInterpreter2}, - {0, AC_WRITE, 0, nullptr, 88, AUTO, "ExposureLevelIncrements", &saExposureLevelIncrements}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib sonyCameraSettingsAttribs2[] = { - {0, AC_WRITE, 0, nullptr, 0, AUTO, "ExposureTime", &saExposureTimeInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "FNumber", &saFNumberInterpreter}, - {0, AC_WRITE, 0, nullptr, 11, AUTO, "ColorTemperatureSetting", &saColorTemperatureSettingInterpreter}, - {0, AC_WRITE, 0, nullptr, 15, AUTO, "FocusMode", &saFocusMode2}, - {0, AC_WRITE, 0, nullptr, 16, AUTO, "AFAreaMode", &saAFAreaMode}, - {0, AC_WRITE, 0, nullptr, 17, AUTO, "AFPointSelected", &saAFPointSelected2}, - {0, AC_WRITE, 0, nullptr, 19, AUTO, "MeteringMode", &saMeteringMode1_4}, - {0, AC_WRITE, 0, nullptr, 20, AUTO, "ISOSetting", &saISOSettingInterpreter}, - {0, AC_WRITE, 0, nullptr, 22, AUTO, "DynamicRangeOptimizerMode", &saDynamicRangeOptimizerMode}, - {0, AC_WRITE, 0, nullptr, 23, AUTO, "DynamicRangeOptimizerLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 24, AUTO, "CreativeStyle", &saCreativeStyle2}, - {0, AC_WRITE, 0, nullptr, 25, AUTO, "Sharpness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 26, AUTO, "Contrast", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 27, AUTO, "Saturation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 35, AUTO, "FlashMode", &saFlashMode}, - {0, AC_WRITE, 0, nullptr, 38, AUTO, "HighISONoiseReduction", &saHighISONoiseReduction4}, - {0, AC_WRITE, 0, nullptr, 60, AUTO, "ExposureProgram", &saExposureProgram}, - {0, AC_WRITE, 0, nullptr, 63, AUTO, "Rotation", &saRotation}, - {0, AC_WRITE, 0, nullptr, 83, AUTO, "FocusStatus", &saFocusStatusInterpreter}, - {0, AC_WRITE, 0, nullptr, 84, AUTO, "SonyImageSize", &saSonyImageSize}, - {0, AC_WRITE, 0, nullptr, 85, AUTO, "AspectRatio", &saAspectRatio}, - {0, AC_WRITE, 0, nullptr, 86, AUTO, "Quality", &saQualityInterpreter2}, - {0, AC_WRITE, 0, nullptr, 88, AUTO, "ExposureLevelIncrements", &saExposureLevelIncrements}, - {0, AC_WRITE, 0, nullptr, 126, AUTO, "DriveMode", &saDriveMode2}, - {0, AC_WRITE, 0, nullptr, 131, AUTO, "ColorSpace", &saColorSpace5_6}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -const TagAttrib sonyCameraSettingsAttribs3[] = { - {0, AC_WRITE, 0, nullptr, 0, AUTO, "ShutterSpeedSetting", &saExposureTimeInterpreter}, - {0, AC_WRITE, 0, nullptr, 1, AUTO, "ApertureSetting", &saFNumberInterpreter}, - {0, AC_WRITE, 0, nullptr, 2, AUTO, "ISOSetting", &saISOSettingInterpreter}, - {0, AC_WRITE, 0, nullptr, 3, AUTO, "ExposureCompensationSet", &saExposureCompSetInterpreter}, - {0, AC_WRITE, 0, nullptr, 3, AUTO, "DriveModeSetting", &saDriveMode3}, - {0, AC_WRITE, 0, nullptr, 5, AUTO, "ExposureProgram", &saExposureProgram2}, - {0, AC_WRITE, 0, nullptr, 6, AUTO, "FocusModeSetting", &saFocusModeSetting3}, - {0, AC_WRITE, 0, nullptr, 7, AUTO, "MeteringMode", &saMeteringMode1_3}, - {0, AC_WRITE, 0, nullptr, 9, AUTO, "SonyImageSize", &saSonyImageSize3}, - {0, AC_WRITE, 0, nullptr, 10, AUTO, "AspectRatio", &saAspectRatio2}, - {0, AC_WRITE, 0, nullptr, 11, AUTO, "Quality", &saQualityInterpreter3}, - {0, AC_WRITE, 0, nullptr, 12, AUTO, "DynamicRangeOptimizerSetting", &saDynamicRangeOptimizerSetting}, - {0, AC_WRITE, 0, nullptr, 14, AUTO, "ColorSpace", &saColorSpace1_2}, - {0, AC_WRITE, 0, nullptr, 15, AUTO, "CreativeStyleSetting", &saCreativeStyleSetting}, - {0, AC_WRITE, 0, nullptr, 16, AUTO, "Contrast", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 17, AUTO, "Saturation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 18, AUTO, "Sharpness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 22, AUTO, "WhiteBalance", &saWhiteBalanceSettingInterpreter}, - {0, AC_WRITE, 0, nullptr, 23, AUTO, "ColorTemperatureSetting", &saColorTemperatureSettingInterpreter}, - {0, AC_WRITE, 0, nullptr, 23, AUTO, "ColorCompensationFilterSet", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 32, AUTO, "FlashMode", &saFlashMode2}, - {0, AC_WRITE, 0, nullptr, 33, AUTO, "FlashControl", &saFlashControl}, - {0, AC_WRITE, 0, nullptr, 35, AUTO, "FlashExposureCompSet", &saExposureCompSetInterpreter}, - {0, AC_WRITE, 0, nullptr, 36, AUTO, "AFAreaMode", &saAFAreaMode2}, - {0, AC_WRITE, 0, nullptr, 37, AUTO, "LongExposureNoiseReduction", &saOnOffInterpreter2}, - {0, AC_WRITE, 0, nullptr, 38, AUTO, "HighISONoiseReduction", &saHighISONoiseReduction5}, - {0, AC_WRITE, 0, nullptr, 39, AUTO, "SmileShutterMode", &saSmileShutterMode}, - {0, AC_WRITE, 0, nullptr, 40, AUTO, "RedEyeReduction", &saOnOffInterpreter2}, - {0, AC_WRITE, 0, nullptr, 45, AUTO, "HDRSetting", &saOnOffInterpreter3}, - {0, AC_WRITE, 0, nullptr, 46, AUTO, "HDRLevel", &saHDRLevel}, - {0, AC_WRITE, 0, nullptr, 47, AUTO, "ViewingMode", &saViewingMode}, - {0, AC_WRITE, 0, nullptr, 48, AUTO, "FaceDetection", &saOnOffInterpreter2}, - {0, AC_WRITE, 0, nullptr, 49, AUTO, "SmileShutter", &saOnOffInterpreter2}, - {0, AC_WRITE, 0, nullptr, 50, AUTO, "SweepPanoramaSize", &saSweepPanoramaSize}, - {0, AC_WRITE, 0, nullptr, 51, AUTO, "SweepPanoramaDirection", &saSweepPanoramaDirection}, - {0, AC_WRITE, 0, nullptr, 52, AUTO, "DriveMode", &saDriveMode3}, - {0, AC_WRITE, 0, nullptr, 53, AUTO, "MultiFrameNoiseReduction", &saOnOffInterpreter4}, - {0, AC_WRITE, 0, nullptr, 54, AUTO, "LiveViewAFSetting", &saLiveViewAFSetting}, - {0, AC_WRITE, 0, nullptr, 56, AUTO, "PanoramaSize3D", &saPanoramaSize3D}, - {0, AC_WRITE, 0, nullptr, 131, AUTO, "AFButtonPressed", &saNoYesInterpreter}, - {0, AC_WRITE, 0, nullptr, 132, AUTO, "LiveViewMetering", &saLiveViewMetering}, - {0, AC_WRITE, 0, nullptr, 133, AUTO, "ViewingMode2", &saViewingMode}, - {0, AC_WRITE, 0, nullptr, 134, AUTO, "AELock", &saOnOffInterpreter5}, - {0, AC_WRITE, 0, nullptr, 135, AUTO, "FlashAction", &saFlashAction}, - {0, AC_WRITE, 0, nullptr, 139, AUTO, "LiveViewFocusMode", &saLiveViewFocusMode}, - {0, AC_WRITE, 0, nullptr, 153, AUTO, "LensMount", &saLensMount}, - {0, AC_WRITE, 0, nullptr, 643, AUTO, "AFButtonPressed", &saNoYesInterpreter}, - {0, AC_WRITE, 0, nullptr, 644, AUTO, "LiveViewMetering", &saLiveViewMetering}, - {0, AC_WRITE, 0, nullptr, 645, AUTO, "ViewingMode2", &saViewingMode}, - {0, AC_WRITE, 0, nullptr, 646, AUTO, "AELock", &saOnOffInterpreter5}, - {0, AC_WRITE, 0, nullptr, 647, AUTO, "FlashAction", &saFlashAction}, - {0, AC_WRITE, 0, nullptr, 651, AUTO, "LiveViewFocusMode", &saLiveViewFocusMode}, - {0, AC_WRITE, 0, nullptr, 1015, SHORT, "LensType2", &saLensID2Interpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; - -/*const TagAttrib sonyDNGMakerNote[]={ - {0, AC_WRITE, 0, 0, 0x7200, AUTO, "SonyOffset", &stdInterpreter}, - {0, AC_WRITE, 0, 0, 0x7201, AUTO, "SonyLength", &stdInterpreter}, - {0, AC_WRITE, 0, 0, 0x7221, AUTO, "SonyKey", &stdInterpreter}, - {-1, AC_DONTWRITE, 0, 0, 0, AUTO, "", NULL}};*/ - -} - diff --git a/rtexif/stdattribs.cc b/rtexif/stdattribs.cc deleted file mode 100644 index e6e3bb35b..000000000 --- a/rtexif/stdattribs.cc +++ /dev/null @@ -1,927 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * Copyright (c) 2010 Oliver Duis - * - * 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 RawTherapee. If not, see . - */ - -#include -#include - -#include "rtexif.h" - -namespace rtexif -{ - -class ColorSpaceInterpreter : public ChoiceInterpreter<> -{ - -public: - ColorSpaceInterpreter () - { - choices[1] = "sRGB"; - choices[2] = "Adobe RGB"; - choices[0xffff] = "Uncalibrated"; - } -}; -ColorSpaceInterpreter colorSpaceInterpreter; - -class PreviewColorSpaceInterpreter : public ChoiceInterpreter<> -{ - -public: - PreviewColorSpaceInterpreter () - { - choices[0] = "Unknown"; - choices[1] = "Gray Gamma 2.2"; - choices[2] = "sRGB"; - choices[3] = "Adobe RGB"; - choices[4] = "ProPhoto RGB"; - } -}; -PreviewColorSpaceInterpreter previewColorSpaceInterpreter; - -class LinearSRGBInterpreter : public ChoiceInterpreter<> -{ - -public: - LinearSRGBInterpreter () - { - choices[0] = "Linear"; - choices[1] = "sRGB"; - } -}; -LinearSRGBInterpreter linearSRGBInterpreter; - -class DefaultBlackRenderInterpreter : public ChoiceInterpreter<> -{ - -public: - DefaultBlackRenderInterpreter () - { - choices[0] = "Auto"; - choices[1] = "None"; - } -}; -DefaultBlackRenderInterpreter defaultBlackRenderInterpreter; - -class ExposureProgramInterpreter : public ChoiceInterpreter<> -{ - -public: - ExposureProgramInterpreter () - { - choices[0] = "Not defined"; - choices[1] = "Manual"; - choices[2] = "Normal program"; - choices[3] = "Aperture priority"; - choices[4] = "Shutter priority"; - choices[5] = "Creative program"; - choices[6] = "Action program"; - choices[7] = "Portrait mode"; - choices[8] = "Landscape mode"; - } -}; -ExposureProgramInterpreter exposureProgramInterpreter; - -class MeteringModeInterpreter : public ChoiceInterpreter<> -{ - -public: - MeteringModeInterpreter () - { - choices[0] = "Unknown"; - choices[1] = "Average"; - choices[2] = "Center weighted"; - choices[3] = "Spot"; - choices[4] = "Multispot"; - choices[5] = "Pattern"; - choices[6] = "Partial"; - choices[255] = "Other"; - } -}; -MeteringModeInterpreter meteringModeInterpreter; - -class ExposureModeInterpreter : public ChoiceInterpreter<> -{ - -public: - ExposureModeInterpreter () - { - choices[0] = "Auto exposure"; - choices[1] = "Manual exposure"; - choices[2] = "Auto bracket"; - } -}; -ExposureModeInterpreter exposureModeInterpreter; - -class WhiteBalanceInterpreter : public ChoiceInterpreter<> -{ - -public: - WhiteBalanceInterpreter () - { - choices[0] = "Auto white balance"; - choices[1] = "Manual white balance"; - } -}; -WhiteBalanceInterpreter whiteBalanceInterpreter; - -class SceneCaptureInterpreter : public ChoiceInterpreter<> -{ - -public: - SceneCaptureInterpreter () - { - choices[0] = "Standard"; - choices[1] = "Landscape"; - choices[2] = "Portrait"; - choices[3] = "Night scene"; - } -}; -SceneCaptureInterpreter sceneCaptureInterpreter; - -class GainControlInterpreter : public ChoiceInterpreter<> -{ - -public: - GainControlInterpreter () - { - choices[0] = "None"; - choices[1] = "Low gain up"; - choices[2] = "High gain up"; - choices[3] = "Low gain down"; - choices[4] = "High gain down"; - } -}; -GainControlInterpreter gainControlInterpreter; - -class ContrastInterpreter : public ChoiceInterpreter<> -{ - -public: - ContrastInterpreter () - { - choices[0] = "Normal"; - choices[1] = "Soft"; - choices[2] = "Hard"; - } -}; -ContrastInterpreter contrastInterpreter; - -class SharpnessInterpreter : public ChoiceInterpreter<> -{ - -public: - SharpnessInterpreter () - { - choices[0] = "Normal"; - choices[1] = "Soft"; - choices[2] = "Hard"; - } -}; -SharpnessInterpreter sharpnessInterpreter; - -class SaturationInterpreter : public ChoiceInterpreter<> -{ - -public: - SaturationInterpreter () - { - choices[0] = "Normal"; - choices[1] = "Low saturation"; - choices[2] = "High saturation"; - } -}; -SaturationInterpreter saturationInterpreter; - -class FlashInterpreter : public ChoiceInterpreter<> -{ - -public: - FlashInterpreter () - { - choices[0x0000] = "Flash did not fire"; - choices[0x0001] = "Flash fired"; - choices[0x0005] = "Strobe return light not detected"; - choices[0x0007] = "Strobe return light detected"; - choices[0x0009] = "Flash fired, compulsory flash mode"; - choices[0x000D] = "Flash fired, compulsory flash mode, return light not detected"; - choices[0x000F] = "Flash fired, compulsory flash mode, return light detected"; - choices[0x0010] = "Flash did not fire, compulsory flash mode"; - choices[0x0018] = "Flash did not fire, auto mode"; - choices[0x0019] = "Flash fired, auto mode"; - choices[0x001D] = "Flash fired, auto mode, return light not detected"; - choices[0x001F] = "Flash fired, auto mode, return light detected"; - choices[0x0020] = "No flash function"; - choices[0x0041] = "Flash fired, red-eye reduction mode"; - choices[0x0045] = "Flash fired, red-eye reduction mode, return light not detected"; - choices[0x0047] = "Flash fired, red-eye reduction mode, return light detected"; - choices[0x0049] = "Flash fired, compulsory flash mode, red-eye reduction mode"; - choices[0x004D] = "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected"; - choices[0x004F] = "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected"; - choices[0x0059] = "Flash fired, auto mode, red-eye reduction mode"; - choices[0x005D] = "Flash fired, auto mode, return light not detected, red-eye reduction mode"; - choices[0x005F] = "Flash fired, auto mode, return light detected, red-eye reduction mode"; - } -}; -FlashInterpreter flashInterpreter; - -class LightSourceInterpreter : public ChoiceInterpreter<> -{ - -public: - LightSourceInterpreter () - { - choices[0] = "Unknown"; - choices[1] = "Daylight"; - choices[2] = "Fluorescent"; - choices[3] = "Tungsten"; - choices[4] = "Flash"; - choices[9] = "Fine weather"; - choices[10] = "Cloudy weather"; - choices[11] = "Shade"; - choices[12] = "Daylight fluorescent"; - choices[13] = "Day white fluorescent"; - choices[14] = "Cool white fluorescent"; - choices[15] = "White fluorescent"; - choices[17] = "Standard light A"; - choices[18] = "Standard light B"; - choices[19] = "Standard light C"; - choices[20] = "D55"; - choices[21] = "D65"; - choices[22] = "D75"; - choices[23] = "D50"; - choices[24] = "ISO studio tungsten"; - choices[255] = "Other light source"; - } -}; -LightSourceInterpreter lightSourceInterpreter; - -class CompressionInterpreter : public ChoiceInterpreter<> -{ - -public: - CompressionInterpreter () - { - choices[1] = "Uncompressed"; - choices[6] = "JPEG Compression"; - } -}; -CompressionInterpreter compressionInterpreter; - -class PhotometricInterpreter : public ChoiceInterpreter<> -{ - -public: - PhotometricInterpreter () - { - choices[2] = "RGB"; - choices[6] = "YCbCr"; - } -}; -PhotometricInterpreter photometricInterpreter; - -class ProfileEmbedPolicyInterpreter : public ChoiceInterpreter<> -{ - -public: - ProfileEmbedPolicyInterpreter () - { - choices[0] = "Allow Copying"; - choices[1] = "Embed if Used"; - choices[2] = "Never Embed"; - choices[3] = "No Restrictions"; - } -}; -ProfileEmbedPolicyInterpreter profileEmbedPolicyInterpreter; - -class PlanarConfigInterpreter : public ChoiceInterpreter<> -{ - -public: - PlanarConfigInterpreter () - { - choices[1] = "Chunky format"; - choices[2] = "Planar format"; - } -}; -PlanarConfigInterpreter planarConfigInterpreter; - -class FNumberInterpreter : public Interpreter -{ -public: - FNumberInterpreter () {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - double v = t->toDouble(); - - if ( v < 0. || v > 1000. ) { - return "undef"; - } - - snprintf(buffer, sizeof(buffer), "%0.1f", v); - return buffer; - } -}; -FNumberInterpreter fNumberInterpreter; - -class ApertureInterpreter : public Interpreter -{ -public: - ApertureInterpreter () {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - double v = pow (2.0, t->toDouble() / 2.0); - - if ( v < 0. || v > 1000. ) { - return "undef"; - } - - snprintf(buffer, sizeof(buffer), "%.1f", v ); - return buffer; - } -}; -ApertureInterpreter apertureInterpreter; - -class ExposureBiasInterpreter : public Interpreter -{ -public: - ExposureBiasInterpreter () {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - double v = t->toDouble(); - - if ( v < -1000. || v > 1000. ) { - return "undef"; - } - - snprintf(buffer, sizeof(buffer), "%+0.2f", v ); - return buffer; - } -}; -ExposureBiasInterpreter exposureBiasInterpreter; - -class ShutterSpeedInterpreter : public Interpreter -{ -public: - ShutterSpeedInterpreter () {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - double d = pow (2.0, -t->toDouble()); - - if (d > 0.0 && d <= 0.5) { - snprintf(buffer, sizeof(buffer), "1/%.0f", 1.0 / d); - } else { - snprintf(buffer, sizeof(buffer), "%.1f", d); - } - - return buffer; - } -}; -ShutterSpeedInterpreter shutterSpeedInterpreter; - -class ExposureTimeInterpreter : public Interpreter -{ -public: - ExposureTimeInterpreter () {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - double d = t->toDouble(); - - if (d > 0.0 && d <= 0.5) { - snprintf(buffer, sizeof(buffer), "1/%.0f", 1.0 / d); - } else { - snprintf(buffer, sizeof(buffer), "%.1f", d); - } - - return buffer; - } -}; -ExposureTimeInterpreter exposureTimeInterpreter; - -class FocalLengthInterpreter : public Interpreter -{ -public: - FocalLengthInterpreter () {} - std::string toString (const Tag* t) const override - { - char buffer[32]; - double v = t->toDouble(); - - if ( v > 1000000. || v < 0 ) { - return "undef"; - } - - snprintf(buffer, sizeof(buffer), "%.1f", v ); - return buffer; - } -}; -FocalLengthInterpreter focalLengthInterpreter; - -class UserCommentInterpreter : public Interpreter -{ -public: - UserCommentInterpreter () {} - std::string toString (const Tag* t) const override - { - int count = t->getCount(); - - if (count <= 8) { - return std::string(); - } - - count = std::min (count, 65535); // limit to 65535 chars to avoid crashes in case of corrupted metadata - unsigned char *buffer = new unsigned char[count - 6]; // include 2 ending null chars for UCS-2 string (possibly) - unsigned char *value = t->getValue(); - - if (!memcmp(value, "ASCII\0\0\0", 8)) { - memcpy(buffer, value + 8, count - 8); - buffer[count - 8] = '\0'; - } else if (!memcmp(value, "UNICODE\0", 8)) { - memcpy(buffer, value + 8, count - 8); - buffer[count - 7] = buffer[count - 8] = '\0'; - Glib::ustring tmp1((char*)buffer); - - - bool hasBOM = false; - enum ByteOrder bo = UNKNOWN; - if (count % 2 || (count >= 11 && (buffer[0] == 0xEF && buffer[1] == 0xBB && buffer[2] == 0xBF))) { - // odd string length can only be UTF-8, don't change anything - std::string retVal ((char*)buffer + 3); - delete [] buffer; - return retVal; - } else if (count >= 10) { - if (buffer[0] == 0xFF && buffer[1] == 0xFE) { - bo = INTEL; // little endian - hasBOM = true; - } else if (buffer[0] == 0xFE && buffer[1] == 0xFF) { - bo = MOTOROLA; // big endian - hasBOM = true; - } - } - if (bo == UNKNOWN) { - // auto-detecting byte order; we still don't know if it's UCS-2 or UTF-8 - int a = 0, b = 0, c = 0, d = 0; - for (int j = 8; j < count; j++) { - unsigned char cc = value[j]; - if (!(j%2)) { - // counting zeros for first byte - if (!cc) { - ++a; - } - } else { - // counting zeros for second byte - if (!cc) { - ++b; - } - } - if (!(cc & 0x80) || ((cc & 0xC0) == 0xC0) || ((cc & 0xC0) == 0x80)) { - ++c; - } - if ((cc & 0xC0) == 0x80) { - ++d; - } - } - if (c == (count - 8) && d) { - // this is an UTF-8 string - std::string retVal ((char*)buffer); - delete [] buffer; - return retVal; - } - if ((a || b) && a != b) { - bo = a > b ? MOTOROLA : INTEL; - } - } - if (bo == UNKNOWN) { - // assuming platform's byte order -#if __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ - bo = INTEL; -#else - bo = MOTOROLA; -#endif - } - - // now swapping if necessary - if (!hasBOM && bo != HOSTORDER) { - if (t->getOrder() != HOSTORDER) { - Tag::swapByteOrder2(buffer, count - 8); - } - } - - glong written; - char* utf8Str = g_utf16_to_utf8((unsigned short int*)buffer, -1, nullptr, &written, nullptr); - delete [] buffer; - buffer = new unsigned char[written + 1]; - memcpy(buffer, utf8Str, written); - buffer[written] = 0; - g_free(utf8Str); - } else if (!memcmp(value, "\0\0\0\0\0\0\0\0", 8)) { - // local charset string, whatever it is - memcpy(buffer, value + 8, count - 8); - buffer[count - 7] = buffer[count - 8] = '\0'; - - gsize written = 0; - char *utf8Str = g_locale_to_utf8((char*)buffer, count - 8, nullptr, &written, nullptr); - if (utf8Str && written) { - delete [] buffer; - size_t length = strlen(utf8Str); - buffer = new unsigned char[length + 1]; - strcpy((char*)buffer, utf8Str); - } else { - buffer[0] = 0; - } - if (utf8Str) { - g_free(utf8Str); - } - } else { - // JIS: unsupported - buffer[0] = 0; - } - - std::string retVal ((char*)buffer); - delete [] buffer; - return retVal; - } - void fromString (Tag* t, const std::string& value) override - { - Glib::ustring tmpStr(value); - t->userCommentFromString (tmpStr); - } -}; -UserCommentInterpreter userCommentInterpreter; - -class CFAInterpreter : public Interpreter -{ -public: - CFAInterpreter() {} - std::string toString (const Tag* t) const override - { - char colors[] = "RGB"; - char buffer[1024]; - - for ( int i = 0; i < t->getCount(); i++) { - unsigned char c = t->toInt (i, BYTE); - buffer[i] = c < 3 ? colors[c] : ' '; - } - - buffer[t->getCount()] = 0; - return buffer; - } -}; -CFAInterpreter cfaInterpreter; - -class OrientationInterpreter : public ChoiceInterpreter<> -{ -public: - OrientationInterpreter () - { - choices[1] = "Horizontal (normal)"; - choices[2] = "Mirror horizontal "; - choices[3] = "Rotate 180"; - choices[4] = "Mirror vertical"; - choices[5] = "Mirror horizontal and rotate 270 CW"; - choices[6] = "Rotate 90 CW"; - choices[7] = "Mirror horizontal and rotate 90 CW"; - choices[8] = "Rotate 270 CW"; - // '9' is an "unofficial" value for Orientation but used by some older cameras that lacks orientation sensor, such as Kodak DCS - choices[9] = "Unknown"; - } -}; -OrientationInterpreter orientationInterpreter; - -class UnitsInterpreter : public ChoiceInterpreter<> -{ -public: - UnitsInterpreter() - { - choices[0] = "Unknown"; - choices[1] = "inches"; - choices[2] = "cm"; - } -}; -UnitsInterpreter unitsInterpreter; - -class UTF8BinInterpreter : public Interpreter -{ -public: - UTF8BinInterpreter () {} -}; -UTF8BinInterpreter utf8BinInterpreter; - -class RawImageSegmentationInterpreter : public Interpreter -{ -public: - std::string toString (const Tag* t) const override - { - int segmentNumber = t->toInt(0, SHORT); - int segmentWidth = t->toInt(2, SHORT); - int lastSegmentWidth = t->toInt(4, SHORT); - - char buffer[32]; - snprintf(buffer, sizeof(buffer), "%d %d %d", segmentNumber, segmentWidth, lastSegmentWidth); - return buffer; - } -}; -RawImageSegmentationInterpreter rawImageSegmentationInterpreter; - -const TagAttrib exifAttribs[] = { - {0, AC_SYSTEM, 0, nullptr, 0x0100, AUTO, "ImageWidth", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0101, AUTO, "ImageHeight", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0102, AUTO, "BitsPerSample", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0103, AUTO, "Compression", &compressionInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0153, AUTO, "SampleFormat", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x828d, AUTO, "CFAPatternDim", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x828e, AUTO, "CFAPattern", &cfaInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x829A, AUTO, "ExposureTime", &exposureTimeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x829D, AUTO, "FNumber", &fNumberInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8822, AUTO, "ExposureProgram", &exposureProgramInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8824, AUTO, "SpectralSensitivity", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8827, AUTO, "ISOSpeedRatings", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8828, AUTO, "OECF", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x8832, AUTO, "RecommendedExposureIndex", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9000, AUTO, "ExifVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9003, AUTO, "DateTimeOriginal", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9004, AUTO, "DateTimeDigitized", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x9101, AUTO, "ComponentsConfiguration", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x9102, AUTO, "CompressedBitsPerPixel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9201, AUTO, "ShutterSpeedValue", &shutterSpeedInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9202, AUTO, "ApertureValue", &apertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9203, AUTO, "BrightnessValue", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9204, AUTO, "ExposureBiasValue", &exposureBiasInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9205, AUTO, "MaxApertureValue", &apertureInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9206, AUTO, "SubjectDistance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9207, AUTO, "MeteringMode", &meteringModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9208, AUTO, "LightSource", &lightSourceInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9209, AUTO, "Flash", &flashInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x920A, AUTO, "FocalLength", &focalLengthInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9214, AUTO, "SubjectArea", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9215, AUTO, "ExposureIndex", &stdInterpreter}, // Note: exists as 0xA215 too, it should be that way - {0, AC_DONTWRITE, 0, nullptr, 0x9216, AUTO, "TIFFEPSStandardID", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9217, AUTO, "SensingMethod", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x927C, AUTO, "MakerNote", &stdInterpreter}, - {0, AC_WRITE, 1, nullptr, 0x9286, AUTO, "UserComment", &userCommentInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9290, AUTO, "SubSecTime", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9291, AUTO, "SubSecTimeOriginal", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9292, AUTO, "SubSecTimeDigitized", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0xA000, AUTO, "FlashpixVersion", &stdInterpreter}, - {0, AC_DONTWRITE, 0, nullptr, 0xA001, AUTO, "ColorSpace", &colorSpaceInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0xA002, AUTO, "PixelXDimension", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0xA003, AUTO, "PixelYDimension", &stdInterpreter}, - {1, AC_DONTWRITE, 0, nullptr, 0xA004, AUTO, "RelatedSoundFile", &stdInterpreter}, - {0, AC_SYSTEM, 0, iopAttribs, 0xA005, AUTO, "Interoperability", &stdInterpreter}, // do not enable, as it causes trouble with FUJI files - {0, AC_WRITE, 0, nullptr, 0xA20B, AUTO, "FlashEnergy", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA20C, AUTO, "SpatialFrequencyResponse", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA20E, AUTO, "FocalPlaneXResolution", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA20F, AUTO, "FocalPlaneYResolution", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA210, AUTO, "FocalPlaneResolutionUnit", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA214, AUTO, "SubjectLocation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA215, AUTO, "ExposureIndex", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA217, AUTO, "SensingMethod", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA300, AUTO, "FileSource", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA301, AUTO, "SceneType", &stdInterpreter}, - {0, AC_DONTWRITE, 0, nullptr, 0xA302, AUTO, "CFAPattern", &cfaInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA401, AUTO, "CustomRendered", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA402, AUTO, "ExposureMode", &exposureModeInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA403, AUTO, "WhiteBalance", &whiteBalanceInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA404, AUTO, "DigitalZoomRatio", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA405, AUTO, "FocalLengthIn35mmFilm", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA406, AUTO, "SceneCaptureType", &sceneCaptureInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA407, AUTO, "GainControl", &gainControlInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA408, AUTO, "Contrast", &contrastInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA409, AUTO, "Saturation", &saturationInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA40A, AUTO, "Sharpness", &sharpnessInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA40B, AUTO, "DeviceSettingDescription", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA40C, AUTO, "SubjectDistanceRange", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA420, AUTO, "ImageUniqueID", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA431, AUTO, "SerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA432, AUTO, "LensInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA433, AUTO, "LensMake", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA434, AUTO, "LensModel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA435, AUTO, "LensSerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xA500, AUTO, "Gamma", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC618, AUTO, "LinearizationTable", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC619, AUTO, "BlackLevelRepeatDim", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC61A, AUTO, "BlackLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC61B, AUTO, "BlackLevelDeltaH", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC61C, AUTO, "BlackLevelDeltaV", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC61D, AUTO, "WhiteLevel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC61E, AUTO, "DefaultScale", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC61F, AUTO, "DefaultCropOrigin", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC620, AUTO, "DefaultCropSize", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC621, AUTO, "ColorMatrix1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC622, AUTO, "ColorMatrix2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC623, AUTO, "CameraCalibration1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC624, AUTO, "CameraCalibration2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC625, AUTO, "ReductionMatrix1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC626, AUTO, "ReductionMatrix2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC627, AUTO, "AnalogBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC628, AUTO, "AsShotNeutral", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC629, AUTO, "AsShotWhiteXY", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC62A, AUTO, "BaselineExposure", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC62B, AUTO, "BaselineNoise", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC62C, AUTO, "BaselineSharpness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC62D, AUTO, "BayerGreenSplit", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC62E, AUTO, "LinearResponseLimit", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC62F, AUTO, "CameraSerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC630, AUTO, "DNGLensInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC631, AUTO, "ChromaBlurRadius", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC632, AUTO, "AntiAliasStrength", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC633, AUTO, "ShadowScale", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC65A, AUTO, "CalibrationIlluminant1", &lightSourceInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC65B, AUTO, "CalibrationIlluminant2", &lightSourceInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC65C, AUTO, "BestQualityScale", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC65D, AUTO, "RawDataUniqueID", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC68B, AUTO, "OriginalRawFileName", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC68D, AUTO, "ActiveArea", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC68E, AUTO, "MaskedAreas", &stdInterpreter}, -// {0, AC_WRITE, 0, nullptr, 0xC68F, AUTO, "AsShotICCProfile", & ???}, - {0, AC_WRITE, 0, nullptr, 0xC690, AUTO, "AsShotPreProfileMatrix", &stdInterpreter}, -// {0, AC_WRITE, 0, nullptr, 0xC691, AUTO, "CurrentICCProfile", & ???}, - {0, AC_WRITE, 0, nullptr, 0xC692, AUTO, "CurrentPreProfileMatrix", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC6BF, AUTO, "ColorimetricReference", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC6F3, AUTO, "CameraCalibrationSig", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC6F4, AUTO, "ProfileCalibrationSig", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC6F5, AUTO, "ProfileIFD", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC6F6, AUTO, "AsShotProfileName", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC6F7, AUTO, "NoiseReductionApplied", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC6F8, AUTO, "ProfileName", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC6F9, AUTO, "ProfileHueSatMapDims", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC6FA, AUTO, "ProfileHueSatMapData1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC6FB, AUTO, "ProfileHueSatMapData2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC6FC, AUTO, "ProfileToneCurve", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC6FD, AUTO, "ProfileEmbedPolicy", &profileEmbedPolicyInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC6FE, AUTO, "ProfileCopyright", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC714, AUTO, "ForwardMatrix1", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC715, AUTO, "ForwardMatrix2", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC716, AUTO, "PreviewApplicationName", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC717, AUTO, "PreviewApplicationVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC718, AUTO, "PreviewSettingsName", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC719, AUTO, "PreviewSettingsDigest", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC71A, AUTO, "PreviewColorSpace", &previewColorSpaceInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC71B, AUTO, "PreviewDateTime", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC71C, AUTO, "RawImageDigest", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC71D, AUTO, "OriginalRawFileDigest", &stdInterpreter}, -// {0, AC_WRITE, 0, nullptr, 0xC71E, AUTO, "SubTileBlockSize", & ???}, -// {0, AC_WRITE, 0, nullptr, 0xC71F, AUTO, "RowInterleaveFactor", & ???}, - {0, AC_WRITE, 0, nullptr, 0xC725, AUTO, "ProfileLookTableDims", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC726, AUTO, "ProfileLookTableData", &stdInterpreter}, -// {0, AC_WRITE, 0, nullptr, 0xC740, AUTO, "OpcodeList1", & ???}, -// {0, AC_WRITE, 0, nullptr, 0xC741, AUTO, "OpcodeList2", & ???}, -// {0, AC_WRITE, 0, nullptr, 0xC74E, AUTO, "OpcodeList3", & ???}, - {0, AC_WRITE, 0, nullptr, 0xC761, AUTO, "NoiseProfile", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC763, AUTO, "TimeCodes", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC764, AUTO, "FrameRate", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC772, AUTO, "TStop", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC789, AUTO, "ReelName", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC791, AUTO, "OriginalDefaultFinalSize", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC792, AUTO, "OriginalBestQualitySize", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC793, AUTO, "OriginalDefaultCropSize", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC7A1, AUTO, "CameraLabel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC7A3, AUTO, "ProfileHueSatMapEncoding", &linearSRGBInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC7A4, AUTO, "ProfileLookTableEncoding", &linearSRGBInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC7A5, AUTO, "BaselineExposureOffset", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC7A6, AUTO, "DefaultBlackRender", &defaultBlackRenderInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC7A7, AUTO, "NewRawImageDigest", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC7A8, AUTO, "RawToPreviewGain", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC7B5, AUTO, "DefaultUserCrop", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xFDE9, AUTO, "SerialNumber", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xFDEA, AUTO, "Lens", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xFE4C, AUTO, "RawFile", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xFE4D, AUTO, "Converter", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xFE4E, AUTO, "WhiteBalance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xFE51, AUTO, "Exposure", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xFE52, AUTO, "Shadows", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xFE53, AUTO, "Brightness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xFE54, AUTO, "Contrast", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xFE55, AUTO, "Saturation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xFE56, AUTO, "Sharpness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xFE57, AUTO, "Smoothness", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xFE58, AUTO, "MoireFilter", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr } -}; - - -const TagAttrib gpsAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0000, AUTO, "GPSVersionID", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0001, AUTO, "GPSLatitudeRef", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0002, AUTO, "GPSLatitude", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0003, AUTO, "GPSLongitudeRef", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0004, AUTO, "GPSLongitude", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0005, AUTO, "GPSAltitudeRef", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0006, AUTO, "GPSAltitude", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0007, AUTO, "GPSTimeStamp", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0008, AUTO, "GPSSatelites", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0009, AUTO, "GPSStatus", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000a, AUTO, "GPSMeasureMode", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000b, AUTO, "GPSDOP", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000c, AUTO, "GPSSpeedRef", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000d, AUTO, "GPSSpeed", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000e, AUTO, "GPSTrackRef", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x000f, AUTO, "GPSTrack", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0010, AUTO, "GPSImgDirectionRef", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0011, AUTO, "GPSImgDirection", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0012, AUTO, "GPSMapDatum", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0013, AUTO, "GPSDestLatitudeRef", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0014, AUTO, "GPSDestLatitude", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0015, AUTO, "GPSDestLongitudeRef", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0016, AUTO, "GPSDestLongitude", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0017, AUTO, "GPSDestBearingRef", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0018, AUTO, "GPSDestBearing", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0019, AUTO, "GPSDestDistanceRef", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001a, AUTO, "GPSDestDistance", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001b, AUTO, "GPSProcessingMethod", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001c, AUTO, "GPSAreaInformation", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001d, AUTO, "GPSDateStamp", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x001e, AUTO, "GPSDifferential", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr } -}; - -const TagAttrib iopAttribs[] = { - {0, AC_WRITE, 0, nullptr, 0x0001, AUTO, "InteroperabilityIndex", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0002, AUTO, "InteroperabilityVersion", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr } -}; - -const TagAttrib ifdAttribs[] = { - {0, AC_SYSTEM, 0, nullptr, 0x0017, AUTO, "PanaISO", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x00fe, AUTO, "NewSubFileType", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0100, AUTO, "ImageWidth", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0101, AUTO, "ImageHeight", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0102, AUTO, "BitsPerSample", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0103, AUTO, "Compression", &compressionInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0106, AUTO, "PhotometricInterpretation", &photometricInterpreter}, - {0, AC_WRITE, 1, nullptr, 0x010E, AUTO, "ImageDescription", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x010F, AUTO, "Make", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0110, AUTO, "Model", &stdInterpreter}, - {1, AC_DONTWRITE, 0, nullptr, 0x0111, AUTO, "StripOffsets", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0112, AUTO, "Orientation", &orientationInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0115, AUTO, "SamplesPerPixel", &stdInterpreter}, - {1, AC_DONTWRITE, 0, nullptr, 0x0116, AUTO, "RowsPerStrip", &stdInterpreter}, - {1, AC_DONTWRITE, 0, nullptr, 0x0117, AUTO, "StripByteCounts", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x011A, AUTO, "XResolution", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x011B, AUTO, "YResolution", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x011C, AUTO, "PlanarConfiguration", &planarConfigInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0128, AUTO, "ResolutionUnit", &unitsInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x012D, AUTO, "TransferFunction", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0131, AUTO, "Software", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x0132, AUTO, "DateTime", &stdInterpreter}, - {0, AC_WRITE, 1, nullptr, 0x013B, AUTO, "Artist", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x013E, AUTO, "WhitePoint", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x013F, AUTO, "PriomaryChromaticities", &stdInterpreter}, - {0, AC_WRITE, 0, ifdAttribs, 0x014A, AUTO, "SubIFD", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0153, AUTO, "SampleFormat", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0201, AUTO, "JPEGInterchangeFormat", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0202, AUTO, "JPEGInterchangeFormatLength", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0211, AUTO, "YCbCrCoefficients", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0212, AUTO, "YCbCrSubSampling", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0213, AUTO, "YCbCrPositioning", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x0214, AUTO, "ReferenceBlackWhite", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x02bc, AUTO, "ApplicationNotes", &utf8BinInterpreter}, // XMP - {0, AC_WRITE, 0, nullptr, 0x4746, AUTO, "Rating", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x4749, AUTO, "RatingPercent", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x828d, AUTO, "CFAPatternDim", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x828e, AUTO, "CFAPattern", &cfaInterpreter}, - {0, AC_WRITE, 0, kodakIfdAttribs, 0x8290, AUTO, "KodakIFD", &stdInterpreter}, - {0, AC_WRITE, 1, nullptr, 0x8298, AUTO, "Copyright", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x83BB, AUTO, "IPTCData", &stdInterpreter}, - {0, AC_DONTWRITE, 0, nullptr, 0x8606, AUTO, "LeafData", &stdInterpreter}, // is actually a subdir, but a proprietary format - {0, AC_WRITE, 0, exifAttribs, 0x8769, AUTO, "Exif", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0x8773, AUTO, "ICCProfile", &stdInterpreter}, - {0, AC_WRITE, 0, gpsAttribs, 0x8825, AUTO, "GPSInfo", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9003, AUTO, "DateTimeOriginal", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9004, AUTO, "DateTimeDigitized", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0x9211, AUTO, "ImageNumber", &stdInterpreter}, - {0, AC_WRITE, 0, iopAttribs, 0xA005, AUTO, "Interoperability", &stdInterpreter}, - {0, AC_DONTWRITE, 0, nullptr, 0xC4A5, AUTO, "PrintIMInformation", &stdInterpreter}, - {0, AC_DONTWRITE, 0, nullptr, 0xC612, AUTO, "DNGVersion", &stdInterpreter}, - {0, AC_DONTWRITE, 0, nullptr, 0xC613, AUTO, "DNGBackwardVersion", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC614, AUTO, "UniqueCameraModel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xC615, AUTO, "LocalizedCameraModel", &stdInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xc62f, AUTO, "CameraSerialNumber", &stdInterpreter}, - {0, AC_SYSTEM, 0, nullptr, 0xc630, AUTO, "DNGLensInfo", &stdInterpreter}, - {0, AC_DONTWRITE, 0, nullptr, 0xC634, AUTO, "MakerNote", &stdInterpreter}, //DNGPrivateData - {0, AC_SYSTEM, 0, nullptr, 0xC640, AUTO, "RawImageSegmentation", &rawImageSegmentationInterpreter}, - {0, AC_WRITE, 0, nullptr, 0xc65d, AUTO, "RawDataUniqueID", &stdInterpreter}, - {0, AC_DONTWRITE, 0, nullptr, 0xc761, AUTO, "NoiseProfile", &stdInterpreter}, - { -1, AC_DONTWRITE, 0, nullptr, 0, AUTO, "", nullptr} -}; -} diff --git a/rtgui/CMakeLists.txt b/rtgui/CMakeLists.txt index bd08160ae..592b816a0 100644 --- a/rtgui/CMakeLists.txt +++ b/rtgui/CMakeLists.txt @@ -199,7 +199,7 @@ if(WIN32) ${RSVG_INCLUDE_DIRS} ${TIFF_INCLUDE_DIRS} ) - link_directories(. "${PROJECT_SOURCE_DIR}/rtexif" + link_directories(. ${EXTRA_LIBDIR} ${GIOMM_LIBRARY_DIRS} ${GIO_LIBRARY_DIRS} @@ -251,9 +251,10 @@ else() endif() # Excluding libatomic needed by Clang/FreeBSD, #3636 -if(OPENMP_FOUND AND NOT APPLE AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") - set(EXTRA_LIB_RTGUI "${EXTRA_LIB_RTGUI}" "atomic") -endif() +# Now handled in cmake/modules/findATOMIC.cmake, #6821 +# if(OPENMP_FOUND AND NOT APPLE AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") +# set(EXTRA_LIB_RTGUI "${EXTRA_LIB_RTGUI}" "atomic") +# endif() # Create config.h which defines where data are stored configure_file("${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h") diff --git a/rtgui/batchqueue.cc b/rtgui/batchqueue.cc index 4e25475f0..6ab75bd47 100644 --- a/rtgui/batchqueue.cc +++ b/rtgui/batchqueue.cc @@ -253,7 +253,7 @@ bool BatchQueue::saveBatchQueue () const auto& saveFormat = entry->saveFormat; // Warning: for code's simplicity in loadBatchQueue, each field must end by the '|' character, safer than ';' or ',' since it can't be used in paths -#ifdef WIN32 +#ifdef _WIN32 // on windows it crashes if we don't use c_str() and filename etc. contain special (e.g. chinese) characters, see issue 3387 file << entry->filename.c_str() << '|' << entry->savedParamsFile.c_str() << '|' << entry->outFileName.c_str() << '|' << saveFormat.format << '|' #else diff --git a/rtgui/batchqueueentry.cc b/rtgui/batchqueueentry.cc index 7499fb63b..8974cad59 100644 --- a/rtgui/batchqueueentry.cc +++ b/rtgui/batchqueueentry.cc @@ -50,7 +50,7 @@ BatchQueueEntry::BatchQueueEntry (rtengine::ProcessingJob* pjob, const rtengine: thumbnail = thm; -#if 1 //ndef WIN32 +#if 1 //ndef _WIN32 // The BatchQueueEntryIdleHelper tracks if an entry has been deleted while it was sitting waiting for "idle" bqih = new BatchQueueEntryIdleHelper; bqih->bqentry = this; diff --git a/rtgui/batchtoolpanelcoord.cc b/rtgui/batchtoolpanelcoord.cc index 4383ccb74..83d541334 100644 --- a/rtgui/batchtoolpanelcoord.cc +++ b/rtgui/batchtoolpanelcoord.cc @@ -615,7 +615,7 @@ void BatchToolPanelCoordinator::optionsChanged () initSession (); } -void BatchToolPanelCoordinator::procParamsChanged (Thumbnail* thm, int whoChangedIt) +void BatchToolPanelCoordinator::procParamsChanged (Thumbnail* thm, int whoChangedIt, bool upgradeHint) { if (whoChangedIt != BATCHEDITOR && !blockedUpdate) { diff --git a/rtgui/batchtoolpanelcoord.h b/rtgui/batchtoolpanelcoord.h index f421793ac..687aa98bd 100644 --- a/rtgui/batchtoolpanelcoord.h +++ b/rtgui/batchtoolpanelcoord.h @@ -73,7 +73,7 @@ public: void getCamWB (double& temp, double& green, rtengine::StandardObserver observer) override; // thumbnaillistener interface - void procParamsChanged (Thumbnail* thm, int whoChangedIt) override; + void procParamsChanged (Thumbnail* thm, int whoChangedIt, bool upgradeHint) override; // batchpparamschangelistener interface void beginBatchPParamsChange(int numberOfEntries) override; diff --git a/rtgui/bayerprocess.cc b/rtgui/bayerprocess.cc index e7e038e52..5ef3a777c 100644 --- a/rtgui/bayerprocess.cc +++ b/rtgui/bayerprocess.cc @@ -36,7 +36,7 @@ BayerProcess::BayerProcess () : { auto m = ProcEventMapper::getInstance(); - EvDemosaicBorder = m->newEvent(DEMOSAIC, "HISTORY_MSG_RAW_BORDER"); + EvDemosaicBorder = m->newEvent(DARKFRAME, "HISTORY_MSG_RAW_BORDER"); EvDemosaicContrast = m->newEvent(DEMOSAIC, "HISTORY_MSG_DUALDEMOSAIC_CONTRAST"); EvDemosaicAutoContrast = m->newEvent(DEMOSAIC, "HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST"); EvDemosaicPixelshiftDemosaicMethod = m->newEvent(DEMOSAIC, "HISTORY_MSG_PIXELSHIFT_DEMOSAIC"); diff --git a/rtgui/cacheimagedata.cc b/rtgui/cacheimagedata.cc index d44ca28ec..bfc4e920a 100644 --- a/rtgui/cacheimagedata.cc +++ b/rtgui/cacheimagedata.cc @@ -26,6 +26,15 @@ #include "../rtengine/procparams.h" #include "../rtengine/settings.h" + +namespace +{ + +const Glib::ustring INI_GROUP_XMP_SIDECAR = "XmpSidecar"; +const Glib::ustring INI_XMP_SIDECAR_MD5 = "MD5"; + +} + CacheImageData::CacheImageData() : supported(false), format(FT_Invalid), @@ -56,7 +65,9 @@ CacheImageData::CacheImageData() : greenAWBMul(-1.0), blueAWBMul(-1.0), rotate(0), - thumbImgType(0) + thumbImgType(0), + width(-1), + height(-1) { } @@ -106,6 +117,12 @@ int CacheImageData::load (const Glib::ustring& fname) } } + if (keyFile.has_group(INI_GROUP_XMP_SIDECAR)) { + if (keyFile.has_key(INI_GROUP_XMP_SIDECAR, INI_XMP_SIDECAR_MD5)) { + xmpSidecarMd5 = keyFile.get_string(INI_GROUP_XMP_SIDECAR, INI_XMP_SIDECAR_MD5); + } + } + timeValid = keyFile.has_group ("DateTime"); if (timeValid) { @@ -208,6 +225,12 @@ int CacheImageData::load (const Glib::ustring& fname) if (keyFile.has_key ("FileInfo", "SampleFormat")) { sampleFormat = (rtengine::IIO_Sample_Format)keyFile.get_integer ("FileInfo", "SampleFormat"); } + if (keyFile.has_key("FileInfo", "Width")) { + width = keyFile.get_integer("FileInfo", "Width"); + } + if (keyFile.has_key("FileInfo", "Height")) { + height = keyFile.get_integer("FileInfo", "Height"); + } } if (format == FT_Raw && keyFile.has_group ("ExtraRawInfo")) { @@ -260,6 +283,8 @@ int CacheImageData::save (const Glib::ustring& fname) keyFile.set_boolean ("General", "RecentlySaved", recentlySaved); keyFile.set_integer ("General", "Rating", rating); + keyFile.set_string(INI_GROUP_XMP_SIDECAR, INI_XMP_SIDECAR_MD5, xmpSidecarMd5); + // remove the old implementation of Rank and InTrash from cache if (keyFile.has_key ("General", "Rank")) { keyFile.remove_key("General", "Rank"); @@ -298,6 +323,8 @@ int CacheImageData::save (const Glib::ustring& fname) keyFile.set_string ("FileInfo", "Filetype", filetype); keyFile.set_integer ("FileInfo", "FrameCount", frameCount); keyFile.set_integer ("FileInfo", "SampleFormat", sampleFormat); + keyFile.set_integer("FileInfo", "Width", width); + keyFile.set_integer("FileInfo", "Height", height); if (format == FT_Raw) { keyFile.set_integer ("ExtraRawInfo", "ThumbImageType", thumbImgType); @@ -335,7 +362,3 @@ int CacheImageData::save (const Glib::ustring& fname) } } -rtengine::procparams::IPTCPairs CacheImageData::getIPTCData(unsigned int frame) const -{ - return {}; -} diff --git a/rtgui/cacheimagedata.h b/rtgui/cacheimagedata.h index caab1de5b..8c0fa6513 100644 --- a/rtgui/cacheimagedata.h +++ b/rtgui/cacheimagedata.h @@ -39,6 +39,9 @@ public: bool inTrashOld; // old implementation of inTrash bool recentlySaved; + // XMP sidecar info. + Glib::ustring xmpSidecarMd5; + // time/date info bool timeValid; short year; @@ -80,6 +83,9 @@ public: QUICK_THUMBNAIL = 1 // was the thumbnail generated from embedded jpeg }; + int width; + int height; + CacheImageData (); int load (const Glib::ustring& fname); @@ -89,30 +95,30 @@ public: // FramesMetaData interface //------------------------------------------------------------------------- - unsigned int getRootCount () const override { return -1; } unsigned int getFrameCount () const override { return frameCount; } - bool hasExif (unsigned int frame = 0) const override { return false; } - rtexif::TagDirectory* getRootExifData (unsigned int root = 0) const override { return nullptr; } - rtexif::TagDirectory* getFrameExifData (unsigned int frame = 0) const override { return nullptr; } - rtexif::TagDirectory* getBestExifData (rtengine::ImageSource *imgSource, rtengine::procparams::RAWParams *rawParams) const override { return nullptr; } - bool hasIPTC (unsigned int frame = 0) const override { return false; } - rtengine::procparams::IPTCPairs getIPTCData (unsigned int frame = 0) const override; - tm getDateTime (unsigned int frame = 0) const override { return tm{}; } - time_t getDateTimeAsTS(unsigned int frame = 0) const override { return time_t(-1); } - int getISOSpeed (unsigned int frame = 0) const override { return iso; } - double getFNumber (unsigned int frame = 0) const override { return fnumber; } - double getFocalLen (unsigned int frame = 0) const override { return focalLen; } - double getFocalLen35mm (unsigned int frame = 0) const override { return focalLen35mm; } - float getFocusDist (unsigned int frame = 0) const override { return focusDist; } - double getShutterSpeed (unsigned int frame = 0) const override { return shutter; } - double getExpComp (unsigned int frame = 0) const override { return atof(expcomp.c_str()); } - std::string getMake (unsigned int frame = 0) const override { return camMake; } - std::string getModel (unsigned int frame = 0) const override { return camModel; } - std::string getLens (unsigned int frame = 0) const override { return lens; } - std::string getOrientation (unsigned int frame = 0) const override { return ""; } // TODO - int getRating (unsigned int frame = 0) const override { return rating; } // FIXME-piotr : missing rating + bool hasExif() const override { return false; } + tm getDateTime() const override { return tm{}; } + time_t getDateTimeAsTS() const override { return time_t(-1); } + int getISOSpeed() const override { return iso; } + double getFNumber() const override { return fnumber; } + double getFocalLen() const override { return focalLen; } + double getFocalLen35mm() const override { return focalLen35mm; } + float getFocusDist() const override { return focusDist; } + double getShutterSpeed() const override { return shutter; } + double getExpComp() const override { return atof(expcomp.c_str()); } + std::string getMake() const override { return camMake; } + std::string getModel() const override { return camModel; } + std::string getLens() const override { return lens; } + std::string getOrientation() const override { return ""; } // TODO + Glib::ustring getFileName() const override { return ""; } + int getRating () const override { return rating; } // FIXME-piotr : missing rating bool getPixelShift () const override { return isPixelShift; } - bool getHDR (unsigned int frame = 0) const override { return isHDR; } - std::string getImageType (unsigned int frame) const override { return isPixelShift ? "PS" : isHDR ? "HDR" : "STD"; } - rtengine::IIOSampleFormat getSampleFormat (unsigned int frame = 0) const override { return sampleFormat; } + bool getHDR() const override { return isHDR; } + std::string getImageType() const override { return isPixelShift ? "PS" : isHDR ? "HDR" : "STD"; } + rtengine::IIOSampleFormat getSampleFormat() const override { return sampleFormat; } + void getDimensions(int &w, int &h) const override + { + w = width; + h = height; + } }; diff --git a/rtgui/cachemanager.cc b/rtgui/cachemanager.cc index 5e540b604..7804b69b4 100644 --- a/rtgui/cachemanager.cc +++ b/rtgui/cachemanager.cc @@ -24,7 +24,7 @@ #include #include -#ifdef WIN32 +#ifdef _WIN32 #include #endif @@ -97,6 +97,10 @@ Thumbnail* CacheManager::getEntry (const Glib::ustring& fname) } const auto cacheName = getCacheFileName ("data", fname, ".txt", md5); + const auto xmpSidecarMd5 = + rtengine::settings->metadata_xmp_sync != rtengine::Settings::MetadataXmpSync::NONE + ? getMD5(Thumbnail::xmpSidecarPath(fname)) + : ""; // let's see if we have it in the cache { @@ -106,6 +110,11 @@ Thumbnail* CacheManager::getEntry (const Glib::ustring& fname) if (error == 0 && imageData.supported) { + if (xmpSidecarMd5 != imageData.xmpSidecarMd5) { + updateImageInfo(fname, imageData, xmpSidecarMd5); + imageData.save(cacheName); + } + thumbnail.reset (new Thumbnail (this, fname, &imageData)); if (!thumbnail->isSupported ()) { @@ -117,7 +126,7 @@ Thumbnail* CacheManager::getEntry (const Glib::ustring& fname) // if not, create a new one if (!thumbnail) { - thumbnail.reset (new Thumbnail (this, fname, md5)); + thumbnail.reset (new Thumbnail (this, fname, md5, xmpSidecarMd5)); if (!thumbnail->isSupported ()) { thumbnail.reset (); @@ -301,7 +310,7 @@ void CacheManager::deleteFiles (const Glib::ustring& fname, const std::string& m std::string CacheManager::getMD5 (const Glib::ustring& fname) { -#ifdef WIN32 +#ifdef _WIN32 std::unique_ptr wfname(reinterpret_cast(g_utf8_to_utf16 (fname.c_str (), -1, NULL, NULL, NULL)), g_free); @@ -413,3 +422,9 @@ void CacheManager::applyCacheSizeLimitation () const } } +void CacheManager::updateImageInfo(const Glib::ustring &fname, CacheImageData &imageData, const Glib::ustring &xmpSidecarMd5) const +{ + Thumbnail::infoFromImage(fname, imageData); + imageData.xmpSidecarMd5 = xmpSidecarMd5; +} + diff --git a/rtgui/cachemanager.h b/rtgui/cachemanager.h index 61602aeba..a7ab14f0a 100644 --- a/rtgui/cachemanager.h +++ b/rtgui/cachemanager.h @@ -27,6 +27,7 @@ #include "../rtengine/noncopyable.h" +class CacheImageData; class Thumbnail; class CacheManager : @@ -42,6 +43,7 @@ private: void deleteFiles (const Glib::ustring& fname, const std::string& md5, bool purgeData, bool purgeProfile) const; void applyCacheSizeLimitation () const; + void updateImageInfo(const Glib::ustring &fname, CacheImageData &imageData, const Glib::ustring &xmpSidecarMd5) const; public: static CacheManager* getInstance (); diff --git a/rtgui/controllines.cc b/rtgui/controllines.cc index d28ef12ca..08f9eda37 100644 --- a/rtgui/controllines.cc +++ b/rtgui/controllines.cc @@ -79,7 +79,7 @@ constexpr int mouseOverIdToLineId(int mouse_over_id) ControlLineManager::ControlLineManager(): EditSubscriber(ET_OBJECTS), - canvas_area(new Rectangle()), + canvas_area(new EditRectangle()), cursor(CSHandOpen), draw_mode(false), drawing_line(false), diff --git a/rtgui/controllines.h b/rtgui/controllines.h index 9e850da1c..7f3f74b7b 100644 --- a/rtgui/controllines.h +++ b/rtgui/controllines.h @@ -26,9 +26,10 @@ class Circle; class Line; class OPIcon; -class Rectangle; +class EditRectangle; class RTSurface; + struct ControlLine { enum ObjectIndex { LINE, @@ -52,7 +53,7 @@ class ControlLineManager: EditSubscriber protected: /** Hidden object for capturing mouse events. */ - std::unique_ptr canvas_area; + std::unique_ptr canvas_area; rtengine::Coord drag_delta; std::vector> control_lines; CursorShape cursor; diff --git a/rtgui/controlspotpanel.cc b/rtgui/controlspotpanel.cc index 60fde12a6..a29a3a885 100644 --- a/rtgui/controlspotpanel.cc +++ b/rtgui/controlspotpanel.cc @@ -1977,8 +1977,8 @@ void ControlSpotPanel::addControlSpotCurve(Gtk::TreeModel::Row& row) shape_ellipse = new Ellipse(); shape_ellipse->datum = Geometry::IMAGE; shape_ellipse->radiusInImageSpace = true; - Rectangle* shape_rectangle; - shape_rectangle = new Rectangle(); + EditRectangle* shape_rectangle; + shape_rectangle = new EditRectangle(); shape_rectangle->datum = Geometry::IMAGE; EditSubscriber::visibleGeometry.push_back(centerCircle); // (curveid - 1) * 7 EditSubscriber::visibleGeometry.push_back(shape_ellipse); // (curveid - 1) * 7 + 1 @@ -2012,7 +2012,7 @@ void ControlSpotPanel::addControlSpotCurve(Gtk::TreeModel::Row& row) shape_ellipse = new Ellipse(); shape_ellipse->datum = Geometry::IMAGE; shape_ellipse->radiusInImageSpace = true; - shape_rectangle = new Rectangle(); + shape_rectangle = new EditRectangle(); shape_rectangle->datum = Geometry::IMAGE; EditSubscriber::mouseOverGeometry.push_back(centerCircle); // (curveid - 1) * 7 EditSubscriber::mouseOverGeometry.push_back(shape_ellipse); // (curveid - 1) * 7 + 1 @@ -2082,7 +2082,7 @@ void ControlSpotPanel::updateControlSpotCurve(const Gtk::TreeModel::Row& row) }; const auto updateRectangle = [&](Geometry * geometry) { - const auto rectangle = static_cast(geometry); + const auto rectangle = static_cast(geometry); rectangle->bottomRight.x = origin.x + decayX; rectangle->bottomRight.y = origin.y + decayY; rectangle->topLeft.x = origin.x - decayXL; diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index 0cd6f3f6c..ef2b7a52b 100644 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -17,7 +17,7 @@ * along with RawTherapee. If not, see . */ #include -#ifdef WIN32 +#ifdef _WIN32 #include #endif @@ -1496,7 +1496,7 @@ void CropWindow::expose (Cairo::RefPtr cr) // While the Right-side ALT is pressed, auto-enable highlight and shadow clipping indicators // TODO: Add linux/MacOS specific functions for alternative -#ifdef WIN32 +#ifdef _WIN32 if (GetKeyState(VK_RMENU) < 0) { showcs = true; diff --git a/rtgui/cursormanager.cc b/rtgui/cursormanager.cc index e915150aa..bc0e38c49 100644 --- a/rtgui/cursormanager.cc +++ b/rtgui/cursormanager.cc @@ -35,7 +35,7 @@ void CursorManager::init (Glib::RefPtr mainWindow) #endif - Glib::RefPtr add = RTImage::createPixbufFromFile("crosshair-small.png"); + Glib::RefPtr add = RTImage::createPixbufFromFile("crosshair-hicontrast.png"); Glib::RefPtr colPick = RTImage::createPixbufFromFile("color-picker-hicontrast.png"); Glib::RefPtr colPickAdd = RTImage::createPixbufFromFile("color-picker-add-hicontrast.png"); Glib::RefPtr cropDraw = RTImage::createPixbufFromFile("crop-point-hicontrast.png"); diff --git a/rtgui/dirbrowser.cc b/rtgui/dirbrowser.cc index 2be1e3f3a..7f5a4c3e3 100644 --- a/rtgui/dirbrowser.cc +++ b/rtgui/dirbrowser.cc @@ -87,7 +87,7 @@ DirBrowser::DirBrowser () : dirTreeModel(), dtColumns(), tvc(M("DIRBROWSER_FOLDERS")), expandSuccess(false) -#ifdef WIN32 +#ifdef _WIN32 , volumes(0) #endif { @@ -160,7 +160,7 @@ void DirBrowser::fillDirTree () dirTreeModel->signal_sort_column_changed().connect(sigc::mem_fun(*this, &DirBrowser::on_sort_column_changed)); } -#ifdef WIN32 +#ifdef _WIN32 void DirBrowser::addRoot (char letter) { @@ -251,7 +251,7 @@ int updateVolumesUI (void* br) void DirBrowser::fillRoot () { -#ifdef WIN32 +#ifdef _WIN32 volumes = GetLogicalDrives (); for (int i = 0; i < 32; i++) @@ -396,7 +396,7 @@ Gtk::TreePath DirBrowser::expandToDir (const Glib::ustring& absDirPath) int count = 0; expandSuccess = true; -#ifndef WIN32 +#ifndef _WIN32 Gtk::TreeModel::iterator j = dirTreeModel->get_iter (path); path.up (); path.push_back (0); @@ -406,7 +406,7 @@ Gtk::TreePath DirBrowser::expandToDir (const Glib::ustring& absDirPath) while (dir) { Glib::ustring dirstr = dir; -#ifdef WIN32 +#ifdef _WIN32 if (count == 0) { dirstr = dirstr + "\\"; @@ -419,7 +419,7 @@ Gtk::TreePath DirBrowser::expandToDir (const Glib::ustring& absDirPath) while (i && expandSuccess) { Gtk::TreeModel::Row crow = *i; Glib::ustring str = crow[dtColumns.filename]; -#ifdef WIN32 +#ifdef _WIN32 if (str.casefold() == dirstr.casefold()) { #else diff --git a/rtgui/dirbrowser.h b/rtgui/dirbrowser.h index 0254d6eb5..5d98c82ae 100644 --- a/rtgui/dirbrowser.h +++ b/rtgui/dirbrowser.h @@ -72,7 +72,7 @@ private: bool expandSuccess; -#ifdef WIN32 +#ifdef _WIN32 unsigned int volumes; public: void updateVolumes (); diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index 420717b7e..81efccccd 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -43,7 +43,7 @@ #include "thumbnail.h" #include "toolpanelcoord.h" -#ifdef WIN32 +#ifdef _WIN32 #include "windows.h" #include "../rtengine/winutils.h" @@ -70,7 +70,7 @@ void setprogressStrUI(double val, const Glib::ustring str, MyProgressBar* pProgr #if !defined(__APPLE__) // monitor profile not supported on apple bool find_default_monitor_profile (GdkWindow *rootwin, Glib::ustring &defprof, Glib::ustring &defprofname) { -#ifdef WIN32 +#ifdef _WIN32 HDC hDC = GetDC (nullptr); if (hDC != nullptr) { @@ -151,7 +151,7 @@ bool hasUserOnlyPermission(const Glib::ustring &dirname) const guint32 mode = file_info->get_attribute_uint32("unix::mode"); return (mode & 0777) == 0700 && owner == Glib::get_user_name(); -#elif defined(WIN32) +#elif defined(_WIN32) const Glib::RefPtr file = Gio::File::create_for_path(dirname); const Glib::RefPtr file_info = file->query_info("owner::user"); if (!file_info) { @@ -254,7 +254,7 @@ void setUserOnlyPermission(const Glib::RefPtr file, bool execute) file->set_attribute_uint32("unix::mode", mode, Gio::FILE_QUERY_INFO_NONE); } catch (Gio::Error &) { } -#elif defined(WIN32) +#elif defined(_WIN32) // Get the current user's SID. HANDLE process_token_raw; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_READ, &process_token_raw)) { @@ -324,7 +324,7 @@ void setUserOnlyPermission(const Glib::RefPtr file, bool execute) */ Glib::ustring getTmpDirectory() { -#if defined(__linux__) || defined(__APPLE__) || defined(WIN32) +#if defined(__linux__) || defined(__APPLE__) || defined(_WIN32) static Glib::ustring recent_dir = ""; const Glib::ustring tmp_dir_root = Glib::get_tmp_dir(); const Glib::ustring subdir_base = @@ -721,7 +721,8 @@ EditorPanel::EditorPanel (FilePanel* filePanel) firstProcessingDone = false; // construct toolpanelcoordinator - tpc = new ToolPanelCoordinator (); + tpc = new ToolPanelCoordinator(); + tpc->setProgressListener(this); // build GUI @@ -904,6 +905,7 @@ EditorPanel::EditorPanel (FilePanel* filePanel) send_to_external = Gtk::manage(new PopUpButton("", false)); send_to_external->set_tooltip_text(M("MAIN_BUTTON_SENDTOEDITOR_TOOLTIP")); + send_to_external->setEmptyImage("palette-brush.png"); setExpandAlignProperties(send_to_external->buttonGroup, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); updateExternalEditorWidget( options.externalEditorIndex >= 0 ? options.externalEditorIndex : options.externalEditors.size(), @@ -1464,6 +1466,7 @@ void EditorPanel::setProgressState(bool inProcessing) void EditorPanel::error(const Glib::ustring& descr) { + parent->error(descr); } void EditorPanel::error(const Glib::ustring& title, const Glib::ustring& descr) @@ -1542,7 +1545,7 @@ void EditorPanel::refreshProcessingState (bool inProcessingP) val = 0.0; str = "PROGRESSBAR_READY"; -#ifdef WIN32 +#ifdef _WIN32 // Maybe accessing "parent", which is a Gtk object, can justify to get the Gtk lock... if (!firstProcessingDone && static_cast (parent)->getIsFullscreen()) { @@ -1570,16 +1573,16 @@ void EditorPanel::info_toggled () const rtengine::FramesMetaData* idata = ipc->getInitialImage()->getMetaData(); - if (idata && idata->hasExif(selectedFrame)) { + if (idata && idata->hasExif()) { infoString = Glib::ustring::compose ("%1 + %2\nf/%3 %4s %5%6 %7mm", escapeHtmlChars (idata->getMake() + " " + idata->getModel()), escapeHtmlChars (idata->getLens()), - Glib::ustring (idata->apertureToString (idata->getFNumber(selectedFrame))), - Glib::ustring (idata->shutterToString (idata->getShutterSpeed(selectedFrame))), - M ("QINFO_ISO"), idata->getISOSpeed(selectedFrame), - Glib::ustring::format (std::setw (3), std::fixed, std::setprecision (2), idata->getFocalLen(selectedFrame))); + Glib::ustring (idata->apertureToString (idata->getFNumber())), + Glib::ustring (idata->shutterToString (idata->getShutterSpeed())), + M ("QINFO_ISO"), idata->getISOSpeed(), + Glib::ustring::format (std::setw (3), std::fixed, std::setprecision (2), idata->getFocalLen())); - expcomp = Glib::ustring (idata->expcompToString (idata->getExpComp(selectedFrame), true)); // maskZeroexpcomp + expcomp = Glib::ustring (idata->expcompToString (idata->getExpComp(), true)); // maskZeroexpcomp if (!expcomp.empty ()) { infoString = Glib::ustring::compose ("%1 %2EV", @@ -1592,8 +1595,13 @@ void EditorPanel::info_toggled () escapeHtmlChars (Glib::path_get_dirname (openThm->getFileName())) + G_DIR_SEPARATOR_S, escapeHtmlChars (Glib::path_get_basename (openThm->getFileName())) ); - int ww = ipc->getFullWidth(); - int hh = ipc->getFullHeight(); + int ww = -1, hh = -1; + idata->getDimensions(ww, hh); + if (ww <= 0) { + ww = ipc->getFullWidth(); + hh = ipc->getFullHeight(); + } + //megapixels infoString = Glib::ustring::compose ("%1\n%2 MP (%3x%4)", infoString, @@ -1607,7 +1615,7 @@ void EditorPanel::info_toggled () if (isHDR) { infoString = Glib::ustring::compose ("%1\n" + M("QINFO_HDR"), infoString, numFrames); if (numFrames == 1) { - int sampleFormat = idata->getSampleFormat(selectedFrame); + int sampleFormat = idata->getSampleFormat(); infoString = Glib::ustring::compose ("%1 / %2", infoString, M(Glib::ustring::compose("SAMPLEFORMAT_%1", sampleFormat))); } } else if (isPixelShift) { @@ -1987,7 +1995,7 @@ bool EditorPanel::handleShortcutKey (GdkEventKey* event) return false; } -void EditorPanel::procParamsChanged (Thumbnail* thm, int whoChangedIt) +void EditorPanel::procParamsChanged (Thumbnail* thm, int whoChangedIt, bool upgradeHint) { if (whoChangedIt != EDITOR) { @@ -2030,7 +2038,7 @@ bool EditorPanel::idle_saveImage (ProgressConnector *pc, msgd.run (); saveimgas->set_sensitive (true); - send_to_external->set_sensitive(true); + send_to_external->set_sensitive(send_to_external->getEntryCount()); isProcessing = false; } @@ -2058,7 +2066,7 @@ bool EditorPanel::idle_imageSaved (ProgressConnector *pc, rtengine::IImagef } saveimgas->set_sensitive (true); - send_to_external->set_sensitive(true); + send_to_external->set_sensitive(send_to_external->getEntryCount()); parent->setProgressStr (""); parent->setProgress (0.); @@ -2249,8 +2257,10 @@ void EditorPanel::sendToExternalPressed() dialog->show(); } else { struct ExternalEditor editor = options.externalEditors.at(options.externalEditorIndex); - external_editor_info = Gio::AppInfo::create_from_commandline(editor.command, editor.name, Gio::APP_INFO_CREATE_NONE); - external_editor_native_command = editor.native_command; + external_editor_info = { + editor.name, + editor.command, + editor.native_command}; sendToExternal(); } } @@ -2361,7 +2371,7 @@ bool EditorPanel::idle_sendToGimp ( ProgressConnector *p sf.tiffBits = 16; sf.tiffFloat = false; } - + sf.tiffUncompressed = true; sf.saveParams = true; @@ -2388,7 +2398,7 @@ bool EditorPanel::idle_sendToGimp ( ProgressConnector *p Gtk::MessageDialog msgd (*parent, msg_, true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); msgd.run (); saveimgas->set_sensitive (true); - send_to_external->set_sensitive(true); + send_to_external->set_sensitive(send_to_external->getEntryCount()); } return false; @@ -2409,14 +2419,14 @@ bool EditorPanel::idle_sentToGimp (ProgressConnector *pc, rtengine::IImagef if ((!img && Glib::file_test(filename, Glib::FILE_TEST_IS_REGULAR)) || (img && !errore)) { saveimgas->set_sensitive (true); - send_to_external->set_sensitive(true); + send_to_external->set_sensitive(send_to_external->getEntryCount()); parent->setProgressStr (""); parent->setProgress (0.); bool success = false; setUserOnlyPermission(Gio::File::create_for_path(filename), false); - success = ExtProgStore::openInExternalEditor(filename, external_editor_info, external_editor_native_command); + success = ExtProgStore::openInExternalEditor(filename, external_editor_info); if (!success) { Gtk::MessageDialog msgd (*parent, M ("MAIN_MSG_CANNOTSTARTEDITOR"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); @@ -2445,12 +2455,16 @@ RTAppChooserDialog *EditorPanel::getAppChooserDialog() void EditorPanel::onAppChooserDialogResponse(int responseId) { switch (responseId) { - case Gtk::RESPONSE_OK: + case Gtk::RESPONSE_OK: { getAppChooserDialog()->close(); - external_editor_info = getAppChooserDialog()->get_app_info(); - external_editor_native_command = false; + const auto app_info = getAppChooserDialog()->get_app_info(); + external_editor_info = { + app_info->get_name(), + app_info->get_commandline(), + false}; sendToExternal(); break; + } case Gtk::RESPONSE_CANCEL: case Gtk::RESPONSE_CLOSE: getAppChooserDialog()->close(); @@ -2781,7 +2795,10 @@ void EditorPanel::updateExternalEditorWidget(int selectedIndex, const std::vecto send_to_external->insertEntry(i, "palette-brush.png", name, &send_to_external_radio_group); } } +#ifndef __APPLE__ send_to_external->addEntry("palette-brush.png", M("GENERAL_OTHER"), &send_to_external_radio_group); +#endif + send_to_external->set_sensitive(send_to_external->getEntryCount()); send_to_external->setSelected(selectedIndex); send_to_external->show(); } diff --git a/rtgui/editorpanel.h b/rtgui/editorpanel.h index 309f14e8c..0c6d15e37 100644 --- a/rtgui/editorpanel.h +++ b/rtgui/editorpanel.h @@ -21,6 +21,7 @@ #include +#include "extprog.h" #include "histogrampanel.h" #include "history.h" #include "imageareapanel.h" @@ -118,7 +119,7 @@ public: void clearParamChanges() override; // thumbnaillistener interface - void procParamsChanged (Thumbnail* thm, int whoChangedIt) override; + void procParamsChanged (Thumbnail* thm, int whoChangedIt, bool upgradeHint) override; // HistoryBeforeLineListener void historyBeforeLineChanged (const rtengine::procparams::ProcParams& params) override; @@ -252,8 +253,7 @@ private: Gtk::Button* navSync; Gtk::Button* navNext; Gtk::Button* navPrev; - Glib::RefPtr external_editor_info; - bool external_editor_native_command; + EditorInfo external_editor_info; std::unique_ptr app_chooser_dialog; ExternalEditorChangedSignal *externalEditorChangedSignal; sigc::connection externalEditorChangedSignalConnection; diff --git a/rtgui/editwidgets.cc b/rtgui/editwidgets.cc index f9c9b3781..7ae874673 100644 --- a/rtgui/editwidgets.cc +++ b/rtgui/editwidgets.cc @@ -475,31 +475,31 @@ void Polyline::drawToMOChannel (Cairo::RefPtr &cr, unsigned shor } } -void Rectangle::setXYWH(int left, int top, int width, int height) +void EditRectangle::setXYWH(int left, int top, int width, int height) { topLeft.set(left, top); bottomRight.set(left + width, top + height); } -void Rectangle::setXYXY(int left, int top, int right, int bottom) +void EditRectangle::setXYXY(int left, int top, int right, int bottom) { topLeft.set(left, top); bottomRight.set(right, bottom); } -void Rectangle::setXYWH(rtengine::Coord topLeft, rtengine::Coord widthHeight) +void EditRectangle::setXYWH(rtengine::Coord topLeft, rtengine::Coord widthHeight) { this->topLeft = topLeft; this->bottomRight = topLeft + widthHeight; } -void Rectangle::setXYXY(rtengine::Coord topLeft, rtengine::Coord bottomRight) +void EditRectangle::setXYXY(rtengine::Coord topLeft, rtengine::Coord bottomRight) { this->topLeft = topLeft; this->bottomRight = bottomRight; } -void Rectangle::drawOuterGeometry(Cairo::RefPtr &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem) +void EditRectangle::drawOuterGeometry(Cairo::RefPtr &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem) { double lineWidth = getOuterLineWidth(); if ((flags & F_VISIBLE) && state != INSENSITIVE && lineWidth > 0. && innerLineWidth > 0.) { @@ -544,7 +544,7 @@ void Rectangle::drawOuterGeometry(Cairo::RefPtr &cr, ObjectMOBuf } } -void Rectangle::drawInnerGeometry(Cairo::RefPtr &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem) +void EditRectangle::drawInnerGeometry(Cairo::RefPtr &cr, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem) { if (flags & F_VISIBLE) { if (state != INSENSITIVE) { @@ -604,7 +604,7 @@ void Rectangle::drawInnerGeometry(Cairo::RefPtr &cr, ObjectMOBuf } } -void Rectangle::drawToMOChannel(Cairo::RefPtr &cr, unsigned short id, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem) +void EditRectangle::drawToMOChannel(Cairo::RefPtr &cr, unsigned short id, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem) { if (flags & F_HOVERABLE) { cr->set_line_width( getMouseOverLineWidth() ); diff --git a/rtgui/editwidgets.h b/rtgui/editwidgets.h index fd539c355..f1cdcf87f 100644 --- a/rtgui/editwidgets.h +++ b/rtgui/editwidgets.h @@ -313,14 +313,14 @@ public: void drawToMOChannel (Cairo::RefPtr &cr, unsigned short id, ObjectMOBuffer *objectBuffer, EditCoordSystem &coordSystem) override; }; -class Rectangle : public Geometry +class EditRectangle : public Geometry // New class name to avoid conflict elsewhere (exiv2), would be nicer to put in namespace? { public: rtengine::Coord topLeft; rtengine::Coord bottomRight; bool filled; - Rectangle (); + EditRectangle (); void setXYWH(int left, int top, int width, int height); void setXYXY(int left, int top, int right, int bottom); @@ -546,7 +546,7 @@ inline Circle::Circle () : false) { } -inline Rectangle::Rectangle () : +inline EditRectangle::EditRectangle () : topLeft (0, 0), bottomRight (10, 10), filled (false) { } diff --git a/rtgui/editwindow.cc b/rtgui/editwindow.cc index 0364b0afa..3184c21c4 100644 --- a/rtgui/editwindow.cc +++ b/rtgui/editwindow.cc @@ -488,6 +488,13 @@ void EditWindow::set_title_decorated(Glib::ustring fname) set_title("RawTherapee " + M("EDITWINDOW_TITLE") + subtitle); } +void EditWindow::updateExternalEditorWidget(int selectedIndex, const std::vector &editors) +{ + for (const auto& panel : epanels) { + panel.second->updateExternalEditorWidget(selectedIndex, editors); + } +} + void EditWindow::updateToolPanelToolLocations( const std::vector &favorites, bool cloneFavoriteTools) { diff --git a/rtgui/editwindow.h b/rtgui/editwindow.h index 0b10cb67e..a5932c081 100644 --- a/rtgui/editwindow.h +++ b/rtgui/editwindow.h @@ -24,6 +24,7 @@ #include "guiutils.h" class EditorPanel; +class ExternalEditor; class RTWindow; class EditWindow : @@ -66,6 +67,7 @@ public: bool selectEditorPanel(const std::string &name); bool closeOpenEditors(); bool isProcessing(); + void updateExternalEditorWidget(int selectedIndex, const std::vector &editors); void updateToolPanelToolLocations( const std::vector &favorites, bool cloneFavoriteTools); diff --git a/rtgui/exifpanel.cc b/rtgui/exifpanel.cc index eeff0c8c7..487635f5b 100644 --- a/rtgui/exifpanel.cc +++ b/rtgui/exifpanel.cc @@ -16,26 +16,34 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ +#include + #include "exifpanel.h" #include "guiutils.h" #include "rtimage.h" #include "options.h" +#include "../rtengine/imagedata.h" +#include "../rtengine/metadata.h" #include "../rtengine/procparams.h" +#include + using namespace rtengine; using namespace rtengine::procparams; -using namespace rtexif; ExifPanel::ExifPanel() : idata(nullptr), changeList(new rtengine::procparams::ExifPairs), - defChangeList(new rtengine::procparams::ExifPairs) + defChangeList(new rtengine::procparams::ExifPairs), + pl_(nullptr) { - set_orientation(Gtk::ORIENTATION_VERTICAL); - recursiveOp = true; + for (auto &k : MetaDataParams::basicExifKeys) { + editableTags.push_back(std::make_pair(k, "")); + } + set_orientation(Gtk::ORIENTATION_VERTICAL); exifTree = Gtk::manage (new Gtk::TreeView()); scrolledWindow = Gtk::manage (new Gtk::ScrolledWindow()); @@ -43,47 +51,58 @@ ExifPanel::ExifPanel() : exifTree->set_rules_hint (false); exifTree->set_reorderable (false); exifTree->set_enable_search (false); - exifTree->get_selection()->set_mode (Gtk::SELECTION_MULTIPLE); - scrolledWindow->set_shadow_type (Gtk::SHADOW_NONE); - scrolledWindow->set_policy (Gtk::POLICY_ALWAYS, Gtk::POLICY_ALWAYS); - scrolledWindow->property_window_placement().set_value (Gtk::CORNER_TOP_LEFT); - scrolledWindow->add (*exifTree); + exifTree->get_selection()->set_mode(Gtk::SELECTION_SINGLE); + scrolledWindow->set_shadow_type(Gtk::SHADOW_NONE); + scrolledWindow->set_policy(Gtk::POLICY_ALWAYS, Gtk::POLICY_ALWAYS); + scrolledWindow->property_window_placement().set_value(Gtk::CORNER_TOP_LEFT); + scrolledWindow->add(*exifTree); - exifTreeModel = Gtk::TreeStore::create (exifColumns); - exifTree->set_model (exifTreeModel); - exifTree->set_grid_lines (Gtk::TREE_VIEW_GRID_LINES_NONE); - exifTree->set_row_separator_func (sigc::mem_fun(*this, &ExifPanel::rowSeperatorFunc)); + exifTreeModel = Gtk::TreeStore::create(exifColumns); + exifTree->set_model(exifTreeModel); + exifTree->set_grid_lines(Gtk::TREE_VIEW_GRID_LINES_NONE); + exifTree->set_show_expanders(false); + exifTree->set_tooltip_column(0); + exifTree->set_enable_search(false); - delicon = RTImage::createPixbufFromFile ("cancel-small.png"); - keepicon = RTImage::createPixbufFromFile ("tick-small.png"); - editicon = RTImage::createPixbufFromFile ("add-small.png"); + //keepicon = RTImage::createPixbufFromFile("tick-small.png"); + editicon = RTImage::createPixbufFromFile("edit-small.png"); + open_icon_ = RTImage::createPixbufFromFile("expander-open-small.png"); + closed_icon_ = RTImage::createPixbufFromFile("expander-closed-small.png"); + + exif_active_renderer_.property_mode() = Gtk::CELL_RENDERER_MODE_ACTIVATABLE; + exif_active_renderer_.signal_toggled().connect(sigc::mem_fun(this, &ExifPanel::onKeyActiveToggled)); + exif_active_column_.pack_start(exif_active_renderer_); + exif_active_column_.set_cell_data_func(exif_active_renderer_, sigc::mem_fun(this, &ExifPanel::setKeyActive)); + + exifTree->append_column(exif_active_column_); Gtk::TreeView::Column *viewcol = Gtk::manage (new Gtk::TreeView::Column ("Field Name")); Gtk::CellRendererPixbuf* render_pb = Gtk::manage (new Gtk::CellRendererPixbuf ()); Gtk::CellRendererText *render_txt = Gtk::manage (new Gtk::CellRendererText()); render_txt->property_ellipsize() = Pango::ELLIPSIZE_END; - viewcol->pack_start (*render_pb, false); - viewcol->pack_start (*render_txt, true); - viewcol->add_attribute (*render_pb, "pixbuf", exifColumns.icon); - viewcol->add_attribute (*render_txt, "markup", exifColumns.field); - viewcol->set_expand (true); - viewcol->set_resizable (true); - viewcol->set_fixed_width (35); - viewcol->set_min_width (35); - viewcol->set_sizing (Gtk::TREE_VIEW_COLUMN_AUTOSIZE); + viewcol->pack_start(*render_pb, false); + viewcol->pack_start(*render_txt, true); + viewcol->add_attribute(*render_pb, "pixbuf", exifColumns.icon); + viewcol->add_attribute(*render_txt, "markup", exifColumns.label); + viewcol->set_expand(true); + viewcol->set_resizable(true); + viewcol->set_fixed_width(35); + viewcol->set_min_width(35); + viewcol->set_sizing(Gtk::TREE_VIEW_COLUMN_AUTOSIZE); render_pb->property_ypad() = 0; render_txt->property_ypad() = 0; render_pb->property_yalign() = 0; render_txt->property_yalign() = 0; - exifTree->append_column (*viewcol); + exifTree->append_column(*viewcol); + //exifTree->set_expander_column(*viewcol); - Gtk::TreeView::Column *viewcolv = Gtk::manage (new Gtk::TreeView::Column ("Value")); - Gtk::CellRendererText *render_txtv = Gtk::manage (new Gtk::CellRendererText()); + Gtk::TreeView::Column *viewcolv = Gtk::manage(new Gtk::TreeView::Column ("Value")); + Gtk::CellRendererText *render_txtv = Gtk::manage(new Gtk::CellRendererText()); render_txtv->property_ellipsize() = Pango::ELLIPSIZE_END; viewcolv->pack_start (*render_txtv, true); - viewcolv->add_attribute (*render_txtv, "markup", exifColumns.value); + // viewcolv->add_attribute (*render_txtv, "markup", exifColumns.value); viewcolv->set_expand (true); viewcolv->set_resizable (true); viewcol->set_fixed_width (35); @@ -91,8 +110,10 @@ ExifPanel::ExifPanel() : viewcolv->set_sizing (Gtk::TREE_VIEW_COLUMN_AUTOSIZE); render_txtv->property_ypad() = 0; + viewcolv->set_cell_data_func(*render_txtv, sigc::mem_fun(this, &ExifPanel::setExifTagValue)); + render_txtv->signal_edited().connect(sigc::mem_fun(this, &ExifPanel::onEditExifTagValue)); - exifTree->append_column (*viewcolv); + exifTree->append_column(*viewcolv); pack_start (*scrolledWindow); @@ -100,65 +121,38 @@ ExifPanel::ExifPanel() : buttons1->set_row_homogeneous (true); buttons1->set_column_homogeneous (true); setExpandAlignProperties (buttons1, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - Gtk::Grid* buttons2 = Gtk::manage (new Gtk::Grid()); - buttons2->set_row_homogeneous (true); - buttons2->set_column_homogeneous (true); - setExpandAlignProperties (buttons2, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - remove = Gtk::manage (new Gtk::Button ()); // M("EXIFPANEL_REMOVE") - remove->set_image (*Gtk::manage (new RTImage(delicon))); - remove->set_tooltip_text (M ("EXIFPANEL_REMOVEHINT")); - remove->get_style_context()->add_class ("Left"); - setExpandAlignProperties (remove, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - buttons1->attach_next_to (*remove, Gtk::POS_LEFT, 1, 1); + const auto addbtn = + [&](const Glib::ustring &tip, const Glib::ustring &icon1, const Glib::ustring &icon2=Glib::ustring()) -> Gtk::Button * + { + Gtk::Button *b = Gtk::manage(new Gtk::Button()); + b->set_image(*Gtk::manage(new RTImage(icon1, icon2))); + b->set_tooltip_text(M(tip)); + b->get_style_context()->add_class("Right"); + setExpandAlignProperties(b, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); + buttons1->attach_next_to(*b, Gtk::POS_RIGHT, 1, 1); + return b; + }; - keep = Gtk::manage (new Gtk::Button ()); // M("EXIFPANEL_KEEP") - keep->set_image (*Gtk::manage (new RTImage(keepicon))); - keep->set_tooltip_text (M ("EXIFPANEL_KEEPHINT")); - keep->get_style_context()->add_class ("MiddleH"); - setExpandAlignProperties (keep, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - buttons1->attach_next_to (*keep, Gtk::POS_RIGHT, 1, 1); + activate_all_ = addbtn("EXIFPANEL_ACTIVATE_ALL_HINT", "tick.png"); + activate_none_ = addbtn("EXIFPANEL_ACTIVATE_NONE_HINT", "box.png"); + add = addbtn("EXIFPANEL_ADDEDIT", "edit.png"); + reset = addbtn("EXIFPANEL_RESETHINT", "undo.png", "redo.png"); + resetAll = addbtn("EXIFPANEL_RESETALLHINT", "undo-all.png", "redo-all.png"); - add = Gtk::manage (new Gtk::Button ()); // M("EXIFPANEL_ADDEDIT") - add->set_image (*Gtk::manage (new RTImage(editicon))); - add->set_tooltip_text (M ("EXIFPANEL_ADDEDITHINT")); - add->get_style_context()->add_class ("Right"); - setExpandAlignProperties (add, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - buttons1->attach_next_to (*add, Gtk::POS_RIGHT, 1, 1); - - showAll = Gtk::manage (new Gtk::ToggleButton (M ("EXIFPANEL_SHOWALL"))); - //add->set_tooltip_text (M("EXIFPANEL_SHOWALL")); - showAll->get_style_context()->add_class ("Left"); - setExpandAlignProperties (showAll, false, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - showAll->set_active (options.lastShowAllExif); - buttons2->attach_next_to (*showAll, Gtk::POS_LEFT, 1, 1); - - reset = Gtk::manage (new Gtk::Button ()); // M("EXIFPANEL_RESET") - reset->set_image (*Gtk::manage (new RTImage("undo.png", "redo.png"))); - reset->set_tooltip_text (M ("EXIFPANEL_RESETHINT")); - reset->get_style_context()->add_class ("MiddleH"); - setExpandAlignProperties (reset, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - buttons2->attach_next_to (*reset, Gtk::POS_RIGHT, 1, 1); - - resetAll = Gtk::manage (new Gtk::Button ()); // M("EXIFPANEL_RESETALL") - resetAll->set_image (*Gtk::manage (new RTImage ("undo-all.png", "redo-all.png"))); - resetAll->set_tooltip_text (M ("EXIFPANEL_RESETALLHINT")); - resetAll->get_style_context()->add_class ("Right"); - setExpandAlignProperties (resetAll, false, false, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - buttons2->attach_next_to (*resetAll, Gtk::POS_RIGHT, 1, 1); - - pack_end (*buttons2, Gtk::PACK_SHRINK); pack_end (*buttons1, Gtk::PACK_SHRINK); exifTree->get_selection()->signal_changed().connect (sigc::mem_fun (*this, &ExifPanel::exifSelectionChanged)); - exifTree->signal_row_activated().connect (sigc::mem_fun (*this, &ExifPanel::row_activated)); - remove->signal_clicked().connect ( sigc::mem_fun (*this, &ExifPanel::removePressed) ); - keep->signal_clicked().connect ( sigc::mem_fun (*this, &ExifPanel::keepPressed) ); reset->signal_clicked().connect ( sigc::mem_fun (*this, &ExifPanel::resetPressed) ); resetAll->signal_clicked().connect ( sigc::mem_fun (*this, &ExifPanel::resetAllPressed) ); add->signal_clicked().connect ( sigc::mem_fun (*this, &ExifPanel::addPressed) ); - showAll->signal_toggled().connect ( sigc::mem_fun (*this, &ExifPanel::showAlltoggled) ); + activate_all_->signal_clicked().connect(sigc::mem_fun(*this, &ExifPanel::activateAllPressed)); + activate_none_->signal_clicked().connect(sigc::mem_fun(*this, &ExifPanel::activateNonePressed)); + + exifTree->signal_button_press_event().connect_notify(sigc::mem_fun(*this, &ExifPanel::onExifTreeClick)); + exifTree->signal_row_expanded().connect(sigc::mem_fun(*this, &ExifPanel::onExifRowExpanded)); + exifTree->signal_row_collapsed().connect(sigc::mem_fun(*this, &ExifPanel::onExifRowCollapsed)); show_all (); } @@ -169,557 +163,593 @@ ExifPanel::~ExifPanel () void ExifPanel::read (const ProcParams* pp, const ParamsEdited* pedited) { + disableListener(); - disableListener (); + *changeList = pp->metadata.exif; + initial_active_keys_.clear(); + initial_active_keys_.insert(pp->metadata.exifKeys.begin(), pp->metadata.exifKeys.end()); + cur_active_keys_ = initial_active_keys_; + setImageData(idata); + refreshTags(); - *changeList = pp->exif; - setImageData (idata); - applyChangeList (); - exifSelectionChanged (); - - enableListener (); + enableListener(); } + void ExifPanel::write (ProcParams* pp, ParamsEdited* pedited) { - -// updateChangeList (); - pp->exif = *changeList; + pp->metadata.exif = *changeList; + cur_active_keys_ = get_active_keys(); + pp->metadata.exifKeys.assign(cur_active_keys_.begin(), cur_active_keys_.end()); + std::sort(pp->metadata.exifKeys.begin(), pp->metadata.exifKeys.end()); } void ExifPanel::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) { - - *defChangeList = defParams->exif; + *defChangeList = defParams->metadata.exif; } void ExifPanel::setImageData (const FramesMetaData* id) { - idata = id; - exifTreeModel->clear (); - - if (idata) { - for (unsigned int rootNum = 0; rootNum < id->getRootCount (); ++rootNum) { - if ( id->getRootExifData (rootNum)) { - addDirectory (id->getRootExifData (rootNum), exifTreeModel->children(), rootNum > 0); - } - } - } } -Gtk::TreeModel::Children ExifPanel::addTag (const Gtk::TreeModel::Children& root, Glib::ustring field, Glib::ustring value, rtexif::ActionCode action, bool editable) -{ - if (!value.validate()) { - value = "???"; - } - - Gtk::TreeModel::Row row = * (exifTreeModel->append (root)); - row[exifColumns.action] = action; - row[exifColumns.editable] = editable; - row[exifColumns.edited] = false; - row[exifColumns.field_nopango] = field; - row[exifColumns.value_nopango] = value; - row[exifColumns.orig_value] = value; - - if (action == AC_WRITE) { - row[exifColumns.icon] = keepicon; - } else if (action == AC_DONTWRITE) { - row[exifColumns.icon] = delicon; - } - - if (editable) { - row[exifColumns.field] = Glib::ustring ("") + escapeHtmlChars (field) + ""; - row[exifColumns.value] = Glib::ustring ("") + escapeHtmlChars (value) + ""; - } else if (action == AC_SYSTEM) { - row[exifColumns.field] = Glib::ustring ("") + escapeHtmlChars (field) + ""; - row[exifColumns.value] = Glib::ustring ("") + escapeHtmlChars (value) + ""; - } else { - row[exifColumns.field] = escapeHtmlChars (field); - row[exifColumns.value] = escapeHtmlChars (value); - } - - return row.children(); -} - -Gtk::TreeModel::Children ExifPanel::addSeparator () +void ExifPanel::addTag(const std::string &key, const std::pair &label, const Glib::ustring &exifValue, bool editable, bool edited) { - Gtk::TreeModel::Row row = * (exifTreeModel->append (exifTreeModel->children())); - row[exifColumns.action] = rtexif::ActionCode::AC_INVALID; - row[exifColumns.editable] = false; - row[exifColumns.edited] = false; - row[exifColumns.field_nopango] = ""; - row[exifColumns.value_nopango] = ""; - row[exifColumns.orig_value] = ""; - row[exifColumns.isSeparator] = true; + const Glib::ustring& value = exifValue.validate() ? exifValue : "???"; - return row.children(); -} +// auto root = exifTreeModel->children(); -void ExifPanel::addDirectory (const TagDirectory* dir, Gtk::TreeModel::Children root, bool checkForSeparator) -{ + const auto getgroup = + [&]() -> Gtk::TreeNodeChildren + { + auto root = exifTreeModel->children(); - for (int i = 0; i < dir->getCount(); ++i) { - Tag* t = (const_cast (dir))->getTagByIndex (i); - - bool hasContent = false; - - if (checkForSeparator && i == 0) { - for (int j = 0; j < dir->getCount(); ++j) { - Tag* t2 = (const_cast (dir))->getTagByIndex (j); - const TagAttrib* currAttrib = t2->getAttrib(); - - if (currAttrib && (options.lastShowAllExif || currAttrib->action != AC_SYSTEM)) { - addSeparator(); - hasContent = true; - break; + // for (auto it = root.rbegin(), end = root.rend(); it != end; ++it) { + // auto row = *it; + for (auto &row : root) { + // auto row = *it; + std::string key = row[exifColumns.key]; + if (row[exifColumns.is_group] && key == label.first) { + return row./*it->*/children(); } } - } else { - hasContent = true; - } + auto it = exifTreeModel->append(root); + auto row = *it; - if (!hasContent) { - return; - } + row[exifColumns.editable] = false; + row[exifColumns.edited] = false; + row[exifColumns.key] = label.first; + row[exifColumns.label] = "" + label.first + ""; + row[exifColumns.value_nopango] = ""; + row[exifColumns.value] = ""; + row[exifColumns.is_group] = true; - const TagAttrib* currAttrib = t->getAttrib(); + return it->children(); + }; - if (!options.lastShowAllExif && currAttrib && currAttrib->action == AC_SYSTEM) { - continue; - } + auto root = getgroup(); - if (t->isDirectory()) { - for (int j = 0; t->getDirectory (j); j++) { - Gtk::TreeModel::Children ch = addTag (root, t->nameToString (j), M ("EXIFPANEL_SUBDIRECTORY"), currAttrib ? currAttrib->action : AC_DONTWRITE, currAttrib && currAttrib->editable); - addDirectory (t->getDirectory (j), ch); - } - } else { - addTag (root, t->nameToString (), t->valueToString (), currAttrib ? (t->getOwnMemory() ? currAttrib->action : AC_SYSTEM) : AC_DONTWRITE, currAttrib && currAttrib->editable); - } + Gtk::TreeModel::Row row = *(exifTreeModel->append(root)); + row[exifColumns.editable] = editable; + row[exifColumns.edited] = edited; + row[exifColumns.key] = key; + row[exifColumns.is_group] = false; + //row[exifColumns.label] = label.second; + row[exifColumns.value_nopango] = value; + //row[exifColumns.value] = value; + + row[exifColumns.label] = escapeHtmlChars(label.second); + row[exifColumns.value] = value;//escapeHtmlChars(value); + + bool active = all_keys_active() || cur_active_keys_.find(key) != cur_active_keys_.end(); + row[exifColumns.active] = active; + + if (edited) { + row[exifColumns.icon] = editicon; + // } else if (editable) { + // row[exifColumns.icon] = keepicon; } } +void ExifPanel::refreshTags() +{ + Glib::RefPtr selection = exifTree->get_selection(); + std::vector sel = selection->get_selected_rows(); + + exifTreeModel->clear(); + + if (!idata) { + return; + } + + const Glib::ustring fn = idata->getFileName(); + if (fn.empty()) { + return; + } + + std::unordered_set ed; + for (const auto &p : editableTags) { + ed.insert(p.first); + } + + const auto to_label = + [](const Exiv2::Exifdatum &tag) -> std::pair + { + auto s = tag.key(); + auto pos = s.find('.'); + if (pos != std::string::npos) { + s = s.substr(pos+1); + } + Glib::ustring g = ""; + pos = s.find('.'); + if (pos != std::string::npos) { + g = s.substr(0, pos); + s = s.substr(pos+1); + } + auto l = tag.tagLabel(); + if (!l.empty()) { + s = l; + } + return std::make_pair(g, Glib::ustring(s)); + }; + + try { + rtengine::Exiv2Metadata meta(fn); + meta.load(); + Exiv2::ExifData exif = meta.exifData(); + + const auto to_value = + [&](Exiv2::Exifdatum &tag) -> Glib::ustring + { + try { + if (!tag.tagLabel().empty() && //tag.typeId() != Exiv2::undefined && + (tag.typeId() == Exiv2::asciiString || tag.size() < 256)) { + return escapeHtmlChars(tag.print(&exif)); + } + } catch (std::exception &) {} + return "(" + M("EXIFPANEL_VALUE_NOT_SHOWN") + ")"; + }; + + if (const rtengine::FramesData *fd = dynamic_cast(idata)) { + fd->fillBasicTags(exif); + } + + for (const auto& p : *changeList) { + try { + auto &datum = exif[p.first]; + if (datum.setValue(p.second) != 0) { + if (pl_) { + pl_->error(Glib::ustring::compose(M("ERROR_MSG_METADATA_VALUE"), p.first, p.second)); + } + } + } catch (const std::exception& exc) { + if (pl_) { + pl_->error(Glib::ustring::compose(M("ERROR_MSG_METADATA_VALUE"), p.first, p.second)); + } + } + } + + for (auto& p : editableTags) { + Exiv2::ExifKey k(p.first); + const auto pos = exif.findKey(k); + bool edited = false; + Glib::ustring value = ""; + auto lbl = std::make_pair(M("EXIFPANEL_BASIC_GROUP"), k.tagLabel()); + p.second = k.tagLabel(); + if (pos != exif.end() && pos->size()) { + edited = changeList->find(pos->key()) != changeList->end(); + value = escapeHtmlChars(pos->print(&exif)); + } + addTag(p.first, lbl, value, true, edited); + } + struct KeyLt { + KeyLt(): + order_{ + {"Exif.GPSInfo", 0}, + {"Exif.Photo", 1}, + {"Exif.Image", 2} + } + {} + bool operator()(const std::string &a, const std::string &b) const + { + auto p1 = a.find_last_of('.'); + auto p2 = b.find_last_of('.'); + const char *sa = a.c_str(); + const char *sb = b.c_str(); + if (p1 != std::string::npos && p2 != std::string::npos) { + bool hex_a = strncmp(sa+p1+1, "0x", 2) == 0; + bool hex_b = strncmp(sb+p2+1, "0x", 2) == 0; + if (hex_a != hex_b) { + return !hex_a; + } + } + if (p1 != p2 || strncmp(sa, sb, p1) != 0) { + std::string ga(sa, sa+p1); + std::string gb(sb, sb+p2); + int ia = getorder(ga); + int ib = getorder(gb); + if (ia != ib) { + return ia < ib; + } + } + return strcmp(sa, sb) < 0; + } + + int getorder(const std::string &key) const + { + auto it = order_.find(key); + if (it == order_.end()) { + return 1000; + } + return it->second; + } + + std::unordered_map order_; + }; + std::set keyset; + for (const auto& tag : exif) { + const bool editable = ed.find(tag.key()) != ed.end(); + if (!editable) { + keyset.insert(tag.key()); + } + } + for (auto &k : keyset) { + auto &tag = *(exif.findKey(Exiv2::ExifKey(k))); + addTag(tag.key(), to_label(tag), to_value(tag), false, false); + } + } catch (const std::exception& exc) { + return; + } + + for (const auto& p : sel) { + exifTree->get_selection()->select(p); + } + + exifTree->expand_all(); +} + void ExifPanel::exifSelectionChanged () { - Glib::RefPtr selection = exifTree->get_selection(); std::vector sel = selection->get_selected_rows(); - if (sel.size() > 1) { - remove->set_sensitive (1); - keep->set_sensitive (1); - reset->set_sensitive (1); - } else if (sel.size() == 1) { + if (sel.size() >= 1) { Gtk::TreeModel::iterator iter = exifTreeModel->get_iter (sel[0]); - - if (iter->get_value (exifColumns.action) == AC_SYSTEM) { - remove->set_sensitive (0); - keep->set_sensitive (0); - reset->set_sensitive (0); - } else if (!iter->children().empty()) { - remove->set_sensitive (1); - keep->set_sensitive (1); - reset->set_sensitive (1); - } else if (iter->get_value (exifColumns.icon) == delicon) { - remove->set_sensitive (0); - keep->set_sensitive (1); - reset->set_sensitive (1); - } else if (iter->get_value (exifColumns.icon) == keepicon || iter->get_value (exifColumns.icon) == editicon) { - keep->set_sensitive (0); - remove->set_sensitive (1); - reset->set_sensitive (1); + if (iter->get_value(exifColumns.editable)) { + reset->set_sensitive(true); + add->set_sensitive(true); } } else { - remove->set_sensitive (0); - keep->set_sensitive (0); - reset->set_sensitive (0); + reset->set_sensitive(false); + add->set_sensitive(false); } } -void ExifPanel::delIt (Gtk::TreeModel::iterator iter) +void ExifPanel::resetIt(const Gtk::TreeModel::const_iterator& iter) { - if (!iter) { return; } - if (iter->get_value (exifColumns.action) != AC_SYSTEM) { - iter->set_value (exifColumns.icon, delicon); - } - - if (recursiveOp) - for (Gtk::TreeModel::iterator i = iter->children().begin(); i != iter->children().end(); ++i) { - delIt (i); - } + const auto key = iter->get_value(exifColumns.key); + changeList->erase(key); } -void ExifPanel::removePressed () +void ExifPanel::resetPressed() { + cur_active_keys_ = get_active_keys(); - std::vector sel = exifTree->get_selection()->get_selected_rows(); - + auto sel = exifTree->get_selection()->get_selected_rows(); for (size_t i = 0; i < sel.size(); i++) { - delIt (exifTreeModel->get_iter (sel[i])); + resetIt(exifTreeModel->get_iter(sel[i])); } - exifSelectionChanged (); - updateChangeList (); - notifyListener (); + refreshTags(); + + if (!sel.empty()) { + exifTree->get_selection()->select(sel[0]); + } + + notifyListener(); } -void ExifPanel::keepIt (Gtk::TreeModel::iterator iter) +void ExifPanel::resetAllPressed() { - - if (!iter) { - return; - } - - if (iter->get_value (exifColumns.action) != AC_SYSTEM) { - iter->set_value (exifColumns.icon, iter->get_value (exifColumns.edited) ? editicon : keepicon); - } - - if (recursiveOp) - for (Gtk::TreeModel::iterator i = iter->children().begin(); i != iter->children().end(); ++i) { - keepIt (i); - } -} - -void ExifPanel::keepPressed () -{ - - std::vector sel = exifTree->get_selection()->get_selected_rows(); - - for (size_t i = 0; i < sel.size(); i++) { - keepIt (exifTreeModel->get_iter (sel[i])); - } - - exifSelectionChanged (); - updateChangeList (); - notifyListener (); -} - -/*void ExifPanel::resetIt (Gtk::TreeModel::iterator iter) { - - if (!iter) - return; - - if (iter->get_value (exifColumns.action)!=AC_SYSTEM) - iter->set_value (exifColumns.icon, iter->get_value (exifColumns.action) ? keepicon : delicon); - if (iter->get_value (exifColumns.edited)) { - iter->set_value (exifColumns.value, Glib::ustring("") + iter->get_value(exifColumns.orig_value) + ""); - iter->set_value (exifColumns.value_nopango, iter->get_value(exifColumns.orig_value)); - iter->set_value (exifColumns.edited, false); - } - if (iter->get_value (exifColumns.action)==AC_INVALID) - exifTreeModel->erase (iter); - else - if (recursiveOp) - for (Gtk::TreeModel::iterator i=iter->children().begin(); i!=iter->children().end(); i++) - resetIt (i); -}*/ -Gtk::TreeModel::iterator ExifPanel::resetIt (Gtk::TreeModel::iterator iter) -{ - - if (!iter) { - return iter; - } - - if (iter->get_value (exifColumns.action) != AC_SYSTEM) { - iter->set_value (exifColumns.icon, iter->get_value (exifColumns.action) ? keepicon : delicon); - } - - if (iter->get_value (exifColumns.edited)) { - iter->set_value (exifColumns.value, Glib::ustring ("") + iter->get_value (exifColumns.orig_value) + ""); - iter->set_value (exifColumns.value_nopango, iter->get_value (exifColumns.orig_value)); - iter->set_value (exifColumns.edited, false); - } - - if (iter->get_value (exifColumns.action) == AC_INVALID) { - return exifTreeModel->erase (iter); - } else if (recursiveOp) { - Gtk::TreeModel::iterator i = iter->children().begin(); - - while (i && i != iter->children().end()) { - i = resetIt (i); - } - } - - return ++iter; -} -void ExifPanel::resetPressed () -{ - - std::vector sel = exifTree->get_selection()->get_selected_rows(); - - for (size_t i = 0; i < sel.size(); i++) { - resetIt (exifTreeModel->get_iter (sel[i])); - } - - exifSelectionChanged (); - updateChangeList (); - notifyListener (); -} - -void ExifPanel::resetAllPressed () -{ - - setImageData (idata); + auto sel = exifTree->get_selection()->get_selected_rows(); + setImageData(idata); *changeList = *defChangeList; - applyChangeList (); - exifSelectionChanged (); - notifyListener (); -} - -void ExifPanel::addPressed () -{ - - Gtk::Dialog* dialog = new Gtk::Dialog (M ("EXIFPANEL_ADDTAGDLG_TITLE"), * ((Gtk::Window*)get_toplevel()), true); - dialog->add_button ("_OK", Gtk::RESPONSE_OK); - dialog->add_button ("_Cancel", Gtk::RESPONSE_CANCEL); - - Gtk::Box* hb1 = new Gtk::Box (); - Gtk::Box* hb2 = new Gtk::Box (); - - Gtk::Label* tlabel = new Gtk::Label (M ("EXIFPANEL_ADDTAGDLG_SELECTTAG") + ":"); - MyComboBoxText* tcombo = new MyComboBoxText (); - - tcombo->append ("Artist"); - tcombo->append ("Copyright"); - tcombo->append ("ImageDescription"); - tcombo->append ("Exif.UserComment"); - - hb1->pack_start (*tlabel, Gtk::PACK_SHRINK, 4); - hb1->pack_start (*tcombo); - - Gtk::Label* vlabel = new Gtk::Label (M ("EXIFPANEL_ADDTAGDLG_ENTERVALUE") + ":"); - Gtk::Entry* ventry = new Gtk::Entry (); - hb2->pack_start (*vlabel, Gtk::PACK_SHRINK, 4); - hb2->pack_start (*ventry); - - Glib::ustring sel = getSelection (true); - - if (sel.empty()) { - tcombo->set_active_text ("Exif.UserComment"); - } else { - tcombo->set_active_text (sel); - - if (!tcombo->get_active ()) { - tcombo->append (sel); - tcombo->set_active_text (sel); - } - - ventry->set_text (getSelectedValue ()); + cur_active_keys_ = initial_active_keys_; + refreshTags(); + if (!sel.empty()) { + exifTree->get_selection()->select(sel[0]); } + notifyListener(); +} - ventry->set_activates_default (true); - dialog->set_default_response (Gtk::RESPONSE_OK); - dialog->get_content_area()->pack_start (*hb1, Gtk::PACK_SHRINK); - dialog->get_content_area()->pack_start (*hb2, Gtk::PACK_SHRINK, 4); - tlabel->show (); - tcombo->show (); - vlabel->show (); - ventry->show (); - hb1->show (); - hb2->show (); +void ExifPanel::addPressed() +{ + Gtk::TreeModel::Path path; + Gtk::TreeViewColumn *col; - if (dialog->run () == Gtk::RESPONSE_OK) { - editTag (exifTreeModel->children(), tcombo->get_active_text(), ventry->get_text()); - updateChangeList (); - notifyListener (); + exifTree->get_cursor(path, col); + const auto it = exifTreeModel->get_iter(path); + if (it && it->get_value(exifColumns.editable)) { + exifTree->set_cursor(path, *col, true); } - - delete dialog; - delete tlabel; - delete tcombo; - delete vlabel; - delete ventry; - delete hb1; - delete hb2; } -void ExifPanel::showAlltoggled () +void ExifPanel::activateAllPressed() { - options.lastShowAllExif = showAll->get_active(); - setImageData (idata); -} - -bool ExifPanel::rowSeperatorFunc(const Glib::RefPtr& model, const Gtk::TreeModel::iterator& iter) -{ - return iter->get_value(exifColumns.isSeparator); -} - -void ExifPanel::editTag (Gtk::TreeModel::Children root, Glib::ustring name, Glib::ustring value) -{ - - Glib::ustring::size_type dp = name.find_first_of ('.'); - Glib::ustring fseg = name.substr (0, dp); - // look up first segment of the path - Gtk::TreeModel::iterator iter; - - for (iter = root.begin(); iter != root.end(); ++iter) - if (iter->get_value (exifColumns.field_nopango) == fseg) { - break; + disableListener(); + auto root = exifTreeModel->children(); + for (auto &group : root->children()) { + group[exifColumns.active] = true; + for (auto &row : group.children()) { + row[exifColumns.active] = true; } + } + enableListener(); + notifyListener(); +} - if (iter == root.end() && value != "#keep" && value != "#delete") { - iter = exifTreeModel->append (root); - iter->set_value (exifColumns.field_nopango, fseg); - iter->set_value (exifColumns.action, AC_INVALID); - if (dp == Glib::ustring::npos) { - iter->set_value (exifColumns.value, Glib::ustring ("") + value + ""); - iter->set_value (exifColumns.value_nopango, value); - iter->set_value (exifColumns.orig_value, value); - iter->set_value (exifColumns.field, Glib::ustring ("") + fseg + ""); - iter->set_value (exifColumns.edited, true); - iter->set_value (exifColumns.editable, true); - iter->set_value (exifColumns.icon, editicon); +void ExifPanel::activateNonePressed() +{ + disableListener(); + auto root = exifTreeModel->children(); + for (auto &group : root->children()) { + group[exifColumns.active] = false; + for (auto &row : group.children()) { + row[exifColumns.active] = false; + } + } + enableListener(); + notifyListener(); +} + + +void ExifPanel::notifyListener() +{ + if (listener) { + listener->panelChanged(EvExif, M("HISTORY_CHANGED")); + } +} + + +void ExifPanel::onKeyActiveToggled(const Glib::ustring &path) +{ + auto it = exifTreeModel->get_iter(path); + if (it) { + auto row = *it; + bool b = !row[exifColumns.active]; + row[exifColumns.active] = b; + if (row[exifColumns.is_group]) { + for (auto &c : row.children()) { + c[exifColumns.active] = b; + } + } + notifyListener(); + } +} + + +void ExifPanel::setKeyActive(Gtk::CellRenderer *renderer, const Gtk::TreeModel::iterator &it) +{ + auto row = *it; + Gtk::CellRendererToggle *toggle = static_cast(renderer); + if (row[exifColumns.is_group]) { + bool all_true = true, all_false = true; + for (auto &c : row.children()) { + if (c[exifColumns.active]) { + all_false = false; + } else { + all_true = false; + } + } + if (!all_true && !all_false) { + toggle->property_inconsistent() = true; } else { - iter->set_value (exifColumns.value, Glib::ustring (M ("EXIFPANEL_SUBDIRECTORY"))); - iter->set_value (exifColumns.value_nopango, Glib::ustring (M ("EXIFPANEL_SUBDIRECTORY"))); - iter->set_value (exifColumns.field, fseg); - iter->set_value (exifColumns.icon, keepicon); - iter->set_value (exifColumns.orig_value, Glib::ustring (M ("EXIFPANEL_SUBDIRECTORY"))); - } - } - - if (iter == root.end()) { - return; - } - - if (dp == Glib::ustring::npos) { - if (value == "#keep" && iter->get_value (exifColumns.action) != AC_SYSTEM) { - iter->set_value (exifColumns.icon, iter->get_value (exifColumns.edited) ? editicon : keepicon); - } else if (value == "#delete" && iter->get_value (exifColumns.action) != AC_SYSTEM) { - iter->set_value (exifColumns.icon, delicon); - } else { - iter->set_value (exifColumns.value, Glib::ustring ("") + value + ""); - iter->set_value (exifColumns.value_nopango, value); - iter->set_value (exifColumns.edited, true); - iter->set_value (exifColumns.icon, editicon); + toggle->property_inconsistent() = false; + toggle->set_active(all_true); } } else { - editTag (iter->children(), name.substr (dp + 1, Glib::ustring::npos), value); + toggle->property_inconsistent() = false; + toggle->set_active(row[exifColumns.active]); } } -Glib::ustring ExifPanel::getSelectedValue () + +bool ExifPanel::all_keys_active() const { - - Glib::RefPtr selection = exifTree->get_selection(); - std::vector rows = selection->get_selected_rows(); - - if (rows.size() != 1) { - return ""; - } - - Gtk::TreeModel::iterator iter = exifTreeModel->get_iter (rows[0]); - - if (iter) { - return iter->get_value (exifColumns.value_nopango); - } - - return ""; + return (cur_active_keys_.size() == 1 && *(cur_active_keys_.begin()) == "*"); } -Glib::ustring ExifPanel::getSelection (bool onlyeditable) + +std::unordered_set ExifPanel::get_active_keys() const { - - Glib::RefPtr selection = exifTree->get_selection(); - std::vector rows = selection->get_selected_rows(); - - if (rows.size() != 1) { - return ""; - } - - Gtk::TreeModel::iterator iter = exifTreeModel->get_iter (rows[0]); - - Glib::ustring ret; - bool first = true; - bool editable = false; - - while (iter) { - if (first) { - ret = iter->get_value (exifColumns.field_nopango); - editable = iter->get_value (exifColumns.editable); - } else { - ret = iter->get_value (exifColumns.field_nopango) + "." + ret; + bool all_active = true; + std::unordered_set ret; + auto root = exifTreeModel->children(); + for (auto &group : root->children()) { + for (auto &entry : group.children()) { + std::string key = entry[exifColumns.key]; + if (entry[exifColumns.active]) { + ret.insert(key); + } else { + all_active = false; + } } - - iter = iter->parent (); - first = false; } - - if (!editable && onlyeditable) { - return ""; + if (all_active) { + ret.clear(); + ret.insert("*"); } - return ret; } -void ExifPanel::updateChangeList (Gtk::TreeModel::Children root, std::string prefix) +void ExifPanel::onExifTreeClick(GdkEventButton *event) { - - if (!prefix.empty()) { - prefix = prefix + "."; - } - - Gtk::TreeModel::iterator iter; - - for (iter = root.begin(); iter != root.end(); ++iter) { - if (iter->get_value (exifColumns.edited)) { - (*changeList)[ prefix + iter->get_value (exifColumns.field_nopango) ] = iter->get_value (exifColumns.value_nopango); - } else if (iter->get_value (exifColumns.action) == AC_WRITE && iter->get_value (exifColumns.icon) == delicon) { - (*changeList)[ prefix + iter->get_value (exifColumns.field_nopango) ] = "#delete"; - } else if (iter->get_value (exifColumns.action) == AC_DONTWRITE && iter->get_value (exifColumns.icon) == keepicon) { - (*changeList)[ prefix + iter->get_value (exifColumns.field_nopango) ] = "#keep"; - } - - if (iter->get_value (exifColumns.icon) == keepicon) { - updateChangeList (iter->children(), prefix + iter->get_value (exifColumns.field_nopango)); - } - } -} - -void ExifPanel::updateChangeList () -{ - - changeList->clear (); - updateChangeList (exifTreeModel->children(), ""); -} - -void ExifPanel::applyChangeList () -{ - - for (rtengine::procparams::ExifPairs::const_iterator i = changeList->begin(); i != changeList->end(); ++i) { - editTag (exifTreeModel->children(), i->first, i->second); - } -} - -void ExifPanel::row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column) -{ - - Gtk::TreeModel::iterator iter = exifTreeModel->get_iter (path); - - if (iter) { - if (!iter->children().empty()) - if (exifTree->row_expanded (path)) { - exifTree->collapse_row (path); + Gtk::TreeModel::Path pth; + Gtk::TreeViewColumn *col; + int cell_x; + int cell_y; + if (exifTree->get_path_at_pos(event->x, event->y, pth, col, cell_x, cell_y) && col == exifTree->get_column(1) && cell_x <= 22) { + auto it = exifTreeModel->get_iter(pth); + auto row = *it; + if (row[exifColumns.is_group]) { + if (exifTree->row_expanded(pth)) { + exifTree->collapse_row(pth); } else { - exifTree->expand_row (path, false); - } else if (iter->get_value (exifColumns.editable)) { - addPressed (); + exifTree->expand_row(pth, false); + } } } } -void ExifPanel::notifyListener () +void ExifPanel::onExifRowExpanded(const Gtk::TreeModel::iterator &it, const Gtk::TreeModel::Path &path) { - - if (listener) { - listener->panelChanged (EvExif, M ("HISTORY_CHANGED")); + auto row = *it; + if (row[exifColumns.is_group]) { + row[exifColumns.icon] = open_icon_; } } + + +void ExifPanel::onExifRowCollapsed(const Gtk::TreeModel::iterator &it, const Gtk::TreeModel::Path &path) +{ + auto row = *it; + if (row[exifColumns.is_group]) { + row[exifColumns.icon] = closed_icon_; + } +} + + +void ExifPanel::setExifTagValue(Gtk::CellRenderer *renderer, const Gtk::TreeModel::iterator &it) +{ + auto row = *it; + Gtk::CellRendererText *txt = static_cast(renderer); + txt->property_editable() = row[exifColumns.editable]; + txt->property_markup() = row[exifColumns.value]; +} + + +namespace { + + +Glib::ustring to_fraction(const Glib::ustring &s) +{ + auto i = s.find("."); + if (i != Glib::ustring::npos) { + return s.substr(0, i) + s.substr(i+1) + "/1" + Glib::ustring(s.size() - i - 1, '0'); + } + return s; +} + +typedef Glib::ustring (*validator_func)(const Glib::ustring &); + +Glib::ustring get_fnumber(const Glib::ustring &val) +{ + Glib::MatchInfo m; + auto re = Glib::Regex::create("f? *([0-9.]+) *", Glib::REGEX_CASELESS); + if (re->match(val, m)) { + auto s = m.fetch(1); + return to_fraction(s); + } + return val; +} + +Glib::ustring get_shutterspeed(const Glib::ustring &val) +{ + Glib::MatchInfo m; + auto re = Glib::Regex::create(" *([0-9/]+) *s? *", Glib::REGEX_CASELESS); + if (re->match(val, m)) { + auto s = m.fetch(1); + return s; + } + return val; +} + +Glib::ustring get_focallen(const Glib::ustring &val) +{ + Glib::MatchInfo m; + auto re = Glib::Regex::create(" *([0-9.]+) *(mm)? *", Glib::REGEX_CASELESS); + if (re->match(val, m)) { + auto s = m.fetch(1); + return to_fraction(s); + } + return val; +} + +Glib::ustring get_expcomp(const Glib::ustring &val) +{ + Glib::MatchInfo m; + auto re = Glib::Regex::create(" *(-?[0-9.]+) *(EV)? *", Glib::REGEX_CASELESS); + if (re->match(val, m)) { + auto s = m.fetch(1); + return to_fraction(s); + } + return val; +} + +std::unordered_map validators = { + {"Exif.Photo.FNumber", get_fnumber}, + {"Exif.Photo.ExposureTime", get_shutterspeed}, + {"Exif.Photo.FocalLength", get_focallen}, + {"Exif.Photo.ExposureBiasValue", get_expcomp} +}; + +} // namespace + + +void ExifPanel::onEditExifTagValue(const Glib::ustring &path, const Glib::ustring &val) +{ + auto it = exifTreeModel->get_iter(path); + auto row = *it; + std::string key = row[exifColumns.key]; + auto value = val; + + bool good = true; + try { + Exiv2::ExifData data; + auto &datum = data[key]; + auto it = validators.find(key); + if (it != validators.end()) { + auto v = it->second(value); + if (datum.setValue(v) == 0) { + value = v; + } + } + if (datum.setValue(value) != 0) { + if ((datum.typeId() == Exiv2::signedRational || datum.typeId() == Exiv2::unsignedRational) && datum.setValue(value + "/1") == 0) { + value += "/1"; + } else { + good = false; + } + } + } catch (std::exception &exc) { + good = false; + } + + if (good) { + (*changeList)[key] = value; + if (!all_keys_active()) { + cur_active_keys_.insert(key); + } + refreshTags(); + + it = exifTreeModel->get_iter(path); + exifTree->get_selection()->select(it); + notifyListener(); + } else if (pl_) { + pl_->error(Glib::ustring::compose(M("ERROR_MSG_METADATA_VALUE"), key, value)); + } +} + + +void ExifPanel::setProgressListener(rtengine::ProgressListener *pl) +{ + pl_ = pl; +} diff --git a/rtgui/exifpanel.h b/rtgui/exifpanel.h index 4c28af289..bc8d6229f 100644 --- a/rtgui/exifpanel.h +++ b/rtgui/exifpanel.h @@ -21,9 +21,21 @@ #include #include +#include #include "toolpanel.h" -#include "../rtexif/rtexif.h" + +namespace rtengine +{ + +namespace procparams +{ + +class ExifPairs; + +} + +} class ExifPanel final : public Gtk::Box, @@ -34,72 +46,83 @@ private: const rtengine::FramesMetaData* idata; const std::unique_ptr changeList; const std::unique_ptr defChangeList; - bool recursiveOp; class ExifColumns : public Gtk::TreeModelColumnRecord { public: - Gtk::TreeModelColumn > icon; - Gtk::TreeModelColumn field; - Gtk::TreeModelColumn field_nopango; + // Gtk::TreeModelColumn> expander_icon; + Gtk::TreeModelColumn> icon; + Gtk::TreeModelColumn key; + Gtk::TreeModelColumn label; Gtk::TreeModelColumn value; Gtk::TreeModelColumn value_nopango; - Gtk::TreeModelColumn orig_value; - Gtk::TreeModelColumn action; Gtk::TreeModelColumn editable; Gtk::TreeModelColumn edited; - Gtk::TreeModelColumn isSeparator; + Gtk::TreeModelColumn active; + Gtk::TreeModelColumn is_group; ExifColumns() { - add (field); - add (value); - add (icon); - add (action); - add (edited); - add (field_nopango); - add (value_nopango); - add (editable); - add (orig_value); - add (isSeparator); + add(key); + add(label); + add(value); + add(icon); + add(edited); + add(value_nopango); + add(editable); + add(active); + add(is_group); + // add(expander_icon); } }; - Glib::RefPtr delicon; - Glib::RefPtr keepicon; + //Glib::RefPtr keepicon; Glib::RefPtr editicon; + Glib::RefPtr open_icon_; + Glib::RefPtr closed_icon_; ExifColumns exifColumns; Gtk::TreeView* exifTree; Gtk::ScrolledWindow* scrolledWindow; Glib::RefPtr exifTreeModel; - Gtk::Button* remove; - Gtk::Button* keep; Gtk::Button* add; Gtk::Button* reset; Gtk::Button* resetAll; - Gtk::ToggleButton* showAll; + Gtk::Button *activate_all_; + Gtk::Button *activate_none_; - Gtk::TreeModel::Children addTag (const Gtk::TreeModel::Children& root, Glib::ustring field, Glib::ustring value, rtexif::ActionCode action, bool editable); - void editTag (Gtk::TreeModel::Children root, Glib::ustring name, Glib::ustring value); - void updateChangeList (Gtk::TreeModel::Children root, std::string prefix); - void addDirectory (const rtexif::TagDirectory* dir, Gtk::TreeModel::Children root, bool checkForSeparator = false); - Gtk::TreeModel::Children addSeparator(); - Glib::ustring getSelection (bool onlyifeditable = false); - Glib::ustring getSelectedValue(); - void updateChangeList(); - void applyChangeList(); - void keepIt (Gtk::TreeModel::iterator iter); - void delIt (Gtk::TreeModel::iterator iter); - Gtk::TreeModel::iterator resetIt (Gtk::TreeModel::iterator iter); - void removePressed(); - void keepPressed(); + Gtk::CellRendererToggle exif_active_renderer_; + Gtk::TreeView::Column exif_active_column_; + + std::vector> editableTags; + + std::unordered_set initial_active_keys_; + std::unordered_set cur_active_keys_; + + rtengine::ProgressListener *pl_; + + void addTag(const std::string &key, const std::pair &label, const Glib::ustring &value, bool editable, bool edited); + void refreshTags(); + void resetIt(const Gtk::TreeModel::const_iterator& iter); void resetPressed(); void resetAllPressed(); void addPressed(); - void showAlltoggled(); - bool rowSeperatorFunc(const Glib::RefPtr& model, const Gtk::TreeModel::iterator& iter); + void activateAllPressed(); + void activateNonePressed(); + void setKeyActive(Gtk::CellRenderer *renderer, const Gtk::TreeModel::iterator &it); + void onKeyActiveToggled(const Glib::ustring &path); + + bool all_keys_active() const; + std::unordered_set get_active_keys() const; + + void onExifTreeClick(GdkEventButton *event); + void onExifRowExpanded(const Gtk::TreeModel::iterator &it, const Gtk::TreeModel::Path &path); + void onExifRowCollapsed(const Gtk::TreeModel::iterator &it, const Gtk::TreeModel::Path &path); + + void setExifTagValue(Gtk::CellRenderer *renderer, const Gtk::TreeModel::iterator &it); + void onEditExifTagValue(const Glib::ustring &path, const Glib::ustring &value); + public: ExifPanel (); ~ExifPanel() override; @@ -111,8 +134,9 @@ public: void setImageData (const rtengine::FramesMetaData* id); void exifSelectionChanged(); - void row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column); + // void row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column); void notifyListener(); + void setProgressListener(rtengine::ProgressListener *pl); }; diff --git a/rtgui/externaleditorpreferences.cc b/rtgui/externaleditorpreferences.cc index 5d9b45c5d..b29666800 100644 --- a/rtgui/externaleditorpreferences.cc +++ b/rtgui/externaleditorpreferences.cc @@ -37,7 +37,9 @@ ExternalEditorPreferences::ExternalEditorPreferences(): list_view = Gtk::manage(new Gtk::TreeView()); list_view->set_model(list_model); list_view->append_column(*Gtk::manage(makeAppColumn())); +#ifndef __APPLE__ list_view->append_column(*Gtk::manage(makeNativeCommandColumn())); +#endif list_view->append_column(*Gtk::manage(makeCommandColumn())); for (auto &&column : list_view->get_columns()) { @@ -59,11 +61,18 @@ ExternalEditorPreferences::ExternalEditorPreferences(): button_remove = Gtk::manage(new Gtk::Button()); button_add->set_image(*add_image); button_remove->set_image(*remove_image); - button_app_chooser = Gtk::manage(new Gtk::Button(M("PREFERENCES_EXTERNALEDITOR_CHANGE"))); + button_app_chooser = +#ifdef __APPLE__ + nullptr; +#else + Gtk::manage(new Gtk::Button(M("PREFERENCES_EXTERNALEDITOR_CHANGE"))); +#endif button_file_chooser = Gtk::manage(new Gtk::Button(M("PREFERENCES_EXTERNALEDITOR_CHANGE_FILE"))); - button_app_chooser->signal_pressed().connect(sigc::mem_fun( - *this, &ExternalEditorPreferences::openAppChooserDialog)); + if (button_app_chooser) { + button_app_chooser->signal_pressed().connect(sigc::mem_fun( + *this, &ExternalEditorPreferences::openAppChooserDialog)); + } button_add->signal_pressed().connect(sigc::mem_fun( *this, &ExternalEditorPreferences::addEditor)); button_file_chooser->signal_pressed().connect(sigc::mem_fun( @@ -77,7 +86,9 @@ ExternalEditorPreferences::ExternalEditorPreferences(): // Toolbar. toolbar.set_halign(Gtk::Align::ALIGN_END); - toolbar.add(*button_app_chooser); + if (button_app_chooser) { + toolbar.add(*button_app_chooser); + } toolbar.add(*button_file_chooser); toolbar.add(*button_add); toolbar.add(*button_remove); @@ -156,6 +167,9 @@ void ExternalEditorPreferences::addEditor() } row[model_columns.name] = "-"; +#ifdef __APPLE__ + row[model_columns.native_command] = true; +#endif list_view->get_selection()->select(row); } @@ -244,9 +258,14 @@ void ExternalEditorPreferences::onFileChooserDialogResponse( for (const auto &selected : selection) { auto row = *list_model->get_iter(selected); row[model_columns.icon] = Glib::RefPtr(nullptr); - row[model_columns.native_command] = false; + row[model_columns.native_command] = +#ifdef __APPLE__ + true; +#else + false; +#endif row[model_columns.command] = -#ifdef WIN32 +#ifdef _WIN32 '"' + dialog->get_filename() + '"'; #else Glib::shell_quote(dialog->get_filename()); @@ -295,7 +314,7 @@ void ExternalEditorPreferences::openFileChooserDialog() const auto exe_filter = Gtk::FileFilter::create(); exe_filter->set_name(M("FILECHOOSER_FILTER_EXECUTABLE")); exe_filter->add_custom(Gtk::FILE_FILTER_MIME_TYPE, [](const Gtk::FileFilter::Info &info) { -#ifdef WIN32 +#ifdef _WIN32 return info.mime_type == "application/x-msdownload"; #else return Gio::content_type_can_be_executable(info.mime_type); @@ -360,7 +379,9 @@ void ExternalEditorPreferences::setAppName( void ExternalEditorPreferences::updateToolbarSensitivity() { bool selected = list_view->get_selection()->count_selected_rows(); - button_app_chooser->set_sensitive(selected); + if (button_app_chooser) { + button_app_chooser->set_sensitive(selected); + } button_file_chooser->set_sensitive(selected); button_remove->set_sensitive(selected); } diff --git a/rtgui/extprog.cc b/rtgui/extprog.cc index ea1800638..dc3cb61b4 100644 --- a/rtgui/extprog.cc +++ b/rtgui/extprog.cc @@ -21,7 +21,7 @@ #include #include -#ifdef WIN32 +#ifdef _WIN32 #include #include #endif @@ -79,7 +79,7 @@ void ExtProgStore::init () actions.clear (); -#ifdef WIN32 +#ifdef _WIN32 // Please do not add obscure little tools here, only widely used programs. // They should also have a proper setup program and therefore a standard path. @@ -104,7 +104,7 @@ void ExtProgStore::init () #endif } -#ifdef WIN32 +#ifdef _WIN32 bool ExtProgStore::searchProgram (const Glib::ustring& name, const Glib::ustring& exePath, const Glib::ustring& exePath86, @@ -240,7 +240,7 @@ bool ExtProgStore::spawnCommandSync (const Glib::ustring& cmd) bool ExtProgStore::openInGimp (const Glib::ustring& fileName) { -#if defined WIN32 +#if defined _WIN32 auto executable = Glib::build_filename (options.gimpDir, "bin", "gimp-win-remote"); auto success = ShellExecute( NULL, "open", executable.c_str(), fileName.c_str(), NULL, SW_SHOWNORMAL ); @@ -260,7 +260,7 @@ bool ExtProgStore::openInGimp (const Glib::ustring& fileName) #endif -#ifdef WIN32 +#ifdef _WIN32 if (reinterpret_cast(success) > 32) { return true; } @@ -271,7 +271,7 @@ bool ExtProgStore::openInGimp (const Glib::ustring& fileName) #endif -#ifdef WIN32 +#ifdef _WIN32 for (auto ver = 12; ver >= 0; --ver) { @@ -300,7 +300,7 @@ bool ExtProgStore::openInGimp (const Glib::ustring& fileName) bool ExtProgStore::openInPhotoshop (const Glib::ustring& fileName) { -#if defined WIN32 +#if defined _WIN32 const auto executable = Glib::build_filename(options.psDir, "Photoshop.exe"); const auto cmdLine = Glib::ustring("\"") + executable + Glib::ustring("\" \"") + fileName + Glib::ustring("\""); @@ -324,7 +324,7 @@ bool ExtProgStore::openInCustomEditor (const Glib::ustring& fileName, const Glib command = &(options.customEditorProg); } -#if defined WIN32 +#if defined _WIN32 const auto cmdLine = Glib::ustring("\"") + *command + Glib::ustring("\""); auto success = ShellExecute( NULL, "open", cmdLine.c_str(), ('"' + fileName + '"').c_str(), NULL, SW_SHOWNORMAL ); @@ -344,13 +344,13 @@ bool ExtProgStore::openInCustomEditor (const Glib::ustring& fileName, const Glib } -bool ExtProgStore::openInExternalEditor(const Glib::ustring &fileName, const Glib::RefPtr &editorInfo, bool nativeCommand) +bool ExtProgStore::openInExternalEditor(const Glib::ustring &fileName, const EditorInfo &editorInfo) { - if (nativeCommand) { + if (editorInfo.isNativeCommand) { if (rtengine::settings->verbose) { std::cout << "Launching external editor as native command." << std::endl; } - const Glib::ustring command = editorInfo->get_commandline(); + const Glib::ustring command = editorInfo.commandline; return openInCustomEditor(fileName, &command); } @@ -361,7 +361,10 @@ bool ExtProgStore::openInExternalEditor(const Glib::ustring &fileName, const Gli bool success = false; try { - success = editorInfo->launch(Gio::File::create_for_path(fileName)); + Glib::RefPtr appInfo = + Gio::AppInfo::create_from_commandline( + editorInfo.commandline, editorInfo.name, Gio::APP_INFO_CREATE_NONE); + success = appInfo->launch(Gio::File::create_for_path(fileName)); } catch (const Glib::Error &e) { std::cerr << "Error launching external editor.\n" @@ -377,8 +380,8 @@ bool ExtProgStore::openInExternalEditor(const Glib::ustring &fileName, const Gli if (rtengine::settings->verbose) { std::cout << "Unable to launch external editor with Gio. Trying custom launcher." << std::endl; } - Glib::ustring command = editorInfo->get_commandline(); -#if defined WIN32 + Glib::ustring command = editorInfo.commandline; +#if defined _WIN32 if (command.length() > 2 && command[0] == '"' && command[command.length() - 1] == '"') { command = command.substr(1, command.length() - 2); } diff --git a/rtgui/extprog.h b/rtgui/extprog.h index 5336c4703..ef32117c7 100644 --- a/rtgui/extprog.h +++ b/rtgui/extprog.h @@ -42,13 +42,20 @@ struct ExtProgAction bool execute (const std::vector& fileNames) const; }; +struct EditorInfo +{ + Glib::ustring name; + Glib::ustring commandline; + bool isNativeCommand; +}; + // Stores all external programs that could be called by the user class ExtProgStore { MyMutex mtx; // covers actions std::vector actions; -#ifdef WIN32 +#ifdef _WIN32 bool searchProgram (const Glib::ustring& name, const Glib::ustring& exePath, const Glib::ustring& exePath86, @@ -70,7 +77,7 @@ public: static bool openInGimp (const Glib::ustring& fileName); static bool openInPhotoshop (const Glib::ustring& fileName); static bool openInCustomEditor (const Glib::ustring& fileName, const Glib::ustring* command = nullptr); - static bool openInExternalEditor(const Glib::ustring &fileName, const Glib::RefPtr &editorInfo, bool nativeCommand); + static bool openInExternalEditor(const Glib::ustring &fileName, const EditorInfo &editorInfo); }; #define extProgStore ExtProgStore::getInstance() diff --git a/rtgui/filebrowser.cc b/rtgui/filebrowser.cc index ac4a27dec..b33ebcee4 100644 --- a/rtgui/filebrowser.cc +++ b/rtgui/filebrowser.cc @@ -272,7 +272,7 @@ FileBrowser::FileBrowser () : /*********************** * external programs * *********************/ -#if defined(WIN32) +#if defined(_WIN32) Gtk::manage(miOpenDefaultViewer = new Gtk::MenuItem (M("FILEBROWSER_OPENDEFAULTVIEWER"))); #endif @@ -296,7 +296,7 @@ FileBrowser::FileBrowser () : p++; Gtk::Menu* submenuExtProg = Gtk::manage (new Gtk::Menu()); -#ifdef WIN32 +#ifdef _WIN32 if (miOpenDefaultViewer) { submenuExtProg->attach (*miOpenDefaultViewer, 0, 1, p, p + 1); p++; @@ -310,7 +310,7 @@ FileBrowser::FileBrowser () : submenuExtProg->show_all (); menuExtProg->set_submenu (*submenuExtProg); } else { -#ifdef WIN32 +#ifdef _WIN32 if (miOpenDefaultViewer) { pmenu->attach (*miOpenDefaultViewer, 0, 1, p, p + 1); p++; @@ -482,7 +482,7 @@ FileBrowser::FileBrowser () : amiExtProg[i]->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), amiExtProg[i])); } -#ifdef WIN32 +#ifdef _WIN32 if (miOpenDefaultViewer) { miOpenDefaultViewer->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), miOpenDefaultViewer)); } @@ -1046,7 +1046,7 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m) tbl->clearFromCacheRequested (mselected, true); //queue_draw (); -#ifdef WIN32 +#ifdef _WIN32 } else if (miOpenDefaultViewer && m == miOpenDefaultViewer) { openDefaultViewer(1); #endif @@ -1157,7 +1157,7 @@ void FileBrowser::partPasteProfile () } } -#ifdef WIN32 +#ifdef _WIN32 void FileBrowser::openDefaultViewer (int destination) { bool success = true; @@ -1254,7 +1254,7 @@ bool FileBrowser::keyPressed (GdkEventKey* event) } openRequested(mselected); -#ifdef WIN32 +#ifdef _WIN32 } else if (event->keyval == GDK_KEY_F5) { int dest = 1; @@ -1276,7 +1276,7 @@ bool FileBrowser::keyPressed (GdkEventKey* event) } #ifdef __WIN32__ - else if (shift && !ctrl && !alt && !altgr) { // rank + else if (!shift && !ctrl && !alt && !altgr) { // rank switch(event->hardware_keycode) { case 0x30: // 0-key requestRanking (0); @@ -1331,7 +1331,7 @@ bool FileBrowser::keyPressed (GdkEventKey* event) } #else - else if (shift && !ctrl && !alt) { // rank + else if (!shift && !ctrl && !alt) { // rank switch(event->hardware_keycode) { case 0x13: requestRanking (0); diff --git a/rtgui/filebrowser.h b/rtgui/filebrowser.h index 0df1cf9eb..e8935b5c3 100644 --- a/rtgui/filebrowser.h +++ b/rtgui/filebrowser.h @@ -203,7 +203,7 @@ public: void partPasteProfile (); void openNextPreviousEditorImage(const Glib::ustring& fname, eRTNav eNextPrevious); -#ifdef WIN32 +#ifdef _WIN32 void openDefaultViewer (int destination); #endif diff --git a/rtgui/filebrowserentry.cc b/rtgui/filebrowserentry.cc index b89fe340d..6a4bd38b4 100644 --- a/rtgui/filebrowserentry.cc +++ b/rtgui/filebrowserentry.cc @@ -37,7 +37,6 @@ //extern Glib::Threads::Thread* mainThread; -bool FileBrowserEntry::iconsLoaded(false); Glib::RefPtr FileBrowserEntry::editedIcon; Glib::RefPtr FileBrowserEntry::recentlySavedIcon; Glib::RefPtr FileBrowserEntry::enqueuedIcon; @@ -58,15 +57,6 @@ FileBrowserEntry::FileBrowserEntry (Thumbnail* thm, const Glib::ustring& fname) scale = 1; - if (!iconsLoaded) { - editedIcon = RTImage::createPixbufFromFile ("tick-small.png"); - recentlySavedIcon = RTImage::createPixbufFromFile ("save-small.png"); - enqueuedIcon = RTImage::createPixbufFromFile ("gears-small.png"); - hdr = RTImage::createPixbufFromFile ("filetype-hdr.png"); - ps = RTImage::createPixbufFromFile ("filetype-ps.png"); - iconsLoaded = true; - } - thumbnail->addThumbnailListener (this); } @@ -90,14 +80,28 @@ FileBrowserEntry::~FileBrowserEntry () } } -void FileBrowserEntry::refreshThumbnailImage () +void FileBrowserEntry::init () +{ + editedIcon = RTImage::createPixbufFromFile ("tick-small.png"); + recentlySavedIcon = RTImage::createPixbufFromFile ("save-small.png"); + enqueuedIcon = RTImage::createPixbufFromFile ("gears-small.png"); + hdr = RTImage::createPixbufFromFile ("filetype-hdr.png"); + ps = RTImage::createPixbufFromFile ("filetype-ps.png"); +} + +void FileBrowserEntry::refreshThumbnailImage(bool upgradeHint) { if (!thumbnail) { return; } - thumbImageUpdater->add (this, &updatepriority, false, this); + thumbImageUpdater->add (this, &updatepriority, upgradeHint, upgradeHint, this); +} + +void FileBrowserEntry::refreshThumbnailImage () +{ + refreshThumbnailImage(false); } void FileBrowserEntry::refreshQuickThumbnailImage () @@ -109,7 +113,7 @@ void FileBrowserEntry::refreshQuickThumbnailImage () // Only make a (slow) processed preview if the picture has been edited at all bool upgrade_to_processed = (!options.internalThumbIfUntouched || thumbnail->isPParamsValid()); - thumbImageUpdater->add(this, &updatepriority, upgrade_to_processed, this); + thumbImageUpdater->add(this, &updatepriority, upgrade_to_processed, false, this); } void FileBrowserEntry::calcThumbnailSize () @@ -203,13 +207,13 @@ FileThumbnailButtonSet* FileBrowserEntry::getThumbButtonSet () return (static_cast(buttonSet)); } -void FileBrowserEntry::procParamsChanged (Thumbnail* thm, int whoChangedIt) +void FileBrowserEntry::procParamsChanged (Thumbnail* thm, int whoChangedIt, bool upgradeHint) { if ( thumbnail->isQuick() ) { refreshQuickThumbnailImage (); } else { - refreshThumbnailImage (); + refreshThumbnailImage(upgradeHint); } } diff --git a/rtgui/filebrowserentry.h b/rtgui/filebrowserentry.h index 67b953514..c560efc16 100644 --- a/rtgui/filebrowserentry.h +++ b/rtgui/filebrowserentry.h @@ -50,7 +50,6 @@ class FileBrowserEntry final : public ThumbBrowserEntryBase, { double scale; - static bool iconsLoaded; bool wasInside; ImageAreaToolListener* iatlistener; int press_x, press_y, action_x, action_y; @@ -69,6 +68,7 @@ class FileBrowserEntry final : public ThumbBrowserEntryBase, void updateCursor (int x, int y); void drawStraightenGuide (Cairo::RefPtr c); void customBackBufferUpdate (Cairo::RefPtr c) override; + void refreshThumbnailImage(bool upgradeHint); public: @@ -80,6 +80,7 @@ public: FileBrowserEntry (Thumbnail* thm, const Glib::ustring& fname); ~FileBrowserEntry () override; + static void init (); void draw (Cairo::RefPtr cc) override; void setImageAreaToolListener (ImageAreaToolListener* l) @@ -98,7 +99,7 @@ public: void getIconSize (int& w, int& h) const override; // thumbnaillistener interface - void procParamsChanged (Thumbnail* thm, int whoChangedIt) override; + void procParamsChanged (Thumbnail* thm, int whoChangedIt, bool upgradeHint) override; // thumbimageupdatelistener interface void updateImage(rtengine::IImage8* img, double scale, const rtengine::procparams::CropParams& cropParams) override; void _updateImage(rtengine::IImage8* img, double scale, const rtengine::procparams::CropParams& cropParams); // inside gtk thread diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index d6c440570..bf8125822 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -1334,11 +1334,11 @@ bool FileCatalog::isInTabMode() const void FileCatalog::categoryButtonToggled (Gtk::ToggleButton* b, bool isMouseClick) { - //was control key pressed - bool control_down = modifierKey & GDK_CONTROL_MASK; + //was control key pressed (ignored if was not mouse click) + bool control_down = modifierKey & GDK_CONTROL_MASK && isMouseClick; - //was shift key pressed - bool shift_down = modifierKey & GDK_SHIFT_MASK; + //was shift key pressed (ignored if was not mouse click) + bool shift_down = modifierKey & GDK_SHIFT_MASK && isMouseClick; // The event is process here, we can clear modifierKey now, it'll be set again on the next even modifierKey = 0; @@ -2244,7 +2244,7 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) #ifdef __WIN32__ - if (!alt && !shift && !altgr) { // shift is reserved for ranking + if (!alt && shift && !altgr) { switch(event->hardware_keycode) { case 0x30: categoryButtonToggled(bUnRanked, false); @@ -2332,7 +2332,7 @@ bool FileCatalog::handleShortcutKey (GdkEventKey* event) #else - if (!alt && !shift && !altgr) { // shift is reserved for ranking + if (!alt && shift && !altgr) { switch(event->hardware_keycode) { case 0x13: categoryButtonToggled(bUnRanked, false); diff --git a/rtgui/filepanel.cc b/rtgui/filepanel.cc index adcd6985d..1032b45e1 100644 --- a/rtgui/filepanel.cc +++ b/rtgui/filepanel.cc @@ -26,7 +26,7 @@ #include "placesbrowser.h" #include "thumbnail.h" -#ifdef WIN32 +#ifdef _WIN32 #include "windows.h" #endif @@ -302,7 +302,7 @@ bool FilePanel::imageLoaded( Thumbnail* thm, ProgressConnector 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 without while increasing size GUI system crash in multieditor @@ -312,7 +312,7 @@ bool FilePanel::imageLoaded( Thumbnail* thm, ProgressConnectoraddEditorPanel (epanel, pl->thm->getFileName()); } -#ifdef WIN32 +#ifdef _WIN32 else { Glib::ustring msg_ = Glib::ustring("") + M("MAIN_MSG_CANNOTLOAD") + " \"" + escapeHtmlChars(thm->getFileName()) + "\" .\n" + M("MAIN_MSG_TOOMANYOPENEDITORS") + ""; Gtk::MessageDialog msgd (*parent, msg_, true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); @@ -339,7 +339,7 @@ bool FilePanel::imageLoaded( Thumbnail* thm, ProgressConnectorpc; diff --git a/rtgui/filmnegative.cc b/rtgui/filmnegative.cc index 4f1ae9311..e9c9f4d4c 100644 --- a/rtgui/filmnegative.cc +++ b/rtgui/filmnegative.cc @@ -209,42 +209,18 @@ FilmNegative::FilmNegative() : greenExp(createExponentAdjuster(this, M("TP_FILMNEGATIVE_GREEN"), 0.3, 4, 0.01, 1.5)), // master exponent (green channel) redRatio(createExponentAdjuster(this, M("TP_FILMNEGATIVE_RED"), 0.3, 5, 0.01, (2.04 / 1.5))), // ratio of red exponent to master exponent blueRatio(createExponentAdjuster(this, M("TP_FILMNEGATIVE_BLUE"), 0.3, 5, 0.01, (1.29 / 1.5))), // ratio of blue exponent to master exponent - spotButton(Gtk::manage(new Gtk::ToggleButton(M("TP_FILMNEGATIVE_PICK")))), + picker(DEFAULT_SPOT_WIDTH, M("TP_FILMNEGATIVE_PICK"), M("TP_FILMNEGATIVE_GUESS_TOOLTIP"), M("TP_FILMNEGATIVE_PICK_SIZE")), refInputLabel(Gtk::manage(new Gtk::Label(Glib::ustring::compose(M("TP_FILMNEGATIVE_REF_LABEL"), "- - -")))), - refSpotButton(Gtk::manage(new Gtk::ToggleButton(M("TP_FILMNEGATIVE_REF_PICK")))), + refPicker(DEFAULT_SPOT_WIDTH, M("TP_FILMNEGATIVE_REF_PICK"), M("TP_FILMNEGATIVE_REF_TOOLTIP"), M("TP_FILMNEGATIVE_REF_SIZE")), + activePicker(&picker), outputLevel(createLevelAdjuster(this, M("TP_FILMNEGATIVE_OUT_LEVEL"))), // ref level greenBalance(createBalanceAdjuster(this, M("TP_FILMNEGATIVE_GREENBALANCE"), -3.0, 3.0, 0.0, "circle-magenta-small.png", "circle-green-small.png")), // green balance blueBalance(createBalanceAdjuster(this, M("TP_FILMNEGATIVE_BLUEBALANCE"), -3.0, 3.0, 0.0, "circle-blue-small.png", "circle-yellow-small.png")) // blue balance { - setExpandAlignProperties(spotButton, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - spotButton->get_style_context()->add_class("independent"); - spotButton->set_tooltip_text(M("TP_FILMNEGATIVE_GUESS_TOOLTIP")); - spotButton->set_image(*Gtk::manage(new RTImage("color-picker-small.png"))); - - refSpotButton->set_tooltip_text(M("TP_FILMNEGATIVE_REF_TOOLTIP")); - setExpandAlignProperties(refInputLabel, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); // refInputLabel->set_justify(Gtk::Justification::JUSTIFY_CENTER); // refInputLabel->set_line_wrap(true); - // TODO make spot size configurable ? - - // Gtk::Label* slab = Gtk::manage (new Gtk::Label (M("TP_WBALANCE_SIZE"))); - // setExpandAlignProperties(slab, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - - // Gtk::Grid* wbsizehelper = Gtk::manage(new Gtk::Grid()); - // wbsizehelper->set_name("WB-Size-Helper"); - // setExpandAlignProperties(wbsizehelper, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - - // spotsize = Gtk::manage (new MyComboBoxText ()); - // setExpandAlignProperties(spotsize, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - // spotsize->append ("2"); - // spotsize->set_active(0); - // spotsize->append ("4"); - - // spotgrid->attach(*spotButton, 0, 1, 1, 1); - // spotgrid->attach (*slab, 1, 0, 1, 1); - // spotgrid->attach (*wbsizehelper, 2, 0, 1, 1); colorSpace->append(M("TP_FILMNEGATIVE_COLORSPACE_INPUT")); colorSpace->append(M("TP_FILMNEGATIVE_COLORSPACE_WORKING")); @@ -265,9 +241,7 @@ FilmNegative::FilmNegative() : pack_start(*greenExp, Gtk::PACK_SHRINK, 0); pack_start(*redRatio, Gtk::PACK_SHRINK, 0); pack_start(*blueRatio, Gtk::PACK_SHRINK, 0); - pack_start(*spotButton, Gtk::PACK_SHRINK, 0); - -// pack_start(*oldMethod, Gtk::PACK_SHRINK, 0); + pack_start(picker, Gtk::PACK_SHRINK, 0); Gtk::Separator* const sep = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL)); sep->get_style_context()->add_class("grid-row-separator"); @@ -283,22 +257,21 @@ FilmNegative::FilmNegative() : pack_start(*blueBalance, Gtk::PACK_SHRINK, 0); pack_start(*greenBalance, Gtk::PACK_SHRINK, 0); - pack_start(*refSpotButton, Gtk::PACK_SHRINK, 0); + pack_start(refPicker, Gtk::PACK_SHRINK, 0); - spotButton->signal_toggled().connect(sigc::mem_fun(*this, &FilmNegative::editToggled)); - // spotsize->signal_changed().connect( sigc::mem_fun(*this, &WhiteBalance::spotSizeChanged) ); - - refSpotButton->signal_toggled().connect(sigc::mem_fun(*this, &FilmNegative::refSpotToggled)); + picker.add_button_toggled_event(*this, &FilmNegative::editToggled); + refPicker.add_button_toggled_event(*this, &FilmNegative::refSpotToggled); // Editing geometry; create the spot rectangle - Rectangle* const spotRect = new Rectangle(); + // TODO: Change behaviour to match that of the white balance spot picker (rectangle disappears behind right toolbar) + EditRectangle* const spotRect = new EditRectangle(); spotRect->filled = false; visibleGeometry.push_back(spotRect); // Stick a dummy rectangle over the whole image in mouseOverGeometry. // This is to make sure the getCursor() call is fired everywhere. - Rectangle* const imgRect = new Rectangle(); + EditRectangle* const imgRect = new EditRectangle(); imgRect->filled = true; mouseOverGeometry.push_back(imgRect); @@ -455,8 +428,8 @@ void FilmNegative::setBatchMode(bool batchMode) ToolPanel::setBatchMode(batchMode); if (batchMode) { - removeIfThere(this, spotButton, false); - removeIfThere(this, refSpotButton, false); + picker.remove_if_there(this, false); + refPicker.remove_if_there(this, false); colorSpace->append(M("GENERAL_UNCHANGED")); colorSpace->set_active_text(M("GENERAL_UNCHANGED")); redRatio->showEditedCB(); @@ -564,8 +537,8 @@ CursorShape FilmNegative::getCursor(int objectID, int xPos, int yPos) const bool FilmNegative::mouseOver(int modifierKey) { EditDataProvider* const provider = getEditProvider(); - Rectangle* const spotRect = static_cast(visibleGeometry.at(0)); - spotRect->setXYWH(provider->posImage.x - 16, provider->posImage.y - 16, 32, 32); + EditRectangle* const spotRect = static_cast(visibleGeometry.at(0)); + spotRect->setXYWH(provider->posImage.x - activePicker->get_spot_half_width(), provider->posImage.y - activePicker->get_spot_half_width() ,activePicker->get_spot_full_width(), activePicker->get_spot_full_width()); return true; } @@ -577,7 +550,7 @@ bool FilmNegative::button1Pressed(int modifierKey) EditSubscriber::action = EditSubscriber::Action::NONE; if (listener) { - if (spotButton->get_active()) { + if (picker.get_active()) { refSpotCoords.push_back(provider->posImage); @@ -587,8 +560,8 @@ bool FilmNegative::button1Pressed(int modifierKey) RGB ref1, ref2, dummy; - if (fnp->getFilmNegativeSpot(refSpotCoords[0], 32, ref1, dummy) && - fnp->getFilmNegativeSpot(refSpotCoords[1], 32, ref2, dummy)) { + if (fnp->getFilmNegativeSpot(refSpotCoords[0], picker.get_spot_full_width(), ref1, dummy) && + fnp->getFilmNegativeSpot(refSpotCoords[1], picker.get_spot_full_width(), ref2, dummy)) { disableListener(); @@ -620,7 +593,7 @@ bool FilmNegative::button1Pressed(int modifierKey) } - } else if (refSpotButton->get_active()) { + } else if (refPicker.get_active()) { disableListener(); @@ -634,7 +607,7 @@ bool FilmNegative::button1Pressed(int modifierKey) } RGB refOut; - fnp->getFilmNegativeSpot(provider->posImage, 32, refInputValues, refOut); + fnp->getFilmNegativeSpot(provider->posImage, refPicker.get_spot_full_width(), refInputValues, refOut); // Output luminance of the sampled spot float spotLum = rtengine::Color::rgbLuminance(refOut.r, refOut.g, refOut.b); @@ -698,16 +671,17 @@ void FilmNegative::switchOffEditMode() { refSpotCoords.clear(); unsubscribe(); - spotButton->set_active(false); - refSpotButton->set_active(false); + picker.set_active(false); + refPicker.set_active(false); } void FilmNegative::editToggled() { - if (spotButton->get_active()) { + if (picker.get_active()) { - refSpotButton->set_active(false); + refPicker.set_active(false); refSpotCoords.clear(); + activePicker = &picker; subscribe(); @@ -716,7 +690,7 @@ void FilmNegative::editToggled() // Stick a dummy rectangle over the whole image in mouseOverGeometry. // This is to make sure the getCursor() call is fired everywhere. - Rectangle* const imgRect = static_cast(mouseOverGeometry.at(0)); + EditRectangle* const imgRect = static_cast(mouseOverGeometry.at(0)); imgRect->setXYWH(0, 0, w, h); } else { refSpotCoords.clear(); @@ -727,10 +701,11 @@ void FilmNegative::editToggled() void FilmNegative::refSpotToggled() { - if (refSpotButton->get_active()) { + if (refPicker.get_active()) { - spotButton->set_active(false); + picker.set_active(false); refSpotCoords.clear(); + activePicker = &refPicker; subscribe(); @@ -739,7 +714,7 @@ void FilmNegative::refSpotToggled() // Stick a dummy rectangle over the whole image in mouseOverGeometry. // This is to make sure the getCursor() call is fired everywhere. - Rectangle* const imgRect = static_cast(mouseOverGeometry.at(0)); + EditRectangle* const imgRect = static_cast(mouseOverGeometry.at(0)); imgRect->setXYWH(0, 0, w, h); } else { @@ -747,3 +722,4 @@ void FilmNegative::refSpotToggled() unsubscribe(); } } + diff --git a/rtgui/filmnegative.h b/rtgui/filmnegative.h index 722625fa2..87e91af8c 100644 --- a/rtgui/filmnegative.h +++ b/rtgui/filmnegative.h @@ -120,10 +120,14 @@ private: Adjuster* const redRatio; Adjuster* const blueRatio; - Gtk::ToggleButton* const spotButton; + static constexpr int DEFAULT_SPOT_WIDTH = 8; + + SpotPicker picker; Gtk::Label* const refInputLabel; - Gtk::ToggleButton* const refSpotButton; + SpotPicker refPicker; + + SpotPicker* activePicker; Adjuster* const outputLevel; Adjuster* const greenBalance; diff --git a/rtgui/guiutils.cc b/rtgui/guiutils.cc index 18b82fe36..cb99b04a5 100644 --- a/rtgui/guiutils.cc +++ b/rtgui/guiutils.cc @@ -82,59 +82,6 @@ void IdleRegister::destroy() mutex.unlock(); } -/* -gboolean giveMeAGo(void* data) { - GThreadLock *threadMutex = static_cast(data); - printf("A\n"); - Glib::Threads::Mutex::Lock GUILock(threadMutex->GUI); - printf("B\n"); - { - Glib::Threads::Mutex::Lock operationLock(threadMutex->operation); - printf("C\n"); - - threadMutex->operationCond.signal(); - printf("D\n"); - operationLock.release(); // because we're not sure that "lock" destructor happens here... - } - threadMutex->GUICond.wait(threadMutex->GUI); - printf("E\n"); - - GUILock.release(); - - return false; -} - -GThreadLock::GThreadLock() : sameThread(false) { - if (Glib::Threads::Thread::self() == mainThread) { - sameThread = true; - return; - } - - printf("10\n"); - { - Glib::Threads::Mutex::Lock operationLock(operation); - - printf("20\n"); - gdk_threads_add_idle(giveMeAGo, this); - - printf("30\n"); - operationCond.wait(operation); - printf("40\n"); - operationLock.release(); - } -} - -GThreadLock::~GThreadLock() { - if (!sameThread) { - printf("50\n"); - Glib::Threads::Mutex::Lock lock(GUI); - printf("60\n"); - GUICond.signal(); - printf("Fin\n"); - } -} -*/ - Glib::ustring escapeHtmlChars(const Glib::ustring &src) { @@ -1299,23 +1246,201 @@ bool MyHScale::on_key_press_event (GdkEventKey* event) } } -MyFileChooserButton::MyFileChooserButton(const Glib::ustring &title, Gtk::FileChooserAction action): - title_(title), - action_(action), - lbl_("", Gtk::ALIGN_START), - show_hidden_(false) +class MyFileChooserWidget::Impl { - lbl_.set_ellipsize(Pango::ELLIPSIZE_MIDDLE); - lbl_.set_justify(Gtk::JUSTIFY_LEFT); - set_none(); - box_.pack_start(lbl_, true, true); - Gtk::Image *img = Gtk::manage(new Gtk::Image()); - img->set_from_icon_name("folder-open", Gtk::ICON_SIZE_BUTTON); - box_.pack_start(*Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_VERTICAL)), false, false, 5); - box_.pack_start(*img, false, false); - box_.show_all_children(); - add(box_); - signal_clicked().connect(sigc::mem_fun(*this, &MyFileChooserButton::show_chooser)); +public: + Impl(const Glib::ustring &title, Gtk::FileChooserAction action) : + title_(title), + action_(action) + { + } + + Glib::ustring title_; + Gtk::FileChooserAction action_; + std::string filename_; + std::string current_folder_; + std::vector> file_filters_; + Glib::RefPtr cur_filter_; + std::vector shortcut_folders_; + bool show_hidden_{false}; + sigc::signal selection_changed_; +}; + + +MyFileChooserWidget::MyFileChooserWidget(const Glib::ustring &title, Gtk::FileChooserAction action) : + pimpl(new Impl(title, action)) +{ +} + + +std::unique_ptr MyFileChooserWidget::make_folder_image() +{ + return std::unique_ptr(new RTImage("folder-open-small.png")); +} + +void MyFileChooserWidget::show_chooser(Gtk::Widget *parent) +{ + Gtk::FileChooserDialog dlg(getToplevelWindow(parent), pimpl->title_, pimpl->action_); + dlg.add_button(M("GENERAL_CANCEL"), Gtk::RESPONSE_CANCEL); + dlg.add_button(M(pimpl->action_ == Gtk::FILE_CHOOSER_ACTION_SAVE ? "GENERAL_SAVE" : "GENERAL_OPEN"), Gtk::RESPONSE_OK); + dlg.set_filename(pimpl->filename_); + for (auto &f : pimpl->file_filters_) { + dlg.add_filter(f); + } + if (pimpl->cur_filter_) { + dlg.set_filter(pimpl->cur_filter_); + } + for (auto &f : pimpl->shortcut_folders_) { + dlg.add_shortcut_folder(f); + } + if (!pimpl->current_folder_.empty()) { + dlg.set_current_folder(pimpl->current_folder_); + } + dlg.set_show_hidden(pimpl->show_hidden_); + int res = dlg.run(); + if (res == Gtk::RESPONSE_OK) { + pimpl->filename_ = dlg.get_filename(); + pimpl->current_folder_ = dlg.get_current_folder(); + on_filename_set(); + pimpl->selection_changed_.emit(); + } +} + + +void MyFileChooserWidget::on_filename_set() +{ + // Sub-classes decide if anything needs to be done. +} + + +sigc::signal &MyFileChooserWidget::signal_selection_changed() +{ + return pimpl->selection_changed_; +} + + +sigc::signal &MyFileChooserWidget::signal_file_set() +{ + return pimpl->selection_changed_; +} + + +std::string MyFileChooserWidget::get_filename() const +{ + return pimpl->filename_; +} + + +bool MyFileChooserWidget::set_filename(const std::string &filename) +{ + pimpl->filename_ = filename; + on_filename_set(); + return true; +} + + +void MyFileChooserWidget::add_filter(const Glib::RefPtr &filter) +{ + pimpl->file_filters_.push_back(filter); +} + + +void MyFileChooserWidget::remove_filter(const Glib::RefPtr &filter) +{ + auto it = std::find(pimpl->file_filters_.begin(), pimpl->file_filters_.end(), filter); + if (it != pimpl->file_filters_.end()) { + pimpl->file_filters_.erase(it); + } +} + + +void MyFileChooserWidget::set_filter(const Glib::RefPtr &filter) +{ + pimpl->cur_filter_ = filter; +} + + +std::vector> MyFileChooserWidget::list_filters() const +{ + return pimpl->file_filters_; +} + + +bool MyFileChooserWidget::set_current_folder(const std::string &filename) +{ + pimpl->current_folder_ = filename; + if (pimpl->action_ == Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER) { + set_filename(filename); + } + return true; +} + +std::string MyFileChooserWidget::get_current_folder() const +{ + return pimpl->current_folder_; +} + + +bool MyFileChooserWidget::add_shortcut_folder(const std::string &folder) +{ + pimpl->shortcut_folders_.push_back(folder); + return true; +} + + +bool MyFileChooserWidget::remove_shortcut_folder(const std::string &folder) +{ + auto it = std::find(pimpl->shortcut_folders_.begin(), pimpl->shortcut_folders_.end(), folder); + if (it != pimpl->shortcut_folders_.end()) { + pimpl->shortcut_folders_.erase(it); + } + return true; +} + + +void MyFileChooserWidget::unselect_all() +{ + pimpl->filename_ = ""; + on_filename_set(); +} + + +void MyFileChooserWidget::unselect_filename(const std::string &filename) +{ + if (pimpl->filename_ == filename) { + unselect_all(); + } +} + + +void MyFileChooserWidget::set_show_hidden(bool yes) +{ + pimpl->show_hidden_ = yes; +} + + +class MyFileChooserButton::Impl +{ +public: + Gtk::Box box_; + Gtk::Label lbl_{"", Gtk::ALIGN_START}; +}; + +MyFileChooserButton::MyFileChooserButton(const Glib::ustring &title, Gtk::FileChooserAction action): + MyFileChooserWidget(title, action), + pimpl(new Impl()) +{ + pimpl->lbl_.set_ellipsize(Pango::ELLIPSIZE_MIDDLE); + pimpl->lbl_.set_justify(Gtk::JUSTIFY_LEFT); + on_filename_set(); + pimpl->box_.pack_start(pimpl->lbl_, true, true); + pimpl->box_.pack_start(*Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_VERTICAL)), false, false, 5); + pimpl->box_.pack_start(*Gtk::manage(make_folder_image().release()), false, false); + pimpl->box_.show_all_children(); + add(pimpl->box_); + signal_clicked().connect([this]() { + show_chooser(this); + }); if (GTK_MINOR_VERSION < 20) { set_border_width(2); // margin doesn't work on GTK < 3.20 @@ -1324,151 +1449,16 @@ MyFileChooserButton::MyFileChooserButton(const Glib::ustring &title, Gtk::FileCh set_name("MyFileChooserButton"); } - -void MyFileChooserButton::show_chooser() +void MyFileChooserButton::on_filename_set() { - Gtk::FileChooserDialog dlg(getToplevelWindow(this), title_, action_); - dlg.add_button(M("GENERAL_CANCEL"), Gtk::RESPONSE_CANCEL); - dlg.add_button(M(action_ == Gtk::FILE_CHOOSER_ACTION_SAVE ? "GENERAL_SAVE" : "GENERAL_OPEN"), Gtk::RESPONSE_OK); - dlg.set_filename(filename_); - for (auto &f : file_filters_) { - dlg.add_filter(f); - } - if (cur_filter_) { - dlg.set_filter(cur_filter_); - } - for (auto &f : shortcut_folders_) { - dlg.add_shortcut_folder(f); - } - if (!current_folder_.empty()) { - dlg.set_current_folder(current_folder_); - } - dlg.set_show_hidden(show_hidden_); - int res = dlg.run(); - if (res == Gtk::RESPONSE_OK) { - filename_ = dlg.get_filename(); - current_folder_ = dlg.get_current_folder(); - lbl_.set_label(Glib::path_get_basename(filename_)); - selection_changed_.emit(); - } -} - - -sigc::signal &MyFileChooserButton::signal_selection_changed() -{ - return selection_changed_; -} - - -sigc::signal &MyFileChooserButton::signal_file_set() -{ - return selection_changed_; -} - - -std::string MyFileChooserButton::get_filename() const -{ - return filename_; -} - - -bool MyFileChooserButton::set_filename(const std::string &filename) -{ - filename_ = filename; - if (Glib::file_test(filename_, Glib::FILE_TEST_EXISTS)) { - lbl_.set_label(Glib::path_get_basename(filename_)); + if (Glib::file_test(get_filename(), Glib::FILE_TEST_EXISTS)) { + pimpl->lbl_.set_label(Glib::path_get_basename(get_filename())); } else { - set_none(); - } - return true; -} - - -void MyFileChooserButton::add_filter(const Glib::RefPtr &filter) -{ - file_filters_.push_back(filter); -} - - -void MyFileChooserButton::remove_filter(const Glib::RefPtr &filter) -{ - auto it = std::find(file_filters_.begin(), file_filters_.end(), filter); - if (it != file_filters_.end()) { - file_filters_.erase(it); + pimpl->lbl_.set_label(Glib::ustring("(") + M("GENERAL_NONE") + ")"); } } -void MyFileChooserButton::set_filter(const Glib::RefPtr &filter) -{ - cur_filter_ = filter; -} - - -std::vector> MyFileChooserButton::list_filters() -{ - return file_filters_; -} - - -bool MyFileChooserButton::set_current_folder(const std::string &filename) -{ - current_folder_ = filename; - if (action_ == Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER) { - set_filename(filename); - } - return true; -} - -std::string MyFileChooserButton::get_current_folder() const -{ - return current_folder_; -} - - -bool MyFileChooserButton::add_shortcut_folder(const std::string &folder) -{ - shortcut_folders_.push_back(folder); - return true; -} - - -bool MyFileChooserButton::remove_shortcut_folder(const std::string &folder) -{ - auto it = std::find(shortcut_folders_.begin(), shortcut_folders_.end(), folder); - if (it != shortcut_folders_.end()) { - shortcut_folders_.erase(it); - } - return true; -} - - -void MyFileChooserButton::unselect_all() -{ - filename_ = ""; - set_none(); -} - - -void MyFileChooserButton::unselect_filename(const std::string &filename) -{ - if (filename_ == filename) { - unselect_all(); - } -} - - -void MyFileChooserButton::set_show_hidden(bool yes) -{ - show_hidden_ = yes; -} - - -void MyFileChooserButton::set_none() -{ - lbl_.set_label(Glib::ustring("(") + M("GENERAL_NONE") + ")"); -} - // For an unknown reason (a bug ?), it doesn't work when action = FILE_CHOOSER_ACTION_SELECT_FOLDER ! bool MyFileChooserButton::on_scroll_event (GdkEventScroll* event) { @@ -1493,6 +1483,57 @@ void MyFileChooserButton::get_preferred_width_for_height_vfunc (int height, int } +class MyFileChooserEntry::Impl +{ +public: + Gtk::Entry entry; + Gtk::Button file_chooser_button; +}; + + +MyFileChooserEntry::MyFileChooserEntry(const Glib::ustring &title, Gtk::FileChooserAction action) : + MyFileChooserWidget(title, action), + pimpl(new Impl()) +{ + const auto on_text_changed = [this]() { + set_filename(pimpl->entry.get_text()); + }; + pimpl->entry.get_buffer()->signal_deleted_text().connect([on_text_changed](guint, guint) { on_text_changed(); }); + pimpl->entry.get_buffer()->signal_inserted_text().connect([on_text_changed](guint, const gchar *, guint) { on_text_changed(); }); + + pimpl->file_chooser_button.set_image(*Gtk::manage(make_folder_image().release())); + pimpl->file_chooser_button.signal_clicked().connect([this]() { + const auto &filename = get_filename(); + if (Glib::file_test(filename, Glib::FILE_TEST_IS_DIR)) { + set_current_folder(filename); + } + show_chooser(this); + }); + + pack_start(pimpl->entry, true, true); + pack_start(pimpl->file_chooser_button, false, false); +} + + +Glib::ustring MyFileChooserEntry::get_placeholder_text() const +{ + return pimpl->entry.get_placeholder_text(); +} + + +void MyFileChooserEntry::set_placeholder_text(const Glib::ustring &text) +{ + pimpl->entry.set_placeholder_text(text); +} + + +void MyFileChooserEntry::on_filename_set() +{ + if (pimpl->entry.get_text() != get_filename()) { + pimpl->entry.set_text(get_filename()); + } +} + TextOrIcon::TextOrIcon (const Glib::ustring &fname, const Glib::ustring &labelTx, const Glib::ustring &tooltipTx) { @@ -1923,3 +1964,78 @@ void BackBuffer::copySurface(Cairo::RefPtr crDest, Gdk::Rectangl crDest->fill(); } } + +SpotPicker::SpotPicker(int const defaultValue, Glib::ustring const &buttonKey, Glib::ustring const &buttonTooltip, Glib::ustring const &labelKey) : + Gtk::Grid(), + _spotHalfWidth(defaultValue), + _spotLabel(labelSetup(labelKey)), + _spotSizeSetter(MyComboBoxText(selecterSetup())), + _spotButton(spotButtonTemplate(buttonKey, buttonTooltip)) + +{ + this->get_style_context()->add_class("grid-spacing"); + setExpandAlignProperties(this, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); + + this->attach (_spotButton, 0, 0, 1, 1); + this->attach (_spotLabel, 1, 0, 1, 1); + this->attach (_spotSizeSetter, 2, 0, 1, 1); + _spotSizeSetter.signal_changed().connect( sigc::mem_fun(*this, &SpotPicker::spotSizeChanged)); +} + +Gtk::Label SpotPicker::labelSetup(Glib::ustring const &key) const +{ + Gtk::Label label(key); + setExpandAlignProperties(&label, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); + return label; +} + +MyComboBoxText SpotPicker::selecterSetup() const +{ + MyComboBoxText spotSize = MyComboBoxText(); + setExpandAlignProperties(&spotSize, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); + + spotSize.append ("2"); + if (_spotHalfWidth == 2) { + spotSize.set_active(0); + } + + spotSize.append ("4"); + + if (_spotHalfWidth == 4) { + spotSize.set_active(1); + } + + spotSize.append ("8"); + + if (_spotHalfWidth == 8) { + spotSize.set_active(2); + } + + spotSize.append ("16"); + + if (_spotHalfWidth == 16) { + spotSize.set_active(3); + } + + spotSize.append ("32"); + + if (_spotHalfWidth == 32) { + spotSize.set_active(4); + } + return spotSize; +} + +Gtk::ToggleButton SpotPicker::spotButtonTemplate(Glib::ustring const &key, const Glib::ustring &tooltip) const +{ + Gtk::ToggleButton spotButton = Gtk::ToggleButton(key); + setExpandAlignProperties(&spotButton, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); + spotButton.get_style_context()->add_class("independent"); + spotButton.set_tooltip_text(tooltip); + spotButton.set_image(*Gtk::manage(new RTImage("color-picker-small.png"))); + return spotButton; +} + +void SpotPicker::spotSizeChanged() +{ + _spotHalfWidth = atoi(_spotSizeSetter.get_active_text().c_str()); +} diff --git a/rtgui/guiutils.h b/rtgui/guiutils.h index 152b626de..02811e076 100644 --- a/rtgui/guiutils.h +++ b/rtgui/guiutils.h @@ -396,34 +396,10 @@ protected: }; -/** - * @brief subclass of Gtk::FileChooserButton in order to handle the scrollwheel - */ -class MyFileChooserButton final : public Gtk::Button { -private: - void show_chooser(); - - Glib::ustring title_; - Gtk::FileChooserAction action_; - Gtk::Box box_; - Gtk::Label lbl_; - std::string filename_; - std::string current_folder_; - std::vector> file_filters_; - Glib::RefPtr cur_filter_; - std::vector shortcut_folders_; - bool show_hidden_; - sigc::signal selection_changed_; - -protected: - bool on_scroll_event (GdkEventScroll* event) override; - void get_preferred_width_vfunc (int &minimum_width, int &natural_width) const override; - void get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const override; - - void set_none(); - +class MyFileChooserWidget +{ public: - explicit MyFileChooserButton(const Glib::ustring &title, Gtk::FileChooserAction action=Gtk::FILE_CHOOSER_ACTION_OPEN); + virtual ~MyFileChooserWidget() = default; sigc::signal &signal_selection_changed(); sigc::signal &signal_file_set(); @@ -434,7 +410,7 @@ public: void add_filter(const Glib::RefPtr &filter); void remove_filter(const Glib::RefPtr &filter); void set_filter(const Glib::RefPtr &filter); - std::vector> list_filters(); + std::vector> list_filters() const; bool set_current_folder(const std::string &filename); std::string get_current_folder() const; @@ -446,6 +422,57 @@ public: void unselect_filename(const std::string &filename); void set_show_hidden(bool yes); + +protected: + explicit MyFileChooserWidget(const Glib::ustring &title, Gtk::FileChooserAction action=Gtk::FILE_CHOOSER_ACTION_OPEN); + + static std::unique_ptr make_folder_image(); + + void show_chooser(Gtk::Widget *parent); + virtual void on_filename_set(); + +private: + class Impl; + + std::unique_ptr pimpl; +}; + +/** + * @brief subclass of Gtk::FileChooserButton in order to handle the scrollwheel + */ +class MyFileChooserButton final : public Gtk::Button, public MyFileChooserWidget +{ +private: + class Impl; + + std::unique_ptr pimpl; + +protected: + bool on_scroll_event (GdkEventScroll* event) override; + void get_preferred_width_vfunc (int &minimum_width, int &natural_width) const override; + void get_preferred_width_for_height_vfunc (int height, int &minimum_width, int &natural_width) const override; + + void on_filename_set() override; + +public: + explicit MyFileChooserButton(const Glib::ustring &title, Gtk::FileChooserAction action=Gtk::FILE_CHOOSER_ACTION_OPEN); +}; + +class MyFileChooserEntry : public Gtk::Box, public MyFileChooserWidget +{ +public: + explicit MyFileChooserEntry(const Glib::ustring &title, Gtk::FileChooserAction action = Gtk::FILE_CHOOSER_ACTION_OPEN); + + Glib::ustring get_placeholder_text() const; + void set_placeholder_text(const Glib::ustring &text); + +protected: + void on_filename_set() override; + +private: + class Impl; + + std::unique_ptr pimpl; }; /** @@ -689,7 +716,51 @@ public: } }; -inline void setActiveTextOrIndex (Gtk::ComboBoxText& comboBox, const Glib::ustring& text, int index) +/** + * @brief A gui element for picking spots on an image + */ +class SpotPicker : public Gtk::Grid +{ + private: + int _spotHalfWidth; + Gtk::Label _spotLabel; + MyComboBoxText _spotSizeSetter; + Gtk::ToggleButton _spotButton; + public: + SpotPicker(int const defaultValue, Glib::ustring const &buttonKey, Glib::ustring const &buttonTooltip, Glib::ustring const &labelKey); + inline bool get_active() const + { + return _spotButton.get_active(); + } + void set_active(bool b) + { + _spotButton.set_active(b); + } + int get_spot_half_width() const + { + return _spotHalfWidth; + } + int get_spot_full_width() const + { + return _spotHalfWidth * 2; + } + template void add_button_toggled_event(T_return& returnv, const T_obj function) + { + _spotButton.signal_toggled().connect(sigc::mem_fun(returnv, function)); + } + bool remove_if_there(Gtk::Container* cont, bool increference = true) + { + return removeIfThere(cont, &_spotButton, increference); + } + + protected: + Gtk::Label labelSetup(Glib::ustring const &key) const; + MyComboBoxText selecterSetup() const; + Gtk::ToggleButton spotButtonTemplate(Glib::ustring const &key, const Glib::ustring &tooltip) const; + void spotSizeChanged(); +}; + +inline void setActiveTextOrIndex(Gtk::ComboBoxText &comboBox, const Glib::ustring &text, int index) { bool valueSet = false; if (!text.empty()) { diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 821f6f0be..b804218f5 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -1197,7 +1197,7 @@ void HistogramArea::update( break; case ScopeType::PARADE: case ScopeType::WAVEFORM: { - MyWriterLock wave_lock(wave_mutex); + MYWRITERLOCK(wave_lock, wave_mutex) waveform_scale = waveformScale; rwave = waveformRed; gwave = waveformGreen; @@ -1330,7 +1330,7 @@ void HistogramArea::updateBackBuffer () cr->unset_dash(); - MyReaderLock wave_lock(wave_mutex); + MYREADERLOCK(wave_lock, wave_mutex) if (valid && (scopeType == ScopeType::HISTOGRAM || scopeType == ScopeType::HISTOGRAM_RAW)) { bool rawMode = scopeType == ScopeType::HISTOGRAM_RAW; @@ -1447,7 +1447,7 @@ void HistogramArea::updateBackBuffer () } else if (scopeType == ScopeType::VECTORSCOPE_HC || scopeType == ScopeType::VECTORSCOPE_HS) { drawVectorscope(cr, w, h); } - wave_lock.release(); + MYREADERLOCK_RELEASE(wave_lock); // Draw the frame's border style->render_frame(cr, 0, 0, surface->get_width(), surface->get_height()); diff --git a/rtgui/icmpanel.cc b/rtgui/icmpanel.cc index 57f12fd7e..47e34f509 100644 --- a/rtgui/icmpanel.cc +++ b/rtgui/icmpanel.cc @@ -204,10 +204,13 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu wFrame->add(*wProfVBox); //-----------------gamma TRC working - Gtk::Frame *trcFrame = Gtk::manage(new Gtk::Frame(M("TP_ICM_TRCFRAME"))); - trcFrame->set_label_align(0.025, 0.5); +// Gtk::Frame *trcFrame = Gtk::manage(new Gtk::Frame(M("TP_ICM_TRCFRAME"))); + trcExp = Gtk::manage(new MyExpander(false, M("TP_ICM_TRCFRAME"))); + setExpandAlignProperties(trcExp, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); +// trcFrame->set_label_align(0.025, 0.5); Gtk::Box *trcProfVBox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); - trcFrame->set_tooltip_text(M("TP_ICM_TRCFRAME_TOOLTIP")); + trcExp->set_tooltip_text(M("TP_ICM_TRCFRAME_TOOLTIP")); + trcExp->signal_button_release_event().connect_notify ( sigc::bind ( sigc::mem_fun (this, &ICMPanel::foldAllButMe), trcExp) ); wTRCBox = Gtk::manage(new Gtk::Box()); @@ -268,7 +271,7 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu fbw->set_active(true); gamut = Gtk::manage(new Gtk::CheckButton((M("TP_ICM_GAMUT")))); gamut->set_active(false); - + trcProfVBox->pack_start(*wprimBox, Gtk::PACK_EXPAND_WIDGET); trcProfVBox->pack_start(*fbw, Gtk::PACK_EXPAND_WIDGET); trcProfVBox->pack_start(*gamut, Gtk::PACK_EXPAND_WIDGET); @@ -292,6 +295,7 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu wprim->append(M("TP_ICM_WORKING_PRIM_ACE")); wprim->append(M("TP_ICM_WORKING_PRIM_WID")); wprim->append(M("TP_ICM_WORKING_PRIM_AC0")); + wprim->append(M("TP_ICM_WORKING_PRIM_JDCMAX")); wprim->append(M("TP_ICM_WORKING_PRIM_BRU")); wprim->append(M("TP_ICM_WORKING_PRIM_BET")); wprim->append(M("TP_ICM_WORKING_PRIM_BST")); @@ -381,11 +385,13 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu aRendIntent->show(); riaHBox->pack_start(*aRendIntent->buttonGroup, Gtk::PACK_EXPAND_PADDING); - trcFrame->add(*trcProfVBox); pack_start(*wFrame, Gtk::PACK_EXPAND_WIDGET); - pack_start(*trcFrame, Gtk::PACK_EXPAND_WIDGET); - pack_start(*redFrame, Gtk::PACK_EXPAND_WIDGET); + trcProfVBox->pack_start(*redFrame, Gtk::PACK_EXPAND_WIDGET); + trcExp->add(*trcProfVBox, false); + trcExp->setLevel (2); + pack_start(*trcExp, Gtk::PACK_EXPAND_WIDGET); + trcExp->set_expanded(false); // ---------------------------- Output profile @@ -461,7 +467,7 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu ipDialog->add_filter(filter_icc); ipDialog->add_filter(filter_iccdng); ipDialog->add_filter(filter_any); -#ifdef WIN32 +#ifdef _WIN32 ipDialog->set_show_hidden(true); // ProgramData is hidden on Windows #endif @@ -493,6 +499,14 @@ ICMPanel::ICMPanel() : FoldableToolPanel(this, TOOL_NAME, M("TP_ICM_LABEL")), iu show_all(); } +void ICMPanel::foldAllButMe (GdkEventButton* event, MyExpander *expander) +{ + if (event->button == 3) { + trcExp->set_expanded (trcExp == expander); + } +} + + void ICMPanel::neutral_pressed () { //find working profile and set the same destination proile if (wProfNames->get_active_text() == "Rec2020") { @@ -509,6 +523,8 @@ void ICMPanel::neutral_pressed () wprim->set_active(toUnderlying(ColorManagementParams::Primaries::WIDE_GAMUT)); } else if (wProfNames->get_active_text() == "ACESp0") { wprim->set_active(toUnderlying(ColorManagementParams::Primaries::ACES_P0)); + } else if (wProfNames->get_active_text() == "JDCmax") { + wprim->set_active(toUnderlying(ColorManagementParams::Primaries::JDC_MAX)); } else if (wProfNames->get_active_text() == "BruceRGB") { wprim->set_active(toUnderlying(ColorManagementParams::Primaries::BRUCE_RGB)); } else if (wProfNames->get_active_text() == "Beta RGB") { @@ -788,6 +804,7 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited) ConnectionBlocker wtrcconn_(wtrcconn); ConnectionBlocker willconn_(willconn); ConnectionBlocker wprimconn_(wprimconn); + trcExp->set_expanded(false); if (pp->icm.inputProfile.substr(0, 5) != "file:") { ipDialog->set_filename(" "); @@ -1082,6 +1099,7 @@ void ICMPanel::read(const ProcParams* pp, const ParamsEdited* pedited) case ColorManagementParams::Primaries::ACES_P1: case ColorManagementParams::Primaries::WIDE_GAMUT: case ColorManagementParams::Primaries::ACES_P0: + case ColorManagementParams::Primaries::JDC_MAX: case ColorManagementParams::Primaries::BRUCE_RGB: case ColorManagementParams::Primaries::BETA_RGB: case ColorManagementParams::Primaries::BEST_RGB: { @@ -1475,6 +1493,7 @@ void ICMPanel::wtrcinChanged() case ColorManagementParams::Primaries::ACES_P1: case ColorManagementParams::Primaries::WIDE_GAMUT: case ColorManagementParams::Primaries::ACES_P0: + case ColorManagementParams::Primaries::JDC_MAX: case ColorManagementParams::Primaries::BRUCE_RGB: case ColorManagementParams::Primaries::BETA_RGB: case ColorManagementParams::Primaries::BEST_RGB: { @@ -1507,7 +1526,7 @@ void ICMPanel::wtrcinChanged() void ICMPanel::willChanged() { - switch (ColorManagementParams::Primaries(wprim->get_active_row_number())) { + switch (ColorManagementParams::Primaries(wprim->get_active_row_number() )) { case ColorManagementParams::Primaries::DEFAULT: case ColorManagementParams::Primaries::SRGB: case ColorManagementParams::Primaries::ADOBE_RGB: @@ -1516,6 +1535,7 @@ void ICMPanel::willChanged() case ColorManagementParams::Primaries::ACES_P1: case ColorManagementParams::Primaries::WIDE_GAMUT: case ColorManagementParams::Primaries::ACES_P0: + case ColorManagementParams::Primaries::JDC_MAX: case ColorManagementParams::Primaries::BRUCE_RGB: case ColorManagementParams::Primaries::BETA_RGB: case ColorManagementParams::Primaries::BEST_RGB: { @@ -1630,6 +1650,17 @@ void ICMPanel::wprimChanged() break; } + case ColorManagementParams::Primaries::JDC_MAX: { + redx->setValue(0.734702); + redy->setValue(0.265302); + grex->setValue(0.021908); + grey->setValue(0.930288); + blux->setValue(0.120593); + bluy->setValue(0.001583); + will->set_active(toUnderlying(ColorManagementParams::Illuminant::D50)); + break; + } + case ColorManagementParams::Primaries::BRUCE_RGB: { redx->setValue(0.64); redy->setValue(0.33); @@ -1722,6 +1753,14 @@ void ICMPanel::wprimChanged() blux->setValue(0.0001); bluy->setValue(-0.077); will->set_active(toUnderlying(ColorManagementParams::Illuminant::D60)); + } else if (wProfNames->get_active_text() == "JDCmax") { + redx->setValue(0.734702); + redy->setValue(0.265302); + grex->setValue(0.021908); + grey->setValue(0.930288); + blux->setValue(0.120593); + bluy->setValue(0.001583); + will->set_active(toUnderlying(ColorManagementParams::Illuminant::D50)); } else if (wProfNames->get_active_text() == "BruceRGB") { redx->setValue(0.64); redy->setValue(0.33); @@ -1729,7 +1768,7 @@ void ICMPanel::wprimChanged() grey->setValue(0.65); blux->setValue(0.15); bluy->setValue(0.06); - will->set_active(toUnderlying(ColorManagementParams::Illuminant::D65)); + will->set_active(toUnderlying(ColorManagementParams::Illuminant::D65)); } else if (wProfNames->get_active_text() == "Beta RGB") { redx->setValue(0.6888); redy->setValue(0.3112); diff --git a/rtgui/icmpanel.h b/rtgui/icmpanel.h index 6c670c5e6..f41e17b7b 100644 --- a/rtgui/icmpanel.h +++ b/rtgui/icmpanel.h @@ -49,6 +49,7 @@ protected: Gtk::Frame* dcpFrame; Gtk::Frame* coipFrame; Gtk::Frame* redFrame; + MyExpander* trcExp; Adjuster* wGamma; Adjuster* wSlope; @@ -168,6 +169,7 @@ private: Glib::ustring camName; void updateDCP(int dcpIlluminant, Glib::ustring dcp_name); void updateRenderingIntent(const Glib::ustring &profile); + void foldAllButMe (GdkEventButton* event, MyExpander *expander); float nextrx; float nextry; diff --git a/rtgui/iptcpanel.cc b/rtgui/iptcpanel.cc index 1134b36da..eb6366fac 100644 --- a/rtgui/iptcpanel.cc +++ b/rtgui/iptcpanel.cc @@ -16,700 +16,790 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ +#include + #include "iptcpanel.h" + #include "clipboard.h" #include "rtimage.h" +#include "../rtengine/imagedata.h" +#include "../rtengine/metadata.h" #include "../rtengine/procparams.h" using namespace rtengine; using namespace rtengine::procparams; -IPTCPanel::IPTCPanel () : +namespace { + +const std::string CAPTION("Iptc.Application2.Caption"); +const std::string CAPTION_WRITER("Iptc.Application2.Writer"); +const std::string CATEGORY("Iptc.Application2.Category"); +const std::string CITY("Iptc.Application2.City"); +const std::string COPYRIGHT("Iptc.Application2.Copyright"); +const std::string COUNTRY("Iptc.Application2.CountryName"); +const std::string CREATOR("Iptc.Application2.Byline"); +const std::string CREATOR_JOB_TITLE("Iptc.Application2.BylineTitle"); +const std::string CREDIT("Iptc.Application2.Credit"); +const std::string DATE_CREATED("Iptc.Application2.DateCreated"); +const std::string HEADLINE("Iptc.Application2.Headline"); +const std::string INSTRUCTIONS("Iptc.Application2.SpecialInstructions"); +const std::string KEYWORDS("Iptc.Application2.Keywords"); +const std::string PROVINCE("Iptc.Application2.ProvinceState"); +const std::string SOURCE("Iptc.Application2.Source"); +const std::string SUPPLEMENTAL_CATEGORIES("Iptc.Application2.SuppCategory"); +const std::string TITLE("Iptc.Application2.ObjectName"); +const std::string TRANS_REFERENCE("Iptc.Application2.TransmissionReference"); + +const std::set iptc_keys = { + CAPTION, + CAPTION_WRITER, + CATEGORY, + CITY, + COPYRIGHT, + COUNTRY, + CREATOR, + CREATOR_JOB_TITLE, + CREDIT, + DATE_CREATED, + HEADLINE, + INSTRUCTIONS, + KEYWORDS, + PROVINCE, + SOURCE, + SUPPLEMENTAL_CATEGORIES, + TITLE, + TRANS_REFERENCE +}; + +} // namespace + +IPTCPanel::IPTCPanel(): changeList(new rtengine::procparams::IPTCPairs), defChangeList(new rtengine::procparams::IPTCPairs), embeddedData(new rtengine::procparams::IPTCPairs) { set_orientation(Gtk::ORIENTATION_VERTICAL); - set_spacing (4); + set_spacing(4); - Gtk::Grid* iptc = Gtk::manage( new Gtk::Grid () ); + Gtk::Grid* iptc = Gtk::manage(new Gtk::Grid()); setExpandAlignProperties(iptc, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); iptc->set_row_spacing(3); int row = 0; - Gtk::Label* capl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_DESCRIPTION") + ":") ); + Gtk::Label* capl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_DESCRIPTION") + ":")); setExpandAlignProperties(capl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - captionText = Gtk::TextBuffer::create (); - captionView = Gtk::manage( new Gtk::TextView (captionText) ); + captionText = Gtk::TextBuffer::create(); + captionView = Gtk::manage(new Gtk::TextView(captionText)); setExpandAlignProperties(captionView, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - Gtk::ScrolledWindow* scrolledWindowc = Gtk::manage( new Gtk::ScrolledWindow() ); + Gtk::ScrolledWindow* scrolledWindowc = Gtk::manage(new Gtk::ScrolledWindow()); setExpandAlignProperties(scrolledWindowc, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); - scrolledWindowc->set_min_content_height (100); + scrolledWindowc->set_min_content_height(100); scrolledWindowc->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS); scrolledWindowc->add(*captionView); - capl->set_tooltip_text (M("IPTCPANEL_DESCRIPTIONHINT")); - captionView->set_tooltip_text (M("IPTCPANEL_DESCRIPTIONHINT")); + capl->set_tooltip_text(M("IPTCPANEL_DESCRIPTIONHINT")); + captionView->set_tooltip_text(M("IPTCPANEL_DESCRIPTIONHINT")); captionView->set_size_request(35, 95); - iptc->attach (*capl, 0, row++, 1, 1); - iptc->attach (*scrolledWindowc, 0, row++, 1, 1); + iptc->attach(*capl, 0, row++, 1, 1); + iptc->attach(*scrolledWindowc, 0, row++, 1, 1); // -------------------------- - Gtk::Label* capwl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_DESCRIPTIONWRITER") + ":") ); + Gtk::Label* capwl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_DESCRIPTIONWRITER") + ":")); setExpandAlignProperties(capwl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - captionWriter = Gtk::manage( new Gtk::Entry () ); + captionWriter = Gtk::manage(new Gtk::Entry()); setExpandAlignProperties(captionWriter, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - capwl->set_tooltip_text (M("IPTCPANEL_DESCRIPTIONWRITERHINT")); - captionWriter->set_tooltip_text (M("IPTCPANEL_DESCRIPTIONWRITERHINT")); - iptc->attach (*capwl, 0, row++, 1, 1); - iptc->attach (*captionWriter, 0, row++, 1, 1); + capwl->set_tooltip_text(M("IPTCPANEL_DESCRIPTIONWRITERHINT")); + captionWriter->set_tooltip_text(M("IPTCPANEL_DESCRIPTIONWRITERHINT")); + iptc->attach(*capwl, 0, row++, 1, 1); + iptc->attach(*captionWriter, 0, row++, 1, 1); // -------------------------- - Gtk::Label* headl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_HEADLINE") + ":") ); + Gtk::Label* headl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_HEADLINE") + ":")); setExpandAlignProperties(headl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - headline = Gtk::manage( new Gtk::Entry () ); + headline = Gtk::manage(new Gtk::Entry()); setExpandAlignProperties(headline, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_BASELINE); - headl->set_tooltip_text (M("IPTCPANEL_HEADLINEHINT")); - headline->set_tooltip_text (M("IPTCPANEL_HEADLINEHINT")); - iptc->attach (*headl, 0, row++, 1, 1); - iptc->attach (*headline, 0, row++, 1, 1); + headl->set_tooltip_text(M("IPTCPANEL_HEADLINEHINT")); + headline->set_tooltip_text(M("IPTCPANEL_HEADLINEHINT")); + iptc->attach(*headl, 0, row++, 1, 1); + iptc->attach(*headline, 0, row++, 1, 1); // -------------------------- - Gtk::Label* instl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_INSTRUCTIONS") + ":") ); + Gtk::Label* instl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_INSTRUCTIONS") + ":")); setExpandAlignProperties(instl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - instructions = Gtk::manage( new Gtk::Entry () ); + instructions = Gtk::manage(new Gtk::Entry()); setExpandAlignProperties(instructions, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - instl->set_tooltip_text (M("IPTCPANEL_INSTRUCTIONSHINT")); - instructions->set_tooltip_text (M("IPTCPANEL_INSTRUCTIONSHINT")); - iptc->attach (*instl, 0, row++, 1, 1); - iptc->attach (*instructions, 0, row++, 1, 1); + instl->set_tooltip_text(M("IPTCPANEL_INSTRUCTIONSHINT")); + instructions->set_tooltip_text(M("IPTCPANEL_INSTRUCTIONSHINT")); + iptc->attach(*instl, 0, row++, 1, 1); + iptc->attach(*instructions, 0, row++, 1, 1); // -------------------------- - Gtk::Separator* hsep1 = Gtk::manage( new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL) ); + Gtk::Separator* hsep1 = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL)); setExpandAlignProperties(hsep1, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - iptc->attach (*hsep1, 0, row++, 2, 1); + iptc->attach(*hsep1, 0, row++, 2, 1); // -------------------------- - Gtk::Label* keyl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_KEYWORDS") + ":")); + Gtk::Label* keyl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_KEYWORDS") + ":")); setExpandAlignProperties(keyl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - keyl->set_tooltip_text (M("IPTCPANEL_KEYWORDSHINT")); - keywords = Gtk::manage( new Gtk::ListViewText (1, false, Gtk::SELECTION_MULTIPLE) ); + keyl->set_tooltip_text(M("IPTCPANEL_KEYWORDSHINT")); + keywords = Gtk::manage(new Gtk::ListViewText(1, false, Gtk::SELECTION_MULTIPLE)); setExpandAlignProperties(keywords, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); - keywords->set_headers_visible (false); - keywords->set_size_request (50, 95); - Gtk::ScrolledWindow* scrolledWindowkw = Gtk::manage( new Gtk::ScrolledWindow() ); + keywords->set_headers_visible(false); + keywords->set_size_request(50, 95); + Gtk::ScrolledWindow* scrolledWindowkw = Gtk::manage(new Gtk::ScrolledWindow()); setExpandAlignProperties(scrolledWindowkw, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); - scrolledWindowkw->set_min_content_height (100); + scrolledWindowkw->set_min_content_height(100); scrolledWindowkw->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS); scrolledWindowkw->add(*keywords); - keyword = Gtk::manage(new MyComboBoxText (true)); + keyword = Gtk::manage(new MyComboBoxText(true)); setExpandAlignProperties(keyword, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); keyword->set_size_request(75); - keywords->set_tooltip_text (M("IPTCPANEL_KEYWORDSHINT")); - keyword->set_tooltip_text (M("IPTCPANEL_KEYWORDSHINT")); - addKW = Gtk::manage( new Gtk::Button () ); + keywords->set_tooltip_text(M("IPTCPANEL_KEYWORDSHINT")); + keyword->set_tooltip_text(M("IPTCPANEL_KEYWORDSHINT")); + addKW = Gtk::manage(new Gtk::Button()); setExpandAlignProperties(addKW, false, true, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); - delKW = Gtk::manage( new Gtk::Button () ); + delKW = Gtk::manage(new Gtk::Button()); setExpandAlignProperties(delKW, false, true, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); - Gtk::Image* addKWImg = Gtk::manage( new RTImage ("add-small.png") ); + Gtk::Image* addKWImg = Gtk::manage(new RTImage("add-small.png")); setExpandAlignProperties(addKWImg, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); - Gtk::Image* delKWImg = Gtk::manage( new RTImage ("remove-small.png") ); + Gtk::Image* delKWImg = Gtk::manage(new RTImage("remove-small.png")); setExpandAlignProperties(delKWImg, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); - addKW->add (*addKWImg); - delKW->add (*delKWImg); - Gtk::Grid* kwgrid = Gtk::manage( new Gtk::Grid () ); + addKW->add(*addKWImg); + delKW->add(*delKWImg); + Gtk::Grid* kwgrid = Gtk::manage(new Gtk::Grid()); setExpandAlignProperties(kwgrid, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - kwgrid->attach (*keyword, 0, 0, 1, 1); - kwgrid->attach (*addKW, 1, 0, 1, 1); - kwgrid->attach (*delKW, 2, 0, 1, 1); - iptc->attach (*keyl, 0, row++, 1, 1); - iptc->attach (*kwgrid, 0, row++, 1, 1); + kwgrid->attach(*keyword, 0, 0, 1, 1); + kwgrid->attach(*addKW, 1, 0, 1, 1); + kwgrid->attach(*delKW, 2, 0, 1, 1); + iptc->attach(*keyl, 0, row++, 1, 1); + iptc->attach(*kwgrid, 0, row++, 1, 1); // -------------------------- - iptc->attach (*scrolledWindowkw, 0, row++, 2, 1); + iptc->attach(*scrolledWindowkw, 0, row++, 2, 1); // -------------------------- - Gtk::Separator* hsep2 = Gtk::manage( new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL) ); + Gtk::Separator* hsep2 = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL)); setExpandAlignProperties(hsep2, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - iptc->attach (*hsep2, 0, row++, 2, 1); + iptc->attach(*hsep2, 0, row++, 2, 1); // -------------------------- - Gtk::Label* catl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_CATEGORY") + ":") ); + Gtk::Label* catl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_CATEGORY") + ":")); setExpandAlignProperties(catl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - category = Gtk::manage(new MyComboBoxText (true)); + category = Gtk::manage(new MyComboBoxText(true)); category->set_size_request(75); setExpandAlignProperties(category, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - catl->set_tooltip_text (M("IPTCPANEL_CATEGORYHINT")); - category->set_tooltip_text (M("IPTCPANEL_CATEGORYHINT")); - Gtk::Label* scl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_SUPPCATEGORIES") + ":") ); + catl->set_tooltip_text(M("IPTCPANEL_CATEGORYHINT")); + category->set_tooltip_text(M("IPTCPANEL_CATEGORYHINT")); + Gtk::Label* scl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_SUPPCATEGORIES") + ":")); setExpandAlignProperties(scl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - suppCategories = Gtk::manage( new Gtk::ListViewText (1, false, Gtk::SELECTION_MULTIPLE) ); + suppCategories = Gtk::manage(new Gtk::ListViewText(1, false, Gtk::SELECTION_MULTIPLE)); setExpandAlignProperties(suppCategories, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - suppCategories->set_headers_visible (false); + suppCategories->set_headers_visible(false); suppCategories->set_size_request(50, 95); - Gtk::ScrolledWindow* scrolledWindowsc = Gtk::manage( new Gtk::ScrolledWindow() ); + Gtk::ScrolledWindow* scrolledWindowsc = Gtk::manage(new Gtk::ScrolledWindow()); setExpandAlignProperties(scrolledWindowsc, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_START); - scrolledWindowsc->set_min_content_height (100); + scrolledWindowsc->set_min_content_height(100); scrolledWindowsc->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS); scrolledWindowsc->add(*suppCategories); - suppCategory = Gtk::manage(new MyComboBoxText (true)); + suppCategory = Gtk::manage(new MyComboBoxText(true)); suppCategory->set_size_request(75); setExpandAlignProperties(suppCategory, true, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - scl->set_tooltip_text (M("IPTCPANEL_SUPPCATEGORIESHINT")); - suppCategories->set_tooltip_text (M("IPTCPANEL_SUPPCATEGORIESHINT")); - suppCategory->set_tooltip_text (M("IPTCPANEL_SUPPCATEGORIESHINT")); - addSC = Gtk::manage( new Gtk::Button () ); + scl->set_tooltip_text(M("IPTCPANEL_SUPPCATEGORIESHINT")); + suppCategories->set_tooltip_text(M("IPTCPANEL_SUPPCATEGORIESHINT")); + suppCategory->set_tooltip_text(M("IPTCPANEL_SUPPCATEGORIESHINT")); + addSC = Gtk::manage(new Gtk::Button()); setExpandAlignProperties(addSC, false, true, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); - delSC = Gtk::manage( new Gtk::Button () ); + delSC = Gtk::manage(new Gtk::Button()); setExpandAlignProperties(delSC, false, true, Gtk::ALIGN_CENTER, Gtk::ALIGN_FILL); - Gtk::Image* addSCImg = Gtk::manage( new RTImage ("add-small.png") ); + Gtk::Image* addSCImg = Gtk::manage(new RTImage("add-small.png")); setExpandAlignProperties(addSCImg, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); - Gtk::Image* delSCImg = Gtk::manage( new RTImage ("remove-small.png") ); + Gtk::Image* delSCImg = Gtk::manage(new RTImage("remove-small.png")); setExpandAlignProperties(delSCImg, false, false, Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER); - addSC->add (*addSCImg); - delSC->add (*delSCImg); - Gtk::Grid* scgrid = Gtk::manage( new Gtk::Grid () ); + addSC->add(*addSCImg); + delSC->add(*delSCImg); + Gtk::Grid* scgrid = Gtk::manage(new Gtk::Grid()); setExpandAlignProperties(scgrid, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - scgrid->attach (*suppCategory, 0, 0, 1, 1); - scgrid->attach (*addSC, 1, 0, 1, 1); - scgrid->attach (*delSC, 2, 0, 1, 1); - iptc->attach (*catl, 0, row++, 1, 1); - iptc->attach (*category, 0, row++, 1, 1); + scgrid->attach(*suppCategory, 0, 0, 1, 1); + scgrid->attach(*addSC, 1, 0, 1, 1); + scgrid->attach(*delSC, 2, 0, 1, 1); + iptc->attach(*catl, 0, row++, 1, 1); + iptc->attach(*category, 0, row++, 1, 1); // -------------------------- - iptc->attach (*scl, 0, row++, 1, 1); - iptc->attach (*scgrid, 0, row++, 1, 1); + iptc->attach(*scl, 0, row++, 1, 1); + iptc->attach(*scgrid, 0, row++, 1, 1); // -------------------------- - iptc->attach (*scrolledWindowsc, 0, row++, 2, 1); + iptc->attach(*scrolledWindowsc, 0, row++, 2, 1); // -------------------------- - Gtk::Separator* hsep3 = Gtk::manage( new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL) ); + Gtk::Separator* hsep3 = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL)); setExpandAlignProperties(hsep3, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - iptc->attach (*hsep3, 0, row++, 2, 1); + iptc->attach(*hsep3, 0, row++, 2, 1); // -------------------------- - Gtk::Label* creatorLbl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_CREATOR") + ":") ); + Gtk::Label* creatorLbl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_CREATOR") + ":")); setExpandAlignProperties(creatorLbl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - creator = Gtk::manage( new Gtk::Entry () ); + creator = Gtk::manage(new Gtk::Entry()); setExpandAlignProperties(creator, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - creatorLbl->set_tooltip_text (M("IPTCPANEL_CREATORHINT")); - creator->set_tooltip_text (M("IPTCPANEL_CREATORHINT")); - iptc->attach (*creatorLbl, 0, row++, 1, 1); - iptc->attach (*creator, 0, row++, 1, 1); + creatorLbl->set_tooltip_text(M("IPTCPANEL_CREATORHINT")); + creator->set_tooltip_text(M("IPTCPANEL_CREATORHINT")); + iptc->attach(*creatorLbl, 0, row++, 1, 1); + iptc->attach(*creator, 0, row++, 1, 1); // -------------------------- - Gtk::Label* creatorJobTitleLbl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_CREATORJOBTITLE") + ":") ); + Gtk::Label* creatorJobTitleLbl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_CREATORJOBTITLE") + ":")); setExpandAlignProperties(creatorJobTitleLbl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - creatorJobTitle = Gtk::manage( new Gtk::Entry () ); + creatorJobTitle = Gtk::manage( new Gtk::Entry()); setExpandAlignProperties(creatorJobTitle, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - creatorJobTitleLbl->set_tooltip_text (M("IPTCPANEL_CREATORJOBTITLEHINT")); - creatorJobTitle->set_tooltip_text (M("IPTCPANEL_CREATORJOBTITLEHINT")); - iptc->attach (*creatorJobTitleLbl, 0, row++, 1, 1); - iptc->attach (*creatorJobTitle, 0, row++, 1, 1); + creatorJobTitleLbl->set_tooltip_text(M("IPTCPANEL_CREATORJOBTITLEHINT")); + creatorJobTitle->set_tooltip_text(M("IPTCPANEL_CREATORJOBTITLEHINT")); + iptc->attach(*creatorJobTitleLbl, 0, row++, 1, 1); + iptc->attach(*creatorJobTitle, 0, row++, 1, 1); // -------------------------- - Gtk::Label* credl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_CREDIT") + ":") ); + Gtk::Label* credl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_CREDIT") + ":")); setExpandAlignProperties(credl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - credit = Gtk::manage( new Gtk::Entry () ); + credit = Gtk::manage(new Gtk::Entry()); setExpandAlignProperties(credit, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - credl->set_tooltip_text (M("IPTCPANEL_CREDITHINT")); - credit->set_tooltip_text (M("IPTCPANEL_CREDITHINT")); - iptc->attach (*credl, 0, row++, 1, 1); - iptc->attach (*credit, 0, row++, 1, 1); + credl->set_tooltip_text(M("IPTCPANEL_CREDITHINT")); + credit->set_tooltip_text(M("IPTCPANEL_CREDITHINT")); + iptc->attach(*credl, 0, row++, 1, 1); + iptc->attach(*credit, 0, row++, 1, 1); // -------------------------- - Gtk::Label* sourl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_SOURCE") + ":") ); + Gtk::Label* sourl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_SOURCE") + ":")); setExpandAlignProperties(sourl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - source = Gtk::manage( new Gtk::Entry () ); + source = Gtk::manage(new Gtk::Entry()); setExpandAlignProperties(source, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - sourl->set_tooltip_text (M("IPTCPANEL_SOURCEHINT")); - source->set_tooltip_text (M("IPTCPANEL_SOURCEHINT")); - iptc->attach (*sourl, 0, row++, 1, 1); - iptc->attach (*source, 0, row++, 1, 1); + sourl->set_tooltip_text(M("IPTCPANEL_SOURCEHINT")); + source->set_tooltip_text(M("IPTCPANEL_SOURCEHINT")); + iptc->attach(*sourl, 0, row++, 1, 1); + iptc->attach(*source, 0, row++, 1, 1); // -------------------------- - Gtk::Label* cprl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_COPYRIGHT") + ":") ); + Gtk::Label* cprl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_COPYRIGHT") + ":")); setExpandAlignProperties(cprl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - copyright = Gtk::manage( new Gtk::Entry () ); + copyright = Gtk::manage(new Gtk::Entry()); setExpandAlignProperties(copyright, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - cprl->set_tooltip_text (M("IPTCPANEL_COPYRIGHTHINT")); - copyright->set_tooltip_text (M("IPTCPANEL_COPYRIGHTHINT")); - iptc->attach (*cprl, 0, row++, 1, 1); - iptc->attach (*copyright, 0, row++, 1, 1); + cprl->set_tooltip_text(M("IPTCPANEL_COPYRIGHTHINT")); + copyright->set_tooltip_text(M("IPTCPANEL_COPYRIGHTHINT")); + iptc->attach(*cprl, 0, row++, 1, 1); + iptc->attach(*copyright, 0, row++, 1, 1); // -------------------------- - Gtk::Separator* hsep4 = Gtk::manage( new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL) ); + Gtk::Separator* hsep4 = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_HORIZONTAL)); setExpandAlignProperties(hsep4, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - iptc->attach (*hsep4, 0, row++, 2, 1); + iptc->attach(*hsep4, 0, row++, 2, 1); // -------------------------- - Gtk::Label* cityl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_CITY") + ":") ); + Gtk::Label* cityl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_CITY") + ":")); setExpandAlignProperties(cityl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - city = Gtk::manage( new Gtk::Entry () ); + city = Gtk::manage(new Gtk::Entry()); setExpandAlignProperties(city, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - cityl->set_tooltip_text (M("IPTCPANEL_CITYHINT")); - city->set_tooltip_text (M("IPTCPANEL_CITYHINT")); - iptc->attach (*cityl, 0, row++, 1, 1); - iptc->attach (*city, 0, row++, 1, 1); + cityl->set_tooltip_text(M("IPTCPANEL_CITYHINT")); + city->set_tooltip_text(M("IPTCPANEL_CITYHINT")); + iptc->attach(*cityl, 0, row++, 1, 1); + iptc->attach(*city, 0, row++, 1, 1); // -------------------------- - Gtk::Label* provl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_PROVINCE") + ":") ); + Gtk::Label* provl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_PROVINCE") + ":")); setExpandAlignProperties(provl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - province = Gtk::manage( new Gtk::Entry () ); + province = Gtk::manage(new Gtk::Entry()); setExpandAlignProperties(province, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - provl->set_tooltip_text (M("IPTCPANEL_PROVINCEHINT")); - province->set_tooltip_text (M("IPTCPANEL_PROVINCEHINT")); - iptc->attach (*provl, 0, row++, 1, 1); - iptc->attach (*province, 0, row++, 1, 1); + provl->set_tooltip_text(M("IPTCPANEL_PROVINCEHINT")); + province->set_tooltip_text(M("IPTCPANEL_PROVINCEHINT")); + iptc->attach(*provl, 0, row++, 1, 1); + iptc->attach(*province, 0, row++, 1, 1); // -------------------------- - Gtk::Label* ctrl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_COUNTRY") + ":") ); + Gtk::Label* ctrl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_COUNTRY") + ":")); setExpandAlignProperties(ctrl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - country = Gtk::manage( new Gtk::Entry () ); + country = Gtk::manage(new Gtk::Entry()); setExpandAlignProperties(country, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - ctrl->set_tooltip_text (M("IPTCPANEL_COUNTRYHINT")); - country->set_tooltip_text (M("IPTCPANEL_COUNTRYHINT")); - iptc->attach (*ctrl, 0, row++, 1, 1); - iptc->attach (*country, 0, row++, 1, 1); + ctrl->set_tooltip_text(M("IPTCPANEL_COUNTRYHINT")); + country->set_tooltip_text(M("IPTCPANEL_COUNTRYHINT")); + iptc->attach(*ctrl, 0, row++, 1, 1); + iptc->attach(*country, 0, row++, 1, 1); // -------------------------- - Gtk::Label* titll = Gtk::manage( new Gtk::Label (M("IPTCPANEL_TITLE") + ":") ); + Gtk::Label* titll = Gtk::manage(new Gtk::Label(M("IPTCPANEL_TITLE") + ":")); setExpandAlignProperties(titll, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - title = Gtk::manage( new Gtk::Entry () ); + title = Gtk::manage(new Gtk::Entry()); setExpandAlignProperties(title, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - titll->set_tooltip_text (M("IPTCPANEL_TITLEHINT")); - title->set_tooltip_text (M("IPTCPANEL_TITLEHINT")); - iptc->attach (*titll, 0, row++, 1, 1); - iptc->attach (*title, 0, row++, 1, 1); + titll->set_tooltip_text(M("IPTCPANEL_TITLEHINT")); + title->set_tooltip_text(M("IPTCPANEL_TITLEHINT")); + iptc->attach(*titll, 0, row++, 1, 1); + iptc->attach(*title, 0, row++, 1, 1); // -------------------------- - Gtk::Label* dcl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_DATECREATED") + ":") ); + Gtk::Label* dcl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_DATECREATED") + ":")); setExpandAlignProperties(dcl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - dateCreated = Gtk::manage( new Gtk::Entry () ); + dateCreated = Gtk::manage( new Gtk::Entry()); setExpandAlignProperties(dateCreated, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - dcl->set_tooltip_text (M("IPTCPANEL_DATECREATEDHINT")); - dateCreated->set_tooltip_text (M("IPTCPANEL_DATECREATEDHINT")); - iptc->attach (*dcl, 0, row++, 1, 1); - iptc->attach (*dateCreated, 0, row++, 1, 1); + dcl->set_tooltip_text(M("IPTCPANEL_DATECREATEDHINT")); + dateCreated->set_tooltip_text(M("IPTCPANEL_DATECREATEDHINT")); + iptc->attach(*dcl, 0, row++, 1, 1); + iptc->attach(*dateCreated, 0, row++, 1, 1); // -------------------------- - Gtk::Label* trl = Gtk::manage( new Gtk::Label (M("IPTCPANEL_TRANSREFERENCE") + ":") ); + Gtk::Label* trl = Gtk::manage(new Gtk::Label(M("IPTCPANEL_TRANSREFERENCE") + ":")); setExpandAlignProperties(trl, true, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); - transReference = Gtk::manage( new Gtk::Entry () ); + transReference = Gtk::manage(new Gtk::Entry()); setExpandAlignProperties(transReference, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - trl->set_tooltip_text (M("IPTCPANEL_TRANSREFERENCEHINT")); - transReference->set_tooltip_text (M("IPTCPANEL_TRANSREFERENCEHINT")); - iptc->attach (*trl, 0, row++, 1, 1); - iptc->attach (*transReference, 0, row++, 1, 1); + trl->set_tooltip_text(M("IPTCPANEL_TRANSREFERENCEHINT")); + transReference->set_tooltip_text(M("IPTCPANEL_TRANSREFERENCEHINT")); + iptc->attach(*trl, 0, row++, 1, 1); + iptc->attach(*transReference, 0, row++, 1, 1); // -------------------------- - Gtk::ScrolledWindow* scrolledWindow = Gtk::manage( new Gtk::ScrolledWindow() ); + Gtk::ScrolledWindow* scrolledWindow = Gtk::manage(new Gtk::ScrolledWindow()); setExpandAlignProperties(scrolledWindow, false, true, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); scrolledWindow->set_shadow_type(Gtk::SHADOW_NONE); scrolledWindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS); scrolledWindow->property_window_placement().set_value(Gtk::CORNER_TOP_RIGHT); scrolledWindow->add(*iptc); - pack_start (*scrolledWindow); + pack_start(*scrolledWindow); - Gtk::Grid* bbox = Gtk::manage( new Gtk::Grid () ); + Gtk::Grid* bbox = Gtk::manage(new Gtk::Grid()); setExpandAlignProperties(bbox, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); - reset = Gtk::manage( new Gtk::Button () ); // M("IPTCPANEL_RESET") + reset = Gtk::manage(new Gtk::Button()); // M("IPTCPANEL_RESET") reset->get_style_context()->add_class("Left"); - reset->set_image (*Gtk::manage(new RTImage ("undo.png", "redo.png"))); + reset->set_image(*Gtk::manage(new RTImage("undo.png", "redo.png"))); setExpandAlignProperties(reset, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - bbox->attach_next_to (*reset, Gtk::POS_LEFT, 1, 1); + bbox->attach_next_to(*reset, Gtk::POS_LEFT, 1, 1); - file = Gtk::manage( new Gtk::Button () ); // M("IPTCPANEL_EMBEDDED") + file = Gtk::manage(new Gtk::Button()); // M("IPTCPANEL_EMBEDDED") file->get_style_context()->add_class("MiddleH"); - file->set_image (*Gtk::manage(new RTImage ("folder-open.png"))); + file->set_image(*Gtk::manage(new RTImage("folder-open.png"))); setExpandAlignProperties(file, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - bbox->attach_next_to (*file, Gtk::POS_RIGHT, 1, 1); + bbox->attach_next_to(*file, Gtk::POS_RIGHT, 1, 1); - copy = Gtk::manage( new Gtk::Button () ); + copy = Gtk::manage(new Gtk::Button()); copy->get_style_context()->add_class("MiddleH"); - copy->set_image (*Gtk::manage(new RTImage ("copy.png"))); + copy->set_image(*Gtk::manage(new RTImage("copy.png"))); setExpandAlignProperties(copy, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - bbox->attach_next_to (*copy, Gtk::POS_RIGHT, 1, 1); + bbox->attach_next_to(*copy, Gtk::POS_RIGHT, 1, 1); - paste = Gtk::manage( new Gtk::Button () ); + paste = Gtk::manage(new Gtk::Button()); paste->get_style_context()->add_class("Right"); - paste->set_image (*Gtk::manage(new RTImage ("paste.png"))); + paste->set_image(*Gtk::manage(new RTImage("paste.png"))); setExpandAlignProperties(paste, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); - bbox->attach_next_to (*paste, Gtk::POS_RIGHT, 1, 1); + bbox->attach_next_to(*paste, Gtk::POS_RIGHT, 1, 1); - pack_end (*bbox, Gtk::PACK_SHRINK, 2); + pack_end(*bbox, Gtk::PACK_SHRINK, 2); reset->set_tooltip_text(M("IPTCPANEL_RESETHINT")); file->set_tooltip_text(M("IPTCPANEL_EMBEDDEDHINT")); copy->set_tooltip_text(M("IPTCPANEL_COPYHINT")); paste->set_tooltip_text(M("IPTCPANEL_PASTEHINT")); - reset->signal_clicked().connect( sigc::mem_fun(*this, &IPTCPanel::resetClicked) ); - file->signal_clicked().connect( sigc::mem_fun(*this, &IPTCPanel::fileClicked) ); - copy->signal_clicked().connect( sigc::mem_fun(*this, &IPTCPanel::copyClicked) ); - paste->signal_clicked().connect( sigc::mem_fun(*this, &IPTCPanel::pasteClicked) ); + reset->signal_clicked().connect(sigc::mem_fun(*this, &IPTCPanel::resetClicked)); + file->signal_clicked().connect(sigc::mem_fun(*this, &IPTCPanel::fileClicked)); + copy->signal_clicked().connect(sigc::mem_fun(*this, &IPTCPanel::copyClicked)); + paste->signal_clicked().connect(sigc::mem_fun(*this, &IPTCPanel::pasteClicked)); - addKW->signal_clicked().connect( sigc::mem_fun(*this, &IPTCPanel::addKeyWord) ); - delKW->signal_clicked().connect( sigc::mem_fun(*this, &IPTCPanel::delKeyWord) ); - addSC->signal_clicked().connect( sigc::mem_fun(*this, &IPTCPanel::addSuppCategory) ); - delSC->signal_clicked().connect( sigc::mem_fun(*this, &IPTCPanel::delSuppCategory) ); - keyword->get_entry()->signal_activate().connect( sigc::mem_fun(*this, &IPTCPanel::addKeyWord) ); - suppCategory->get_entry()->signal_activate().connect( sigc::mem_fun(*this, &IPTCPanel::addSuppCategory) ); + addKW->signal_clicked().connect(sigc::mem_fun(*this, &IPTCPanel::addKeyWord)); + delKW->signal_clicked().connect(sigc::mem_fun(*this, &IPTCPanel::delKeyWord)); + addSC->signal_clicked().connect(sigc::mem_fun(*this, &IPTCPanel::addSuppCategory)); + delSC->signal_clicked().connect(sigc::mem_fun(*this, &IPTCPanel::delSuppCategory)); + keyword->get_entry()->signal_activate().connect(sigc::mem_fun(*this, &IPTCPanel::addKeyWord)); + suppCategory->get_entry()->signal_activate().connect(sigc::mem_fun(*this, &IPTCPanel::addSuppCategory)); - conns[0] = captionText->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[1] = captionWriter->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[2] = headline->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[3] = instructions->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[4] = category->get_entry()->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[5] = creator->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[6] = creatorJobTitle->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[7] = credit->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[8] = source->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[9] = copyright->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[10] = city->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[11] = province->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[12] = country->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[13] = title->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[14] = dateCreated->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); - conns[15] = transReference->signal_changed().connect( sigc::mem_fun(*this, &IPTCPanel::updateChangeList) ); + conns[0] = captionText->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[1] = captionWriter->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[2] = headline->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[3] = instructions->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[4] = category->get_entry()->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[5] = creator->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[6] = creatorJobTitle->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[7] = credit->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[8] = source->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[9] = copyright->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[10] = city->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[11] = province->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[12] = country->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[13] = title->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[14] = dateCreated->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); + conns[15] = transReference->signal_changed().connect(sigc::mem_fun(*this, &IPTCPanel::updateChangeList)); - category->get_entry()->set_max_length (3); - keyword->get_entry()->set_max_length (64); - captionWriter->set_max_length (32); - instructions->set_max_length (256); - creator->set_max_length (32); - creatorJobTitle->set_max_length (32); - credit->set_max_length (32); - source->set_max_length (32); - copyright->set_max_length (128); - city->set_max_length (32); - province->set_max_length (32); - country->set_max_length (64); - title->set_max_length (64); - dateCreated->set_max_length (8); - transReference->set_max_length (32); + category->get_entry()->set_max_length(3); + keyword->get_entry()->set_max_length(64); + captionWriter->set_max_length(32); + instructions->set_max_length(256); + creator->set_max_length(32); + creatorJobTitle->set_max_length(32); + credit->set_max_length(32); + source->set_max_length(32); + copyright->set_max_length(128); + city->set_max_length(32); + province->set_max_length(32); + country->set_max_length(64); + title->set_max_length(64); + dateCreated->set_max_length(10); + transReference->set_max_length(32); - show_all (); + show_all(); } + void IPTCPanel::read (const ProcParams* pp, const ParamsEdited* pedited) { - - disableListener (); + disableListener(); changeList->clear(); - if (!pp->iptc.empty()) { - *changeList = pp->iptc; + if (!pp->metadata.iptc.empty()) { + *changeList = pp->metadata.iptc; + changelist_valid_ = true; } else { *changeList = *embeddedData; + changelist_valid_ = false; } - applyChangeList (); - enableListener (); + applyChangeList(); + enableListener(); } + void IPTCPanel::write (ProcParams* pp, ParamsEdited* pedited) { - - pp->iptc = *changeList; + if (changelist_valid_) { + pp->metadata.iptc = *changeList; + } else { + pp->metadata.iptc.clear(); + } } + void IPTCPanel::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) { - - *defChangeList = defParams->iptc; + *defChangeList = defParams->metadata.iptc; } -void IPTCPanel::setImageData (const FramesMetaData* id) -{ +void IPTCPanel::setImageData(const FramesMetaData* id) +{ + embeddedData->clear(); if (id) { - *embeddedData = id->getIPTCData (); - } else { - embeddedData->clear (); + try { + rtengine::Exiv2Metadata meta(id->getFileName()); + meta.load(); + auto& iptc = meta.iptcData(); + for (const auto& tag : iptc) { + if (iptc_keys.find(tag.key()) != iptc_keys.end()) { + (*embeddedData)[tag.key()].push_back(tag.toString()); + } + } + } catch (const std::exception& exc) { + embeddedData->clear(); + } } - file->set_sensitive (!embeddedData->empty()); + file->set_sensitive(!embeddedData->empty()); } -void IPTCPanel::notifyListener () -{ +void IPTCPanel::notifyListener() +{ if (listener) { - listener->panelChanged (EvIPTC, M("HISTORY_CHANGED")); + listener->panelChanged(EvIPTC, M("HISTORY_CHANGED")); } } -void IPTCPanel::addKeyWord () + +void IPTCPanel::addKeyWord() { + keyword->get_entry()->select_region(0, keyword->get_entry()->get_text().size()); - keyword->get_entry()->select_region (0, keyword->get_entry()->get_text().size()); - - for (unsigned int i = 0; i < keywords->size(); i++) - if (keywords->get_text (i) == keyword->get_entry()->get_text()) { + for (unsigned int i = 0; i < keywords->size(); i++) { + if (keywords->get_text(i) == keyword->get_entry()->get_text()) { return; } + } - keywords->append (keyword->get_entry()->get_text()); - keyword->prepend (keyword->get_entry()->get_text()); + keywords->append(keyword->get_entry()->get_text()); + keyword->prepend(keyword->get_entry()->get_text()); std::vector items; for (Gtk::TreeModel::iterator i = keyword->get_model()->children().begin(); i != keyword->get_model()->children().end(); ++i) { Glib::ustring s; - i->get_value (0, s); - items.push_back (s); + i->get_value(0, s); + items.push_back(s); } - keyword->remove_all (); + keyword->remove_all(); for (unsigned int i = 0; i < 10 && i < items.size(); i++) { - keyword->append (items[i]); + keyword->append(items[i]); } - keywords->scroll_to_row (keywords->get_model()->get_path(--keywords->get_model()->children().end())); + keywords->scroll_to_row(keywords->get_model()->get_path(--keywords->get_model()->children().end())); - updateChangeList (); + updateChangeList(); } -void IPTCPanel::delKeyWord () -{ - std::vector selection = keywords->get_selected (); +void IPTCPanel::delKeyWord() +{ + std::vector selection = keywords->get_selected(); if (!selection.empty()) { std::vector keep; for (unsigned int i = 0; i < keywords->size(); i++) - if (std::find (selection.begin(), selection.end(), i) == selection.end()) { - keep.push_back (keywords->get_text (i)); + if (std::find(selection.begin(), selection.end(), i) == selection.end()) { + keep.push_back(keywords->get_text(i)); } - keywords->clear_items (); + keywords->clear_items(); - for (unsigned int i = 0; i < keep.size(); i++) { - keywords->append (keep[i]); + for(unsigned int i = 0; i < keep.size(); i++) { + keywords->append(keep[i]); } } - updateChangeList (); + updateChangeList(); } -void IPTCPanel::addSuppCategory () +void IPTCPanel::addSuppCategory() { for (unsigned int i = 0; i < suppCategories->size(); i++) - if (suppCategories->get_text (i) == suppCategory->get_entry()->get_text()) { + if (suppCategories->get_text(i) == suppCategory->get_entry()->get_text()) { return; } - suppCategories->append (suppCategory->get_entry()->get_text()); - suppCategory->prepend (suppCategory->get_entry()->get_text()); + suppCategories->append(suppCategory->get_entry()->get_text()); + suppCategory->prepend(suppCategory->get_entry()->get_text()); std::vector items; for (Gtk::TreeModel::iterator i = suppCategory->get_model()->children().begin(); i != suppCategory->get_model()->children().end(); ++i) { Glib::ustring s; - i->get_value (0, s); - items.push_back (s); + i->get_value(0, s); + items.push_back(s); } - suppCategory->remove_all (); + suppCategory->remove_all(); for (unsigned int i = 0; i < 10 && i < items.size(); i++) { - suppCategory->append (items[i]); + suppCategory->append(items[i]); } - suppCategories->scroll_to_row (suppCategories->get_model()->get_path(--suppCategories->get_model()->children().end())); - suppCategory->get_entry()->select_region (0, suppCategory->get_entry()->get_text().size()); + suppCategories->scroll_to_row(suppCategories->get_model()->get_path(--suppCategories->get_model()->children().end())); + suppCategory->get_entry()->select_region(0, suppCategory->get_entry()->get_text().size()); - updateChangeList (); + updateChangeList(); } -void IPTCPanel::delSuppCategory () +void IPTCPanel::delSuppCategory() { - std::vector selection = suppCategories->get_selected (); + std::vector selection = suppCategories->get_selected(); if (!selection.empty()) { std::vector keep; for (unsigned int i = 0; i < suppCategories->size(); i++) - if (std::find (selection.begin(), selection.end(), i) == selection.end()) { - keep.push_back (suppCategories->get_text (i)); + if (std::find(selection.begin(), selection.end(), i) == selection.end()) { + keep.push_back(suppCategories->get_text(i)); } - suppCategories->clear_items (); + suppCategories->clear_items(); for (unsigned int i = 0; i < keep.size(); i++) { - suppCategories->append (keep[i]); + suppCategories->append(keep[i]); } } - updateChangeList (); + updateChangeList(); } -void IPTCPanel::updateChangeList () +void IPTCPanel::updateChangeList() { + changelist_valid_ = true; + changeList->clear(); + (*changeList)[CAPTION].push_back(captionText->get_text()); + (*changeList)[CAPTION_WRITER].push_back(captionWriter->get_text()); + (*changeList)[HEADLINE].push_back(headline->get_text()); + (*changeList)[INSTRUCTIONS].push_back(instructions->get_text()); - changeList->clear (); - (*changeList)["Caption" ].push_back (captionText->get_text ()); - (*changeList)["CaptionWriter" ].push_back (captionWriter->get_text ()); - (*changeList)["Headline" ].push_back (headline->get_text ()); - (*changeList)["Instructions" ].push_back (instructions->get_text ()); - + std::set sset; + sset.clear(); for (unsigned int i = 0; i < keywords->size(); i++) { - (*changeList)["Keywords" ].push_back (keywords->get_text (i)); + sset.insert(keywords->get_text(i)); + } + for (auto &s : sset) { + (*changeList)[KEYWORDS].push_back(s); } - (*changeList)["Category" ].push_back (category->get_entry()->get_text ()); + (*changeList)[CATEGORY].push_back(category->get_entry()->get_text()); + sset.clear(); for (unsigned int i = 0; i < suppCategories->size(); i++) { - (*changeList)["SupplementalCategories"].push_back (suppCategories->get_text (i)); + sset.insert(suppCategories->get_text(i)); + } + for (auto &s : sset) { + (*changeList)[SUPPLEMENTAL_CATEGORIES].push_back(s); } - (*changeList)["Creator" ].push_back (creator->get_text ()); - (*changeList)["CreatorJobTitle"].push_back (creatorJobTitle->get_text ()); - (*changeList)["Credit" ].push_back (credit->get_text ()); - (*changeList)["Source" ].push_back (source->get_text ()); - (*changeList)["Copyright" ].push_back (copyright->get_text ()); - (*changeList)["City" ].push_back (city->get_text ()); - (*changeList)["Province" ].push_back (province->get_text ()); - (*changeList)["Country" ].push_back (country->get_text ()); - (*changeList)["Title" ].push_back (title->get_text ()); - (*changeList)["DateCreated" ].push_back (dateCreated->get_text ()); - (*changeList)["TransReference" ].push_back (transReference->get_text ()); + (*changeList)[CREATOR].push_back(creator->get_text()); + (*changeList)[CREATOR_JOB_TITLE].push_back(creatorJobTitle->get_text()); + (*changeList)[CREDIT].push_back(credit->get_text()); + (*changeList)[SOURCE].push_back(source->get_text()); + (*changeList)[COPYRIGHT].push_back(copyright->get_text()); + (*changeList)[CITY].push_back(city->get_text()); + (*changeList)[PROVINCE].push_back(province->get_text()); + (*changeList)[COUNTRY].push_back(country->get_text()); + (*changeList)[TITLE].push_back(title->get_text()); + (*changeList)[DATE_CREATED].push_back(dateCreated->get_text()); + (*changeList)[TRANS_REFERENCE].push_back(transReference->get_text()); - notifyListener (); + for (auto &p : *embeddedData) { + auto it = changeList->find(p.first); + if (it != changeList->end() && p.second == it->second) { + changeList->erase(it); + } + } + + notifyListener(); } -void IPTCPanel::applyChangeList () -{ +void IPTCPanel::applyChangeList() +{ for (int i = 0; i < 16; i++) { - conns[i].block (true); + conns[i].block(true); } - captionText->set_text (""); - captionWriter->set_text (""); - headline->set_text (""); - instructions->set_text (""); - keywords->clear_items (); - category->get_entry()->set_text (""); - suppCategories->clear_items (); - creator->set_text (""); - creatorJobTitle->set_text (""); - credit->set_text (""); - source->set_text (""); - copyright->set_text (""); - city->set_text (""); - province->set_text (""); - country->set_text (""); - title->set_text (""); - dateCreated->set_text (""); - transReference->set_text (""); - keyword->get_entry()->set_text (""); - suppCategory->get_entry()->set_text (""); + captionText->set_text(""); + captionWriter->set_text(""); + headline->set_text(""); + instructions->set_text(""); + keywords->clear_items(); + category->get_entry()->set_text(""); + suppCategories->clear_items(); + creator->set_text(""); + creatorJobTitle->set_text(""); + credit->set_text(""); + source->set_text(""); + copyright->set_text(""); + city->set_text(""); + province->set_text(""); + country->set_text(""); + title->set_text(""); + dateCreated->set_text(""); + transReference->set_text(""); + keyword->get_entry()->set_text(""); + suppCategory->get_entry()->set_text(""); for (rtengine::procparams::IPTCPairs::const_iterator i = changeList->begin(); i != changeList->end(); ++i) { - if (i->first == "Caption" && !i->second.empty()) { - captionText->set_text (i->second.at(0)); - } else if (i->first == "CaptionWriter" && !i->second.empty()) { - captionWriter->set_text (i->second.at(0)); - } else if (i->first == "Headline" && !i->second.empty()) { - headline->set_text (i->second.at(0)); - } else if (i->first == "Instructions" && !i->second.empty()) { - instructions->set_text (i->second.at(0)); - } else if (i->first == "Keywords") + if (i->first == CAPTION && !i->second.empty()) { + captionText->set_text(i->second.at(0)); + } else if (i->first == CAPTION_WRITER && !i->second.empty()) { + captionWriter->set_text(i->second.at(0)); + } else if (i->first == HEADLINE && !i->second.empty()) { + headline->set_text(i->second.at(0)); + } else if (i->first == INSTRUCTIONS && !i->second.empty()) { + instructions->set_text(i->second.at(0)); + } else if (i->first == KEYWORDS) { + std::set sset; for (unsigned int j = 0; j < i->second.size(); j++) { - keywords->append (i->second.at(j)); + sset.insert(i->second[j]); } - else if (i->first == "Category" && !i->second.empty()) { - category->get_entry()->set_text (i->second.at(0)); - } else if (i->first == "SupplementalCategories") + for (auto &s : sset) { + keywords->append(s); + } + } else if (i->first == CATEGORY && !i->second.empty()) { + category->get_entry()->set_text(i->second.at(0)); + } else if (i->first == SUPPLEMENTAL_CATEGORIES) { + std::set sset; for (unsigned int j = 0; j < i->second.size(); j++) { - suppCategories->append (i->second.at(j)); + sset.insert(i->second[j]); } - else if (i->first == "Creator" && !i->second.empty()) { - creator->set_text (i->second.at(0)); - } else if (i->first == "CreatorJobTitle" && !i->second.empty()) { - creatorJobTitle->set_text (i->second.at(0)); - } else if (i->first == "Credit" && !i->second.empty()) { - credit->set_text (i->second.at(0)); - } else if (i->first == "Source" && !i->second.empty()) { - source->set_text (i->second.at(0)); - } else if (i->first == "Copyright" && !i->second.empty()) { - copyright->set_text (i->second.at(0)); - } else if (i->first == "City" && !i->second.empty()) { - city->set_text (i->second.at(0)); - } else if (i->first == "Province" && !i->second.empty()) { - province->set_text (i->second.at(0)); - } else if (i->first == "Country" && !i->second.empty()) { - country->set_text (i->second.at(0)); - } else if (i->first == "Title" && !i->second.empty()) { - title->set_text (i->second.at(0)); - } else if (i->first == "DateCreated" && !i->second.empty()) { - dateCreated->set_text (i->second.at(0)); - } else if (i->first == "TransReference" && !i->second.empty()) { - transReference->set_text (i->second.at(0)); + for (auto &s : sset) { + suppCategories->append(s); + } + } else if (i->first == CREATOR && !i->second.empty()) { + creator->set_text(i->second.at(0)); + } else if (i->first == CREATOR_JOB_TITLE && !i->second.empty()) { + creatorJobTitle->set_text(i->second.at(0)); + } else if (i->first == CREDIT && !i->second.empty()) { + credit->set_text(i->second.at(0)); + } else if (i->first == SOURCE && !i->second.empty()) { + source->set_text(i->second.at(0)); + } else if (i->first == COPYRIGHT && !i->second.empty()) { + copyright->set_text(i->second.at(0)); + } else if (i->first == CITY && !i->second.empty()) { + city->set_text(i->second.at(0)); + } else if (i->first == PROVINCE && !i->second.empty()) { + province->set_text(i->second.at(0)); + } else if (i->first == COUNTRY && !i->second.empty()) { + country->set_text(i->second.at(0)); + } else if (i->first == TITLE && !i->second.empty()) { + title->set_text(i->second.at(0)); + } else if (i->first == DATE_CREATED && !i->second.empty()) { + dateCreated->set_text(i->second.at(0)); + } else if (i->first == TRANS_REFERENCE && !i->second.empty()) { + transReference->set_text(i->second.at(0)); } } for (int i = 0; i < 16; i++) { - conns[i].block (false); + conns[i].block(false); } } -void IPTCPanel::resetClicked () +void IPTCPanel::resetClicked() { - - disableListener (); + disableListener(); *changeList = *defChangeList; - applyChangeList (); - enableListener (); - notifyListener (); + changelist_valid_ = false; + applyChangeList(); + enableListener(); + notifyListener(); } -void IPTCPanel::fileClicked () +void IPTCPanel::fileClicked() { - disableListener (); + disableListener(); *changeList = *embeddedData; - applyChangeList (); - enableListener (); - notifyListener (); + applyChangeList(); + enableListener(); + notifyListener(); } -void IPTCPanel::copyClicked () +void IPTCPanel::copyClicked() { - clipboard.setIPTC (*changeList); + clipboard.setIPTC(*changeList); } -void IPTCPanel::pasteClicked () +void IPTCPanel::pasteClicked() { - disableListener (); - *changeList = clipboard.getIPTC (); - applyChangeList (); - enableListener (); - notifyListener (); + disableListener(); + *changeList = clipboard.getIPTC(); + applyChangeList(); + enableListener(); + notifyListener(); } diff --git a/rtgui/iptcpanel.h b/rtgui/iptcpanel.h index da52fa7d2..66564a151 100644 --- a/rtgui/iptcpanel.h +++ b/rtgui/iptcpanel.h @@ -34,6 +34,7 @@ private: const std::unique_ptr changeList; const std::unique_ptr defChangeList; const std::unique_ptr embeddedData; + bool changelist_valid_; Gtk::TextView* captionView; Glib::RefPtr captionText; diff --git a/rtgui/lensprofile.cc b/rtgui/lensprofile.cc index 65c962b7b..784c49f15 100644 --- a/rtgui/lensprofile.cc +++ b/rtgui/lensprofile.cc @@ -129,7 +129,7 @@ LensProfilePanel::LensProfilePanel() : const Glib::ustring defDir = LCPStore::getInstance()->getDefaultCommonDirectory(); if (!defDir.empty()) { -#ifdef WIN32 +#ifdef _WIN32 corrLcpFileChooser->set_show_hidden(true); // ProgramData is hidden on Windows #endif corrLcpFileChooser->set_current_folder(defDir); @@ -441,6 +441,7 @@ void LensProfilePanel::setBatchMode(bool yes) modesGrid->attach_next_to(*corrUnchangedRB, Gtk::POS_TOP, 3, 1); corrUnchangedRB->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &LensProfilePanel::onCorrModeChanged), corrUnchangedRB)); corrUnchangedRB->set_active(true); + corrUnchangedRB->show(); } void LensProfilePanel::onLensfunCameraChanged() diff --git a/rtgui/main-cli.cc b/rtgui/main-cli.cc index cebced274..6d63d194a 100644 --- a/rtgui/main-cli.cc +++ b/rtgui/main-cli.cc @@ -41,7 +41,7 @@ #include "extprog.h" #include "pathutils.h" -#ifndef WIN32 +#ifndef _WIN32 #include #include #include @@ -67,25 +67,6 @@ Glib::ustring argv1; namespace { -// For an unknown reason, Glib::filename_to_utf8 doesn't work on reliably Windows, -// so we're using Glib::filename_to_utf8 for Linux/Apple and Glib::locale_to_utf8 for Windows. -Glib::ustring fname_to_utf8 (const char* fname) -{ -#ifdef WIN32 - - try { - return Glib::locale_to_utf8 (fname); - } catch (Glib::Error&) { - return Glib::convert_with_fallback (fname, "UTF-8", "ISO-8859-1", "?"); - } - -#else - - return Glib::filename_to_utf8 (fname); - -#endif -} - bool fast_export = false; } @@ -115,7 +96,7 @@ int main (int argc, char **argv) char exname[512] = {0}; Glib::ustring exePath; // get the path where the rawtherapee executable is stored -#ifdef WIN32 +#ifdef _WIN32 WCHAR exnameU[512] = {0}; GetModuleFileNameW (NULL, exnameU, 511); WideCharToMultiByte (CP_UTF8, 0, exnameU, -1, exname, 511, 0, 0 ); @@ -201,7 +182,7 @@ int main (int argc, char **argv) TIFFSetWarningHandler (nullptr); // avoid annoying message boxes -#ifndef WIN32 +#ifndef _WIN32 // Move the old path to the new one if the new does not exist if (Glib::file_test (Glib::build_filename (options.rtdir, "cache"), Glib::FILE_TEST_IS_DIR) && !Glib::file_test (options.cacheBaseDir, Glib::FILE_TEST_IS_DIR)) { diff --git a/rtgui/main.cc b/rtgui/main.cc index 30e2d7da6..af8a6b638 100644 --- a/rtgui/main.cc +++ b/rtgui/main.cc @@ -44,8 +44,9 @@ #include "extprog.h" #include "../rtengine/dynamicprofile.h" #include "../rtengine/procparams.h" +#include "pathutils.h" -#ifndef WIN32 +#ifndef _WIN32 #include #include #include @@ -71,27 +72,7 @@ bool remote = false; unsigned char initialGdkScale = 1; //Glib::Threads::Thread* mainThread; -namespace -{ - -// For an unknown reason, Glib::filename_to_utf8 doesn't work on reliably Windows, -// so we're using Glib::filename_to_utf8 for Linux/Apple and Glib::locale_to_utf8 for Windows. -Glib::ustring fname_to_utf8 (const char* fname) -{ -#ifdef WIN32 - - try { - return Glib::locale_to_utf8 (fname); - } catch (Glib::Error&) { - return Glib::convert_with_fallback (fname, "UTF-8", "ISO-8859-1", "?"); - } - -#else - - return Glib::filename_to_utf8 (fname); - -#endif -} +namespace { // This recursive mutex will be used by gdk_threads_enter/leave instead of a simple mutex static Glib::Threads::RecMutex myGdkRecMutex; @@ -140,7 +121,7 @@ int processLineParams ( int argc, char **argv ) // GTK --argument, we're skipping it break; -#ifdef WIN32 +#ifdef _WIN32 case 'w': // This case is handled outside this function break; @@ -186,7 +167,7 @@ int processLineParams ( int argc, char **argv ) printf(" %s Start Image Editor with file.\n\n",Glib::path_get_basename (argv[0]).c_str()); std::cout << std::endl; printf("Options:\n"); -#ifdef WIN32 +#ifdef _WIN32 printf(" -w Do not open the Windows console\n"); #endif printf(" -v Print RawTherapee version number and exit\n"); @@ -229,7 +210,7 @@ bool init_rt() TIFFSetWarningHandler (nullptr); // avoid annoying message boxes } -#ifndef WIN32 +#ifndef _WIN32 // Move the old path to the new one if the new does not exist if (Glib::file_test (Glib::build_filename (options.rtdir, "cache"), Glib::FILE_TEST_IS_DIR) && !Glib::file_test (options.cacheBaseDir, Glib::FILE_TEST_IS_DIR)) { @@ -381,7 +362,7 @@ int main (int argc, char **argv) Glib::init(); // called by Gtk::Main, but this may be important for thread handling, so we call it ourselves now Gio::init (); -#ifdef WIN32 +#ifdef _WIN32 if (GetFileType (GetStdHandle (STD_OUTPUT_HANDLE)) == 0x0003) { // started from msys2 console => do not buffer stdout setbuf(stdout, NULL); @@ -392,7 +373,7 @@ int main (int argc, char **argv) char exname[512] = {0}; Glib::ustring exePath; // get the path where the rawtherapee executable is stored -#ifdef WIN32 +#ifdef _WIN32 WCHAR exnameU[512] = {0}; GetModuleFileNameW (NULL, exnameU, 511); WideCharToMultiByte (CP_UTF8, 0, exnameU, -1, exname, 511, 0, 0 ); @@ -435,7 +416,7 @@ int main (int argc, char **argv) options.rtSettings.lensfunDbBundleDirectory = LENSFUN_DB_PATH; #endif -#ifdef WIN32 +#ifdef _WIN32 bool consoleOpened = false; // suppression of annoying error boxes @@ -586,7 +567,7 @@ int main (int argc, char **argv) } } -#ifdef WIN32 +#ifdef _WIN32 if (consoleOpened) { printf ("Press any key to exit RawTherapee\n"); diff --git a/rtgui/md5helper.h b/rtgui/md5helper.h index 17ee70f3a..3845d0462 100644 --- a/rtgui/md5helper.h +++ b/rtgui/md5helper.h @@ -23,7 +23,7 @@ #include #include -#ifdef WIN32 +#ifdef _WIN32 #include #endif @@ -35,7 +35,7 @@ std::string getMD5 (const Glib::ustring& fname) if (file && file->query_exists ()) { -#ifdef WIN32 +#ifdef _WIN32 std::unique_ptr wfname (reinterpret_cast (g_utf8_to_utf16 (fname.c_str (), -1, NULL, NULL, NULL)), g_free); diff --git a/rtgui/metadatapanel.cc b/rtgui/metadatapanel.cc index e26444ccc..4e6252da4 100644 --- a/rtgui/metadatapanel.cc +++ b/rtgui/metadatapanel.cc @@ -127,3 +127,9 @@ void MetaDataPanel::metaDataModeChanged() listener->panelChanged(EvMetaDataMode, M("HISTORY_CHANGED")); } } + + +void MetaDataPanel::setProgressListener(rtengine::ProgressListener *pl) +{ + exifpanel->setProgressListener(pl); +} diff --git a/rtgui/metadatapanel.h b/rtgui/metadatapanel.h index bc74ac484..aacbb9fe1 100644 --- a/rtgui/metadatapanel.h +++ b/rtgui/metadatapanel.h @@ -45,5 +45,7 @@ public: void setImageData(const rtengine::FramesMetaData* id); void setListener(ToolPanelListener *tpl) override; + + void setProgressListener(rtengine::ProgressListener *pl); }; diff --git a/rtgui/multilangmgr.cc b/rtgui/multilangmgr.cc index 13f2569c5..2f467a415 100644 --- a/rtgui/multilangmgr.cc +++ b/rtgui/multilangmgr.cc @@ -20,7 +20,9 @@ #include #include -#ifdef WIN32 +#include +#include +#ifdef _WIN32 #include #include #endif @@ -28,6 +30,8 @@ #include #endif +#include "../rtengine/settings.h" + namespace { @@ -162,6 +166,25 @@ void setGtkLanguage(const Glib::ustring &language) } +TranslationMetadata::TranslationMetadata(std::map &&metadata) : + metadata(std::move(metadata)) +{ +} + +std::string TranslationMetadata::get(const std::string &key, const std::string &default_value) const +{ + const auto found_entry = metadata.find(key); + if (found_entry == metadata.end()) { + return default_value; + } + return found_entry->second; +} + +std::string TranslationMetadata::getLanguageName(const std::string &default_name) const +{ + return get("LANGUAGE_DISPLAY_NAME", default_name); +} + MultiLangMgr langMgr; MultiLangMgr::MultiLangMgr () @@ -219,9 +242,80 @@ Glib::ustring MultiLangMgr::getStr (const std::string& key) const return key; } +const TranslationMetadata *MultiLangMgr::getMetadata(const Glib::ustring &fname) const +{ + static const char comment_symbol = '#'; + static const char *space_chars = " \t"; + static const char var_symbol = '@'; + static const char key_value_separator = '='; + + // Look for the metadata in the cache. + const auto &found_metadata = lang_files_metadata.find(fname); + if (found_metadata != lang_files_metadata.end()) { + return &found_metadata->second; + } + + std::ifstream file(fname.c_str()); + if (!file.is_open()) { + if (rtengine::settings->verbose) { + std::cerr << "Unable to open language file " << fname << " to get metadata." << std::endl; + } + return nullptr; + } + + if (rtengine::settings->verbose) { + std::cout << "Reading metadata from language file " << fname << std::endl; + } + std::map raw_metadata; + const auto read_key_value = [&raw_metadata](const std::string &meta_line) { + // One metadata key-value pair per line. The format is as follows: + // #001 @KEY=VALUE + // The line must begin with the comment symbol (#). After the first + // sequence of whitespace characters, the metadata variable symbol (@) + // must appear. It is followed immediately with the key name. The end of + // the key name is marked with the equal sign (=). All remaining + // characters until the end of the line make up the metadata value. + if (meta_line.empty() || meta_line.front() != comment_symbol) { + return; + } + const auto first_space = meta_line.find_first_of(space_chars, 1); + if (first_space == std::string::npos) { + return; + } + const auto definition_start = meta_line.find_first_not_of(space_chars, first_space + 1); + if (definition_start == std::string::npos || meta_line[definition_start] != var_symbol) { + return; + } + const auto separator_pos = meta_line.find(key_value_separator, definition_start + 1); + if (separator_pos == std::string::npos) { + return; + } + std::string key = meta_line.substr(definition_start + 1, separator_pos - definition_start - 1); + std::string value = meta_line.substr(separator_pos + 1); + if (rtengine::settings->verbose) { + std::cout << "Found metadata key " << key << " with value " << value << std::endl; + } + raw_metadata.emplace(std::move(key), std::move(value)); + }; + + // Read lines in order. Metadata only appear in the first section of each + // file. + for ( + std::string line; + std::getline(file, line) && (line.empty() || + line.front() == comment_symbol || + line.find_first_not_of(space_chars) == std::string::npos);) { + read_key_value(line); + } + + // Add metadata to cache and return. + lang_files_metadata[fname] = TranslationMetadata(std::move(raw_metadata)); + return &lang_files_metadata[fname]; +} + bool MultiLangMgr::isOSLanguageDetectSupported () { -#if defined (WIN32) || defined (__linux__) || defined (__APPLE__) +#if defined (_WIN32) || defined (__linux__) || defined (__APPLE__) return true; #else return false; @@ -232,7 +326,7 @@ Glib::ustring MultiLangMgr::getOSUserLanguage () { Glib::ustring langName ("default"); -#if defined (WIN32) +#if defined (_WIN32) const LCID localeID = GetUserDefaultLCID (); TCHAR localeName[18]; diff --git a/rtgui/multilangmgr.h b/rtgui/multilangmgr.h index 902161eb2..27ece9fb8 100644 --- a/rtgui/multilangmgr.h +++ b/rtgui/multilangmgr.h @@ -24,6 +24,25 @@ #include +class TranslationMetadata +{ +public: + TranslationMetadata() = default; + ~TranslationMetadata() = default; + TranslationMetadata(const TranslationMetadata &other) = delete; + TranslationMetadata(TranslationMetadata &&other) = delete; + explicit TranslationMetadata(std::map &&metadata); + + TranslationMetadata &operator =(const TranslationMetadata &other) = delete; + TranslationMetadata &operator =(TranslationMetadata &&other) noexcept = default; + + std::string get(const std::string &key, const std::string &default_value) const; + std::string getLanguageName(const std::string &default_name) const; + +private: + std::map metadata; +}; + class MultiLangMgr { public: @@ -31,11 +50,13 @@ public: void load(const Glib::ustring &language, const std::vector &fnames); Glib::ustring getStr(const std::string& key) const; + const TranslationMetadata *getMetadata(const Glib::ustring &fname) const; static bool isOSLanguageDetectSupported(); static Glib::ustring getOSUserLanguage(); private: std::map translations; + mutable std::map lang_files_metadata; }; extern MultiLangMgr langMgr; diff --git a/rtgui/navigator.cc b/rtgui/navigator.cc index 042f57a00..a02e0aff8 100644 --- a/rtgui/navigator.cc +++ b/rtgui/navigator.cc @@ -157,7 +157,7 @@ Navigator::Navigator() : /* Glib::ustring fontname; -#ifdef WIN32 +#ifdef _WIN32 fontname = "Droid Sans Mono Slashed"; // font file is provided in the source tree in rtdata/fonts to be installed by the windows installer #endif diff --git a/rtgui/options.cc b/rtgui/options.cc index e89fcd647..61d67f9b6 100644 --- a/rtgui/options.cc +++ b/rtgui/options.cc @@ -42,7 +42,7 @@ -#ifdef WIN32 +#ifdef _WIN32 #include // for GCC32 #ifndef _WIN32_IE @@ -368,7 +368,7 @@ void Options::setDefaults() fbShowDateTime = true; fbShowBasicExif = true; fbShowExpComp = false; -#ifdef WIN32 +#ifdef _WIN32 // use windows setting for visibility of hidden files/folders SHELLFLAGSTATE sft = { 0 }; SHGetSettings(&sft, SSF_SHOWALLOBJECTS); @@ -577,7 +577,7 @@ void Options::setDefaults() rtSettings.cameraProfilesPath = ""; rtSettings.lensProfilesPath = ""; -#ifdef WIN32 +#ifdef _WIN32 const gchar* sysRoot = g_getenv("SystemRoot"); // Returns e.g. "c:\Windows" if (sysRoot != NULL) { @@ -631,12 +631,13 @@ void Options::setDefaults() rtSettings.fftwsigma = true; //choice between sigma^2 or empirical formula // end locallab rtSettings.itcwb_enable = true; - + rtSettings.itcwb_deltaspec = 0.075; + rtSettings.itcwb_powponder = 0.15;//max 0.2 //wavelet rtSettings.edghi = 3.0;//1.1 and 5. rtSettings.edglo = 0.5;//0.1 and 0.95 rtSettings.limrad = 20.;//1 and 60 - + rtSettings.protectred = 60; rtSettings.protectredh = 0.3; @@ -696,6 +697,9 @@ void Options::setDefaults() cropAutoFit = false; rtSettings.thumbnail_inspector_mode = rtengine::Settings::ThumbnailInspectorMode::JPEG; + + rtSettings.xmp_sidecar_style = rtengine::Settings::XmpSidecarStyle::STD; + rtSettings.metadata_xmp_sync = rtengine::Settings::MetadataXmpSync::NONE; } Options* Options::copyFrom(Options* other) @@ -929,7 +933,7 @@ void Options::readFromFile(Glib::ustring fname) // GIMP == 1, Photoshop == 2, Custom == 3. editorToSendTo = keyFile.get_integer("External Editor", "EditorKind"); -#ifdef WIN32 +#ifdef _WIN32 auto getIconSerialized = [](const Glib::ustring &executable) { // Backslashes and quotes must be escaped in the text representation of GVariant strings. // See https://www.freedesktop.org/software/gstreamer-sdk/data/docs/2012.5/glib/gvariant-text.html#gvariant-text-strings @@ -1224,7 +1228,7 @@ void Options::readFromFile(Glib::ustring fname) fbShowExpComp = keyFile.get_boolean("File Browser", "BrowserShowsExpComp"); } -#ifndef WIN32 +#ifndef _WIN32 if (keyFile.has_key("File Browser", "BrowserShowsHidden")) { fbShowHidden = keyFile.get_boolean("File Browser", "BrowserShowsHidden"); } @@ -1713,11 +1717,11 @@ void Options::readFromFile(Glib::ustring fname) if (keyFile.has_key("GUI", "CurveBBoxPosition")) { curvebboxpos = keyFile.get_integer("GUI", "CurveBBoxPosition"); } - + if (keyFile.has_key("GUI", "Complexity")) { complexity = keyFile.get_integer("GUI", "Complexity"); } - + if (keyFile.has_key("GUI", "InspectorWindow")) { inspectorWindow = keyFile.get_boolean("GUI", "InspectorWindow"); } @@ -1819,6 +1823,16 @@ void Options::readFromFile(Glib::ustring fname) } + if (keyFile.has_key("Color Management", "Itcwb_deltaspec")) { + rtSettings.itcwb_deltaspec = keyFile.get_double("Color Management", "Itcwb_deltaspec"); + } + + + if (keyFile.has_key("Color Management", "Itcwb_powponder")) { + rtSettings.itcwb_powponder = keyFile.get_double("Color Management", "Itcwb_powponder"); + } + + //if (keyFile.has_key ("Color Management", "Colortoningab")) rtSettings.colortoningab = keyFile.get_double("Color Management", "Colortoningab"); //if (keyFile.has_key ("Color Management", "Decaction")) rtSettings.decaction = keyFile.get_double("Color Management", "Decaction"); @@ -1961,8 +1975,8 @@ void Options::readFromFile(Glib::ustring fname) } } - - + + if (keyFile.has_group("ICC Profile Creator")) { if (keyFile.has_key("ICC Profile Creator", "PimariesPreset")) { ICCPC_primariesPreset = keyFile.get_string("ICC Profile Creator", "PimariesPreset"); @@ -2246,6 +2260,27 @@ void Options::readFromFile(Glib::ustring fname) } } + if (keyFile.has_group("Metadata")) { + if (keyFile.has_key("Metadata", "XMPSidecarStyle")) { + std::string val = keyFile.get_string("Metadata", "XMPSidecarStyle"); + if (val == "ext") { + rtSettings.xmp_sidecar_style = rtengine::Settings::XmpSidecarStyle::EXT; + } else { + rtSettings.xmp_sidecar_style = rtengine::Settings::XmpSidecarStyle::STD; + } + } + if (keyFile.has_key("Metadata", "XMPSynchronization")) { + std::string val = keyFile.get_string("Metadata", "XMPSynchronization"); + if (val == "read") { + rtSettings.metadata_xmp_sync = rtengine::Settings::MetadataXmpSync::READ; + } else if (val == "readwrite") { + rtSettings.metadata_xmp_sync = rtengine::Settings::MetadataXmpSync::READ_WRITE; + } else { + rtSettings.metadata_xmp_sync = rtengine::Settings::MetadataXmpSync::NONE; + } + } + } + // -------------------------------------------------------------------------------------------------------- filterOutParsedExtensions(); @@ -2364,7 +2399,7 @@ void Options::saveToFile(Glib::ustring fname) keyFile.set_boolean("File Browser", "BrowserShowsDate", fbShowDateTime); keyFile.set_boolean("File Browser", "BrowserShowsExif", fbShowBasicExif); keyFile.set_boolean("File Browser", "BrowserShowsExpComp", fbShowExpComp); -#ifndef WIN32 +#ifndef _WIN32 keyFile.set_boolean("File Browser", "BrowserShowsHidden", fbShowHidden); #endif keyFile.set_integer("File Browser", "ThumbnailSize", thumbSize); @@ -2596,6 +2631,8 @@ void Options::saveToFile(Glib::ustring fname) keyFile.set_double("Color Management", "CBDLlevel0", rtSettings.level0_cbdl); keyFile.set_double("Color Management", "CBDLlevel123", rtSettings.level123_cbdl); keyFile.set_boolean("Color Management", "Itcwb_enable", rtSettings.itcwb_enable); + keyFile.set_double("Color Management", "Itcwb_deltaspec", rtSettings.itcwb_deltaspec); + keyFile.set_double("Color Management", "Itcwb_powponder", rtSettings.itcwb_powponder); //keyFile.set_double ("Color Management", "Colortoningab", rtSettings.colortoningab); //keyFile.set_double ("Color Management", "Decaction", rtSettings.decaction); @@ -2695,6 +2732,25 @@ void Options::saveToFile(Glib::ustring fname) keyFile.set_string("Lensfun", "DBDirectory", rtSettings.lensfunDbDirectory); + switch (rtSettings.xmp_sidecar_style) { + case rtengine::Settings::XmpSidecarStyle::EXT: + keyFile.set_string("Metadata", "XMPSidecarStyle", "ext"); + break; + default: + keyFile.set_string("Metadata", "XMPSidecarStyle", "std"); + } + + switch (rtSettings.metadata_xmp_sync) { + case rtengine::Settings::MetadataXmpSync::READ: + keyFile.set_string("Metadata", "XMPSynchronization", "read"); + break; + case rtengine::Settings::MetadataXmpSync::READ_WRITE: + keyFile.set_string("Metadata", "XMPSynchronization", "readwrite"); + break; + default: + keyFile.set_string("Metadata", "XMPSynchronization", "none"); + } + keyData = keyFile.to_data(); } catch (Glib::KeyFileError &e) { @@ -2732,7 +2788,7 @@ void Options::load(bool lightweight) } } else { -#ifdef WIN32 +#ifdef _WIN32 WCHAR pathW[MAX_PATH] = {0}; if (SHGetSpecialFolderPathW(NULL, pathW, CSIDL_LOCAL_APPDATA, false)) { @@ -2782,7 +2838,7 @@ void Options::load(bool lightweight) // No environment variable provided, so falling back to the multi user mode, if enabled else if (options.multiUser) { -#ifdef WIN32 +#ifdef _WIN32 cacheBaseDir = Glib::build_filename(rtdir, "cache"); #else #ifdef __APPLE__ diff --git a/rtgui/options.h b/rtgui/options.h index 78059357e..7c6f1d9fb 100644 --- a/rtgui/options.h +++ b/rtgui/options.h @@ -40,7 +40,7 @@ #define THEMEREGEXSTR "^(.+)-GTK3-(\\d{1,2})?_(\\d{1,2})?\\.css$" // Default bundled profile name to use for Raw images -#ifdef WIN32 +#ifdef _WIN32 #define DEFPROFILE_RAW "${G}\\Auto-Matched Curve - ISO Low" #else #define DEFPROFILE_RAW "${G}/Auto-Matched Curve - ISO Low" @@ -327,7 +327,7 @@ public: bool internalThumbIfUntouched; bool overwriteOutputFile; int complexity; - bool inspectorWindow; // open inspector in spearate window + bool inspectorWindow; // open inspector in separate window bool zoomOnScroll; // translate scroll events to zoom std::vector thumbnailZoomRatios; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 2b66f4c57..d4795f994 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -267,15 +267,11 @@ void ParamsEdited::set(bool v) wb.equal = v; wb.tempBias = v; wb.observer = v; - wb.itcwb_thres = v; - wb.itcwb_precis = v; - wb.itcwb_size = v; - wb.itcwb_delta = v; - wb.itcwb_fgreen = v; + wb.itcwb_green = v; wb.itcwb_rgreen = v; wb.itcwb_nopurple = v; - wb.itcwb_sorted = v; - wb.itcwb_forceextra = v; + wb.itcwb_alg = v; + wb.itcwb_prim = v; wb.itcwb_sampling = v; //colorShift.a = v; //colorShift.b = v; @@ -720,6 +716,7 @@ void ParamsEdited::set(bool v) dehaze.depth = v; dehaze.saturation = v; metadata.mode = v; + metadata.exifKeys = v; filmNegative.enabled = v; filmNegative.redRatio = v; filmNegative.greenExp = v; @@ -985,15 +982,11 @@ void ParamsEdited::initFrom(const std::vector& wb.temperature = wb.temperature && p.wb.temperature == other.wb.temperature; wb.tempBias = wb.tempBias && p.wb.tempBias == other.wb.tempBias; wb.observer = wb.observer && p.wb.observer == other.wb.observer; - wb.itcwb_thres = wb.itcwb_thres && p.wb.itcwb_thres == other.wb.itcwb_thres; - wb.itcwb_precis = wb.itcwb_precis && p.wb.itcwb_precis == other.wb.itcwb_precis; - wb.itcwb_size = wb.itcwb_size && p.wb.itcwb_size == other.wb.itcwb_size; - wb.itcwb_delta = wb.itcwb_delta && p.wb.itcwb_delta == other.wb.itcwb_delta; - wb.itcwb_fgreen = wb.itcwb_fgreen && p.wb.itcwb_fgreen == other.wb.itcwb_fgreen; + wb.itcwb_green = wb.itcwb_green && p.wb.itcwb_green == other.wb.itcwb_green; wb.itcwb_rgreen = wb.itcwb_rgreen && p.wb.itcwb_rgreen == other.wb.itcwb_rgreen; wb.itcwb_nopurple = wb.itcwb_nopurple && p.wb.itcwb_nopurple == other.wb.itcwb_nopurple; - wb.itcwb_sorted = wb.itcwb_sorted && p.wb.itcwb_sorted == other.wb.itcwb_sorted; - wb.itcwb_forceextra = wb.itcwb_forceextra && p.wb.itcwb_forceextra == other.wb.itcwb_forceextra; + wb.itcwb_alg = wb.itcwb_alg && p.wb.itcwb_alg == other.wb.itcwb_alg; + wb.itcwb_prim = wb.itcwb_prim && p.wb.itcwb_prim == other.wb.itcwb_prim; wb.itcwb_sampling = wb.itcwb_sampling && p.wb.itcwb_sampling == other.wb.itcwb_sampling; //colorShift.a = colorShift.a && p.colorShift.a == other.colorShift.a; //colorShift.b = colorShift.b && p.colorShift.b == other.colorShift.b; @@ -2143,6 +2136,7 @@ void ParamsEdited::initFrom(const std::vector& dehaze.depth = dehaze.depth && p.dehaze.depth == other.dehaze.depth; dehaze.saturation = dehaze.saturation && p.dehaze.saturation == other.dehaze.saturation; metadata.mode = metadata.mode && p.metadata.mode == other.metadata.mode; + metadata.exifKeys = metadata.exifKeys && p.metadata.exifKeys == other.metadata.exifKeys; filmNegative.enabled = filmNegative.enabled && p.filmNegative.enabled == other.filmNegative.enabled; filmNegative.redRatio = filmNegative.redRatio && p.filmNegative.redRatio == other.filmNegative.redRatio; filmNegative.greenExp = filmNegative.greenExp && p.filmNegative.greenExp == other.filmNegative.greenExp; @@ -2870,24 +2864,8 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wb.observer = mods.wb.observer; } - if (wb.itcwb_thres) { - toEdit.wb.itcwb_thres = mods.wb.itcwb_thres; - } - - if (wb.itcwb_precis) { - toEdit.wb.itcwb_precis = mods.wb.itcwb_precis; - } - - if (wb.itcwb_size) { - toEdit.wb.itcwb_size = mods.wb.itcwb_size; - } - - if (wb.itcwb_delta) { - toEdit.wb.itcwb_delta = mods.wb.itcwb_delta; - } - - if (wb.itcwb_fgreen) { - toEdit.wb.itcwb_fgreen = mods.wb.itcwb_fgreen; + if (wb.itcwb_green) { + toEdit.wb.itcwb_green = mods.wb.itcwb_green; } if (wb.itcwb_rgreen) { @@ -2898,12 +2876,12 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.wb.itcwb_nopurple = mods.wb.itcwb_nopurple; } - if (wb.itcwb_sorted) { - toEdit.wb.itcwb_sorted = mods.wb.itcwb_sorted; + if (wb.itcwb_alg) { + toEdit.wb.itcwb_alg = mods.wb.itcwb_alg; } - if (wb.itcwb_forceextra) { - toEdit.wb.itcwb_forceextra = mods.wb.itcwb_forceextra; + if (wb.itcwb_prim) { + toEdit.wb.itcwb_prim = mods.wb.itcwb_prim; } if (wb.itcwb_sampling) { @@ -7436,6 +7414,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.metadata.mode = mods.metadata.mode; } + if (metadata.exifKeys) { + toEdit.metadata.exifKeys = mods.metadata.exifKeys; + } + if (filmNegative.enabled) { toEdit.filmNegative.enabled = mods.filmNegative.enabled; } @@ -7473,15 +7455,15 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng // Exif changes are added to the existing ones if (exif) { - for (procparams::ExifPairs::const_iterator i = mods.exif.begin(); i != mods.exif.end(); ++i) { - toEdit.exif[i->first] = i->second; + for (procparams::ExifPairs::const_iterator i = mods.metadata.exif.begin(); i != mods.metadata.exif.end(); ++i) { + toEdit.metadata.exif[i->first] = i->second; } } // IPTC changes are added to the existing ones if (iptc) { - for (procparams::IPTCPairs::const_iterator i = mods.iptc.begin(); i != mods.iptc.end(); ++i) { - toEdit.iptc[i->first] = i->second; + for (procparams::IPTCPairs::const_iterator i = mods.metadata.iptc.begin(); i != mods.metadata.iptc.end(); ++i) { + toEdit.metadata.iptc[i->first] = i->second; } } } diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 509ad3000..501617c00 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -249,16 +249,12 @@ struct WBParamsEdited { bool equal; bool observer; bool tempBias; - bool itcwb_thres; - bool itcwb_precis; - bool itcwb_size; - bool itcwb_delta; - bool itcwb_fgreen; bool itcwb_rgreen; bool itcwb_nopurple; - bool itcwb_sorted; - bool itcwb_forceextra; + bool itcwb_alg; + bool itcwb_prim; bool itcwb_sampling; + bool itcwb_green; }; @@ -1533,6 +1529,7 @@ struct RAWParamsEdited { struct MetaDataParamsEdited { bool mode; + bool exifKeys; }; struct FilmNegativeParamsEdited { diff --git a/rtgui/pathutils.cc b/rtgui/pathutils.cc index fc47a0e25..6ccdef670 100644 --- a/rtgui/pathutils.cc +++ b/rtgui/pathutils.cc @@ -16,6 +16,7 @@ * along with RawTherapee. If not, see . */ +#include #include #include "pathutils.h" @@ -48,3 +49,23 @@ Glib::ustring getExtension (const Glib::ustring& filename) return ""; } } + + +// For an unknown reason, Glib::filename_to_utf8 doesn't work on reliably Windows, +// so we're using Glib::filename_to_utf8 for Linux/Apple and Glib::locale_to_utf8 for Windows. +Glib::ustring fname_to_utf8(const std::string &fname) +{ +#ifdef _WIN32 + + try { + return Glib::locale_to_utf8(fname); + } catch (Glib::Error&) { + return Glib::convert_with_fallback(fname, "UTF-8", "ISO-8859-1", "?"); + } + +#else + + return Glib::filename_to_utf8(fname); + +#endif +} diff --git a/rtgui/pathutils.h b/rtgui/pathutils.h index 482dfb82f..8ac1533b7 100644 --- a/rtgui/pathutils.h +++ b/rtgui/pathutils.h @@ -1,4 +1,5 @@ -/* +/* -*- C++ -*- + * * This file is part of RawTherapee. * * Copyright (c) 2004-2010 Gabor Horvath @@ -18,7 +19,9 @@ */ #pragma once #include +#include // Removed from guiutils because used by rawtherapee-cli Glib::ustring removeExtension (const Glib::ustring& filename); Glib::ustring getExtension (const Glib::ustring& filename); +Glib::ustring fname_to_utf8(const std::string& fname); diff --git a/rtgui/placesbrowser.cc b/rtgui/placesbrowser.cc index 3440080f8..8fa86aa0b 100644 --- a/rtgui/placesbrowser.cc +++ b/rtgui/placesbrowser.cc @@ -18,7 +18,7 @@ */ #include "placesbrowser.h" -#ifdef WIN32 +#ifdef _WIN32 #include #include #include @@ -106,9 +106,32 @@ void PlacesBrowser::refreshPlacesList () { placesModel->clear (); + // append favorites + for (size_t i = 0; i < options.favoriteDirs.size(); i++) { + Glib::RefPtr fav = Gio::File::create_for_path (options.favoriteDirs[i]); + + if (fav && fav->query_exists()) { + try { + if (auto info = fav->query_info ()) { + Gtk::TreeModel::Row newrow = *(placesModel->append()); + newrow[placesColumns.label] = info->get_display_name (); + newrow[placesColumns.icon] = info->get_icon (); + newrow[placesColumns.root] = fav->get_parse_name (); + newrow[placesColumns.type] = 5; + newrow[placesColumns.rowSeparator] = false; + } + } catch(Gio::Error&) {} + } + } + // append home directory Glib::RefPtr hfile = Gio::File::create_for_path (userHomeDir()); // Will send back "My documents" on Windows now, which has no restricted access + if (!placesModel->children().empty()) { + Gtk::TreeModel::Row newrow = *(placesModel->append()); + newrow[placesColumns.rowSeparator] = true; + } + if (hfile && hfile->query_exists()) { try { if (auto info = hfile->query_info ()) { @@ -208,7 +231,7 @@ void PlacesBrowser::refreshPlacesList () // (Drives in Windows) std::vector > mounts = vm->get_mounts (); -#ifdef WIN32 +#ifdef _WIN32 // on Windows, it's usual to sort by drive letter, not by name std::sort (mounts.begin(), mounts.end(), compareMountByRoot); #endif @@ -223,29 +246,6 @@ void PlacesBrowser::refreshPlacesList () newrow[placesColumns.rowSeparator] = false; } } - - // append favorites - if (!placesModel->children().empty()) { - Gtk::TreeModel::Row newrow = *(placesModel->append()); - newrow[placesColumns.rowSeparator] = true; - } - - for (size_t i = 0; i < options.favoriteDirs.size(); i++) { - Glib::RefPtr fav = Gio::File::create_for_path (options.favoriteDirs[i]); - - if (fav && fav->query_exists()) { - try { - if (auto info = fav->query_info ()) { - Gtk::TreeModel::Row newrow = *(placesModel->append()); - newrow[placesColumns.label] = info->get_display_name (); - newrow[placesColumns.icon] = info->get_icon (); - newrow[placesColumns.root] = fav->get_parse_name (); - newrow[placesColumns.type] = 5; - newrow[placesColumns.rowSeparator] = false; - } - } catch(Gio::Error&) {} - } - } } bool PlacesBrowser::rowSeparatorFunc (const Glib::RefPtr& model, const Gtk::TreeModel::iterator& iter) @@ -353,7 +353,7 @@ void PlacesBrowser::delPressed () Glib::ustring PlacesBrowser::userHomeDir () { -#ifdef WIN32 +#ifdef _WIN32 // get_home_dir crashes on some Windows configurations, // so we rather use the safe native functions here. @@ -378,7 +378,7 @@ Glib::ustring PlacesBrowser::userHomeDir () Glib::ustring PlacesBrowser::userPicturesDir () { -#ifdef WIN32 +#ifdef _WIN32 // get_user_special_dir crashes on some Windows configurations, // so we rather use the safe native functions here. diff --git a/rtgui/popupcommon.cc b/rtgui/popupcommon.cc index a6d9b6046..741d4da0f 100644 --- a/rtgui/popupcommon.cc +++ b/rtgui/popupcommon.cc @@ -20,10 +20,12 @@ */ #include + +#include "guiutils.h" #include "multilangmgr.h" #include "popupcommon.h" #include "rtimage.h" -#include "guiutils.h" +#include "threadutils.h" PopUpCommon::PopUpCommon (Gtk::Button* thisButton, const Glib::ustring& label) : buttonImage (nullptr) @@ -136,6 +138,21 @@ bool PopUpCommon::insertEntryImpl(int position, const Glib::ustring& fileName, c return true; } +void PopUpCommon::setEmptyImage(const Glib::ustring &fileName) +{ + emptyImageFilename = fileName; + + if (getEntryCount()) { + return; + } + if (fileName.empty()) { + buttonImage->hide(); + } else { + changeImage(emptyImageFilename, Glib::RefPtr()); + buttonImage->show(); + } +} + void PopUpCommon::removeEntry(int position) { if (position < 0 || position >= getEntryCount()) { @@ -147,8 +164,13 @@ void PopUpCommon::removeEntry(int position) button->get_style_context()->remove_class("Left"); arrowButton->hide(); hasMenu = false; - // Remove the button image. - buttonImage->hide(); + if (emptyImageFilename.empty()) { + // Remove the button image. + buttonImage->hide(); + } else { + // Show the empty icon. + changeImage(emptyImageFilename, Glib::RefPtr()); + } selected = -1; } else if (position < selected) { @@ -183,6 +205,15 @@ void PopUpCommon::changeImage(const Glib::ustring& fileName, const Glib::RefPtr< void PopUpCommon::entrySelected(Gtk::Widget* widget) { + if (widget != menu->get_active()) { // Not actually selected. + return; + } + + if (!entrySelectionMutex.trylock()) { // Already being updated. + return; + } + entrySelectionMutex.unlock(); + int i = 0; for (const auto & child : menu->get_children()) { if (widget == child) { @@ -229,7 +260,8 @@ bool PopUpCommon::setSelected (int entryNum) setButtonHint(); auto radioMenuItem = dynamic_cast(menu->get_children()[entryNum]); - if (radioMenuItem && menu->get_active() != radioMenuItem) { + if (radioMenuItem && !radioMenuItem->get_active()) { + MyMutex::MyLock updateLock(entrySelectionMutex); radioMenuItem->set_active(); } diff --git a/rtgui/popupcommon.h b/rtgui/popupcommon.h index 9ca6b2030..91bfdabea 100644 --- a/rtgui/popupcommon.h +++ b/rtgui/popupcommon.h @@ -20,12 +20,13 @@ */ #pragma once -#include "glibmm/refptr.h" +#include "threadutils.h" + #include #include +#include #include - #include namespace Gio @@ -64,6 +65,8 @@ public: bool addEntry (const Glib::ustring& fileName, const Glib::ustring& label, Gtk::RadioButtonGroup* radioGroup = nullptr); bool insertEntry(int position, const Glib::ustring& fileName, const Glib::ustring& label, Gtk::RadioButtonGroup* radioGroup = nullptr); bool insertEntry(int position, const Glib::RefPtr& gIcon, const Glib::ustring& label, Gtk::RadioButtonGroup* radioGroup = nullptr); + /// Sets the button image to show when there are no entries. + void setEmptyImage(const Glib::ustring &fileName); int getEntryCount () const; bool setSelected (int entryNum); int getSelected () const; @@ -77,6 +80,7 @@ private: type_signal_changed messageChanged; type_signal_item_selected messageItemSelected; + Glib::ustring emptyImageFilename; std::vector> imageIcons; std::vector imageFilenames; std::vector images; @@ -88,6 +92,7 @@ private: Gtk::Button* arrowButton; int selected; bool hasMenu; + MyMutex entrySelectionMutex; void changeImage(int position); void changeImage(const Glib::ustring& fileName, const Glib::RefPtr& gIcon); diff --git a/rtgui/preferences.cc b/rtgui/preferences.cc index c9737704e..103075274 100644 --- a/rtgui/preferences.cc +++ b/rtgui/preferences.cc @@ -16,21 +16,27 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ +#include + +#include +#include #include -#include "externaleditorpreferences.h" -#include "preferences.h" -#include "multilangmgr.h" -#include "splash.h" -#include "cachemanager.h" + #include "addsetids.h" +#include "cachemanager.h" +#include "externaleditorpreferences.h" +#include "multilangmgr.h" +#include "preferences.h" +#include "rtimage.h" +#include "rtwindow.h" +#include "splash.h" +#include "toollocationpref.h" + #include "../rtengine/dfmanager.h" #include "../rtengine/ffmanager.h" #include "../rtengine/iccstore.h" #include "../rtengine/procparams.h" -#include -#include "rtimage.h" -#include "rtwindow.h" -#include "toollocationpref.h" + #ifdef _OPENMP #include #endif @@ -113,7 +119,7 @@ Preferences::Preferences(RTWindow *rtwindow) nb->append_page(*getBatchProcPanel(), M("PREFERENCES_BATCH_PROCESSING")); nb->append_page(*getPerformancePanel(), M("PREFERENCES_TAB_PERFORMANCE")); // Sounds only on Windows and Linux -#if defined(WIN32) || defined(__linux__) +#if defined(_WIN32) || defined(__linux__) nb->append_page(*getSoundsPanel(), M("PREFERENCES_TAB_SOUND")); #endif nb->set_current_page(0); @@ -553,7 +559,7 @@ Gtk::Widget* Preferences::getImageProcessingPanel () iprofiles->set_size_request(50, -1); setExpandAlignProperties(iprofiles, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_FILL); ipconn = iprofiles->signal_changed().connect(sigc::mem_fun(*this, &Preferences::forImageComboChanged)); - + Gtk::Grid* defpt = Gtk::manage(new Gtk::Grid()); defpt->set_row_spacing(2); defpt->attach(*drlab, 0, 0, 1, 1); @@ -561,7 +567,7 @@ Gtk::Widget* Preferences::getImageProcessingPanel () defpt->attach(*drimg, 0, 1, 1, 1); defpt->attach(*iprofiles, 1, 1, 1, 1); vbpp->pack_start(*defpt, Gtk::PACK_SHRINK, 4); - + useBundledProfiles = Gtk::manage(new Gtk::CheckButton(M("PREFERENCES_USEBUNDLEDPROFILES"))); bpconn = useBundledProfiles->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::bundledProfilesChanged)); vbpp->pack_start(*useBundledProfiles, Gtk::PACK_SHRINK, 4); @@ -607,9 +613,36 @@ Gtk::Widget* Preferences::getImageProcessingPanel () fdp->add(*vbdp); vbImageProcessing->pack_start (*fdp, Gtk::PACK_SHRINK, 4); -// Gtk::Frame* fdf = Gtk::manage (new Gtk::Frame (M ("PREFERENCES_DARKFRAME")) ); -// Gtk::Box* hb42 = Gtk::manage (new Gtk::Box ()); -// darkFrameDir = Gtk::manage (new Gtk::FileChooserButton (M ("PREFERENCES_DIRDARKFRAMES"), Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER)); + // Metadata + Gtk::Frame *mf = Gtk::manage(new Gtk::Frame(M("PREFERENCES_METADATA"))); + Gtk::Grid *mtbl = Gtk::manage(new Gtk::Grid()); + setExpandAlignProperties(mtbl, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); + + metadataSyncCombo = Gtk::manage(new Gtk::ComboBoxText()); + metadataSyncCombo->set_active(0); + metadataSyncCombo->append(M("PREFERENCES_METADATA_SYNC_NONE")); + metadataSyncCombo->append(M("PREFERENCES_METADATA_SYNC_READ")); + metadataSyncCombo->append(M("PREFERENCES_METADATA_SYNC_READWRITE")); + Gtk::Label *mlbl = Gtk::manage(new Gtk::Label(M("PREFERENCES_METADATA_SYNC") + ": ")); + mtbl->attach(*mlbl, 0, 0, 1, 1); + mtbl->attach_next_to(*metadataSyncCombo, *mlbl, Gtk::POS_RIGHT, 1, 1); + setExpandAlignProperties(mlbl, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); + setExpandAlignProperties(metadataSyncCombo, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); + + xmpSidecarCombo = Gtk::manage(new Gtk::ComboBoxText()); + xmpSidecarCombo->set_active(0); + xmpSidecarCombo->append(M("PREFERENCES_XMP_SIDECAR_MODE_STD")); + xmpSidecarCombo->append(M("PREFERENCES_XMP_SIDECAR_MODE_EXT")); + + mlbl = Gtk::manage(new Gtk::Label(M("PREFERENCES_XMP_SIDECAR_MODE") + ": ")); + mtbl->attach(*mlbl, 0, 2, 1, 1); + mtbl->attach_next_to(*xmpSidecarCombo, *mlbl, Gtk::POS_RIGHT, 1, 1); + setExpandAlignProperties(mlbl, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); + setExpandAlignProperties(xmpSidecarCombo, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); + + mf->add(*mtbl); + vbImageProcessing->pack_start(*mf, Gtk::PACK_SHRINK, 4); + // Directories Gtk::Frame* cdf = Gtk::manage(new Gtk::Frame(M("PREFERENCES_DIRECTORIES"))); Gtk::Grid* dirgrid = Gtk::manage(new Gtk::Grid()); @@ -666,6 +699,7 @@ Gtk::Widget* Preferences::getImageProcessingPanel () //Lens Profiles Dir Gtk::Label *lensProfilesDirLabel = Gtk::manage(new Gtk::Label(M("PREFERENCES_LENSPROFILESDIR") + ":")); + lensProfilesDirLabel->set_tooltip_text(M("PREFERENCES_LENSPROFILESDIR_TOOLTIP")); setExpandAlignProperties(lensProfilesDirLabel, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); lensProfilesDir = Gtk::manage(new MyFileChooserButton(M("PREFERENCES_LENSPROFILESDIR"), Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER)); setExpandAlignProperties(lensProfilesDir, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); @@ -673,7 +707,21 @@ Gtk::Widget* Preferences::getImageProcessingPanel () dirgrid->attach_next_to(*lensProfilesDirLabel, *cameraProfilesDirLabel, Gtk::POS_BOTTOM, 1, 1); dirgrid->attach_next_to(*lensProfilesDir, *lensProfilesDirLabel, Gtk::POS_RIGHT, 1, 1); - //Pack directories to Image Processing panel + // Lensfun DB dir + Gtk::Label *lensfunDbDirLabel = Gtk::manage(new Gtk::Label(M("PREFERENCES_LENSFUNDBDIR") + ":")); + lensfunDbDirLabel->set_tooltip_text(M("PREFERENCES_LENSFUNDBDIR_TOOLTIP")); + setExpandAlignProperties(lensfunDbDirLabel, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); + lensfunDbDir = Gtk::manage(new MyFileChooserEntry(M("PREFERENCES_LENSFUNDBDIR"), Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER)); + lensfunDbDir->set_placeholder_text(Glib::ustring::compose("(%1)", M("GENERAL_AUTO"))); + setExpandAlignProperties(lensfunDbDir, true, false, Gtk::ALIGN_FILL, Gtk::ALIGN_CENTER); + Gtk::Label* lensfunDbDirRestartNeededLabel = Gtk::manage(new Gtk::Label(Glib::ustring(" (") + M("PREFERENCES_APPLNEXTSTARTUP") + ")")); + setExpandAlignProperties(lensfunDbDirRestartNeededLabel, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); + + dirgrid->attach_next_to(*lensfunDbDirLabel, *lensProfilesDirLabel, Gtk::POS_BOTTOM, 1, 1); + dirgrid->attach_next_to(*lensfunDbDir, *lensfunDbDirLabel, Gtk::POS_RIGHT, 1, 1); + dirgrid->attach_next_to(*lensfunDbDirRestartNeededLabel, *lensfunDbDir, Gtk::POS_RIGHT, 1, 1); + + //Pack directories to Image Processing panel cdf->add(*dirgrid); vbImageProcessing->pack_start (*cdf, Gtk::PACK_SHRINK, 4 ); @@ -959,6 +1007,23 @@ Gtk::Widget* Preferences::getColorManPanel () vbColorMan->pack_start (*fcie, Gtk::PACK_SHRINK); + //------------White-Balance auto temperature correlation + + Gtk::Frame* fwbacorr = Gtk::manage(new Gtk::Frame(M("PREFERENCES_WBACORR"))); + fwbacorr->set_tooltip_text(M("PREFERENCES_WBACORR_TOOLTIP")); + fwbacorr->set_label_align(0.025, 0.5); + Gtk::Box* wbaVB = Gtk::manage ( new Gtk::Box(Gtk::ORIENTATION_VERTICAL) ); + Gtk::Box* wbah = Gtk::manage ( new Gtk::Box () ); + wbah->set_spacing (4); + + mwbaena = Gtk::manage(new Gtk::CheckButton(M("PREFERENCES_WBAENA"))); + setExpandAlignProperties(mwbaena, false, false, Gtk::ALIGN_START, Gtk::ALIGN_CENTER); + mwbaena->set_active(true); + wbah->pack_start(*mwbaena, Gtk::PACK_SHRINK, 0); + wbaVB->add(*wbah); + + fwbacorr->add (*wbaVB); + vbColorMan->pack_start (*fwbacorr, Gtk::PACK_SHRINK); //------------- swColorMan->add(*vbColorMan); @@ -1095,9 +1160,14 @@ Gtk::Widget* Preferences::getGeneralPanel() std::vector langs; parseDir(argv0 + "/languages", langs, ""); - for (size_t i = 0; i < langs.size(); i++) { - if ("default" != langs[i] && "README" != langs[i] && "LICENSE" != langs[i]) { - languages->append(langs[i]); + for (const auto &lang : langs) { + if ("default" != lang && "README" != lang && "LICENSE" != lang) { + auto lang_metadata = langMgr.getMetadata(Glib::build_filename(argv0 + "/languages", lang)); + const auto &display_name = + lang_metadata != nullptr + ? Glib::ustring(lang_metadata->getLanguageName(lang)) + : lang; + languages->append(lang, display_name); } } @@ -1168,7 +1238,7 @@ Gtk::Widget* Preferences::getGeneralPanel() setExpandAlignProperties(pseudoHiDPI, false, false, Gtk::ALIGN_START, Gtk::ALIGN_BASELINE); Gtk::Separator *vSep = Gtk::manage(new Gtk::Separator(Gtk::ORIENTATION_VERTICAL)); - + appearanceGrid->attach(*themeLbl, 0, 0, 1, 1); appearanceGrid->attach(*themeCBT, 1, 0, 1, 1); @@ -1321,10 +1391,7 @@ Gtk::Widget* Preferences::getFileBrowserPanel() sdlast = Gtk::manage(new Gtk::RadioButton(M("PREFERENCES_DIRLAST"))); sdhome = Gtk::manage(new Gtk::RadioButton(M("PREFERENCES_DIRHOME"))); sdother = Gtk::manage(new Gtk::RadioButton(M("PREFERENCES_DIROTHER") + ": ")); - startupdir = Gtk::manage(new Gtk::Entry()); - - Gtk::Button* sdselect = Gtk::manage(new Gtk::Button()); - sdselect->set_image (*Gtk::manage (new RTImage ("folder-open-small.png"))); + startupdir = Gtk::manage(new MyFileChooserEntry(M("PREFERENCES_DIRSELECTDLG"), Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER)); Gtk::RadioButton::Group opts = sdcurrent->get_group(); sdlast->set_group(opts); @@ -1338,14 +1405,11 @@ Gtk::Widget* Preferences::getFileBrowserPanel() Gtk::Box* otherbox = Gtk::manage(new Gtk::Box()); otherbox->pack_start(*sdother, Gtk::PACK_SHRINK); otherbox->pack_start(*startupdir); - otherbox->pack_end(*sdselect, Gtk::PACK_SHRINK, 4); vbsd->pack_start(*otherbox, Gtk::PACK_SHRINK, 0); fsd->add(*vbsd); vbFileBrowser->pack_start (*fsd, Gtk::PACK_SHRINK, 4); - sdselect->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::selectStartupDir)); - //--- @@ -1721,7 +1785,7 @@ void Preferences::storePreferences() moptions.menuGroupExtProg = ckbmenuGroupExtProg->get_active(); moptions.highlightThreshold = (int)hlThresh->get_value(); moptions.shadowThreshold = (int)shThresh->get_value(); - moptions.language = languages->get_active_text(); + moptions.language = languages->get_active_id(); moptions.languageAutoDetect = ckbLangAutoDetect->get_active(); moptions.theme = themeFNames.at (themeCBT->get_active_row_number ()).longFName; @@ -1755,7 +1819,12 @@ void Preferences::storePreferences() const std::vector &editors = externalEditors->getEditors(); moptions.externalEditors.resize(editors.size()); - moptions.externalEditorIndex = -1; + moptions.externalEditorIndex = +#ifdef __APPLE__ + editors.empty() ? -1 : 0; +#else + -1; +#endif for (unsigned i = 0; i < editors.size(); i++) { moptions.externalEditors[i] = (ExternalEditor( editors[i].name, editors[i].command, editors[i].native_command, editors[i].icon_serialized)); @@ -1829,6 +1898,7 @@ void Preferences::storePreferences() moptions.rtSettings.monitorBPC = monBPC->get_active(); moptions.rtSettings.autoMonitorProfile = cbAutoMonProfile->get_active(); moptions.rtSettings.autocielab = mcie->get_active(); + moptions.rtSettings.itcwb_enable = mwbaena->get_active(); #endif @@ -1845,7 +1915,7 @@ void Preferences::storePreferences() moptions.startupDir = STARTUPDIR_LAST; } else if (sdother->get_active()) { moptions.startupDir = STARTUPDIR_CUSTOM; - moptions.startupPath = startupdir->get_text(); + moptions.startupPath = startupdir->get_filename(); } moptions.parseExtensions.clear(); @@ -1874,8 +1944,9 @@ void Preferences::storePreferences() moptions.rtSettings.darkFramesPath = darkFrameDir->get_filename(); moptions.rtSettings.flatFieldsPath = flatFieldDir->get_filename(); moptions.clutsDir = clutsDir->get_filename(); - moptions.rtSettings.cameraProfilesPath = cameraProfilesDir->get_filename(); - moptions.rtSettings.lensProfilesPath = lensProfilesDir->get_filename(); + moptions.rtSettings.cameraProfilesPath = cameraProfilesDir->get_filename(); + moptions.rtSettings.lensProfilesPath = lensProfilesDir->get_filename(); + moptions.rtSettings.lensfunDbDirectory = lensfunDbDir->get_filename(); moptions.baBehav.resize(ADDSET_PARAM_NUM); @@ -1914,7 +1985,7 @@ void Preferences::storePreferences() moptions.rtSettings.thumbnail_inspector_mode = static_cast(thumbnailInspectorMode->get_active_row_number()); // Sounds only on Windows and Linux -#if defined(WIN32) || defined(__linux__) +#if defined(_WIN32) || defined(__linux__) moptions.sndEnable = ckbSndEnable->get_active(); moptions.sndBatchQueueDone = txtSndBatchQueueDone->get_text(); moptions.sndLngEditProcDone = txtSndLngEditProcDone->get_text(); @@ -1925,6 +1996,9 @@ void Preferences::storePreferences() moptions.cropAutoFit = cropAutoFitCB->get_active(); toolLocationPreference->updateOptions(); + + moptions.rtSettings.metadata_xmp_sync = rtengine::Settings::MetadataXmpSync(metadataSyncCombo->get_active_row_number()); + moptions.rtSettings.xmp_sidecar_style = rtengine::Settings::XmpSidecarStyle(xmpSidecarCombo->get_active_row_number()); } void Preferences::fillPreferences() @@ -1988,6 +2062,7 @@ void Preferences::fillPreferences() monBPC->set_active(moptions.rtSettings.monitorBPC); mcie->set_active(moptions.rtSettings.autocielab); + mwbaena->set_active(moptions.rtSettings.itcwb_enable); cbAutoMonProfile->set_active(moptions.rtSettings.autoMonitorProfile); #endif @@ -1997,7 +2072,7 @@ void Preferences::fillPreferences() } cprevdemo->set_active (moptions.prevdemo); - languages->set_active_text(moptions.language); + languages->set_active_id(moptions.language); ckbLangAutoDetect->set_active(moptions.languageAutoDetect); int themeNbr = getThemeRowNumber(moptions.theme); themeCBT->set_active (themeNbr == -1 ? 0 : themeNbr); @@ -2071,7 +2146,7 @@ void Preferences::fillPreferences() sdhome->set_active(); } else if (moptions.startupDir == STARTUPDIR_CUSTOM) { sdother->set_active(); - startupdir->set_text(moptions.startupPath); + startupdir->set_current_folder(moptions.startupPath); } extensionModel->clear(); @@ -2102,7 +2177,7 @@ void Preferences::fillPreferences() } curveBBoxPosC->set_active(moptions.curvebboxpos); - complexitylocal->set_active(moptions.complexity); + complexitylocal->set_active(moptions.complexity); inspectorWindowCB->set_active(moptions.inspectorWindow); zoomOnScrollCB->set_active(moptions.zoomOnScroll); @@ -2131,10 +2206,12 @@ void Preferences::fillPreferences() flatFieldChanged(); clutsDir->set_current_folder(moptions.clutsDir); - - cameraProfilesDir->set_current_folder(moptions.rtSettings.cameraProfilesPath); - - lensProfilesDir->set_current_folder(moptions.rtSettings.lensProfilesPath); + + cameraProfilesDir->set_current_folder(moptions.rtSettings.cameraProfilesPath); + + lensProfilesDir->set_current_folder(moptions.rtSettings.lensProfilesPath); + + lensfunDbDir->set_current_folder(moptions.rtSettings.lensfunDbDirectory); addc.block(true); setc.block(true); @@ -2167,12 +2244,15 @@ void Preferences::fillPreferences() chOverwriteOutputFile->set_active(moptions.overwriteOutputFile); // Sounds only on Windows and Linux -#if defined(WIN32) || defined(__linux__) +#if defined(_WIN32) || defined(__linux__) ckbSndEnable->set_active(moptions.sndEnable); txtSndBatchQueueDone->set_text(moptions.sndBatchQueueDone); txtSndLngEditProcDone->set_text(moptions.sndLngEditProcDone); spbSndLngEditProcDoneSecs->set_value(moptions.sndLngEditProcDoneSecs); #endif + + metadataSyncCombo->set_active(int(moptions.rtSettings.metadata_xmp_sync)); + xmpSidecarCombo->set_active(int(moptions.rtSettings.xmp_sidecar_style)); } /* @@ -2263,23 +2343,6 @@ void Preferences::cancelPressed() hide(); } -void Preferences::selectStartupDir() -{ - - Gtk::FileChooserDialog dialog(getToplevelWindow(this), M("PREFERENCES_DIRSELECTDLG"), Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER); - //dialog.set_transient_for(*this); - - //Add response buttons to the dialog: - dialog.add_button(M("GENERAL_CANCEL"), Gtk::RESPONSE_CANCEL); - dialog.add_button(M("GENERAL_OPEN"), Gtk::RESPONSE_OK); - - int result = dialog.run(); - - if (result == Gtk::RESPONSE_OK) { - startupdir->set_text(dialog.get_filename()); - } -} - void Preferences::aboutPressed() { diff --git a/rtgui/preferences.h b/rtgui/preferences.h index 6e31761a4..219844d55 100644 --- a/rtgui/preferences.h +++ b/rtgui/preferences.h @@ -92,7 +92,7 @@ class Preferences final : Gtk::ComboBoxText* languages; Gtk::CheckButton* ckbLangAutoDetect; Gtk::Entry* dateformat; - Gtk::Entry* startupdir; + MyFileChooserEntry* startupdir; Gtk::RadioButton* sdcurrent; Gtk::RadioButton* sdlast; Gtk::RadioButton* sdhome; @@ -115,8 +115,9 @@ class Preferences final : MyFileChooserButton* darkFrameDir; MyFileChooserButton* flatFieldDir; MyFileChooserButton* clutsDir; - MyFileChooserButton* cameraProfilesDir; - MyFileChooserButton* lensProfilesDir; + MyFileChooserButton* cameraProfilesDir; + MyFileChooserButton* lensProfilesDir; + MyFileChooserEntry* lensfunDbDir; Gtk::Label *dfLabel; Gtk::Label *ffLabel; @@ -137,9 +138,11 @@ class Preferences final : Gtk::CheckButton* cbdaubech; Gtk::SpinButton* hlThresh; Gtk::SpinButton* shThresh; -// Gtk::CheckButton* mwbacorr; + Gtk::CheckButton* mwbacorr; // Gtk::CheckButton* mwbaforc; // Gtk::CheckButton* mwbanopurp; + Gtk::CheckButton* mwbaena; +// Gtk::CheckButton* mwbaenacustom; // Gtk::CheckButton* mwbasort; // Gtk::SpinButton* wbacorrnb; @@ -246,6 +249,9 @@ class Preferences final : Gtk::ComboBoxText *cropGuidesCombo; Gtk::CheckButton *cropAutoFitCB; + Gtk::ComboBoxText *metadataSyncCombo; + Gtk::ComboBoxText *xmpSidecarCombo; + Glib::ustring storedValueRaw; Glib::ustring storedValueImg; diff --git a/rtgui/procparamchangers.h b/rtgui/procparamchangers.h index 8dd3769c6..0ca76a0eb 100644 --- a/rtgui/procparamchangers.h +++ b/rtgui/procparamchangers.h @@ -1,4 +1,5 @@ -/* +/* -*- C++ -*- + * * This file is part of RawTherapee. * * Copyright (c) 2004-2010 Gabor Horvath @@ -16,9 +17,9 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ -#define UNKNOWN -1 -#define FILEBROWSER 1 -#define EDITOR 2 -#define BATCHEDITOR 3 -#define CACHEMGR 4 -#define SAFETYUPDATE 5 +constexpr int UNKNOWN = -1; +constexpr int FILEBROWSER = 1; +constexpr int EDITOR = 2; +constexpr int BATCHEDITOR = 3; +constexpr int CACHEMGR = 4; +constexpr int SAFETYUPDATE = 5; diff --git a/rtgui/profilepanel.cc b/rtgui/profilepanel.cc index 8ce9055d0..1acf23649 100644 --- a/rtgui/profilepanel.cc +++ b/rtgui/profilepanel.cc @@ -288,6 +288,12 @@ void ProfilePanel::save_clicked (GdkEventButton* event) toSave = entry ? ProfileStore::getInstance()->getProfile(entry) : nullptr; } + // If no entry has been selected or anything unpredictable happened, toSave + // can be nullptr. + if (toSave == nullptr) { + return; + } + // If it's a partial profile, it's more intuitive to first allow the user // to choose which parameters to save before showing the Save As dialog // #5491 @@ -336,50 +342,70 @@ void ProfilePanel::save_clicked (GdkEventButton* event) filter_any->add_pattern("*"); dialog.add_filter(filter_any); - bool done = true; + while (true) { - do { - if (dialog.run() == Gtk::RESPONSE_OK) { + // Run the saving dialog and let the user select a path and filename. + const auto response = dialog.run(); - std::string fname = dialog.get_filename(); + if (response != Gtk::RESPONSE_OK) { + // Just exit the loop, cause the user cancels the dialog. + + break; + } else { + // Go on with saving the the profile. + + auto fname = dialog.get_filename(); if (("." + getExtension(fname)) != paramFileExtension) { fname += paramFileExtension; } if (!confirmOverwrite(dialog, fname)) { + + // The user doesn't want to override the existing file. So, just restart the loop, + // so the user can select a different path or file name. continue; } lastFilename = Glib::path_get_basename(fname); - if (toSave) { - int retCode; + auto retCode = -1; - if (isPartial) { - // Build partial profile - PartialProfile ppTemp(true); - partialProfileDlg->applyPaste(ppTemp.pparams, ppTemp.pedited, toSave->pparams, nullptr); - // Save partial profile - retCode = ppTemp.pparams->save(fname, "", true, ppTemp.pedited); - // Cleanup - ppTemp.deleteInstance(); - } else { - // Save full profile - retCode = toSave->pparams->save(fname); - } + if (isPartial) { + // Build partial profile + PartialProfile ppTemp(true); + partialProfileDlg->applyPaste(ppTemp.pparams, ppTemp.pedited, toSave->pparams, nullptr); + + // Save partial profile + retCode = ppTemp.pparams->save(fname, "", true, ppTemp.pedited); + + // Cleanup + ppTemp.deleteInstance(); + } else { + // Save full profile + retCode = toSave->pparams->save(fname); + } - if (!retCode) { - const auto ccPrevState = changeconn.block(true); - ProfileStore::getInstance()->parseProfiles(); - changeconn.block(ccPrevState); - } else { - done = false; - writeFailed(dialog, fname); - } + if (retCode == 0) { + // Saving the profile was successfull. + + const auto ccPrevState = changeconn.block(true); + ProfileStore::getInstance()->parseProfiles(); + changeconn.block(ccPrevState); + + // Because saving has been successfull, just leave the loop; + break; + } else { + // Saving the profile was not successfull. + + writeFailed(dialog, fname); + + // In case the saving process was not successfull (missing permissions, ...) + // reopen the dialog and try again. + continue; } } - } while (!done); + } } /* diff --git a/rtgui/rtappchooserdialog.cc b/rtgui/rtappchooserdialog.cc index 50a71ee38..5f20dbdad 100644 --- a/rtgui/rtappchooserdialog.cc +++ b/rtgui/rtappchooserdialog.cc @@ -18,7 +18,7 @@ */ #include "rtappchooserdialog.h" -#if !(defined WIN32 || defined __APPLE__) +#if !(defined _WIN32 || defined __APPLE__) #define GTKMM_APPCHOOSERDIALOG #endif diff --git a/rtgui/rtwindow.cc b/rtgui/rtwindow.cc index d588d6aa5..2165162b3 100755 --- a/rtgui/rtwindow.cc +++ b/rtgui/rtwindow.cc @@ -241,8 +241,9 @@ RTWindow::RTWindow () RTImage::init(); WhiteBalance::init(); MyExpander::init(); + FileBrowserEntry::init(); -#ifndef WIN32 +#ifndef _WIN32 const std::vector> appIcons = { RTImage::createPixbufFromFile("rawtherapee-logo-16.png"), RTImage::createPixbufFromFile("rawtherapee-logo-24.png"), @@ -588,6 +589,7 @@ void RTWindow::addEditorPanel (EditorPanel* ep, const std::string &name) } else { ep->setParent (this); ep->setParentWindow (this); + ep->setExternalEditorChangedSignal(&externalEditorChangedSignal); // construct closeable tab for the image Gtk::Grid* titleGrid = Gtk::manage (new Gtk::Grid ()); @@ -636,6 +638,7 @@ void RTWindow::remEditorPanel (EditorPanel* ep) wndEdit->remEditorPanel (ep); } else { bool queueHadFocus = (mainNB->get_current_page() == mainNB->page_num (*bpanel)); + ep->setExternalEditorChangedSignal(nullptr); epanels.erase (ep->getFileName()); filesEdited.erase (ep->getFileName ()); fpanel->refreshEditedState (filesEdited); @@ -1059,6 +1062,15 @@ void RTWindow::updateExternalEditorWidget(int selectedIndex, const std::vectorupdateExternalEditorWidget(selectedIndex, editors); } + + for (auto panel : epanels) { + panel.second->updateExternalEditorWidget(selectedIndex, editors); + } + + if (options.multiDisplayMode > 0) { + EditWindow::getInstance(this) + ->updateExternalEditorWidget(selectedIndex, editors); + } } void RTWindow::updateProfiles (const Glib::ustring &printerProfile, rtengine::RenderingIntent printerIntent, bool printerBPC) diff --git a/rtgui/rtwindow.h b/rtgui/rtwindow.h index 922588a19..4c3aa75ea 100755 --- a/rtgui/rtwindow.h +++ b/rtgui/rtwindow.h @@ -20,6 +20,7 @@ #include #include +#include #if defined(__APPLE__) #include @@ -48,6 +49,8 @@ private: std::set filesEdited; std::map epanels; + sigc::signal externalEditorChangedSignal; + Splash* splash; Gtk::ProgressBar prProgBar; PLDBridge* pldBridge; diff --git a/rtgui/shcselector.cc b/rtgui/shcselector.cc index ad2c28aaa..175c732a2 100644 --- a/rtgui/shcselector.cc +++ b/rtgui/shcselector.cc @@ -20,6 +20,7 @@ #include #include "shcselector.h" + #include "multilangmgr.h" #include "mycurve.h" #include "rtscalable.h" diff --git a/rtgui/soundman.cc b/rtgui/soundman.cc index d038ffd72..5552bd12d 100644 --- a/rtgui/soundman.cc +++ b/rtgui/soundman.cc @@ -21,7 +21,7 @@ #include "soundman.h" #include "options.h" -#ifdef WIN32 +#ifdef _WIN32 #include #include #endif @@ -33,7 +33,7 @@ void SoundManager::init() { -#ifdef WIN32 +#ifdef _WIN32 // TODO: On Windows Vista/7 RT should register with the OS sound system, so it can enjoy application specific // volume, safed, process independent etc. from the start. // Function call is IAudioClient::Initialize @@ -53,7 +53,7 @@ void SoundManager::playSoundAsync(const Glib::ustring &sound) return; } -#ifdef WIN32 +#ifdef _WIN32 DWORD sndParam = SND_ASYNC | SND_NODEFAULT; if (sound.find('.') != Glib::ustring::npos) { diff --git a/rtgui/threadutils.cc b/rtgui/threadutils.cc index 025abf300..070cd2e3c 100644 --- a/rtgui/threadutils.cc +++ b/rtgui/threadutils.cc @@ -21,18 +21,24 @@ #include #include -#ifdef WIN32 +#ifdef _WIN32 #include #endif #if STRICT_MUTEX && !NDEBUG -void MyMutex::checkLock () +MyMutex::MyMutex() : locked(false) {} + +bool MyMutex::checkLock (bool noError) { if (locked) { + if (noError) { + return false; + } + std::cerr << "MyMutex already locked!" << std::endl; -#ifdef WIN32 +#ifdef _WIN32 DebugBreak (); #else raise (SIGTRAP); @@ -40,6 +46,7 @@ void MyMutex::checkLock () } locked = true; + return true; } void MyMutex::checkUnlock () @@ -47,7 +54,7 @@ void MyMutex::checkUnlock () if (!locked) { std::cerr << "MyMutex already unlocked!" << std::endl; -#ifdef WIN32 +#ifdef _WIN32 DebugBreak (); #else raise (SIGTRAP); @@ -61,13 +68,18 @@ void MyMutex::checkUnlock () #if !TRACE_MYRWMUTEX +MyRWMutex::MyRWMutex() : + writerCount(0), + readerCount(0) +{} + void MyReaderLock::acquire () { if (locked) { return; } - Glib::Threads::Mutex::Lock lock (mutex.mutex); + std::unique_lock lock (mutex.mutex); if (mutex.writerCount == 0) { // There's no writer operating, we can increment the writer count which will lock writers. @@ -76,7 +88,7 @@ void MyReaderLock::acquire () // The writer count is non null, but a reader can be the owner of the writer lock, // which will be the case if the reader count is not zero too. while (mutex.writerCount != 0) { - mutex.cond.wait(mutex.mutex); + mutex.cond.wait (lock); } // Then, we can increment the writer count. @@ -95,7 +107,7 @@ void MyReaderLock::release () return; } - Glib::Threads::Mutex::Lock lock (mutex.mutex); + std::unique_lock lock (mutex.mutex); // decrement the writer number first... --mutex.readerCount; @@ -105,7 +117,7 @@ void MyReaderLock::release () --mutex.writerCount; // ...and signal the next waiting reader/writer that it's free - mutex.cond.broadcast (); + mutex.cond.notify_all (); } locked = false; @@ -117,11 +129,11 @@ void MyWriterLock::acquire () return; } - Glib::Threads::Mutex::Lock lock (mutex.mutex); + std::unique_lock lock (mutex.mutex); // The writer count is not zero, so we have to wait for it to be zero again... while (mutex.writerCount != 0) { - mutex.cond.wait (mutex.mutex); + mutex.cond.wait (lock); } // ...then we can increment the writer count. @@ -136,12 +148,12 @@ void MyWriterLock::release () return; } - Glib::Threads::Mutex::Lock lock (mutex.mutex); + std::unique_lock lock (mutex.mutex); // Decrement the writer number first... if (--mutex.writerCount == 0) { - // ...and if the writer count is zero again, we can wake up the next writer or reader. - mutex.cond.broadcast (); + // ...and if the writer count is zero again, we wake up all of the waiting writer or reader. + mutex.cond.notify_all (); } locked = false; @@ -154,13 +166,20 @@ namespace std::ostream& trace (const char* file, int line) { - const auto currentThread = Glib::Threads::Thread::self (); + const auto currentThread = std::this_thread::get_id(); return std::cout << currentThread << ":" << file << ":" << line << ": "; } } +MyRWMutex::MyRWMutex() : + lastWriterFile(nullptr), + lastWriterLine(0), + writerCount(0), + readerCount(0) +{} + void MyReaderLock::acquire (const char* file, int line) { if (locked) { @@ -170,7 +189,7 @@ void MyReaderLock::acquire (const char* file, int line) trace (file, line) << "Acquiring MyReaderLock..." << std::endl; - Glib::Threads::Mutex::Lock lock (mutex.mutex); + std::unique_lock lock (mutex.mutex); if (mutex.writerCount == 0) { // There's no writer operating, we can increment the writer count which will lock writers. @@ -184,13 +203,13 @@ void MyReaderLock::acquire (const char* file, int line) << "\tLast writer file: " << mutex.lastWriterFile << std::endl << "\tLast writer line: " << mutex.lastWriterLine << std::endl; - mutex.cond.wait(mutex.mutex); + mutex.cond.wait (lock); } // Then, we can increment the writer count. ++mutex.writerCount; - mutex.ownerThread = Glib::Threads::Thread::self (); + mutex.ownerThread = std::this_thread::get_id (); mutex.lastWriterFile = file; mutex.lastWriterLine = line; } @@ -211,7 +230,7 @@ void MyReaderLock::release (const char* file, int line) trace (file, line) << "Releasing MyReaderLock..." << std::endl; - Glib::Threads::Mutex::Lock lock (mutex.mutex); + std::unique_lock lock (mutex.mutex); // decrement the writer number first... --mutex.readerCount; @@ -221,9 +240,9 @@ void MyReaderLock::release (const char* file, int line) --mutex.writerCount; // ...and signal the next waiting reader/writer that it's free - mutex.cond.broadcast (); + mutex.cond.notify_all (); - mutex.ownerThread = nullptr; + mutex.ownerThread = std::thread::id(); mutex.lastWriterFile = ""; mutex.lastWriterLine = 0; } @@ -241,7 +260,7 @@ void MyWriterLock::acquire (const char* file, int line) trace (file, line) << "Acquiring MyWriterLock..." << std::endl; - Glib::Threads::Mutex::Lock lock (mutex.mutex); + std::unique_lock lock (mutex.mutex); // The writer count is not zero, so we have to wait for it to be zero again... while (mutex.writerCount != 0) { @@ -250,13 +269,13 @@ void MyWriterLock::acquire (const char* file, int line) << "\tLast writer file: " << mutex.lastWriterFile << std::endl << "\tLast writer line: " << mutex.lastWriterLine << std::endl; - mutex.cond.wait (mutex.mutex); + mutex.cond.wait (lock); } // ...then we can increment the writer count. ++mutex.writerCount; - mutex.ownerThread = Glib::Threads::Thread::self (); + mutex.ownerThread = std::this_thread::get_id (); mutex.lastWriterFile = file; mutex.lastWriterLine = line; @@ -273,14 +292,14 @@ void MyWriterLock::release (const char* file, int line) trace (file, line) << "Releasing MyWriterLock..." << std::endl; - Glib::Threads::Mutex::Lock lock (mutex.mutex); + std::unique_lock lock (mutex.mutex); // Decrement the writer number first... if (--mutex.writerCount == 0) { - // ...and if the writer count is zero again, we can wake up the next writer or reader. - mutex.cond.broadcast (); + // ...and if the writer count is zero again, we wake up all of the waiting writer or reader. + mutex.cond.notify_all (); - mutex.ownerThread = nullptr; + mutex.ownerThread = std::thread::id(); mutex.lastWriterFile = ""; mutex.lastWriterLine = 0; } diff --git a/rtgui/threadutils.h b/rtgui/threadutils.h index eae4a9ad2..71c57e347 100644 --- a/rtgui/threadutils.h +++ b/rtgui/threadutils.h @@ -24,14 +24,15 @@ //#undef STRICT_MUTEX //#define STRICT_MUTEX 1 -#include - +#include +#include +#include #include "../rtengine/noncopyable.h" #if STRICT_MUTEX && NDEBUG -using MyMutexBase = Glib::Threads::Mutex; +using MyMutexBase = std::mutex; #else -using MyMutexBase = Glib::Threads::RecMutex; +using MyMutexBase = std::recursive_mutex; #endif /** @@ -54,9 +55,11 @@ public: void unlock (); #if STRICT_MUTEX && !NDEBUG + MyMutex(); + private: - bool locked = false; - void checkLock (); + bool locked; + bool checkLock (bool noError = false); void checkUnlock (); #endif }; @@ -66,8 +69,6 @@ class MyMutex::MyLock : { public: explicit MyLock (MyMutex& mutex); - MyLock (MyMutex& mutex, Glib::Threads::NotLock); - MyLock (MyMutex& mutex, Glib::Threads::TryLock); ~MyLock (); @@ -90,18 +91,20 @@ public: friend class MyReaderLock; friend class MyWriterLock; + MyRWMutex(); + private: - Glib::Threads::Mutex mutex; - Glib::Threads::Cond cond; - - std::size_t writerCount = 0; - std::size_t readerCount = 0; - #if TRACE_MYRWMUTEX - Glib::Threads::Thread* ownerThread = nullptr; - const char* lastWriterFile = ""; - int lastWriterLine = 0; + std::thread::id ownerThread; + const char* lastWriterFile; + int lastWriterLine; #endif + + std::mutex mutex; + std::condition_variable cond; + + std::size_t writerCount; + std::size_t readerCount; }; /** @@ -167,12 +170,12 @@ inline void MyMutex::lock () inline bool MyMutex::trylock () { - if (MyMutexBase::trylock ()) { + if (MyMutexBase::try_lock ()) { #if STRICT_MUTEX && !NDEBUG - checkLock (); -#endif - + return checkLock(true); +#else return true; +#endif } return false; @@ -194,18 +197,6 @@ inline MyMutex::MyLock::MyLock (MyMutex& mutex) mutex.lock(); } -inline MyMutex::MyLock::MyLock (MyMutex& mutex, Glib::Threads::NotLock) - : mutex (mutex) - , locked (false) -{ -} - -inline MyMutex::MyLock::MyLock (MyMutex& mutex, Glib::Threads::TryLock) - : mutex (mutex) - , locked (mutex.trylock ()) -{ -} - inline MyMutex::MyLock::~MyLock () { if (locked) { diff --git a/rtgui/thumbbrowserbase.cc b/rtgui/thumbbrowserbase.cc index 8f3499c2a..f697d6648 100644 --- a/rtgui/thumbbrowserbase.cc +++ b/rtgui/thumbbrowserbase.cc @@ -781,6 +781,11 @@ void ThumbBrowserBase::arrangeFiles(ThumbBrowserEntryBase* entry) for (int i = 0; ct < fd.size() && i < numOfCols; ++i, ++ct) { for (; ct < fd.size() && fd[ct]->filtered; ++ct) { + // Thumbs that are not going be drawn should also have a minimum height and width. Cause + // the properties might be used in other parts of the code. The position is just set to be + // zero as a default. + fd[ct]->setPosition(0, 0, colWidths[i], rowHeight); + fd[ct]->drawable = false; } diff --git a/rtgui/thumbimageupdater.cc b/rtgui/thumbimageupdater.cc index 540ad625e..2570e20c5 100644 --- a/rtgui/thumbimageupdater.cc +++ b/rtgui/thumbimageupdater.cc @@ -45,12 +45,13 @@ public: struct Job { Job(ThumbBrowserEntryBase* tbe, bool* priority, bool upgrade, - ThumbImageUpdateListener* listener): + bool forceUpgrade, ThumbImageUpdateListener* listener): tbe_(tbe), /*pparams_(pparams), height_(height), */ priority_(priority), upgrade_(upgrade), + force_upgrade_(forceUpgrade), listener_(listener) {} @@ -58,6 +59,7 @@ public: tbe_(nullptr), priority_(nullptr), upgrade_(false), + force_upgrade_(false), listener_(nullptr) {} @@ -66,6 +68,7 @@ public: int height_;*/ bool* priority_; bool upgrade_; + bool force_upgrade_; ThumbImageUpdateListener* listener_; }; @@ -85,9 +88,9 @@ public: Glib::ThreadPool* threadPool_; - // Need to be a Glib::Threads::Mutex because used in a Glib::Threads::Cond object... + // Need to be a std::mutex because used in a std::condition_variable object... // This is the only exceptions along with GThreadMutex (guiutils.cc), MyMutex is used everywhere else - Glib::Threads::Mutex mutex_; + std::mutex mutex_; JobList jobs_; @@ -95,7 +98,7 @@ public: bool inactive_waiting_; - Glib::Threads::Cond inactive_; + std::condition_variable inactive_; void processNextJob() @@ -103,7 +106,7 @@ public: Job j; { - Glib::Threads::Mutex::Lock lock(mutex_); + std::lock_guard lock(mutex_); // nothing to do; could be jobs have been removed if ( jobs_.empty() ) { @@ -153,8 +156,8 @@ public: Thumbnail* thm = j.tbe_->thumbnail; if ( j.upgrade_ ) { - if ( thm->isQuick() ) { - img = thm->upgradeThumbImage(thm->getProcParams(), j.tbe_->getPreviewHeight(), scale); + if ( thm->isQuick() || j.force_upgrade_ ) { + img = thm->upgradeThumbImage(thm->getProcParams(), j.tbe_->getPreviewHeight(), scale, j.force_upgrade_); } } else { img = thm->processThumbImage(thm->getProcParams(), j.tbe_->getPreviewHeight(), scale); @@ -166,10 +169,10 @@ public: } if ( --active_ == 0 ) { - Glib::Threads::Mutex::Lock lock(mutex_); + std::lock_guard lock(mutex_); if (inactive_waiting_) { inactive_waiting_ = false; - inactive_.broadcast(); + inactive_.notify_all(); } } } @@ -191,14 +194,14 @@ ThumbImageUpdater::~ThumbImageUpdater() { delete impl_; } -void ThumbImageUpdater::add(ThumbBrowserEntryBase* tbe, bool* priority, bool upgrade, ThumbImageUpdateListener* l) +void ThumbImageUpdater::add(ThumbBrowserEntryBase* tbe, bool* priority, bool upgrade, bool forceUpgrade, ThumbImageUpdateListener* l) { // nobody listening? if ( l == nullptr ) { return; } - Glib::Threads::Mutex::Lock lock(impl_->mutex_); + std::lock_guard lock(impl_->mutex_); // look up if an older version is in the queue Impl::JobList::iterator i(impl_->jobs_.begin()); @@ -206,7 +209,8 @@ void ThumbImageUpdater::add(ThumbBrowserEntryBase* tbe, bool* priority, bool upg for ( ; i != impl_->jobs_.end(); ++i ) { if ( i->tbe_ == tbe && i->listener_ == l && - i->upgrade_ == upgrade ) { + i->upgrade_ == upgrade && + i->force_upgrade_ == forceUpgrade) { DEBUG("updating job %s", tbe->shortname.c_str()); // we have one, update queue entry, will be picked up by thread when processed /*i->pparams_ = params; @@ -218,7 +222,7 @@ void ThumbImageUpdater::add(ThumbBrowserEntryBase* tbe, bool* priority, bool upg // create a new job and append to queue DEBUG("queueing job %s", tbe->shortname.c_str()); - impl_->jobs_.push_back(Impl::Job(tbe, priority, upgrade, l)); + impl_->jobs_.push_back(Impl::Job(tbe, priority, upgrade, forceUpgrade, l)); DEBUG("adding run request %s", tbe->shortname.c_str()); impl_->threadPool_->push(sigc::mem_fun(*impl_, &ThumbImageUpdater::Impl::processNextJob)); @@ -230,7 +234,7 @@ void ThumbImageUpdater::removeJobs(ThumbImageUpdateListener* listener) DEBUG("removeJobs(%p)", listener); { - Glib::Threads::Mutex::Lock lock(impl_->mutex_); + std::lock_guard lock(impl_->mutex_); for( Impl::JobList::iterator i(impl_->jobs_.begin()); i != impl_->jobs_.end(); ) { if (i->listener_ == listener) { @@ -246,9 +250,9 @@ void ThumbImageUpdater::removeJobs(ThumbImageUpdateListener* listener) while ( impl_->active_ != 0 ) { DEBUG("waiting for running jobs1"); { - Glib::Threads::Mutex::Lock lock(impl_->mutex_); + std::unique_lock lock(impl_->mutex_); impl_->inactive_waiting_ = true; - impl_->inactive_.wait(impl_->mutex_); + impl_->inactive_.wait(lock); } } } @@ -258,7 +262,7 @@ void ThumbImageUpdater::removeAllJobs() DEBUG("stop"); { - Glib::Threads::Mutex::Lock lock(impl_->mutex_); + std::lock_guard lock(impl_->mutex_); impl_->jobs_.clear(); } @@ -266,9 +270,9 @@ void ThumbImageUpdater::removeAllJobs() while ( impl_->active_ != 0 ) { DEBUG("waiting for running jobs2"); { - Glib::Threads::Mutex::Lock lock(impl_->mutex_); + std::unique_lock lock(impl_->mutex_); impl_->inactive_waiting_ = true; - impl_->inactive_.wait(impl_->mutex_); + impl_->inactive_.wait(lock); } } } diff --git a/rtgui/thumbimageupdater.h b/rtgui/thumbimageupdater.h index a2e2ecb19..4c890ee9b 100644 --- a/rtgui/thumbimageupdater.h +++ b/rtgui/thumbimageupdater.h @@ -78,7 +78,7 @@ public: * @param priority if \c true then run as soon as possible * @param l listener waiting on update */ - void add(ThumbBrowserEntryBase* tbe, bool* priority, bool upgrade, ThumbImageUpdateListener* l); + void add(ThumbBrowserEntryBase* tbe, bool* priority, bool upgrade, bool forceUpgrade, ThumbImageUpdateListener* l); /** * @brief Remove jobs associated with listener \c l. diff --git a/rtgui/thumbnail.cc b/rtgui/thumbnail.cc index 96a8bf849..266dbacd3 100644 --- a/rtgui/thumbnail.cc +++ b/rtgui/thumbnail.cc @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ -#ifdef WIN32 +#ifdef _WIN32 #include #endif @@ -34,16 +34,78 @@ #include #include "../rtengine/dynamicprofile.h" +#include "../rtengine/metadata.h" #include "../rtengine/profilestore.h" #include "../rtengine/settings.h" -#include "../rtexif/rtexif.h" #include "guiutils.h" #include "batchqueue.h" #include "extprog.h" #include "md5helper.h" #include "pathutils.h" #include "paramsedited.h" +#include "ppversion.h" #include "procparamchangers.h" +#include "version.h" + + +namespace { + +bool CPBDump( + const Glib::ustring& commFName, + const Glib::ustring& imageFName, + const Glib::ustring& profileFName, + const Glib::ustring& defaultPParams, + const CacheImageData* cfs, + bool flagMode +) +{ + const std::unique_ptr kf(new Glib::KeyFile); + + if (!kf) { + return false; + } + + // open the file in write mode + const std::unique_ptr f(g_fopen(commFName.c_str (), "wt"), &std::fclose); + + if (!f) { + printf ("CPBDump(\"%s\") >>> Error: unable to open file with write access!\n", commFName.c_str()); + return false; + } + + try { + kf->set_string ("RT General", "CachePath", options.cacheBaseDir); + kf->set_string ("RT General", "AppVersion", RTVERSION); + kf->set_integer ("RT General", "ProcParamsVersion", PPVERSION); + kf->set_string ("RT General", "ImageFileName", imageFName); + kf->set_string ("RT General", "OutputProfileFileName", profileFName); + kf->set_string ("RT General", "DefaultProcParams", defaultPParams); + kf->set_boolean ("RT General", "FlaggingMode", flagMode); + + kf->set_integer ("Common Data", "FrameCount", cfs->frameCount); + kf->set_integer ("Common Data", "SampleFormat", cfs->sampleFormat); + kf->set_boolean ("Common Data", "IsHDR", cfs->isHDR); + kf->set_boolean ("Common Data", "IsPixelShift", cfs->isPixelShift); + kf->set_double ("Common Data", "FNumber", cfs->fnumber); + kf->set_double ("Common Data", "Shutter", cfs->shutter); + kf->set_double ("Common Data", "FocalLength", cfs->focalLen); + kf->set_integer ("Common Data", "ISO", cfs->iso); + kf->set_string ("Common Data", "Lens", cfs->lens); + kf->set_string ("Common Data", "Make", cfs->camMake); + kf->set_string ("Common Data", "Model", cfs->camModel); + + } catch (const Glib::KeyFileError&) { + } + + try { + fprintf (f.get(), "%s", kf->to_data().c_str()); + } catch (const Glib::KeyFileError&) { + } + + return true; +} + +} // namespace using namespace rtengine::procparams; @@ -86,7 +148,7 @@ Thumbnail::Thumbnail(CacheManager* cm, const Glib::ustring& fname, CacheImageDat tpp = nullptr; } -Thumbnail::Thumbnail(CacheManager* cm, const Glib::ustring& fname, const std::string& md5) : +Thumbnail::Thumbnail(CacheManager* cm, const Glib::ustring& fname, const std::string& md5, const std::string &xmpSidecarMd5) : fname(fname), cachemgr(cm), ref(1), @@ -104,6 +166,7 @@ Thumbnail::Thumbnail(CacheManager* cm, const Glib::ustring& fname, const std::st cfs.md5 = md5; + cfs.xmpSidecarMd5 = xmpSidecarMd5; loadProcParams (); _generateThumbnailImage (); cfs.recentlySaved = false; @@ -114,6 +177,11 @@ Thumbnail::Thumbnail(CacheManager* cm, const Glib::ustring& fname, const std::st tpp = nullptr; } +Glib::ustring Thumbnail::xmpSidecarPath(const Glib::ustring &imagePath) +{ + return rtengine::Exiv2Metadata::xmpSidecarPath(imagePath); +} + void Thumbnail::_generateThumbnailImage () { @@ -163,24 +231,27 @@ void Thumbnail::_generateThumbnailImage () // image out of the RAW. Mark as "quick". // 2. if we don't find that then just grab the real image. bool quick = false; - rtengine::RawMetaDataLocation ri; rtengine::eSensorType sensorType = rtengine::ST_NONE; if ( initial_ && options.internalThumbIfUntouched) { quick = true; - tpp = rtengine::Thumbnail::loadQuickFromRaw (fname, ri, sensorType, tw, th, 1, TRUE); + tpp = rtengine::Thumbnail::loadQuickFromRaw (fname, sensorType, tw, th, 1, TRUE); } if ( tpp == nullptr ) { quick = false; - tpp = rtengine::Thumbnail::loadFromRaw (fname, ri, sensorType, tw, th, 1, pparams->wb.equal, pparams->wb.observer, TRUE); + tpp = rtengine::Thumbnail::loadFromRaw (fname, sensorType, tw, th, 1, pparams->wb.equal, pparams->wb.observer, TRUE, &(pparams->raw)); } cfs.sensortype = sensorType; if (tpp) { cfs.format = FT_Raw; cfs.thumbImgType = quick ? CacheImageData::QUICK_THUMBNAIL : CacheImageData::FULL_THUMBNAIL; - infoFromImage (fname, std::unique_ptr(new rtengine::RawMetaDataLocation(ri))); + infoFromImage (fname); + if (!quick) { + cfs.width = tpp->full_width; + cfs.height = tpp->full_height; + } } } @@ -241,7 +312,6 @@ const ProcParams& Thumbnail::getProcParamsU () */ rtengine::procparams::ProcParams* Thumbnail::createProcParamsForUpdate(bool returnParams, bool force, bool flaggingMode) { - // try to load the last saved parameters from the cache or from the paramfile file ProcParams* ldprof = nullptr; @@ -259,52 +329,35 @@ rtengine::procparams::ProcParams* Thumbnail::createProcParamsForUpdate(bool retu if (!run_cpb) { if (defProf == DEFPROFILE_DYNAMIC && create && cfs && cfs->exifValid) { - rtengine::FramesMetaData* imageMetaData; - if (getType() == FT_Raw) { - // Should we ask all frame's MetaData ? - imageMetaData = rtengine::FramesMetaData::fromFile (fname, std::unique_ptr(new rtengine::RawMetaDataLocation(rtengine::Thumbnail::loadMetaDataFromRaw(fname))), true); - } else { - // Should we ask all frame's MetaData ? - imageMetaData = rtengine::FramesMetaData::fromFile (fname, nullptr, true); - } - PartialProfile *pp = ProfileStore::getInstance()->loadDynamicProfile(imageMetaData, fname); - delete imageMetaData; - int err = pp->pparams->save(outFName); - pp->deleteInstance(); - delete pp; - if (!err) { + const auto pp_deleter = + [](PartialProfile* pp) + { + pp->deleteInstance(); + delete pp; + }; + const std::unique_ptr imageMetaData(rtengine::FramesMetaData::fromFile(fname)); + const std::unique_ptr pp( + imageMetaData + ? ProfileStore::getInstance()->loadDynamicProfile(imageMetaData.get(), fname) + : nullptr, + pp_deleter + ); + if (pp && !pp->pparams->save(outFName)) { loadProcParams(); } } else if (create && defProf != DEFPROFILE_DYNAMIC) { - const PartialProfile *p = ProfileStore::getInstance()->getProfile(defProf); + const PartialProfile* const p = ProfileStore::getInstance()->getProfile(defProf); if (p && !p->pparams->save(outFName)) { loadProcParams(); } } } else { // First generate the communication file, with general values and EXIF metadata - rtengine::FramesMetaData* imageMetaData; - - if (getType() == FT_Raw) { - // Should we ask all frame's MetaData ? - imageMetaData = rtengine::FramesMetaData::fromFile (fname, std::unique_ptr(new rtengine::RawMetaDataLocation(rtengine::Thumbnail::loadMetaDataFromRaw(fname))), true); - } else { - // Should we ask all frame's MetaData ? - imageMetaData = rtengine::FramesMetaData::fromFile (fname, nullptr, true); - } - static int index = 0; // Will act as unique identifier during the session Glib::ustring tmpFileName( Glib::build_filename(options.cacheBaseDir, Glib::ustring::compose("CPB_temp_%1.txt", index++)) ); - const rtexif::TagDirectory* exifDir = nullptr; - - if (imageMetaData && (exifDir = imageMetaData->getRootExifData())) { - exifDir->CPBDump(tmpFileName, fname, outFName, - defaultPparamsPath == DEFPROFILE_INTERNAL ? DEFPROFILE_INTERNAL : Glib::build_filename(defaultPparamsPath, Glib::path_get_basename(defProf) + paramFileExtension), - cfs, - flaggingMode); - } - delete imageMetaData; + CPBDump(tmpFileName, fname, outFName, + defaultPparamsPath == DEFPROFILE_INTERNAL ? DEFPROFILE_INTERNAL : Glib::build_filename(defaultPparamsPath, Glib::path_get_basename(defProf) + paramFileExtension), cfs, flaggingMode); // For the filename etc. do NOT use streams, since they are not UTF8 safe Glib::ustring cmdLine = options.CPBPath + Glib::ustring(" \"") + tmpFileName + Glib::ustring("\""); @@ -334,7 +387,7 @@ rtengine::procparams::ProcParams* Thumbnail::createProcParamsForUpdate(bool retu void Thumbnail::notifylisterners_procParamsChanged(int whoChangedIt) { for (size_t i = 0; i < listeners.size(); i++) { - listeners[i]->procParamsChanged (this, whoChangedIt); + listeners[i]->procParamsChanged (this, whoChangedIt, false); } } @@ -345,7 +398,7 @@ void Thumbnail::notifylisterners_procParamsChanged(int whoChangedIt) * The result is a complete ProcParams with default values merged with the values * from the loaded ProcParams (sidecar or cache file). */ -void Thumbnail::loadProcParams () +void Thumbnail::loadProcParams() { MyMutex::MyLock lock(mutex); @@ -437,7 +490,7 @@ void Thumbnail::clearProcParams (int whoClearedIt) } // end of mutex lock for (size_t i = 0; i < listeners.size(); i++) { - listeners[i]->procParamsChanged (this, whoClearedIt); + listeners[i]->procParamsChanged (this, whoClearedIt, false); } } @@ -449,8 +502,18 @@ bool Thumbnail::hasProcParams () const void Thumbnail::setProcParams (const ProcParams& pp, ParamsEdited* pe, int whoChangedIt, bool updateCacheNow, bool resetToDefault) { + const bool blackLevelChanged = + pparams->raw.bayersensor.black0 != pp.raw.bayersensor.black0 + || pparams->raw.bayersensor.black1 != pp.raw.bayersensor.black1 + || pparams->raw.bayersensor.black2 != pp.raw.bayersensor.black2 + || pparams->raw.bayersensor.black3 != pp.raw.bayersensor.black3 + || pparams->raw.xtranssensor.blackred != pp.raw.xtranssensor.blackred + || pparams->raw.xtranssensor.blackgreen != pp.raw.xtranssensor.blackgreen + || pparams->raw.xtranssensor.blackblue != pp.raw.xtranssensor.blackblue; const bool needsReprocessing = resetToDefault + || blackLevelChanged + || pparams->raw.expos != pp.raw.expos || pparams->toneCurve != pp.toneCurve || pparams->locallab != pp.locallab || pparams->labCurve != pp.labCurve @@ -485,6 +548,7 @@ void Thumbnail::setProcParams (const ProcParams& pp, ParamsEdited* pe, int whoCh || pparams->filmNegative != pp.filmNegative || whoChangedIt == FILEBROWSER || whoChangedIt == BATCHEDITOR; + const bool upgradeHint = blackLevelChanged; { MyMutex::MyLock lock(mutex); @@ -520,7 +584,7 @@ void Thumbnail::setProcParams (const ProcParams& pp, ParamsEdited* pe, int whoCh if (needsReprocessing) { for (size_t i = 0; i < listeners.size(); i++) { - listeners[i]->procParamsChanged (this, whoChangedIt); + listeners[i]->procParamsChanged (this, whoChangedIt, upgradeHint); } } } @@ -694,12 +758,12 @@ rtengine::IImage8* Thumbnail::processThumbImage (const rtengine::procparams::Pro return image; } -rtengine::IImage8* Thumbnail::upgradeThumbImage (const rtengine::procparams::ProcParams& pparams, int h, double& scale) +rtengine::IImage8* Thumbnail::upgradeThumbImage (const rtengine::procparams::ProcParams& pparams, int h, double& scale, bool forceUpgrade) { MyMutex::MyLock lock(mutex); - if ( cfs.thumbImgType != CacheImageData::QUICK_THUMBNAIL ) { + if ( cfs.thumbImgType != CacheImageData::QUICK_THUMBNAIL && !forceUpgrade ) { return nullptr; } @@ -804,9 +868,14 @@ ThFileType Thumbnail::getType () const return (ThFileType) cfs.format; } -int Thumbnail::infoFromImage (const Glib::ustring& fname, std::unique_ptr rml) +int Thumbnail::infoFromImage (const Glib::ustring& fname) { - rtengine::FramesMetaData* idata = rtengine::FramesMetaData::fromFile (fname, std::move(rml)); + return infoFromImage(fname, cfs); +} + +int Thumbnail::infoFromImage(const Glib::ustring &fname, CacheImageData &cfs) +{ + std::unique_ptr idata(rtengine::FramesMetaData::fromFile (fname)); if (!idata) { return 0; @@ -867,7 +936,8 @@ int Thumbnail::infoFromImage (const Glib::ustring& fname, std::unique_ptrgetDimensions(cfs.width, cfs.height); + return deg; } @@ -987,6 +1057,10 @@ void Thumbnail::updateCache (bool updatePParams, bool updateCacheImageData) if (updateCacheImageData) { cfs.save (getCacheFileName ("data", ".txt")); } + + if (updatePParams && pparamsValid) { + saveMetadata(); + } } Thumbnail::~Thumbnail () @@ -1079,7 +1153,7 @@ void Thumbnail::removeThumbnailListener (ThumbnailListener* tnl) bool Thumbnail::openDefaultViewer(int destination) { -#ifdef WIN32 +#ifdef _WIN32 Glib::ustring openFName; if (destination == 1) { @@ -1165,6 +1239,33 @@ void Thumbnail::getCamWB(double& temp, double& green, rtengine::StandardObserver } } +void Thumbnail::saveMetadata() +{ + if (options.rtSettings.metadata_xmp_sync != rtengine::Settings::MetadataXmpSync::READ_WRITE) { + return; + } + + if (pparams->metadata.exif.empty() && pparams->metadata.iptc.empty()) { + return; + } + + auto fn = rtengine::Exiv2Metadata::xmpSidecarPath(fname); + try { + auto xmp = rtengine::Exiv2Metadata::getXmpSidecar(fname); + rtengine::Exiv2Metadata meta; + meta.xmpData() = std::move(xmp); + meta.setExif(pparams->metadata.exif); + meta.setIptc(pparams->metadata.iptc); + meta.saveToXmp(fn); + if (options.rtSettings.verbose) { + std::cout << "saved edited metadata for " << fname << " to " + << fn << std::endl; + } + } catch (std::exception &exc) { + std::cerr << "ERROR saving metadata for " << fname << " to " << fn + << ": " << exc.what() << std::endl; + } +} void Thumbnail::getSpotWB(int x, int y, int rect, double& temp, double& green) { if (tpp) { diff --git a/rtgui/thumbnail.h b/rtgui/thumbnail.h index 4d0355747..82c4f4738 100644 --- a/rtgui/thumbnail.h +++ b/rtgui/thumbnail.h @@ -84,16 +84,21 @@ class Thumbnail void _loadThumbnail (bool firstTrial = true); void _saveThumbnail (); void _generateThumbnailImage (); - int infoFromImage (const Glib::ustring& fname, std::unique_ptr rml = nullptr); + int infoFromImage (const Glib::ustring& fname); void generateExifDateTimeStrings (); Glib::ustring getCacheFileName (const Glib::ustring& subdir, const Glib::ustring& fext) const; + void saveMetadata(); + public: Thumbnail (CacheManager* cm, const Glib::ustring& fname, CacheImageData* cf); - Thumbnail (CacheManager* cm, const Glib::ustring& fname, const std::string& md5); + Thumbnail (CacheManager* cm, const Glib::ustring& fname, const std::string& md5, const std::string &xmpSidecarMd5); ~Thumbnail (); + static int infoFromImage(const Glib::ustring &fname, CacheImageData &cfs); + static Glib::ustring xmpSidecarPath(const Glib::ustring &imagePath); + bool hasProcParams () const; const rtengine::procparams::ProcParams& getProcParams (); const rtengine::procparams::ProcParams& getProcParamsU (); // Unprotected version @@ -119,7 +124,7 @@ public: // unsigned char* getThumbnailImage (int &w, int &h, int fixwh=1); // fixwh = 0: fix w and calculate h, =1: fix h and calculate w rtengine::IImage8* processThumbImage (const rtengine::procparams::ProcParams& pparams, int h, double& scale); - rtengine::IImage8* upgradeThumbImage (const rtengine::procparams::ProcParams& pparams, int h, double& scale); + rtengine::IImage8* upgradeThumbImage (const rtengine::procparams::ProcParams& pparams, int h, double& scale, bool forceUpgrade); void getThumbnailSize (int &w, int &h, const rtengine::procparams::ProcParams *pparams = nullptr); void getFinalSize (const rtengine::procparams::ProcParams& pparams, int& w, int& h); void getOriginalSize (int& w, int& h) const; diff --git a/rtgui/thumbnaillistener.h b/rtgui/thumbnaillistener.h index 18ac99dce..fb9f8c1df 100644 --- a/rtgui/thumbnaillistener.h +++ b/rtgui/thumbnaillistener.h @@ -24,5 +24,5 @@ class ThumbnailListener { public: virtual ~ThumbnailListener() = default; - virtual void procParamsChanged(Thumbnail* thm, int whoChangedIt) = 0; + virtual void procParamsChanged(Thumbnail* thm, int whoChangedIt, bool upgradeHint) = 0; }; diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index e9b0ce5cc..77ac26d57 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -1181,8 +1181,8 @@ void ToolPanelCoordinator::profileChange( // Reset IPTC values when switching procparams from the History if (event == rtengine::EvHistoryBrowsed) { - mergedParams->iptc.clear(); - mergedParams->exif.clear(); + mergedParams->metadata.iptc.clear(); + mergedParams->metadata.exif.clear(); } // And apply the partial profile nparams to mergedParams @@ -1906,6 +1906,12 @@ bool ToolPanelCoordinator::getFilmNegativeSpot(rtengine::Coord spot, int spotSiz return ipc && ipc->getFilmNegativeSpot(spot.x, spot.y, spotSize, refInput, refOutput); } + +void ToolPanelCoordinator::setProgressListener(rtengine::ProgressListener *pl) +{ + metadata->setProgressListener(pl); +} + FoldableToolPanel *ToolPanelCoordinator::getFoldableToolPanel(Tool tool) const { switch (tool) { diff --git a/rtgui/toolpanelcoord.h b/rtgui/toolpanelcoord.h index 95350c5e8..762ea4a1e 100644 --- a/rtgui/toolpanelcoord.h +++ b/rtgui/toolpanelcoord.h @@ -461,6 +461,8 @@ public: void setEditProvider(EditDataProvider *provider); + void setProgressListener(rtengine::ProgressListener *pl); + protected: static std::unordered_map toolNamesReverseMap; diff --git a/rtgui/whitebalance.cc b/rtgui/whitebalance.cc index 761f2402a..f72f3bc51 100644 --- a/rtgui/whitebalance.cc +++ b/rtgui/whitebalance.cc @@ -246,7 +246,10 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC } auto m = ProcEventMapper::getInstance(); - EvWBObserver10 = m->newEvent(ALLNORAW, "HISTORY_MSG_WBALANCE_OBSERVER10"); + EvWBObserver10 = m->newEvent(WB, "HISTORY_MSG_WBALANCE_OBSERVER10"); + EvWBitcwbprim = m->newEvent(WB, "HISTORY_MSG_WBITC_PRIM"); + EvWBitcwbalg = m->newEvent(WB, "HISTORY_MSG_WBITC_OBS"); + EvWBitcwgreen = m->newEvent(WB, "HISTORY_MSG_WBITC_GREEN"); //Add the model columns to the Combo (which is a kind of view), @@ -342,6 +345,10 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC StudLabel = Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER)); StudLabel->set_tooltip_text(M("TP_WBALANCE_STUDLABEL_TOOLTIP")); + PatchLabel = Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER)); + PatchLabel->set_tooltip_text(M("TP_WBALANCE_PATCHLABEL_TOOLTIP")); + PatchlevelLabel = Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER)); + PatchlevelLabel->set_tooltip_text(M("TP_WBALANCE_PATCHLEVELLABEL_TOOLTIP")); mulLabel = Gtk::manage(new Gtk::Label("---", Gtk::ALIGN_CENTER)); mulLabel->set_tooltip_text(M("TP_WBALANCE_MULLABEL_TOOLTIP")); @@ -350,7 +357,7 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC temp = Gtk::manage (new Adjuster (M("TP_WBALANCE_TEMPERATURE"), MINTEMP, MAXTEMP, 5, CENTERTEMP, itempL, itempR, &wbSlider2Temp, &wbTemp2Slider)); green = Gtk::manage (new Adjuster (M("TP_WBALANCE_GREEN"), MINGREEN, MAXGREEN, 0.001, 1.0, igreenL, igreenR)); equal = Gtk::manage (new Adjuster (M("TP_WBALANCE_EQBLUERED"), MINEQUAL, MAXEQUAL, 0.001, 1.0, iblueredL, iblueredR)); - tempBias = Gtk::manage (new Adjuster(M("TP_WBALANCE_TEMPBIAS"), -0.5, 0.5, 0.01, 0.0, itempbiasL, itempbiasR)); + tempBias = Gtk::manage (new Adjuster(M("TP_WBALANCE_TEMPBIAS"), -1.1, 1.1, 0.005, 0.0, itempbiasL, itempbiasR)); observer10 = Gtk::manage(new CheckBox(M("TP_WBALANCE_OBSERVER10"), multiImage)); cache_customTemp (0); @@ -364,6 +371,32 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC equal->show (); tempBias->show (); observer10->show(); + itcwbFrame = Gtk::manage(new Gtk::Frame(M("TP_WBALANCE_ITCWB_FRA"))); + + itcwbFrame->set_label_align(0.025, 0.5); + itcwbFrame->set_tooltip_markup (M("PREFERENCES_WBACORR_TOOLTIP")); + + ToolParamBlock* const itcwbBox = Gtk::manage(new ToolParamBlock()); + + + itcwb_green = Gtk::manage (new Adjuster (M("TP_WBALANCE_ITCWGREEN"), -0.35, 0.35, 0.005, 0.)); + itcwb_green ->set_tooltip_markup (M("TP_WBALANCE_ITCWGREEN_TOOLTIP")); + + itcwb_alg = Gtk::manage (new Gtk::CheckButton (M("TP_WBALANCE_ITCWB_ALG"))); + itcwb_alg ->set_tooltip_markup (M("TP_WBALANCE_ITCWALG_TOOLTIP")); + itcwb_alg ->set_active (false); + + + + itcwb_prim = Gtk::manage (new MyComboBoxText ()); + itcwb_prim->append(M("TP_WBALANCE_ITCWB_PRIM_SRGB")); + itcwb_prim->append(M("TP_WBALANCE_ITCWB_PRIM_BETA")); + itcwb_prim->append(M("TP_WBALANCE_ITCWB_PRIM_XYZCAM")); + itcwb_prim->append(M("TP_WBALANCE_ITCWB_PRIM_JDCMAX")); + itcwb_prim->set_active(1); + itcwb_primconn = itcwb_prim->signal_changed().connect(sigc::mem_fun(*this, &WhiteBalance::itcwb_prim_changed)); + itcwb_prim ->set_tooltip_markup (M("TP_WBALANCE_ITCWPRIM_TOOLTIP")); + /* Gtk::Box* boxgreen = Gtk::manage (new Gtk::Box ()); boxgreen->show (); @@ -373,6 +406,8 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC boxgreen->pack_start(*igreenR);*/ pack_start(*mulLabel); pack_start(*StudLabel); + pack_start(*PatchLabel); + pack_start(*PatchlevelLabel); pack_start (*temp); //pack_start (*boxgreen); @@ -382,14 +417,33 @@ WhiteBalance::WhiteBalance () : FoldableToolPanel(this, TOOL_NAME, M("TP_WBALANC pack_start(*observer10); + itcwbBox->pack_start (*itcwb_green); + itcwbBox->pack_start (*itcwb_alg); + itcwbBox->pack_start (*itcwb_prim); + itcwbFrame->add(*itcwbBox); + pack_start(*itcwbFrame); + + if(options.rtSettings.itcwb_enable) { + itcwb_green->show(); + itcwb_alg->show(); + itcwb_prim->show(); + itcwbFrame->show(); + } else { + itcwb_green->show(); + itcwb_alg->hide(); + itcwb_prim->hide(); + } temp->setAdjusterListener (this); green->setAdjusterListener (this); equal->setAdjusterListener (this); tempBias->setAdjusterListener (this); observer10->setCheckBoxListener(this); + itcwb_green->setAdjusterListener (this); spotbutton->signal_pressed().connect( sigc::mem_fun(*this, &WhiteBalance::spotPressed) ); methconn = method->signal_changed().connect( sigc::mem_fun(*this, &WhiteBalance::optChanged) ); + itcwb_algconn = itcwb_alg->signal_toggled().connect( sigc::mem_fun(*this, &WhiteBalance::itcwb_alg_toggled) ); + resetButton->signal_pressed().connect( sigc::mem_fun(*this, &WhiteBalance::resetWB) ); spotsize->signal_changed().connect( sigc::mem_fun(*this, &WhiteBalance::spotSizeChanged) ); } @@ -411,9 +465,36 @@ void WhiteBalance::enabledChanged() } } } +void WhiteBalance::itcwb_prim_changed () +{ + if (listener && getEnabled()) { + listener->panelChanged(EvWBitcwbprim, M("GENERAL_ENABLED")); + } +} +void WhiteBalance::itcwb_alg_toggled () +{ + if (batchMode) { + if (itcwb_alg->get_inconsistent()) { + itcwb_alg->set_inconsistent (false); + itcwb_algconn.block (true); + itcwb_alg->set_active (false); + itcwb_algconn.block (false); + } else if (lastitcwb_alg) { + itcwb_alg->set_inconsistent (true); + } + lastitcwb_alg = itcwb_alg->get_active (); + } + if (listener && getEnabled()) { + if (itcwb_alg->get_active ()) { + listener->panelChanged (EvWBitcwbalg, M("GENERAL_ENABLED")); + } else { + listener->panelChanged (EvWBitcwbalg, M("GENERAL_DISABLED")); + } + } +} void WhiteBalance::adjusterChanged(Adjuster* a, double newval) { @@ -437,6 +518,7 @@ void WhiteBalance::adjusterChanged(Adjuster* a, double newval) ( a == equal || a == tempBias + || a == itcwb_green ) && ppMethod.second.type == WBEntry::Type::AUTO ) @@ -467,12 +549,16 @@ void WhiteBalance::adjusterChanged(Adjuster* a, double newval) if (listener && getEnabled()) { if (a == temp) { listener->panelChanged (EvWBTemp, Glib::ustring::format ((int)a->getValue())); + itcwbFrame->set_sensitive(false); } else if (a == green) { listener->panelChanged (EvWBGreen, Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(3), a->getValue())); + itcwbFrame->set_sensitive(false); } else if (a == equal) { listener->panelChanged (EvWBequal, Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(3), a->getValue())); } else if (a == tempBias) { listener->panelChanged (EvWBtempBias, Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(2), a->getValue())); + } else if (a == itcwb_green) { + listener->panelChanged (EvWBitcwgreen, Glib::ustring::format (std::setw(4), std::fixed, std::setprecision(2), a->getValue())); } } } @@ -507,6 +593,7 @@ void WhiteBalance::checkBoxToggled(CheckBox* c, CheckValue newval) } } + void WhiteBalance::optChanged () { Gtk::TreeModel::Row row = getActiveMethod(); @@ -524,6 +611,8 @@ void WhiteBalance::optChanged () } StudLabel->hide(); mulLabel->show(); + PatchLabel->hide(); + PatchlevelLabel->hide(); if (opt != row[methodColumns.colId]) { @@ -543,8 +632,16 @@ void WhiteBalance::optChanged () bool autit = (currMethod.ppLabel == "autitcgreen"); if (autit) { StudLabel->show(); + PatchLabel->show(); + PatchlevelLabel->show(); + equal->hide(); + itcwbFrame->set_sensitive(true); } else { StudLabel->hide(); + PatchLabel->hide(); + PatchlevelLabel->hide(); + equal->show(); + itcwbFrame->set_sensitive(false); } switch (currMethod.type) { @@ -638,6 +735,8 @@ void WhiteBalance::spotPressed () { StudLabel->hide(); mulLabel->show(); + PatchLabel->hide(); + PatchlevelLabel->hide(); if (wblistener) { wblistener->spotWBRequested (getSize()); @@ -663,6 +762,41 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited) tempBias->setValue (pp->wb.tempBias); tempBias->set_sensitive(true); + itcwb_algconn.block (true); + itcwb_alg->set_active (pp->wb.itcwb_alg); + itcwb_algconn.block (false); + lastitcwb_alg = pp->wb.itcwb_alg; + itcwb_green->setValue (pp->wb.itcwb_green); + + + itcwb_primconn.block (true); + + if (pp->wb.itcwb_prim == "srgb") { + itcwb_prim->set_active(0); + } else if (pp->wb.itcwb_prim == "beta") { + itcwb_prim->set_active(1); + } else if (pp->wb.itcwb_prim == "XYZcam") { + itcwb_prim->set_active(2); + } else if (pp->wb.itcwb_prim == "jdcmax") { + itcwb_prim->set_active(3); + } + itcwb_primconn.block (false); + + + + if(options.rtSettings.itcwb_enable) { + itcwb_green->show(); + itcwb_alg->show(); + itcwb_prim->show(); + itcwbFrame->show(); + + } else { + itcwb_green->hide(); + itcwb_alg->hide(); + itcwb_prim->hide(); + itcwbFrame->hide(); + } + if (pedited) { // By default, temperature and green are said "UnEdited", but it may change later temp->setEditedState (UnEdited); @@ -670,6 +804,8 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited) equal->setEditedState (pedited->wb.equal ? Edited : UnEdited); tempBias->setEditedState (pedited->wb.tempBias ? Edited : UnEdited); observer10->setEdited(pedited->wb.observer); + itcwb_alg->set_inconsistent (!pedited->wb.itcwb_alg); + itcwb_green->setEditedState (pedited->wb.itcwb_green ? Edited : UnEdited); } if (pedited && !pedited->wb.method) { @@ -780,9 +916,21 @@ void WhiteBalance::read (const ProcParams* pp, const ParamsEdited* pedited) bool autit = (wbValues.ppLabel == "autitcgreen"); if (autit) { StudLabel->show(); + PatchLabel->show(); + PatchlevelLabel->show(); + equal->hide(); + if(pp->wb.itcwb_sampling) { + tempBias->set_sensitive(false); + } + itcwbFrame->set_sensitive(!pp->wb.itcwb_sampling); + itcwb_prim_changed (); } else { StudLabel->hide(); + PatchLabel->hide(); + PatchlevelLabel->hide(); mulLabel->show(); + equal->show(); + itcwbFrame->set_sensitive(false); } } @@ -808,16 +956,32 @@ void WhiteBalance::write (ProcParams* pp, ParamsEdited* pedited) pedited->wb.equal = equal->getEditedState (); pedited->wb.tempBias = tempBias->getEditedState (); pedited->wb.observer = observer10->getEdited(); + pedited->wb.itcwb_alg = !itcwb_alg->get_inconsistent(); pedited->wb.method = row[methodColumns.colLabel] != M("GENERAL_UNCHANGED"); pedited->wb.enabled = !get_inconsistent(); + pedited->wb.itcwb_prim = itcwb_prim->get_active_text() != M("GENERAL_UNCHANGED"); + pedited->wb.itcwb_green = itcwb_green->getEditedState (); } pp->wb.enabled = getEnabled(); + if (itcwb_prim->get_active_row_number() == 0) { + pp->wb.itcwb_prim = "srgb"; + } else if (itcwb_prim->get_active_row_number() == 1){ + pp->wb.itcwb_prim = "beta"; + } else if (itcwb_prim->get_active_row_number() == 2){ + pp->wb.itcwb_prim = "XYZcam"; + } else if (itcwb_prim->get_active_row_number() == 3){ + pp->wb.itcwb_prim = "jdcmax"; + } const std::pair ppMethod = findWBEntry (row[methodColumns.colLabel], WBLT_GUI); if (ppMethod.first) { pp->wb.method = ppMethod.second.ppLabel; + if (pp->wb.method != "autitcgreen") { + // Prepare migration to new ITCWB algorithm. + pp->wb.itcwb_sampling = false; + } } pp->wb.temperature = temp->getIntValue (); @@ -829,7 +993,9 @@ void WhiteBalance::write (ProcParams* pp, ParamsEdited* pedited) : observer10->getValue() == CheckValue::off ? rtengine::StandardObserver::TWO_DEGREES : pp->wb.observer; + pp->wb.itcwb_alg = itcwb_alg->get_active (); pp->wb.tempBias = tempBias->getValue (); + pp->wb.itcwb_green = itcwb_green->getValue (); } void WhiteBalance::setDefaults (const ProcParams* defParams, const ParamsEdited* pedited) @@ -837,6 +1003,7 @@ void WhiteBalance::setDefaults (const ProcParams* defParams, const ParamsEdited* equal->setDefault (defParams->wb.equal); tempBias->setDefault (defParams->wb.tempBias); + itcwb_green->setDefault (defParams->wb.itcwb_green); if (wbp && defParams->wb.method == "Camera") { double ctemp; @@ -859,11 +1026,13 @@ void WhiteBalance::setDefaults (const ProcParams* defParams, const ParamsEdited* green->setDefaultEditedState (pedited->wb.green ? Edited : UnEdited); equal->setDefaultEditedState (pedited->wb.equal ? Edited : UnEdited); tempBias->setDefaultEditedState (pedited->wb.tempBias ? Edited : UnEdited); + itcwb_green->setDefaultEditedState (pedited->wb.itcwb_green ? Edited : UnEdited); } else { temp->setDefaultEditedState (Irrelevant); green->setDefaultEditedState (Irrelevant); equal->setDefaultEditedState (Irrelevant); tempBias->setDefaultEditedState (Irrelevant); + itcwb_green->setDefaultEditedState (Irrelevant); } } @@ -1015,24 +1184,62 @@ inline Gtk::TreeRow WhiteBalance::getActiveMethod () return *(method->get_active()); } -void WhiteBalance::WBChanged(double temperature, double greenVal, double rw, double gw, double bw, float studgood) +void WhiteBalance::WBChanged(int met, double temperature, double greenVal, double rw, double gw, double bw, float temp0, float delta, int bia, int dread, float studgood, float minchrom, int kmin, float histmin, float histmax) { idle_register.add( - [this, temperature, greenVal, rw, gw, bw, studgood]() -> bool + [this, met, temperature, greenVal, rw, gw, bw, temp0, delta, bia, dread, studgood, minchrom, kmin, histmin, histmax]() -> bool { disableListener(); temp->setValue(temperature); green->setValue(greenVal); + double stud; + stud = studgood; + if(studgood < 0.0001) { + stud = 0.0001; + } + int bia2 = bia; mulLabel->set_text( Glib::ustring::compose(M("TP_WBALANCE_MULLABEL"), Glib::ustring::format(std::fixed, std::setprecision(4), rw), Glib::ustring::format(std::fixed, std::setprecision(2), gw), Glib::ustring::format(std::fixed, std::setprecision(4), bw)) ); - StudLabel->set_text( - Glib::ustring::compose(M("TP_WBALANCE_STUDLABEL"), - Glib::ustring::format(std::fixed, std::setprecision(4), studgood)) - ); + if(bia == 3) { + bia2 = bia - 1; + StudLabel->set_text( + Glib::ustring::compose(M("TP_WBALANCE_STUDLABEL"), + Glib::ustring::format(std::fixed, std::setprecision(4), stud), + Glib::ustring::format(std::fixed, std::setprecision(0), bia2), + Glib::ustring::format(std::fixed, std::setprecision(0), temp0)) + ); + } else if(bia == 2) { + StudLabel->set_text( + Glib::ustring::compose(M("TP_WBALANCE_STUDLABEL1"), + Glib::ustring::format(std::fixed, std::setprecision(4), stud), + Glib::ustring::format(std::fixed, std::setprecision(0), bia), + Glib::ustring::format(std::fixed, std::setprecision(0), temp0)) + ); + } else { + StudLabel->set_text( + Glib::ustring::compose(M("TP_WBALANCE_STUDLABEL0"), + Glib::ustring::format(std::fixed, std::setprecision(4), stud), + Glib::ustring::format(std::fixed, std::setprecision(0), bia), + Glib::ustring::format(std::fixed, std::setprecision(0), temp0)) + ); + } + PatchLabel->set_text( + Glib::ustring::compose(M("TP_WBALANCE_PATCHLABEL"), + Glib::ustring::format(std::fixed, std::setprecision(0), dread), + Glib::ustring::format(std::fixed, std::setprecision(4), minchrom), + Glib::ustring::format(std::fixed, std::setprecision(0), kmin)) + ); + PatchlevelLabel->set_text( + Glib::ustring::compose(M("TP_WBALANCE_PATCHLEVELLABEL"), + Glib::ustring::format(std::fixed, std::setprecision(4), delta), + Glib::ustring::format(std::fixed, std::setprecision(0), histmin), + Glib::ustring::format(std::fixed, std::setprecision(0), histmax)) + ); + temp->setDefault(temperature); green->setDefault(greenVal); enableListener(); diff --git a/rtgui/whitebalance.h b/rtgui/whitebalance.h index 56d8b646c..060026a48 100644 --- a/rtgui/whitebalance.h +++ b/rtgui/whitebalance.h @@ -46,6 +46,8 @@ class WhiteBalance final : public ToolParamBlock, public AdjusterListener, publi private: Gtk::Label* StudLabel; + Gtk::Label* PatchLabel; + Gtk::Label* PatchlevelLabel; Gtk::Label* mulLabel; protected: @@ -64,6 +66,9 @@ protected: }; rtengine::ProcEvent EvWBObserver10; + rtengine::ProcEvent EvWBitcwbprim; + rtengine::ProcEvent EvWBitcwbalg; + rtengine::ProcEvent EvWBitcwgreen; static Glib::RefPtr wbPixbufs[rtengine::toUnderlying(rtengine::procparams::WBEntry::Type::CUSTOM) + 1]; Glib::RefPtr refTreeModel; @@ -76,6 +81,12 @@ protected: Adjuster* equal; Adjuster* tempBias; CheckBox* observer10; + Gtk::Frame* itcwbFrame; + Gtk::CheckButton* itcwb_alg; + MyComboBoxText* itcwb_prim; + Adjuster* itcwb_green; + + bool lastitcwb_alg; Gtk::Button* spotbutton; int opt; @@ -83,7 +94,7 @@ protected: double nextGreen; WBProvider *wbp; // pointer to a ToolPanelCoordinator object, or its subclass BatchToolPanelCoordinator SpotWBListener* wblistener; - sigc::connection methconn; + sigc::connection methconn, itcwb_algconn, itcwb_primconn; int custom_temp; double custom_green; double custom_equal; @@ -131,8 +142,9 @@ public: } void setWB (int temp, double green); void resetWB (); - void WBChanged (double temp, double green, double rw, double gw, double bw, float studgood) override; - + void WBChanged (int met, double temp, double green, double rw, double gw, double bw, float temp0, float delta, int bia, int dread, float studgood, float minchrom, int kmin, float histmin, float histmax) override; + void itcwb_alg_toggled (); + void itcwb_prim_changed (); void setAdjusterBehavior (bool tempadd, bool greenadd, bool equaladd, bool tempbiasadd); void trimValues (rtengine::procparams::ProcParams* pp) override; void enabledChanged() override; diff --git a/tools/generateRtexifUpdates b/tools/generateRtexifUpdates deleted file mode 100755 index b4ace209d..000000000 --- a/tools/generateRtexifUpdates +++ /dev/null @@ -1,155 +0,0 @@ -#!/usr/bin/env bash - -# This Bash4 script generates lens ID and other parameter lists for rtexif/*.cc -# using ExifTool. It uses xmlstarlet to parse ExifTool's output. -# -# Run the script from the project root: -# ./tools/generateRtexifUpdates -# -# Manually replace old code in rtexif/* with new from /tmp/rt-generateRtexifUpdates/* -# -# Blame DrSlony -# Please report bugs or enhancements to https://github.com/Beep6581/RawTherapee - -et="$HOME/programs/code-exiftool/exiftool" - -hash "$et" 2>/dev/null || { echo >&2 "ExifTool not found, install it first."; exit 1; } -hash xmlstarlet 2>/dev/null || { echo >&2 "XMLStarlet not found, install it first."; exit 1; } - -unset cam cams - -tmpdir="/tmp/rt-generateRtexifUpdates" - -printf '%s\n' "ExifTool version: $("$et" -ver)" "" "XMLStarlet version: $(xmlstarlet --version)" | sed 's/^/# /' - -if [[ -d ${tmpdir} ]]; then - printf '%s\n' "" "Must remove temp folder from previous run: $tmpdir" - rm -rvI "$tmpdir" || exit 1 -fi -mkdir -p "$tmpdir" || { printf '%s\n' "Error creating $tmpdir" ""; exit 1; } -echo - -#------------------------------------------------------------------------------ -# Canon -printf '%s\n' "Saving ${tmpdir}/canon_lenses" -xmlstarlet sel -T -t \ - -m "taginfo/table/tag[@name='LensType']/values/key" \ - -v "concat(@id,' ',val)" \ - -n < <("$et" -listx -canon:all) | sort -fuV > "${tmpdir}/canon_lenses" - -#In :10.1 Sigma 50mm f/2.8 EX -#Out: {10, "Sigma 50mm f/2.8 EX"}, -# delete lines matching '-1n/a' -# replace '10.1Sigma' with '10, "Sigma' -# prepend whitespace -# append closing braces -# replace ' F/11' with ' f/11' -sed -r -i \ - -e '/-1\tn\/a/d' \ - -e 's/([0-9]+)[0-9.]*\t/\1, "/' \ - -e 's/^/ {/' \ - -e 's/$/"},/' \ - -e 's| F/([0-9]+)| f/\1|' \ - "${tmpdir}/canon_lenses" - -#In :16842752 PowerShot A30 -#Out: choices[16842752] = "PowerShot A30"; -# prepend whitespace and 'choices[' -# replace with '] = "' -# append '";' -printf '%s\n' "Saving ${tmpdir}/canon_cameras" -xmlstarlet sel -T -t \ - -m "taginfo/table/tag[@name='CanonModelID']/values/key" \ - -v "concat(@id,' ',val)" \ - -n < <("$et" -listx -canon:all) | sort -fuV > "${tmpdir}/canon_cameras" - -sed -r -i \ - -e 's/^/ choices[/' \ - -e 's/\t/] = "/' \ - -e 's/$/";/' \ - "${tmpdir}/canon_cameras" - -#------------------------------------------------------------------------------ -# Nikon LensIDs are composite tags -printf '%s\n' "Saving ${tmpdir}/nikon" - -xmlstarlet sel -T -t \ - -m "taginfo/table/tag[@name='LensID']/values/key" \ - -v "concat(@id,' ',val)" \ - -n < <("$et" -listx -composite:all) > "${tmpdir}/nikon" - -sed -r -i \ - -e '/^... /d' \ - -e 's/^/ {"/' \ - -e 's/([A-F0-9]+)[A-F0-9.]*\t/\1", "/' \ - -e 's/$/"},/' \ - -e 's|(.* ")(.*) F([0-9]+)|\1\2 f/\3|' \ - -e 's| F/([0-9]+)| f/\1|' \ - "${tmpdir}/nikon" - -#------------------------------------------------------------------------------ -# Olympus -printf '%s\n' "Saving ${tmpdir}/olympus" - -xmlstarlet sel -T -t \ - -m "taginfo/table/tag[@name='LensType']/values/key" \ - -v "concat(@id,' ',val)" \ - -n < <("$et" -listx -olympus:all) | sort -fuV > "${tmpdir}/olympus" - -sed -r -i \ - -e '/0 00 00\tNone/d' \ - -e 's/^/ lenses["0/' \ - -e 's/\t/"] = "/' \ - -e 's/$/";/' \ - -e 's| F([0-9]+)| f/\1|g' \ - "${tmpdir}/olympus" - -#------------------------------------------------------------------------------ -# Pentax -printf '%s\n' "Saving ${tmpdir}/pentax" - -xmlstarlet sel -T -t \ - -m "taginfo/table/tag[@name='LensType']/values/key" \ - -v "concat(@id,' ',val)" \ - -n < <("$et" -listx -pentax:all) | sort -fuV > "${tmpdir}/pentax" - -sed -r -i \ - -e 's/^/ choices.insert (p_t (256 * /' \ - -e 's/([0-9]+) ([0-9]+)([0-9.]*)/\1 + \2/' \ - -e 's/\t/, "/' \ - -e 's/$/"));/' \ - -e 's| F([0-9]+)| f/\1|' \ - "${tmpdir}/pentax" - -#------------------------------------------------------------------------------ -# Sony -printf '%s\n' "Saving ${tmpdir}/sony" - -xmlstarlet sel -T -t \ - -m "taginfo/table/tag[@name='LensType']/values/key" \ - -v "concat(@id,' ',val)" \ - -n < <("$et" -listx -sony:all) | sort -fuV > "${tmpdir}/sony" - -# Sony has more lenses under the LensType2 tag -printf '%s\n' "Saving ${tmpdir}/sony-lenstype2" - -xmlstarlet sel -T -t \ - -m "taginfo/table/tag[@name='LensType2']/values/key" \ - -v "concat(@id,' ',val)" \ - -n < <("$et" -listx -sony:all) | sort -fuV > "${tmpdir}/sony-lenstype2" - -sed -r -i \ - -e 's/^/ {/' \ - -e 's/([0-9]+)[0-9.]*\t/\1, "/' \ - -e 's/$/"},/' \ - -e 's| F([0-9]+)| f/\1|g' \ - "${tmpdir}/sony" - -sed -r -i \ - -e '/255\tTamron Lens (255)/d' \ - -e 's/([0-9]+)[0-9.]*\t/\1, "/' \ - -e 's/^/ choices.insert (p_t (/' \ - -e 's/$/"));/' \ - -e 's| F([0-9]+)| f/\1|g' \ - "${tmpdir}/sony-lenstype2" - diff --git a/tools/osx/macosx_bundle.sh b/tools/osx/macosx_bundle.sh index ca381ec14..970611e90 100644 --- a/tools/osx/macosx_bundle.sh +++ b/tools/osx/macosx_bundle.sh @@ -9,11 +9,11 @@ # - GTK_PREFIX # Formatting -fNormal="$(tput sgr0)" >/dev/null 2>&1 -fBold="$(tput bold)" >/dev/null 2>&1 +fNormal="$(printf "\e[0m")" +fBold="$(printf "\e[1m")" # Colors depend upon the user's terminal emulator color scheme - what is readable for you may be not readable for someone else. -fMagenta="$(tput setaf 5)" >/dev/null 2>&1 -fRed="$(tput setaf 1)" >/dev/null 2>&1 +fMagenta="$(printf "\e[1;35m")" +fRed="$(printf "\e[1;31m")" function msg { printf "\\n${fBold}-- %s${fNormal}\\n" "${@}" @@ -225,8 +225,11 @@ ModifyInstallNames 2>&1 # Copy libpng16 to the app bundle cp ${LOCAL_PREFIX}/lib/libpng16.16.dylib "${CONTENTS}/Frameworks/libpng16.16.dylib" -# Copy libtiff 5 into the app bundle -cp ${LOCAL_PREFIX}/lib/libtiff.5.dylib "${CONTENTS}/Frameworks/libtiff.5.dylib" +# Copy graphite to Frameworks +cp ${LOCAL_PREFIX}/lib/libgraphite2.3.dylib "${CONTENTS}/Frameworks" + +# Copy libtiff 6 into the app bundle +cp ${LOCAL_PREFIX}/lib/libtiff.6.dylib "${CONTENTS}/Frameworks/libtiff.6.dylib" # Copy libomp to Frameworks cp ${LOCAL_PREFIX}/lib/libomp.dylib "${CONTENTS}/Frameworks" @@ -316,7 +319,7 @@ for frameworklibs in "${LIB}"/*{dylib,so,cli}; do done 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}"/.. +# ditto "${EXECUTABLE}"-cli "${APP}"/.. # Merge the app with the other architecture to create the Universal app. if [[ -n $UNIVERSAL_URL ]]; then @@ -324,7 +327,7 @@ if [[ -n $UNIVERSAL_URL ]]; then curl -L ${UNIVERSAL_URL} -o univ.zip msg "Extracting app." unzip univ.zip -d univapp - hdiutil attach -mountpoint ./RawTherapeeuniv univapp/*/*dmg + 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) @@ -344,13 +347,15 @@ if [[ -n $UNIVERSAL_URL ]]; then 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 + lipo -create -output RawTherapee RawTherapee-arm64.app/Contents/MacOS/rawtherapee RawTherapee-x86_64.app/Contents/MacOS/rawtherapee + lipo -create -output rawtherapee-cli RawTherapee-arm64.app/Contents/MacOS/rawtherapee-cli RawTherapee-x86_64.app/Contents/MacOS/rawtherapee-cli + 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 + sudo mv *so *dylib RawTherapee.app/Contents/Frameworks + sudo mv *-cli RawTherapee.app/Contents/MacOS rm -r RawTherapee-arm64.app rm -r RawTherapee-x86_64.app else @@ -363,7 +368,8 @@ fi if [[ -n $CODESIGNID ]]; then msg "Codesigning Application." iconv -f UTF-8 -t ASCII "${PROJECT_SOURCE_DATA_DIR}"/rt.entitlements > "${CMAKE_BUILD_TYPE}"/rt.entitlements - mv "${EXECUTABLE}"-cli "${LIB}" +# mv "${EXECUTABLE}"-cli "${LIB}" + codesign --force --deep --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee-cli "${APP}"/Contents/MacOS/rawtherapee-cli codesign --force --deep --timestamp --strict -v -s "${CODESIGNID}" -i com.rawtherapee.RawTherapee -o runtime --entitlements "${CMAKE_BUILD_TYPE}"/rt.entitlements "${APP}" spctl -a -vvvv "${APP}" fi @@ -441,7 +447,8 @@ 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" - cp {"${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}.dmg","${PROJECT_NAME}.app/Contents/Frameworks/rawtherapee-cli","${PROJECT_SOURCE_DATA_DIR}/INSTALL.readme.rtf"} "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder" + cp {"${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}.dmg","${PROJECT_NAME}.app/Contents/MacOS/rawtherapee-cli","${PROJECT_SOURCE_DATA_DIR}/INSTALL.readme.rtf"} "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder" + codesign -s "${CODESIGNID}" -i com.rawtherapee.rawtherapee-cli -f "${PROJECT_NAME}_macOS_${MINIMUM_SYSTEM_VERSION}_${arch}_${PROJECT_FULL_VERSION}_folder/rawtherapee-cli" 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"